Merge cherrypicks of ['googleplex-android-review.googlesource.com/28320665'] into 24Q3-release.

Change-Id: Ic38f9bcc28b86f28b5ca2cc0b0322ee09e08e233
diff --git a/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-linked-binary.txt b/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-linked-binary.txt
index a7a581e..9c663bb 100644
--- a/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-linked-binary.txt
+++ b/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-linked-binary.txt
@@ -22236,14 +22236,6 @@
 dEQP-VK.pipeline.shader_object_linked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
 dEQP-VK.pipeline.shader_object_linked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_g0
 dEQP-VK.pipeline.shader_object_linked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_g1
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness.image
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness.storage
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness.uniform
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness.vertex_input
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness2.image
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness2.storage
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness2.uniform
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness2.vertex_input
 dEQP-VK.pipeline.shader_object_linked_binary.push_constant.graphics_pipeline.count_1_shader_vert_frag
 dEQP-VK.pipeline.shader_object_linked_binary.push_constant.graphics_pipeline.count_1_shader_vert_frag_command2
 dEQP-VK.pipeline.shader_object_linked_binary.push_constant.graphics_pipeline.count_2_shaders_vert_frag
diff --git a/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-linked-spirv.txt b/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-linked-spirv.txt
index 58aec78..4b77411 100644
--- a/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-linked-spirv.txt
+++ b/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-linked-spirv.txt
@@ -22236,14 +22236,6 @@
 dEQP-VK.pipeline.shader_object_linked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
 dEQP-VK.pipeline.shader_object_linked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_g0
 dEQP-VK.pipeline.shader_object_linked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_g1
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness.image
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness.storage
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness.uniform
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness.vertex_input
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness2.image
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness2.storage
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness2.uniform
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness2.vertex_input
 dEQP-VK.pipeline.shader_object_linked_spirv.push_constant.graphics_pipeline.count_1_shader_vert_frag
 dEQP-VK.pipeline.shader_object_linked_spirv.push_constant.graphics_pipeline.count_1_shader_vert_frag_command2
 dEQP-VK.pipeline.shader_object_linked_spirv.push_constant.graphics_pipeline.count_2_shaders_vert_frag
diff --git a/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-unlinked-binary.txt b/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-unlinked-binary.txt
index 178c883..04989f9 100644
--- a/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-unlinked-binary.txt
+++ b/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-unlinked-binary.txt
@@ -22236,14 +22236,6 @@
 dEQP-VK.pipeline.shader_object_unlinked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
 dEQP-VK.pipeline.shader_object_unlinked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_g0
 dEQP-VK.pipeline.shader_object_unlinked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_g1
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness.image
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness.storage
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness.uniform
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness.vertex_input
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness2.image
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness2.storage
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness2.uniform
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness2.vertex_input
 dEQP-VK.pipeline.shader_object_unlinked_binary.push_constant.graphics_pipeline.count_1_shader_vert_frag
 dEQP-VK.pipeline.shader_object_unlinked_binary.push_constant.graphics_pipeline.count_1_shader_vert_frag_command2
 dEQP-VK.pipeline.shader_object_unlinked_binary.push_constant.graphics_pipeline.count_2_shaders_vert_frag
diff --git a/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-unlinked-spirv.txt b/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-unlinked-spirv.txt
index e26595a..f2357f8 100644
--- a/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-unlinked-spirv.txt
+++ b/android/cts/main/vk-main-2024-03-01/pipeline/shader-object-unlinked-spirv.txt
@@ -77484,14 +77484,6 @@
 dEQP-VK.pipeline.shader_object_unlinked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
 dEQP-VK.pipeline.shader_object_unlinked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_g0
 dEQP-VK.pipeline.shader_object_unlinked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_g1
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness.image
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness.storage
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness.uniform
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness.vertex_input
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness2.image
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness2.storage
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness2.uniform
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness2.vertex_input
 dEQP-VK.pipeline.shader_object_unlinked_spirv.push_constant.graphics_pipeline.count_1_shader_vert_frag
 dEQP-VK.pipeline.shader_object_unlinked_spirv.push_constant.graphics_pipeline.count_1_shader_vert_frag_command2
 dEQP-VK.pipeline.shader_object_unlinked_spirv.push_constant.graphics_pipeline.count_2_shaders_vert_frag
