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