diff --git a/external/openglcts/modules/runner/glcTestRunner.cpp b/external/openglcts/modules/runner/glcTestRunner.cpp
index 833d8bd..a1c13c2 100644
--- a/external/openglcts/modules/runner/glcTestRunner.cpp
+++ b/external/openglcts/modules/runner/glcTestRunner.cpp
@@ -645,7 +645,7 @@
 }
 
 static void generateTestSessionParams(tcu::Platform &platform, glu::ApiType type,
-                                      std::vector<TestRunParams> &runSessionsParams)
+                                      std::vector<TestRunParams> &runSessionsParams, std::string configLogFilename)
 {
     // Get list of configs to test.
     ConfigList configList;
@@ -656,7 +656,6 @@
 
     // Config list run.
     {
-        const char *configLogFilename = "configs.qpa";
         TestRunParams configRun;
 
         configRun.logFilename = configLogFilename;
@@ -833,9 +832,9 @@
 
     tcu::print("Running %s conformance\n", glu::getApiTypeDescription(m_type));
 
-    m_summary.runType = m_type;
-
-    generateTestSessionParams(m_platform, m_type, m_runSessions);
+    m_summary.runType           = m_type;
+    m_summary.configLogFilename = "configs.qpa";
+    generateTestSessionParams(m_platform, m_type, m_runSessions, m_summary.configLogFilename);
 
     // Record run params for summary.
     for (std::vector<TestRunParams>::const_iterator runIter = m_runSessions.begin() + 1; runIter != m_runSessions.end();
@@ -941,7 +940,7 @@
 
     tcu::print("Collecting %s conformance test params\n", glu::getApiTypeDescription(m_type));
 
-    generateTestSessionParams(m_platform, m_type, m_runSessionsParams);
+    generateTestSessionParams(m_platform, m_type, m_runSessionsParams, "configs.qpa");
 
     // export test run params to a file on device
     std::ofstream str(m_testParamsFilePath.c_str(), std::ofstream::binary | std::ofstream::trunc);
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
index dd39469..8908cb1 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A geometry shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE geometryShader
 
 # SHADER vertex vert_shader GLSL
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
index 3f2eb76..1308ff2 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A tessellation control shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
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
index 166a0dc..c055166 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A tessellation evaluation shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
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
index 4063fcc..66f7d96 100644
--- 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
@@ -16,6 +16,8 @@
 
 # A vertex shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
+
 # SHADER vertex vert_shader GLSL
 # #version 430
 # precision highp float;
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
index f421130..5687303 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A geometry shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE geometryShader
 
 # SHADER vertex vert_shader GLSL
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
index 3abf115..deb6a17 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A tessellation control shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
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
index dadfad9..d82076f 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A tessellation evaluation shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
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
index 31d38bd..80e022e 100644
--- 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
@@ -16,6 +16,8 @@
 
 # A vertex shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
+
 # SHADER vertex vert_shader GLSL
 # #version 430
 # precision highp float;
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
index 1cbb73d..2d7bec8 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A geometry shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE geometryShader
 
 # SHADER vertex vert_shader GLSL
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
index 2d2a02f..d8cc50e 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A tessellation control shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
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
index 90d71f0..3befa8c 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A tessellation evaluation shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
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
index ac15518..dad818d 100644
--- 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
@@ -16,6 +16,8 @@
 
 # A vertex shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
+
 # SHADER vertex vert_shader GLSL
 # #version 430
 # precision highp float;
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
index b25735c..98453b0 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A geometry shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE geometryShader
 
 # SHADER vertex vert_shader GLSL
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
index 8d1f772..4526adb 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A tessellation control shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
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
index 7104926..460df88 100644
--- 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
@@ -16,6 +16,7 @@
 
 # A tessellation evaluation shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
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
index 41d8aed..63f209c 100644
--- 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
@@ -16,6 +16,8 @@
 
 # A vertex shader test for FrexpStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
+
 # SHADER vertex vert_shader GLSL
 # #version 430
 # precision highp float;
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_geom.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_geom.amber
index ef83439..6d53085 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_geom.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_geom.amber
@@ -16,6 +16,7 @@
 
 # A geometry shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE geometryShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_tesc.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_tesc.amber
index bc72715..8f7eb4e 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_tesc.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_tesc.amber
@@ -16,6 +16,7 @@
 
 # A tessellation control shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_tese.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_tese.amber
index 72cd2e7..b603d28 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_tese.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_tese.amber
@@ -16,6 +16,7 @@
 
 # A tessellation evaluation shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_vert.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_vert.amber
index 0dde427..4a23bcb 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_vert.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_1_vert.amber
@@ -16,6 +16,8 @@
 
 # A vertex shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
+
 # SHADER vertex vert_shader GLSL
 # #version 430
 # precision highp float;
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_geom.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_geom.amber
index 1a496b4..1b28aa4 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_geom.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_geom.amber
@@ -16,6 +16,7 @@
 
 # A geometry shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE geometryShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_tesc.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_tesc.amber
index 8d47b83..efe95ed 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_tesc.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_tesc.amber
@@ -16,6 +16,7 @@
 
 # A tessellation control shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_tese.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_tese.amber
index 4aa6288..c53de09 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_tese.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_tese.amber
@@ -16,6 +16,7 @@
 
 # A tessellation evaluation shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_vert.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_vert.amber
index e84edaf..5fa743d 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_vert.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_2_vert.amber
@@ -16,6 +16,8 @@
 
 # A vertex shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
+
 # SHADER vertex vert_shader GLSL
 # #version 430
 # precision highp float;
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_geom.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_geom.amber
index 95c0364..df935d5 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_geom.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_geom.amber
@@ -16,6 +16,7 @@
 
 # A geometry shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE geometryShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_tesc.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_tesc.amber
index a333797..974fdff 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_tesc.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_tesc.amber
@@ -16,6 +16,7 @@
 
 # A tessellation control shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_tese.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_tese.amber
index 3c22a61..4ff7dc4 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_tese.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_tese.amber
@@ -16,6 +16,7 @@
 
 # A tessellation evaluation shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_vert.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_vert.amber
index 807024b..6275e49 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_vert.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_3_vert.amber
@@ -16,6 +16,8 @@
 
 # A vertex shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
+
 # SHADER vertex vert_shader GLSL
 # #version 430
 # precision highp float;
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_geom.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_geom.amber
index b0acf8d..0956989 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_geom.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_geom.amber
@@ -16,6 +16,7 @@
 
 # A geometry shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE geometryShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_tesc.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_tesc.amber
index 8da9d34..15739d4 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_tesc.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_tesc.amber
@@ -16,6 +16,7 @@
 
 # A tessellation control shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_tese.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_tese.amber
index 5d6208d..75426d1 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_tese.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_tese.amber
@@ -16,6 +16,7 @@
 
 # A tessellation evaluation shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
 DEVICE_FEATURE tessellationShader
 
 # SHADER vertex vert_shader GLSL
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_vert.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_vert.amber
index 56bcec1..6e89aea 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_vert.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/modfstruct_4_vert.amber
@@ -16,6 +16,8 @@
 
 # A vertex shader test for ModfStruct.
 
+DEVICE_FEATURE vertexPipelineStoresAndAtomics
+
 # SHADER vertex vert_shader GLSL
 # #version 430
 # precision highp float;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkan/vkKnownConformanceVersions.inl b/external/vulkancts/framework/vulkan/generated/vulkan/vkKnownConformanceVersions.inl
index da0cfca..98bf9d4 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkan/vkKnownConformanceVersions.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkan/vkKnownConformanceVersions.inl
@@ -7,6 +7,7 @@
 {
 #ifndef CTS_USES_VULKANSC
 	makeConformanceVersion(1, 3, 9, 0),
+	makeConformanceVersion(1, 3, 8, 4),
 	makeConformanceVersion(1, 3, 8, 3),
 	makeConformanceVersion(1, 3, 8, 2),
 	makeConformanceVersion(1, 3, 8, 1),
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkKnownConformanceVersions.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkKnownConformanceVersions.inl
index da0cfca..98bf9d4 100644
--- a/external/vulkancts/framework/vulkan/generated/vulkansc/vkKnownConformanceVersions.inl
+++ b/external/vulkancts/framework/vulkan/generated/vulkansc/vkKnownConformanceVersions.inl
@@ -7,6 +7,7 @@
 {
 #ifndef CTS_USES_VULKANSC
 	makeConformanceVersion(1, 3, 9, 0),
+	makeConformanceVersion(1, 3, 8, 4),
 	makeConformanceVersion(1, 3, 8, 3),
 	makeConformanceVersion(1, 3, 8, 2),
 	makeConformanceVersion(1, 3, 8, 1),
diff --git a/external/vulkancts/framework/vulkan/vkPipelineConstructionUtil.cpp b/external/vulkancts/framework/vulkan/vkPipelineConstructionUtil.cpp
index ed135fa..2cf66ba 100644
--- a/external/vulkancts/framework/vulkan/vkPipelineConstructionUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkPipelineConstructionUtil.cpp
@@ -1814,6 +1814,7 @@
     RenderingInputAttachmentIndexInfoWrapper pRenderingInputAttachmentIndex;
     const VkPipelineDynamicStateCreateInfo *pDynamicState;
     PipelineRepresentativeFragmentTestCreateInfoWrapper pRepresentativeFragmentTestState;
+    PipelineRobustnessCreateInfoWrapper pPipelineRobustnessState;
 
     TessellationDomainOriginStatePtr pTessellationDomainOrigin;
     bool useViewportState;
@@ -1993,6 +1994,7 @@
         , pFragmentShadingRateState        (nullptr)
         , pDynamicState                    (DE_NULL)
         , pRepresentativeFragmentTestState(nullptr)
+        , pPipelineRobustnessState          (nullptr)
         , pTessellationDomainOrigin        ()
         , useViewportState                (true)
         , useDefaultRasterizationState    (false)
@@ -2074,6 +2076,16 @@
     return *this;
 }
 
+GraphicsPipelineWrapper &GraphicsPipelineWrapper::setPipelineRobustnessState(
+    PipelineRobustnessCreateInfoWrapper pipelineRobustnessState)
+{
+    // pipeline robustness is needed by vertex input state, make sure vertex input state was not setup yet
+    DE_ASSERT(m_internalData && (m_internalData->setupState == PSS_NONE));
+
+    m_internalData->pPipelineRobustnessState = pipelineRobustnessState;
+    return *this;
+}
+
 std::vector<VkDynamicState> getDynamicStates(const VkPipelineDynamicStateCreateInfo *dynamicStateInfo,
                                              uint32_t setupState)
 {
@@ -2420,6 +2432,7 @@
             makeGraphicsPipelineLibraryCreateInfo(VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT);
         void *firstStructInChain = reinterpret_cast<void *>(&libraryCreateInfo);
         addToChain(&firstStructInChain, partCreationFeedback.ptr);
+        addToChain(&firstStructInChain, m_internalData->pPipelineRobustnessState.ptr);
 
         VkPipelineDynamicStateCreateInfo pickedDynamicStateInfo = initVulkanStructure();
         std::vector<VkDynamicState> states;
@@ -2698,6 +2711,7 @@
         addToChain(&firstStructInChain, m_internalData->pFragmentShadingRateState);
         addToChain(&firstStructInChain, m_internalData->pRenderingState.ptr);
         addToChain(&firstStructInChain, partCreationFeedback.ptr);
+        addToChain(&firstStructInChain, m_internalData->pPipelineRobustnessState.ptr);
 
         VkPipelineDynamicStateCreateInfo pickedDynamicStateInfo = initVulkanStructure();
         std::vector<VkDynamicState> states;
@@ -2862,6 +2876,7 @@
         addToChain(&firstStructInChain, m_internalData->pFragmentShadingRateState);
         addToChain(&firstStructInChain, m_internalData->pRenderingState.ptr);
         addToChain(&firstStructInChain, partCreationFeedback);
+        addToChain(&firstStructInChain, m_internalData->pPipelineRobustnessState.ptr);
 
         VkPipelineDynamicStateCreateInfo pickedDynamicStateInfo = initVulkanStructure();
         std::vector<VkDynamicState> states;
@@ -3010,6 +3025,7 @@
         addToChain(&firstStructInChain, m_internalData->pRenderingInputAttachmentIndex.ptr);
         addToChain(&firstStructInChain, partCreationFeedback.ptr);
         addToChain(&firstStructInChain, m_internalData->pRepresentativeFragmentTestState.ptr);
+        addToChain(&firstStructInChain, m_internalData->pPipelineRobustnessState.ptr);
 
         VkPipelineDynamicStateCreateInfo pickedDynamicStateInfo = initVulkanStructure();
         std::vector<VkDynamicState> states;
@@ -3112,6 +3128,7 @@
         addToChain(&firstStructInChain, &libraryCreateInfo);
         addToChain(&firstStructInChain, partCreationFeedback.ptr);
         addToChain(&firstStructInChain, m_internalData->pRenderingAttachmentLocation.ptr);
+        addToChain(&firstStructInChain, m_internalData->pPipelineRobustnessState.ptr);
 
         VkPipelineDynamicStateCreateInfo pickedDynamicStateInfo = initVulkanStructure();
         std::vector<VkDynamicState> states;
@@ -3350,7 +3367,7 @@
 
 void GraphicsPipelineWrapper::buildPipeline(const VkPipelineCache pipelineCache, const VkPipeline basePipelineHandle,
                                             const int32_t basePipelineIndex,
-                                            PipelineCreationFeedbackCreateInfoWrapper creationFeedback, void *pNext)
+                                            PipelineCreationFeedbackCreateInfoWrapper creationFeedback)
 {
     // make sure we are not trying to build pipeline second time
     DE_ASSERT(m_pipelineFinal.get() == DE_NULL);
@@ -3362,7 +3379,6 @@
 
     // Unreference variables that are not used in Vulkan SC. No need to put this in ifdef.
     DE_UNREF(creationFeedback);
-    DE_UNREF(pNext);
 
     VkGraphicsPipelineCreateInfo *pointerToCreateInfo = &m_internalData->monolithicPipelineCreateInfo;
 
@@ -3951,7 +3967,7 @@
             addToChain(&firstStructInChain, m_internalData->pRepresentativeFragmentTestState.ptr);
             addToChain(&firstStructInChain, m_internalData->pRenderingInputAttachmentIndex.ptr);
             addToChain(&firstStructInChain, m_internalData->pRenderingAttachmentLocation.ptr);
-            addToChain(&firstStructInChain, pNext);
+            addToChain(&firstStructInChain, m_internalData->pPipelineRobustnessState.ptr);
         }
 
         VkPipelineCreateFlags2CreateInfoKHR pipelineFlags2CreateInfo = initVulkanStructure();
diff --git a/external/vulkancts/framework/vulkan/vkPipelineConstructionUtil.hpp b/external/vulkancts/framework/vulkan/vkPipelineConstructionUtil.hpp
index 9cc4abf..ff930f5 100644
--- a/external/vulkancts/framework/vulkan/vkPipelineConstructionUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkPipelineConstructionUtil.hpp
@@ -103,6 +103,7 @@
 typedef PointerWrapper<VkPipelineRepresentativeFragmentTestStateCreateInfoNV>
     PipelineRepresentativeFragmentTestCreateInfoWrapper;
 typedef VkPipelineCreateFlags2KHR PipelineCreateFlags2;
+typedef PointerWrapper<VkPipelineRobustnessCreateInfoEXT> PipelineRobustnessCreateInfoWrapper;
 #else
 typedef PointerWrapper<void> PipelineViewportDepthClipControlCreateInfoWrapper;
 typedef PointerWrapper<void> PipelineRenderingCreateInfoWrapper;
@@ -112,6 +113,7 @@
 typedef ConstPointerWrapper<void> PipelineShaderStageModuleIdentifierCreateInfoWrapper;
 typedef PointerWrapper<void> PipelineRepresentativeFragmentTestCreateInfoWrapper;
 typedef uint64_t PipelineCreateFlags2;
+typedef PointerWrapper<void> PipelineRobustnessCreateInfoWrapper;
 #endif
 
 PipelineCreateFlags2 translateCreateFlag(VkPipelineCreateFlags flagToTranslate);
@@ -430,6 +432,9 @@
     GraphicsPipelineWrapper &setRepresentativeFragmentTestState(
         PipelineRepresentativeFragmentTestCreateInfoWrapper representativeFragmentTestState);
 
+    // Specify pipeline robustness state
+    GraphicsPipelineWrapper &setPipelineRobustnessState(PipelineRobustnessCreateInfoWrapper pipelineRobustnessState);
+
     // Specifying how a pipeline is created using VkPipelineCreateFlags2CreateInfoKHR.
     GraphicsPipelineWrapper &setPipelineCreateFlags2(PipelineCreateFlags2 pipelineFlags2);
 
@@ -596,8 +601,7 @@
     void buildPipeline(
         const VkPipelineCache pipelineCache = DE_NULL, const VkPipeline basePipelineHandle = DE_NULL,
         const int32_t basePipelineIndex                            = 0,
-        PipelineCreationFeedbackCreateInfoWrapper creationFeedback = PipelineCreationFeedbackCreateInfoWrapper(),
-        void *pNext                                                = DE_NULL);
+        PipelineCreationFeedbackCreateInfoWrapper creationFeedback = PipelineCreationFeedbackCreateInfoWrapper());
     // Create shader objects if used
 #ifndef CTS_USES_VULKANSC
     vk::VkShaderStageFlags getNextStages(vk::VkShaderStageFlagBits shaderStage, bool tessellationShaders,
diff --git a/external/vulkancts/modules/vulkan/api/vktApiImageCompressionControlTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiImageCompressionControlTests.cpp
index a014df8..63d24cc 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiImageCompressionControlTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiImageCompressionControlTests.cpp
@@ -628,9 +628,15 @@
                                                            nullptr);
 
         vector<VkSurfaceFormat2KHR> formats(numFormats);
-        for (auto &surfaceFormat : formats)
+        VkImageCompressionPropertiesEXT *compressionProps = new VkImageCompressionPropertiesEXT[numFormats];
+        for (uint32_t j = 0; j < numFormats; ++j)
         {
-            surfaceFormat = initVulkanStructure();
+            VkImageCompressionPropertiesEXT formatCompressionProps = initVulkanStructure();
+            VkSurfaceFormat2KHR surfaceFormat                      = initVulkanStructure();
+
+            compressionProps[j] = formatCompressionProps;
+            formats[j]          = surfaceFormat;
+            formats[j].pNext    = &compressionProps[j];
         }
 
         instHelper.vki.getPhysicalDeviceSurfaceFormats2KHR(devHelper.physicalDevice, &surfaceInfo, &numFormats,
@@ -638,13 +644,36 @@
 
         uint32_t queueFamilyIndex = devHelper.queueFamilyIndex;
 
-        for (auto &format : formats)
+        for (uint32_t j = 0; j < numFormats; ++j)
         {
-            testParams.format = format.surfaceFormat.format;
+            VkSurfaceFormat2KHR format                          = formats[j];
+            testParams.format                                   = format.surfaceFormat.format;
+            VkImageCompressionFlagsEXT supportedCompressionMode = compressionProps[j].imageCompressionFlags;
+            VkImageCompressionFixedRateFlagsEXT supportedCompressionRate =
+                compressionProps[j].imageCompressionFixedRateFlags;
 
             const uint32_t numPlanes = isYCbCrFormat(testParams.format) ? getPlaneCount(testParams.format) : 1;
             testParams.control.compressionControlPlaneCount = is_fixed_rate_ex ? numPlanes : 0;
 
+            // check that is format is compatible with selected compression mode/rate
+            if (((testParams.control.flags & supportedCompressionMode) == 0) ||
+                (is_fixed_rate_ex && ((testParams.control.pFixedRateFlags[0] & supportedCompressionRate) == 0)))
+            {
+
+                // When testing fixed rate default, query returns fixed rate explicit flag - don't skip it unless compression rate
+                //  is also zero
+                if (!((testParams.control.flags == VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT) &&
+                      (supportedCompressionRate != 0)))
+                    TCU_THROW(NotSupportedError, "Swapchain compression control and format not compatible");
+            }
+
+            if (is_fixed_rate_ex && (numPlanes >= 1))
+            {
+                // only use compression rate that is supported
+                testParams.control.pFixedRateFlags[0] =
+                    testParams.control.pFixedRateFlags[0] & supportedCompressionRate;
+            }
+
             VkSwapchainCreateInfoKHR swapchainInfo = initVulkanStructure();
             swapchainInfo.surface                  = surface.get();
             swapchainInfo.minImageCount            = caps.surfaceCapabilities.minImageCount;
@@ -673,6 +702,8 @@
             validate(instHelper.vki, devHelper.vkd, results, devHelper.physicalDevice, devHelper.device.get(),
                      testParams, images[0]);
         }
+
+        delete[] compressionProps;
     }
 
     return tcu::TestStatus(results.getResult(), results.getMessage());
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawExplicitVertexParameterTests.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawExplicitVertexParameterTests.cpp
index 6efac6e..9964a63 100644
--- a/external/vulkancts/modules/vulkan/draw/vktDrawExplicitVertexParameterTests.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawExplicitVertexParameterTests.cpp
@@ -250,6 +250,8 @@
 
     if (m_data.groupParams->useDynamicRendering)
         context.requireDeviceFunctionality("VK_KHR_dynamic_rendering");
+
+    context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
 }
 
 void DrawTestCase::initPrograms(SourceCollections &programCollection) const
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawMultiExtTests.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawMultiExtTests.cpp
index 5972e17..08b523f 100644
--- a/external/vulkancts/modules/vulkan/draw/vktDrawMultiExtTests.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawMultiExtTests.cpp
@@ -254,6 +254,7 @@
     de::Random m_random;   // Used to generate random offsets.
     uint32_t m_infoCount;  // How many infos have we appended so far?
     std::vector<uint8_t> m_dataVec; // Data vector in generic form.
+    bool m_finalized;               // Finished appending data.
 
     // Are draws indexed and using the offset member of VkMultiDrawIndexedInfoEXT?
     static bool indexedWithOffset(DrawType drawType, const tcu::Maybe<VertexOffsetType> &offsetType)
@@ -261,6 +262,12 @@
         return (drawType == DrawType::INDEXED && *offsetType != VertexOffsetType::CONSTANT_PACK);
     }
 
+    // Are draws indexed and packed?
+    static bool indexedPacked(DrawType drawType, const tcu::Maybe<VertexOffsetType> &offsetType)
+    {
+        return (drawType == DrawType::INDEXED && *offsetType == VertexOffsetType::CONSTANT_PACK);
+    }
+
     // Size in bytes for the base structure used with the given draw type.
     static uint32_t baseSize(DrawType drawType, const tcu::Maybe<VertexOffsetType> &offsetType)
     {
@@ -296,14 +303,16 @@
         , m_random(seed)
         , m_infoCount(0u)
         , m_dataVec()
+        , m_finalized(false)
     {
         // estimatedInfoCount is used to avoid excessive reallocation.
-        if (estimatedInfoCount > 0u)
-            m_dataVec.reserve(estimatedInfoCount * entrySize());
+        m_dataVec.reserve((estimatedInfoCount + 1u) * entrySize());
     }
 
     void addDrawInfo(uint32_t first, uint32_t count, int32_t offset)
     {
+        DE_ASSERT(!m_finalized);
+
         std::vector<uint8_t> entry(entrySize(), 0);
 
         if (indexedWithOffset(m_drawType, m_offsetType))
@@ -323,14 +332,35 @@
         ++m_infoCount;
     }
 
+    void finalize()
+    {
+        if (indexedPacked(m_drawType, m_offsetType) && m_infoCount > 0u)
+        {
+            // VUID-vkCmdDrawMultiIndexedEXT-drawCount-04940 says:
+            // If drawCount is greater than zero, pIndexInfo must be a valid pointer to memory containing one or more
+            // valid instances of VkMultiDrawIndexedInfoEXT structures
+            //
+            // This means if infoCount is greater than zero, we need to have enough bytes in the buffer so that reading
+            // a VkMultiDrawIndexedInfoEXT structure (12 bytes) at the last offset does not produce an OOB read. As
+            // we've been packing data in the buffer using smaller VkMultiDrawInfoEXT structures, we need 4 extra bytes
+            // at the end to make these tests legal.
+            std::vector<uint8_t> extraData(sizeof(int32_t), 0);
+            std::copy(begin(extraData), end(extraData), std::back_inserter(m_dataVec));
+        }
+
+        m_finalized = true;
+    }
+
     uint32_t drawInfoCount() const
     {
+        DE_ASSERT(m_finalized);
         return m_infoCount;
     }
 
     const void *drawInfoData() const
     {
-        return m_dataVec.data();
+        DE_ASSERT(m_finalized);
+        return de::dataOrNull(m_dataVec);
     }
 
     uint32_t stride() const
@@ -1098,11 +1128,12 @@
         uint32_t vertexIndex = 0u;
         for (uint32_t drawIdx = 0u; drawIdx < m_params.drawCount; ++drawIdx)
         {
-            // For indexed draws in mixed offset mode, taking into account vertex indices have been stored in reversed order and
-            // there may be a padding in the vertex buffer after the first verticesPerDraw vertices, we need to use offset 0 in the
-            // last draw call. That draw will contain the indices for the first verticesPerDraw vertices, which are stored without
-            // any offset, while other draw calls will use indices which are off by extraVertices vertices. This will make sure not
-            // every draw call will use the same offset and the implementation handles that.
+            // For indexed draws in mixed offset mode, taking into account vertex indices have been stored in reverse
+            // order and there may be a padding in the vertex buffer after the first verticesPerDraw vertices, we need
+            // to use offset 0 in the last draw call. That draw will contain the indices for the first verticesPerDraw
+            // vertices, which are stored without any offset, while other draw calls will use indices which are off by
+            // extraVertices vertices. This will make sure not every draw call will use the same offset and the
+            // implementation handles that.
             const auto drawOffset =
                 ((isIndexed && (!isMixedMode || (moreThanOneDraw && drawIdx < m_params.drawCount - 1u))) ?
                      vertexOffset :
@@ -1111,6 +1142,7 @@
             vertexIndex += verticesPerDraw;
         }
     }
+    drawInfos.finalize();
 
     std::vector<VkClearValue> clearValues;
     clearValues.reserve(2u);
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawSampleAttributeTests.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawSampleAttributeTests.cpp
index 4c0b2c5..45de2e9 100644
--- a/external/vulkancts/modules/vulkan/draw/vktDrawSampleAttributeTests.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawSampleAttributeTests.cpp
@@ -112,9 +112,15 @@
 
 void SampleShadingSampleAttributeTestCase::checkSupport(Context &context) const
 {
+    const bool declareSampleId       = (m_params.trigger == Trigger::SAMPLE_ID_STATIC_USE);
+    const bool declareSamplePosition = (m_params.trigger == Trigger::SAMPLE_POSITION_STATIC_USE);
+
     if (m_params.general->useDynamicRendering)
         context.requireDeviceFunctionality("VK_KHR_dynamic_rendering");
     context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_FRAGMENT_STORES_AND_ATOMICS);
+
+    if (declareSampleId || declareSamplePosition)
+        context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
 }
 
 void SampleShadingSampleAttributeTestCase::initPrograms(SourceCollections &collection) const
diff --git a/external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp b/external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp
index 96739c8..3235a78 100644
--- a/external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp
+++ b/external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp
@@ -180,6 +180,9 @@
         TCU_THROW(NotSupportedError, "fragment shading rate not supported");
     }
 #endif // CTS_USES_VULKANSC
+
+    if (m_data.isSampleInterlock())
+        context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
 }
 
 static int bitsPerQuad(const CaseDef &c)
diff --git a/external/vulkancts/modules/vulkan/fragment_shading_barycentric/vktFragmentShadingBarycentricTests.cpp b/external/vulkancts/modules/vulkan/fragment_shading_barycentric/vktFragmentShadingBarycentricTests.cpp
index 9194975..f1ad7f1 100644
--- a/external/vulkancts/modules/vulkan/fragment_shading_barycentric/vktFragmentShadingBarycentricTests.cpp
+++ b/external/vulkancts/modules/vulkan/fragment_shading_barycentric/vktFragmentShadingBarycentricTests.cpp
@@ -1329,6 +1329,10 @@
     if ((m_testParams.testSubtype == TEST_SUBTYPE_GEOMETRY_SHADER) ||
         (m_testParams.testSubtype == TEST_SUBTYPE_TESSGEOM_SHADER))
         context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_GEOMETRY_SHADER);
+
+    if ((m_testParams.testSubtype == TEST_SUBTYPE_MSAA_INTERPOLATE_AT_SAMPLE) ||
+        (m_testParams.testSubtype == TEST_SUBTYPE_MSAA_INTERPOLATE_AT_OFFSET))
+        context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
 }
 
 TestInstance *FragmentShadingBarycentricTestCase::createInstance(Context &context) const
diff --git a/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp
index f918ea5..394ebcd 100644
--- a/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp
+++ b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp
@@ -421,6 +421,9 @@
     if (m_data.maintenance6)
         context.requireDeviceFunctionality("VK_KHR_maintenance6");
 #endif
+
+    if (m_data.sampleShadingEnable || m_data.sampleShadingInput)
+        context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
 }
 
 // Error codes writted by the fragment shader
diff --git a/external/vulkancts/modules/vulkan/image/vktImageHostImageCopyTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageHostImageCopyTests.cpp
index 406c435..e74aad8 100644
--- a/external/vulkancts/modules/vulkan/image/vktImageHostImageCopyTests.cpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageHostImageCopyTests.cpp
@@ -1562,15 +1562,11 @@
 
     vk::beginCommandBuffer(vk, *cmdBuffer);
     {
-        const vk::VkHostImageLayoutTransitionInfoEXT transition = {
-            vk::VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT, // VkStructureType sType;
-            DE_NULL,                                                     // const void* pNext;
-            **image,                                                     // VkImage image;
-            m_srcLayout,                                                 // VkImageLayout oldLayout;
-            vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                    // VkImageLayout newLayout;
-            subresourceRange                                             // VkImageSubresourceRange subresourceRange;
-        };
-        vk.transitionImageLayoutEXT(device, 1, &transition);
+        auto imageMemoryBarrier =
+            makeImageMemoryBarrier(0u, vk::VK_ACCESS_TRANSFER_WRITE_BIT, m_srcLayout,
+                                   VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **image, subresourceRange);
+        vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_NONE, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u,
+                              DE_NULL, 0u, DE_NULL, 1, &imageMemoryBarrier);
 
         const vk::VkBufferImageCopy copyRegion = {
             0u,                // VkDeviceSize bufferOffset;
@@ -3281,24 +3277,24 @@
             for (const auto &extent : extentCases)
             {
                 const TestParameters parameters = {
-                    true,                                 // bool                copyMemoryToImage
-                    true,                                 // bool                hostCopyImageToMemory
-                    true,                                 // bool                hostTransferLayout
-                    true,                                 // bool                outputImageHostTransition
-                    false,                                // bool                memcpyFlag
-                    false,                                // bool                dynamicRendering
-                    DRAW,                                 // Command            command
-                    sampledFormat,                        // VkFormat            imageSampledFormat
-                    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // VkImageLayout    srcLayout
-                    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // VkImageLayout    dstLayout
-                    VK_IMAGE_LAYOUT_GENERAL,              // VkImageLayout    intermediateLayout
-                    VK_IMAGE_TILING_OPTIMAL,              // VkImageTiling sampledTiling;
-                    outputFormat,                         // VkFormat            imageOutputFormat
-                    extent,                               // VkExtent3D        imageSize
-                    false,                                // bool                sparse
-                    0u,                                   // uint32_t            mipLevel
-                    1u,                                   // uint32_t            regionsCount
-                    0u,                                   // uint32_t            padding
+                    true,                    // bool          copyMemoryToImage
+                    true,                    // bool          hostCopyImageToMemory
+                    true,                    // bool          hostTransferLayout
+                    true,                    // bool          outputImageHostTransition
+                    false,                   // bool          memcpyFlag
+                    false,                   // bool          dynamicRendering
+                    DRAW,                    // Command       command
+                    sampledFormat,           // VkFormat      imageSampledFormat
+                    VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout srcLayout
+                    VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout dstLayout
+                    VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout intermediateLayout
+                    VK_IMAGE_TILING_OPTIMAL, // VkImageTiling sampledTiling;
+                    outputFormat,            // VkFormat      imageOutputFormat
+                    extent,                  // VkExtent3D    imageSize
+                    false,                   // bool          sparse
+                    0u,                      // uint32_t      mipLevel
+                    1u,                      // uint32_t      regionsCount
+                    0u,                      // uint32_t      padding
                 };
 
                 const std::string testName = getFormatShortString(sampledFormat) + "_" + std::to_string(extent.height) +
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleMixedAttachmentSamplesTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleMixedAttachmentSamplesTests.cpp
index 1020316..16c5ffa 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleMixedAttachmentSamplesTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleMixedAttachmentSamplesTests.cpp
@@ -1703,6 +1703,9 @@
                             false /* require standard sample locations */);
     checkPipelineConstructionRequirements(context.getInstanceInterface(), context.getPhysicalDevice(),
                                           params.pipelineConstructionType);
+
+    if (params.numColorSamples != VK_SAMPLE_COUNT_1_BIT)
+        context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
 }
 
 //! Verify the values of shader builtins
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineRobustnessCacheTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineRobustnessCacheTests.cpp
index 1961dc9..43cfa15 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineRobustnessCacheTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineRobustnessCacheTests.cpp
@@ -422,6 +422,7 @@
         .buildPipeline(*pipelineCache);
 
     vk::VkPipelineRobustnessCreateInfoEXT pipelineRobustnessInfo = vk::initVulkanStructure();
+    vk::PipelineRobustnessCreateInfoWrapper pipelineRobustnessWrapper(&pipelineRobustnessInfo);
 
     if (m_robustnessBufferBehaviour == ROBUSTNESS)
     {
@@ -455,12 +456,13 @@
         .setDefaultMultisampleState()
         .setDefaultDepthStencilState()
         .setDefaultColorBlendState()
+        .setPipelineRobustnessState(pipelineRobustnessWrapper)
         .setupVertexInputState(&vertexInputStateCreateInfo, &inputAssemblyStateCreateInfo)
         .setupPreRasterizationShaderState(viewports, scissors, m_pipelineLayout, *m_renderPass, 0u, vert)
         .setupFragmentShaderState(m_pipelineLayout, *m_renderPass, 0u, frag)
         .setupFragmentOutputState(*m_renderPass)
         .setMonolithicPipelineLayout(m_pipelineLayout)
-        .buildPipeline(*pipelineCache, 0, 0, vk::PipelineCreationFeedbackCreateInfoWrapper(), &pipelineRobustnessInfo);
+        .buildPipeline(*pipelineCache, 0, 0, vk::PipelineCreationFeedbackCreateInfoWrapper());
 
     if (m_type == IMAGE)
     {
@@ -579,8 +581,7 @@
 
 void PipelineCacheTestCase::checkSupport(vkt::Context &context) const
 {
-    if (m_robustnessBufferBehaviour == ROBUSTNESS)
-        context.requireDeviceFunctionality("VK_EXT_pipeline_robustness");
+    context.requireDeviceFunctionality("VK_EXT_pipeline_robustness");
     if (m_robustnessBufferBehaviour == ROBUSTNESS_2)
         context.requireDeviceFunctionality("VK_EXT_robustness2");
 
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp
index 3c9aa04..b3247df 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp
@@ -167,8 +167,8 @@
     if (isNotShaderObjectVariant)
     {
         group->addChild(createShaderModuleIdentifierTests(testCtx, pipelineConstructionType));
+        group->addChild(createPipelineRobustnessCacheTests(testCtx, pipelineConstructionType));
     }
-    group->addChild(createPipelineRobustnessCacheTests(testCtx, pipelineConstructionType));
 #endif // CTS_USES_VULKANSC
     group->addChild(createColorWriteEnable2Tests(testCtx, pipelineConstructionType));
     group->addChild(createMiscTests(testCtx, pipelineConstructionType));
diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp
index ce5bcf9..dc27ec8 100644
--- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp
+++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp
@@ -688,23 +688,31 @@
 
     case TEST_DIMENSION_IMAGE_USAGE:
     {
-        uint32_t testIndex = 0u;
-        uint32_t testCount = 0u;
-        for (uint32_t flags = 1u; flags <= capabilities.supportedUsageFlags; ++flags)
-        {
-            if ((flags & ~capabilities.supportedUsageFlags) == 0)
-                testCount++;
-        }
+        const vk::InstanceDriver &instanceDriver  = context.getInstanceDriver();
+        const vk::VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
+        std::vector<vk::VkSwapchainCreateInfoKHR> cases;
 
         for (uint32_t flags = 1u; flags <= capabilities.supportedUsageFlags; ++flags)
         {
             if ((flags & ~capabilities.supportedUsageFlags) == 0)
             {
-                vk::VkSwapchainCreateInfoKHR createInfo = baseParameters;
-                createInfo.imageUsage                   = flags;
-                testExecutor(vkd, device, createInfo, log, ++testIndex, testCount);
+                vk::VkImageFormatProperties imageProps;
+
+                // The Vulkan 1.1.87 spec contains the following VU for VkSwapchainCreateInfoKHR:
+                //
+                //     * imageFormat, imageUsage, imageExtent, and imageArrayLayers must be supported for VK_IMAGE_TYPE_2D
+                //     VK_IMAGE_TILING_OPTIMAL images as reported by vkGetPhysicalDeviceImageFormatProperties.
+                if (instanceDriver.getPhysicalDeviceImageFormatProperties(
+                        physicalDevice, baseParameters.imageFormat, vk::VK_IMAGE_TYPE_2D, vk::VK_IMAGE_TILING_OPTIMAL,
+                        flags, (vk::VkImageCreateFlags)0u, &imageProps) != vk::VK_SUCCESS)
+                    continue;
+
+                cases.push_back(baseParameters);
+                cases.back().imageUsage = flags;
             }
         }
+        for (uint32_t caseNdx = 0; caseNdx < cases.size(); ++caseNdx)
+            testExecutor(vkd, device, cases[caseNdx], log, caseNdx + 1, (uint32_t)cases.size());
 
         break;
     }
@@ -898,6 +906,29 @@
     ProtectedContext context(baseCtx, params.wsiType, *native.display, *native.window, instExts, devExts);
     vk::VkSurfaceKHR surface = context.getSurface();
 
+    if (isExtensionStructSupported(supportedExtensions, vk::RequiredExtension("VK_KHR_surface_protected_capabilities")))
+    {
+        // Check if swapchain can be created for protected surface
+        const vk::InstanceInterface &vki = context.getInstanceDriver();
+        vk::VkSurfaceCapabilities2KHR extCapabilities;
+        vk::VkSurfaceProtectedCapabilitiesKHR extProtectedCapabilities;
+        const vk::VkPhysicalDeviceSurfaceInfo2KHR surfaceInfo = {
+            vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, DE_NULL, surface};
+
+        extProtectedCapabilities.sType             = vk::VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR;
+        extProtectedCapabilities.pNext             = DE_NULL;
+        extProtectedCapabilities.supportsProtected = false;
+
+        extCapabilities.sType = vk::VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR;
+        extCapabilities.pNext = &extProtectedCapabilities;
+
+        VK_CHECK(
+            vki.getPhysicalDeviceSurfaceCapabilities2KHR(context.getPhysicalDevice(), &surfaceInfo, &extCapabilities));
+
+        if (extProtectedCapabilities.supportsProtected == false)
+            TCU_THROW(NotSupportedError, "Swapchain creation for Protected VkSurface is not Supported.");
+    }
+
     return executeSwapchainParameterCases(params.wsiType, params.dimension, context, surface,
                                           isExtensionForPresentModeEnabled, swapchainCreateExecutor);
 }
@@ -1260,9 +1291,33 @@
     const tcu::UVec2 desiredSize(256, 256);
     const NativeObjects native(baseCtx, supportedExtensions, wsiType, tcu::just(desiredSize));
     ProtectedContext context(baseCtx, wsiType, *native.display, *native.window, instExts, devExts);
-    vk::VkSurfaceKHR surface                         = context.getSurface();
-    const vk::DeviceInterface &vkd                   = context.getDeviceInterface();
-    const vk::VkDevice device                        = context.getDevice();
+    vk::VkSurfaceKHR surface       = context.getSurface();
+    const vk::DeviceInterface &vkd = context.getDeviceInterface();
+    const vk::VkDevice device      = context.getDevice();
+
+    if (isExtensionStructSupported(supportedExtensions, vk::RequiredExtension("VK_KHR_surface_protected_capabilities")))
+    {
+        // Check if swapchain can be created for protected surface
+        const vk::InstanceInterface &vki = context.getInstanceDriver();
+        vk::VkSurfaceCapabilities2KHR extCapabilities;
+        vk::VkSurfaceProtectedCapabilitiesKHR extProtectedCapabilities;
+        const vk::VkPhysicalDeviceSurfaceInfo2KHR surfaceInfo = {
+            vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, DE_NULL, surface};
+
+        extProtectedCapabilities.sType             = vk::VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR;
+        extProtectedCapabilities.pNext             = DE_NULL;
+        extProtectedCapabilities.supportsProtected = false;
+
+        extCapabilities.sType = vk::VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR;
+        extCapabilities.pNext = &extProtectedCapabilities;
+
+        VK_CHECK(
+            vki.getPhysicalDeviceSurfaceCapabilities2KHR(context.getPhysicalDevice(), &surfaceInfo, &extCapabilities));
+
+        if (extProtectedCapabilities.supportsProtected == false)
+            TCU_THROW(NotSupportedError, "Swapchain creation for Protected VkSurface is not Supported.");
+    }
+
     const vk::VkSwapchainCreateInfoKHR swapchainInfo = getBasicSwapchainParameters(
         wsiType, context.getInstanceDriver(), context.getPhysicalDevice(), surface, desiredSize, 2);
     const vk::Unique<vk::VkSwapchainKHR> swapchain(createSwapchainKHR(vkd, device, &swapchainInfo));
@@ -1291,29 +1346,6 @@
     const std::vector<CommandBufferSp> commandBuffers(
         allocateCommandBuffers(vkd, device, *commandPool, vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY, maxQueuedFrames));
 
-    if (isExtensionStructSupported(supportedExtensions, vk::RequiredExtension("VK_KHR_surface_protected_capabilities")))
-    {
-        // Check if swapchain can be created for protected surface
-        const vk::InstanceInterface &vki = context.getInstanceDriver();
-        vk::VkSurfaceCapabilities2KHR extCapabilities;
-        vk::VkSurfaceProtectedCapabilitiesKHR extProtectedCapabilities;
-        const vk::VkPhysicalDeviceSurfaceInfo2KHR surfaceInfo = {
-            vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, DE_NULL, surface};
-
-        extProtectedCapabilities.sType             = vk::VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR;
-        extProtectedCapabilities.pNext             = DE_NULL;
-        extProtectedCapabilities.supportsProtected = false;
-
-        extCapabilities.sType = vk::VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR;
-        extCapabilities.pNext = &extProtectedCapabilities;
-
-        VK_CHECK(
-            vki.getPhysicalDeviceSurfaceCapabilities2KHR(context.getPhysicalDevice(), &surfaceInfo, &extCapabilities));
-
-        if (extProtectedCapabilities.supportsProtected == false)
-            TCU_THROW(NotSupportedError, "Swapchain creation for Protected VkSurface is not Supported.");
-    }
-
     try
     {
         const uint32_t numFramesToRender = 60 * 10;
diff --git a/external/vulkancts/modules/vulkan/query_pool/vktQueryPoolStatisticsTests.cpp b/external/vulkancts/modules/vulkan/query_pool/vktQueryPoolStatisticsTests.cpp
index 7364ac1..702bd65 100644
--- a/external/vulkancts/modules/vulkan/query_pool/vktQueryPoolStatisticsTests.cpp
+++ b/external/vulkancts/modules/vulkan/query_pool/vktQueryPoolStatisticsTests.cpp
@@ -816,13 +816,14 @@
 
 tcu::TestStatus StatisticQueryTestInstance::verifyUnavailable()
 {
+    const auto &deviceHelper         = getDeviceHelper(m_context, m_useComputeQueue);
     const vk::Allocation &allocation = m_resetBuffer->getBoundMemory();
     const void *allocationData       = allocation.getHostPtr();
     uint32_t size                    = dstOffset ? 2 : 1;
     std::vector<ValueAndAvailability> va;
     va.resize(size);
 
-    vk::invalidateAlloc(m_context.getDeviceInterface(), m_context.getDevice(), allocation);
+    vk::invalidateAlloc(deviceHelper.getDeviceInterface(), deviceHelper.getDevice(), allocation);
     deMemcpy(va.data(), allocationData, size * sizeof(ValueAndAvailability));
 
     bool failed = false;
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryPositionFetchTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryPositionFetchTests.cpp
index 342effa..9bba0bc 100644
--- a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryPositionFetchTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryPositionFetchTests.cpp
@@ -86,7 +86,7 @@
     uint32_t testFlagMask;
 };
 
-static constexpr uint32_t kNumThreadsAtOnce = 1024;
+static constexpr uint32_t kNumThreadsAtOnce = 128;
 
 class PositionFetchCase : public TestCase
 {
@@ -165,6 +165,15 @@
             TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline");
     }
 
+    if (m_params.shaderSourceType == SST_RAY_GENERATION_SHADER || m_params.shaderSourceType == SST_COMPUTE_SHADER)
+    {
+        const VkPhysicalDeviceLimits &deviceLimits = context.getDeviceProperties().limits;
+        if (kNumThreadsAtOnce > deviceLimits.maxComputeWorkGroupSize[0])
+        {
+            TCU_THROW(NotSupportedError, "Compute workgroup size exceeds device limit");
+        }
+    }
+
     switch (m_params.shaderSourceType)
     {
     case SST_VERTEX_SHADER:
@@ -247,7 +256,8 @@
     {
         DE_ASSERT(m_params.shaderSourceType == SST_COMPUTE_SHADER);
         std::ostringstream comp;
-        comp << sharedHeader.str() << "layout(local_size_x=1024, local_size_y=1, local_size_z=1) in;\n"
+        comp << sharedHeader.str() << "layout(local_size_x=" << kNumThreadsAtOnce
+             << ", local_size_y=1, local_size_z=1) in;\n"
              << "\n"
              << "void main()\n"
              << "{\n"
diff --git a/external/vulkancts/modules/vulkan/reconvergence/vktReconvergenceTests.cpp b/external/vulkancts/modules/vulkan/reconvergence/vktReconvergenceTests.cpp
index a529760..6cbf72c 100644
--- a/external/vulkancts/modules/vulkan/reconvergence/vktReconvergenceTests.cpp
+++ b/external/vulkancts/modules/vulkan/reconvergence/vktReconvergenceTests.cpp
@@ -1598,7 +1598,7 @@
             ops.push_back({OP_NOISE, 1});
     }
 
-    void generateRandomProgram(add_ref<tcu::TestLog> log)
+    void generateRandomProgram(qpWatchDog *watchDog, add_ref<tcu::TestLog> log)
     {
         std::vector<tcu::UVec4> ref;
 
@@ -1615,7 +1615,7 @@
                 for (int32_t subgroupSize = 4; subgroupSize <= 128; subgroupSize *= 2)
                 {
                     //simulate(true, subgroupSize, ref);
-                    execute(true, subgroupSize, 0u, invocationStride, ref, log);
+                    execute(watchDog, true, subgroupSize, 0u, invocationStride, ref, log);
                 }
             }
         } while (caseDef.isUCF() && !hasUCF());
@@ -2024,10 +2024,11 @@
     // values to ref.
     virtual uint32_t simulate(bool countOnly, uint32_t subgroupSize, add_ref<std::vector<uint64_t>> ref) = 0;
 
-    virtual uint32_t execute(bool countOnly, const uint32_t subgroupSize, const uint32_t fragmentStride,
-                             const uint32_t primitiveStride, add_ref<std::vector<tcu::UVec4>> ref,
-                             add_ref<tcu::TestLog> log, add_cref<std::vector<uint32_t>> outputP = {},
-                             const tcu::UVec4 *cmp = nullptr, const uint32_t primitiveID = (~0u))
+    virtual uint32_t execute(qpWatchDog *watchDog, bool countOnly, const uint32_t subgroupSize,
+                             const uint32_t fragmentStride, const uint32_t primitiveStride,
+                             add_ref<std::vector<tcu::UVec4>> ref, add_ref<tcu::TestLog> log,
+                             add_cref<std::vector<uint32_t>> outputP = {}, const tcu::UVec4 *cmp = nullptr,
+                             const uint32_t primitiveID = (~0u))
     {
         // Per-invocation output location counters
         std::vector<uint32_t> outLoc;
@@ -2042,12 +2043,16 @@
         nesting         = 0;
         loopNesting     = 0;
 
-        int32_t i = 0;
+        int32_t i          = 0;
+        uint32_t loopCount = 0;
 
         while (i < (int32_t)ops.size())
         {
             add_cref<Ballots> activeMask = stateStack[nesting].activeMask;
 
+            if ((loopCount % 5000) == 0 && watchDog)
+                qpWatchDog_touch(watchDog);
+
             switch (ops[i].type)
             {
             case OP_BALLOT:
@@ -2391,6 +2396,7 @@
                 break;
             }
             i++;
+            loopCount++;
         }
         uint32_t maxLoc = 0;
         for (uint32_t id = 0; id < (uint32_t)outLoc.size(); ++id)
@@ -2818,18 +2824,19 @@
     // Simulate execution of the program. If countOnly is true, just return
     // the max number of outputs written. If it's false, store out the result
     // values to ref.
-    virtual uint32_t execute(bool countOnly, const uint32_t subgroupSize, const uint32_t fragmentStride,
-                             const uint32_t primitiveStride, add_ref<std::vector<tcu::UVec4>> ref,
-                             add_ref<tcu::TestLog> log, add_cref<std::vector<uint32_t>> outputP,
-                             const tcu::UVec4 *cmp = nullptr, const uint32_t reserved = (~0u)) override
+    virtual uint32_t execute(qpWatchDog *watchDog, bool countOnly, const uint32_t subgroupSize,
+                             const uint32_t fragmentStride, const uint32_t primitiveStride,
+                             add_ref<std::vector<tcu::UVec4>> ref, add_ref<tcu::TestLog> log,
+                             add_cref<std::vector<uint32_t>> outputP, const tcu::UVec4 *cmp = nullptr,
+                             const uint32_t reserved = (~0u)) override
     {
         DE_UNREF(reserved);
         uint32_t outLocs    = 0u;
         uint32_t maxOutLocs = 0u;
         for (uint32_t primitiveID = 0u; primitiveID < primitiveStride; ++primitiveID)
         {
-            outLocs    = RandomProgram::execute(countOnly, subgroupSize, fragmentStride, primitiveStride, ref, log,
-                                                outputP, cmp, primitiveID);
+            outLocs    = RandomProgram::execute(watchDog, countOnly, subgroupSize, fragmentStride, primitiveStride, ref,
+                                                log, outputP, cmp, primitiveID);
             maxOutLocs = std::max(outLocs, maxOutLocs);
         }
         return maxOutLocs;
@@ -4503,7 +4510,7 @@
 {
     de::MovePtr<RandomProgram> program = selectProgram();
 
-    program->generateRandomProgram(m_testCtx.getLog());
+    program->generateRandomProgram(m_testCtx.getWatchDog(), m_testCtx.getLog());
 
     std::stringstream header, layout, globals, prologue, epilogue, aux;
 
@@ -5023,9 +5030,10 @@
 
     std::vector<tcu::UVec4> ref;
     ComputeRandomProgram program(m_data);
-    program.generateRandomProgram(log);
+    program.generateRandomProgram(m_context.getTestContext().getWatchDog(), log);
 
-    uint32_t maxLoc       = program.execute(true, m_subgroupSize, 0u, invocationStride, ref, log);
+    uint32_t maxLoc =
+        program.execute(m_context.getTestContext().getWatchDog(), true, m_subgroupSize, 0u, invocationStride, ref, log);
     uint32_t shaderMaxLoc = maxLoc;
 
     // maxLoc is per-invocation. Add one (to make sure no additional writes are done) and multiply by
@@ -5221,7 +5229,7 @@
                                "Failed system memory allocation " + de::toString(maxLoc * sizeof(uint64_t)) + " bytes");
     }
 
-    program.execute(false, m_subgroupSize, 0u, invocationStride, ref, log);
+    program.execute(m_context.getTestContext().getWatchDog(), false, m_subgroupSize, 0u, invocationStride, ref, log);
 
     const tcu::UVec4 *result = (const tcu::UVec4 *)ptrs[1];
 
@@ -6009,10 +6017,10 @@
 
     std::vector<tcu::UVec4> ref;
     de::MovePtr<FragmentRandomProgram> program = FragmentRandomProgram::create(m_data);
-    program->generateRandomProgram(log);
+    program->generateRandomProgram(m_context.getTestContext().getWatchDog(), log);
 
-    const uint32_t simulationMaxLoc =
-        program->execute(true, m_subgroupSize, fragmentStride, primitiveStride, ref, log, primitiveMap);
+    const uint32_t simulationMaxLoc = program->execute(m_context.getTestContext().getWatchDog(), true, m_subgroupSize,
+                                                       fragmentStride, primitiveStride, ref, log, primitiveMap);
     log << tcu::TestLog::Message << "simulated maxLoc: " << simulationMaxLoc << tcu::TestLog::EndMessage;
     // maxLoc is per-invocation. Add one (to make sure no additional writes are done)
     uint32_t maxLoc = simulationMaxLoc;
@@ -6273,7 +6281,8 @@
                                                primitiveStride);
     const tcu::UVec4 *ballots = static_cast<tcu::UVec4 *>(ptrs[OutputBallots]);
 
-    program->execute(false, m_subgroupSize, fragmentStride, primitiveStride, ref, log, primitiveMap, ballots);
+    program->execute(m_context.getTestContext().getWatchDog(), false, m_subgroupSize, fragmentStride, primitiveStride,
+                     ref, log, primitiveMap, ballots);
 
     const uint32_t finalMaxLoc = std::max(computedShaderMaxLoc, simulationMaxLoc);
     const qpTestResult res     = calculateAndLogResultEx(log, ballots, ref, finalMaxLoc, a, PrintMode::None);
@@ -6331,15 +6340,15 @@
                                   .size());
 
     de::MovePtr<VertexRandomProgram> program(new VertexRandomProgram(m_data));
-    program->generateRandomProgram(log);
+    program->generateRandomProgram(m_context.getTestContext().getWatchDog(), log);
 
     // simulate content of outputP buffer
     std::vector<uint32_t> outputP =
         VertexRandomProgram::Arrangement::generateOutputPvector(m_subgroupSize, invocationStride);
 
     std::vector<tcu::UVec4> ref;
-    const uint32_t hostMaxLoc =
-        program->execute(true, m_subgroupSize, fragmentStride, invocationStride, ref, log, outputP, nullptr);
+    const uint32_t hostMaxLoc = program->execute(m_context.getTestContext().getWatchDog(), true, m_subgroupSize,
+                                                 fragmentStride, invocationStride, ref, log, outputP, nullptr);
     log << tcu::TestLog::Message << "Rendering area  : " << tcu::UVec2(m_data.sizeX, m_data.sizeY)
         << tcu::TestLog::EndMessage;
     log << tcu::TestLog::Message << "invocationStride: " << invocationStride << tcu::TestLog::EndMessage;
@@ -6606,8 +6615,8 @@
     }
 
     // Simulate execution on the CPU, and compare against the GPU result
-    const uint32_t finalHostMaxLoc =
-        program->execute(false, m_subgroupSize, fragmentStride, invocationStride, ref, log, outputP, ballots);
+    const uint32_t finalHostMaxLoc = program->execute(m_context.getTestContext().getWatchDog(), false, m_subgroupSize,
+                                                      fragmentStride, invocationStride, ref, log, outputP, ballots);
 
     const qpTestResult res = calculateAndLogResultEx(log, ballots, ref, finalHostMaxLoc, PrintMode::None);
 
@@ -6722,7 +6731,7 @@
     log << tcu::TestLog::Message << "usedSubgroupCount:  " << m_data.sizeX << tcu::TestLog::EndMessage;
 
     de::MovePtr<TessCtrlRandomProgram> program(new TessCtrlRandomProgram(m_data, invocationStride));
-    program->generateRandomProgram(log);
+    program->generateRandomProgram(m_context.getTestContext().getWatchDog(), log);
 
     std::vector<uint64_t> ref;
     const uint32_t simulationMaxLoc = program->simulate(true, m_subgroupSize, ref);
@@ -7044,7 +7053,7 @@
     DE_ASSERT(invocationStride <= MAX_INVOCATIONS_ALL_TESTS);
 
     de::MovePtr<TessEvalRandomProgram> program(new TessEvalRandomProgram(m_data, invocationStride));
-    program->generateRandomProgram(log);
+    program->generateRandomProgram(m_context.getTestContext().getWatchDog(), log);
 
     std::vector<uint64_t> ref;
     const uint32_t simulationMaxLoc = program->simulate(true, m_subgroupSize, ref);
@@ -7364,15 +7373,15 @@
         m_data.sizeX, m_data.sizeY, GeometryRandomProgram::fillPercentage);
 
     de::MovePtr<GeometryRandomProgram> program(new GeometryRandomProgram(m_data));
-    program->generateRandomProgram(log);
+    program->generateRandomProgram(m_context.getTestContext().getWatchDog(), log);
 
     // simulate content of outputP buffer
     std::vector<uint32_t> outputP =
         GeometryRandomProgram::Arrangement::generateVectorOutputP(m_subgroupSize, invocationStride);
 
     std::vector<tcu::UVec4> ref;
-    const uint32_t hostMaxLoc =
-        program->execute(true, m_subgroupSize, fragmentStride, invocationStride, ref, log, outputP, nullptr);
+    const uint32_t hostMaxLoc = program->execute(m_context.getTestContext().getWatchDog(), true, m_subgroupSize,
+                                                 fragmentStride, invocationStride, ref, log, outputP, nullptr);
     log << tcu::TestLog::Message << "Rendering area  : " << tcu::UVec2(m_data.sizeX, m_data.sizeY)
         << tcu::TestLog::EndMessage;
     log << tcu::TestLog::Message << "invocationStride: " << invocationStride << tcu::TestLog::EndMessage;
@@ -7642,8 +7651,8 @@
     }
 
     // Simulate execution on the CPU, and compare against the GPU result
-    const uint32_t finalHostMaxLoc =
-        program->execute(false, m_subgroupSize, fragmentStride, invocationStride, ref, log, outputP, ballots);
+    const uint32_t finalHostMaxLoc = program->execute(m_context.getTestContext().getWatchDog(), false, m_subgroupSize,
+                                                      fragmentStride, invocationStride, ref, log, outputP, ballots);
 
     const qpTestResult res = calculateAndLogResultEx(log, ballots, ref, finalHostMaxLoc, PrintMode::None);
 
@@ -7935,12 +7944,20 @@
         if (!context.getShaderMaximalReconvergenceFeatures().shaderMaximalReconvergence)
             TCU_THROW(NotSupportedError, "shaderMaximalReconvergence not supported");
 
-        if (!(context.getSubgroupProperties().subgroupSize >= 4))
-            TCU_THROW(NotSupportedError, "subgroupSize is less than 4");
-
         if (!(context.getSubgroupProperties().supportedOperations & VK_SUBGROUP_FEATURE_BALLOT_BIT))
             TCU_THROW(NotSupportedError, "VK_SUBGROUP_FEATURE_BALLOT_BIT not supported");
 
+        if (Case::matches(testName, {cases[DEMOTE_ENTIRE_QUAD]}))
+        {
+            if (!(context.getSubgroupProperties().subgroupSize > 4))
+                TCU_THROW(NotSupportedError, "subgroupSize is less than or equal to 4");
+        }
+        else
+        {
+            if (!(context.getSubgroupProperties().subgroupSize >= 4))
+                TCU_THROW(NotSupportedError, "subgroupSize is less than 4");
+        }
+
         if (Case::matches(testName, {cases[TERMINATE_INVOCATION]}))
         {
             if (!context.getShaderTerminateInvocationFeatures().shaderTerminateInvocation)
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktDynamicRenderingDepthStencilResolveTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktDynamicRenderingDepthStencilResolveTests.cpp
index 43f9bfd..283b5d3 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktDynamicRenderingDepthStencilResolveTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktDynamicRenderingDepthStencilResolveTests.cpp
@@ -1220,9 +1220,15 @@
     }
 };
 
+void checkSupport(Context &context)
+{
+    context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
+}
+
 void initTests(tcu::TestCaseGroup *group, const SharedGroupParams groupParams)
 {
-    typedef InstanceFactory1<DepthStencilResolveTest, TestConfig, Programs> DSResolveTestInstance;
+    typedef InstanceFactory1WithSupport<DepthStencilResolveTest, TestConfig, FunctionSupport0, Programs>
+        DSResolveTestInstance;
 
     struct FormatData
     {
@@ -1375,7 +1381,8 @@
                                                            0u,
                                                            useSeparateDepthStencilLayouts,
                                                            groupParams};
-                            formatGroup->addChild(new DSResolveTestInstance(testCtx, testName, testConfig));
+                            formatGroup->addChild(
+                                new DSResolveTestInstance(testCtx, testName, testConfig, checkSupport));
                         }
 
                         if (hasStencil)
@@ -1401,7 +1408,8 @@
                                                            expectedValue,
                                                            useSeparateDepthStencilLayouts,
                                                            groupParams};
-                            formatGroup->addChild(new DSResolveTestInstance(testCtx, testName, testConfig));
+                            formatGroup->addChild(
+                                new DSResolveTestInstance(testCtx, testName, testConfig, checkSupport));
                         }
                     }
                 }
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktDynamicRenderingLocalReadTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktDynamicRenderingLocalReadTests.cpp
index 363860e..95d93f4 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktDynamicRenderingLocalReadTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktDynamicRenderingLocalReadTests.cpp
@@ -689,6 +689,10 @@
     // read pipelines need input attachments remaping
     renderingCreateInfo.pNext = &renderingInputAttachmentIndexInfo;
 
+    // read pipelines don't write to the color attachments
+    for (auto &cb : colorBlendAttachmentStates)
+        cb.colorWriteMask = 0;
+
     // Per spec, if either of pDepthInputAttachmentIndex or pStencilInputAttachmentIndex are set to NULL it means that these are only accessible in the shader
     // if the shader does not associate these input attachments with an InputAttachmentIndex.
     if (m_testType == TestType::DEPTH_STENCIL_MAPPING_TO_NO_INDEX)
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp
index dbd6e55..db8cd1e 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp
@@ -1407,6 +1407,9 @@
             NotSupportedError,
             "VK_KHR_portability_subset: Implementation does not support image array with multiple samples per texel");
     }
+
+    if (m_testParams.colorSamples != VK_SAMPLE_COUNT_1_BIT)
+        context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
 }
 
 FragmentDensityMapTestInstance::FragmentDensityMapTestInstance(Context &context, const TestParams &testParams)
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp
index be30558..1de0652 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp
@@ -6976,7 +6976,8 @@
 
                 VulkanFeatures features = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
 
-                features.coreFeatures.shaderFloat64 = true;
+                features.coreFeatures.shaderFloat64                  = true;
+                features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
                 createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions,
                                         testGroup, features);
@@ -7100,7 +7101,8 @@
 
                 VulkanFeatures features = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
 
-                features.coreFeatures.shaderFloat64 = true;
+                features.coreFeatures.shaderFloat64                  = true;
+                features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
                 createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions,
                                         testGroup, features);
@@ -7217,7 +7219,8 @@
 
             VulkanFeatures features = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
 
-            features.coreFeatures.shaderFloat64 = true;
+            features.coreFeatures.shaderFloat64                  = true;
+            features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
             createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions, testGroup,
                                     features);
@@ -7244,8 +7247,9 @@
 
     extensions.push_back("VK_KHR_16bit_storage");
 
-    requiredFeatures.coreFeatures.shaderFloat64            = true;
-    requiredFeatures.ext16BitStorage.storagePushConstant16 = true;
+    requiredFeatures.coreFeatures.shaderFloat64                  = true;
+    requiredFeatures.ext16BitStorage.storagePushConstant16       = true;
+    requiredFeatures.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
     fragments["capability"] = "OpCapability StoragePushConstant16\n"
                               "OpCapability Float64\n";
@@ -7747,6 +7751,7 @@
 
                 features                            = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
                 features.coreFeatures.shaderFloat64 = true;
+                features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
                 createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions,
                                         testGroup, features);
@@ -7845,6 +7850,7 @@
 
                 features                            = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
                 features.coreFeatures.shaderFloat64 = true;
+                features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
                 createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions,
                                         testGroup, features);
@@ -7969,6 +7975,7 @@
 
                 features                            = get16BitStorageFeatures(CAPABILITIES[capIdx].name);
                 features.coreFeatures.shaderFloat64 = true;
+                features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
                 createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, extensions,
                                         testGroup, features);
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderTestUtil.hpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderTestUtil.hpp
index 3dae551..4efb074 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderTestUtil.hpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderTestUtil.hpp
@@ -387,6 +387,7 @@
     SpirvVersion spirvVersion;
     bool coherentMemory;
     bool usesPhysStorageBuffer;
+    const bool graphicsFeaturesRequired;
 
     ComputeShaderSpec(void)
         : entryPoint("main")
@@ -399,6 +400,7 @@
         , spirvVersion(SPIRV_VERSION_1_0)
         , coherentMemory(false)
         , usesPhysStorageBuffer(false)
+        , graphicsFeaturesRequired(false)
     {
     }
 };
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp
index 84442d1..894d265 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.hpp
@@ -99,12 +99,14 @@
     VerifyIOFunc verifyIO;
     GraphicsVerifyBinaryFunc verifyBinary;
     SpirvVersion spirvVersion;
+    const bool graphicsFeaturesRequired;
 
     GraphicsResources()
         : inputFormat(VK_FORMAT_R32G32B32A32_SFLOAT)
         , verifyIO(DE_NULL)
         , verifyBinary(DE_NULL)
         , spirvVersion(SPIRV_VERSION_1_0)
+        , graphicsFeaturesRequired(true)
     {
     }
 };
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
index e1d1baa..c44fa59 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
@@ -12051,6 +12051,8 @@
             }
 
             features.extFloat16Int8.shaderFloat16 = true;
+            if (specResource.graphicsFeaturesRequired)
+                features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
             finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions,
                                   IVec3(1, 1, 1));
@@ -12172,6 +12174,8 @@
             }
 
             features.extFloat16Int8.shaderFloat16 = true;
+            if (specResource.graphicsFeaturesRequired)
+                features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
             finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions,
                                   IVec3(1, 1, 1), true);
@@ -12357,6 +12361,8 @@
         extensions.push_back("VK_KHR_shader_float16_int8");
 
         features.extFloat16Int8.shaderFloat16 = true;
+        if (specResource.graphicsFeaturesRequired)
+            features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
         finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions,
                               IVec3(1, 1, 1));
@@ -12587,6 +12593,8 @@
         extensions.push_back("VK_KHR_shader_float16_int8");
 
         features.extFloat16Int8.shaderFloat16 = true;
+        if (specResource.graphicsFeaturesRequired)
+            features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
         finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions,
                               IVec3(1, 1, 1));
@@ -12818,6 +12826,8 @@
         extensions.push_back("VK_KHR_shader_float16_int8");
 
         features.extFloat16Int8.shaderFloat16 = true;
+        if (specResource.graphicsFeaturesRequired)
+            features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
         finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions,
                               IVec3(1, 1, 1));
@@ -13218,6 +13228,8 @@
                 extensions.push_back("VK_KHR_shader_float16_int8");
 
                 features.extFloat16Int8.shaderFloat16 = true;
+                if (specResource.graphicsFeaturesRequired)
+                    features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
                 finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features,
                                       extensions, IVec3(1, 1, 1));
@@ -13722,6 +13734,8 @@
         extensions.push_back("VK_KHR_shader_float16_int8");
 
         features.extFloat16Int8.shaderFloat16 = true;
+        if (specResource.graphicsFeaturesRequired)
+            features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
         finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions,
                               IVec3(1, 1, 1));
@@ -14539,6 +14553,8 @@
         extensions.push_back("VK_KHR_shader_float16_int8");
 
         features.extFloat16Int8.shaderFloat16 = true;
+        if (specResource.graphicsFeaturesRequired)
+            features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
         finalizeTestsCreation(specResource, fragments, testCtx, *testGroup.get(), testName, features, extensions,
                               IVec3(1, 1, 1));
@@ -19055,6 +19071,8 @@
     extensions.push_back("VK_KHR_shader_float16_int8");
 
     features.extFloat16Int8.shaderFloat16 = true;
+    if (specResource.graphicsFeaturesRequired)
+        features.coreFeatures.vertexPipelineStoresAndAtomics = true;
 
     finalizeTestsCreation(specResource, fragments, testCtx, testGroup, testName, features, extensions, IVec3(1, 1, 1));
 }
@@ -19363,11 +19381,12 @@
 #ifndef CTS_USES_VULKANSC
     const char *dataDir = "spirv_assembly/instruction/float32/comparison";
 
-    const ShaderStage stages[] = {{"vert", vector<string>(0)},
-                                  {"tesc", vector<string>(1, "Features.tessellationShader")},
-                                  {"tese", vector<string>(1, "Features.tessellationShader")},
-                                  {"geom", vector<string>(1, "Features.geometryShader")},
-                                  {"frag", vector<string>(0)}};
+    const ShaderStage stages[] = {
+        {"vert", vector<string>(1, "Features.vertexPipelineStoresAndAtomics")},
+        {"tesc", vector<string>({"Features.vertexPipelineStoresAndAtomics", "Features.tessellationShader"})},
+        {"tese", vector<string>({"Features.vertexPipelineStoresAndAtomics", "Features.tessellationShader"})},
+        {"geom", vector<string>({"Features.vertexPipelineStoresAndAtomics", "Features.geometryShader"})},
+        {"frag", vector<string>(0)}};
 
     const ComparisonCase amberTests[] = {{"modfstruct", "modf and modfStruct"},
                                          {"frexpstruct", "frexp and frexpStruct"}};
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiMaintenance1Tests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiMaintenance1Tests.cpp
index 0940bc2..211e840 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiMaintenance1Tests.cpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiMaintenance1Tests.cpp
@@ -1358,6 +1358,11 @@
                                                *native.windows[0], context.getTestContext().getCommandLine()));
     const DeviceHelper devHelper(context, instHelper.vki, instHelper.instance, *surface, false, false);
 
+    const std::vector<VkPresentModeKHR> presentModes =
+        getPhysicalDeviceSurfacePresentModes(instHelper.vki, devHelper.physicalDevice, *surface);
+    if (std::find(presentModes.begin(), presentModes.end(), testParams.mode) == presentModes.end())
+        TCU_THROW(NotSupportedError, "Present mode not supported");
+
     // Query the scaling capabilities and make sure they only report acceptable values.
     VkSurfacePresentScalingCapabilitiesEXT scaling =
         getSurfaceScalingCapabilities(instHelper.vki, devHelper.physicalDevice, testParams.mode, *surface);
@@ -1388,6 +1393,11 @@
                                                *native.windows[0], context.getTestContext().getCommandLine()));
     const DeviceHelper devHelper(context, instHelper.vki, instHelper.instance, *surface, false, false);
 
+    const std::vector<VkPresentModeKHR> presentModes =
+        getPhysicalDeviceSurfacePresentModes(instHelper.vki, devHelper.physicalDevice, *surface);
+    if (std::find(presentModes.begin(), presentModes.end(), testParams.mode) == presentModes.end())
+        TCU_THROW(NotSupportedError, "Present mode not supported");
+
     // Query compatible present modes, and scaling capabilities for each mode.  They must all be identical.
     VkSurfacePresentModeEXT presentModeInfo = {
         VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT,
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
index 3aaa0b0..bd27413 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
@@ -465,13 +465,13 @@
         {
             VkImageFormatProperties imageProps;
 
-            if (vki.getPhysicalDeviceImageFormatProperties(physicalDevice, baseParameters.imageFormat, VK_IMAGE_TYPE_2D,
-                                                           VK_IMAGE_TILING_OPTIMAL, flags, (VkImageCreateFlags)0u,
-                                                           &imageProps) != VK_SUCCESS)
-                continue;
-
             if ((flags & ~capabilities.supportedUsageFlags) == 0)
             {
+                if (vki.getPhysicalDeviceImageFormatProperties(physicalDevice, baseParameters.imageFormat,
+                                                               VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_OPTIMAL, flags,
+                                                               (VkImageCreateFlags)0u, &imageProps) != VK_SUCCESS)
+                    continue;
+
                 cases.push_back(baseParameters);
                 cases.back().imageUsage = flags;
             }
diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp
index cb37062..6928c73 100644
--- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp
+++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp
@@ -1404,8 +1404,18 @@
                             vk::VkSamplerAddressMode addressModeU, vk::VkSamplerAddressMode addressModeV,
                             const tcu::IVec2 &coord)
 {
-    return access.getChannel(conversionFormat, tcu::IVec3(wrap(addressModeU, coord.x(), access.getSize().x()),
-                                                          wrap(addressModeV, coord.y(), access.getSize().y()), 0));
+    tcu::Interval interval =
+        access.getChannel(conversionFormat, tcu::IVec3(wrap(addressModeU, coord.x(), access.getSize().x()),
+                                                       wrap(addressModeV, coord.y(), access.getSize().y()), 0));
+
+    // Expand range for 10-bit conversions to +/-1.0 ULP
+    if (conversionFormat.getFractionBits() == 10)
+    {
+        interval |= interval.lo() - interval.length() / 2.0;
+        interval |= interval.hi() + interval.length() / 2.0;
+    }
+
+    return interval;
 }
 
 tcu::Interval linearInterpolate(const tcu::FloatFormat &filteringFormat, const tcu::Interval &a, const tcu::Interval &b,
diff --git a/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-linked-binary.txt b/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-linked-binary.txt
index 72ebde1..e521c5a 100644
--- a/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-linked-binary.txt
+++ b/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-linked-binary.txt
@@ -22236,14 +22236,6 @@
 dEQP-VK.pipeline.shader_object_linked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
 dEQP-VK.pipeline.shader_object_linked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_g0
 dEQP-VK.pipeline.shader_object_linked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_g1
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness.image
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness.storage
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness.uniform
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness.vertex_input
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness2.image
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness2.storage
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness2.uniform
-dEQP-VK.pipeline.shader_object_linked_binary.pipeline_cache.robustness2.vertex_input
 dEQP-VK.pipeline.shader_object_linked_binary.push_constant.graphics_pipeline.count_1_shader_vert_frag
 dEQP-VK.pipeline.shader_object_linked_binary.push_constant.graphics_pipeline.count_1_shader_vert_frag_command2
 dEQP-VK.pipeline.shader_object_linked_binary.push_constant.graphics_pipeline.count_2_shaders_vert_frag
diff --git a/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-linked-spirv.txt b/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-linked-spirv.txt
index 32e94c3..f0554bf 100644
--- a/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-linked-spirv.txt
+++ b/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-linked-spirv.txt
@@ -22236,14 +22236,6 @@
 dEQP-VK.pipeline.shader_object_linked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
 dEQP-VK.pipeline.shader_object_linked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_g0
 dEQP-VK.pipeline.shader_object_linked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_g1
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness.image
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness.storage
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness.uniform
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness.vertex_input
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness2.image
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness2.storage
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness2.uniform
-dEQP-VK.pipeline.shader_object_linked_spirv.pipeline_cache.robustness2.vertex_input
 dEQP-VK.pipeline.shader_object_linked_spirv.push_constant.graphics_pipeline.count_1_shader_vert_frag
 dEQP-VK.pipeline.shader_object_linked_spirv.push_constant.graphics_pipeline.count_1_shader_vert_frag_command2
 dEQP-VK.pipeline.shader_object_linked_spirv.push_constant.graphics_pipeline.count_2_shaders_vert_frag
diff --git a/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-unlinked-binary.txt b/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-unlinked-binary.txt
index 02e1b1b..edc1225 100644
--- a/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-unlinked-binary.txt
+++ b/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-unlinked-binary.txt
@@ -22236,14 +22236,6 @@
 dEQP-VK.pipeline.shader_object_unlinked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
 dEQP-VK.pipeline.shader_object_unlinked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_g0
 dEQP-VK.pipeline.shader_object_unlinked_binary.no_position.implicit_declarations.ssbo_writes.single_view.v1_g1
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness.image
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness.storage
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness.uniform
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness.vertex_input
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness2.image
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness2.storage
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness2.uniform
-dEQP-VK.pipeline.shader_object_unlinked_binary.pipeline_cache.robustness2.vertex_input
 dEQP-VK.pipeline.shader_object_unlinked_binary.push_constant.graphics_pipeline.count_1_shader_vert_frag
 dEQP-VK.pipeline.shader_object_unlinked_binary.push_constant.graphics_pipeline.count_1_shader_vert_frag_command2
 dEQP-VK.pipeline.shader_object_unlinked_binary.push_constant.graphics_pipeline.count_2_shaders_vert_frag
diff --git a/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-unlinked-spirv.txt b/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-unlinked-spirv.txt
index 0a96045..f8b1c38 100644
--- a/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-unlinked-spirv.txt
+++ b/external/vulkancts/mustpass/main/vk-default/pipeline/shader-object-unlinked-spirv.txt
@@ -77484,14 +77484,6 @@
 dEQP-VK.pipeline.shader_object_unlinked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
 dEQP-VK.pipeline.shader_object_unlinked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_g0
 dEQP-VK.pipeline.shader_object_unlinked_spirv.no_position.implicit_declarations.ssbo_writes.single_view.v1_g1
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness.image
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness.storage
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness.uniform
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness.vertex_input
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness2.image
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness2.storage
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness2.uniform
-dEQP-VK.pipeline.shader_object_unlinked_spirv.pipeline_cache.robustness2.vertex_input
 dEQP-VK.pipeline.shader_object_unlinked_spirv.push_constant.graphics_pipeline.count_1_shader_vert_frag
 dEQP-VK.pipeline.shader_object_unlinked_spirv.push_constant.graphics_pipeline.count_1_shader_vert_frag_command2
 dEQP-VK.pipeline.shader_object_unlinked_spirv.push_constant.graphics_pipeline.count_2_shaders_vert_frag