Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Tools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPankaj Mistry <63069047+pmistryNV@users.noreply.github.com>2022-09-02 03:36:15 +0300
committerGitHub <noreply@github.com>2022-09-02 03:36:15 +0300
commit4c456f7da67c5437a6fb7d4d20d78e2a5ae2acf2 (patch)
treeedc3b0df2b30f2baba2b2e3ca6fd0056dcd65489 /test
parent33113abf453572d3cf61b58d4378bbacb4206b1a (diff)
Implement tool changes for SPV_EXT_mesh_shader. (#4915)tmp-1.3.230
- Added validation rule to support EXT_mesh_shader from SPIRV 1.4 onwards
Diffstat (limited to 'test')
-rw-r--r--test/operand_capabilities_test.cpp32
-rw-r--r--test/val/val_atomics_test.cpp4
-rw-r--r--test/val/val_barriers_test.cpp46
-rw-r--r--test/val/val_builtins_test.cpp83
4 files changed, 90 insertions, 75 deletions
diff --git a/test/operand_capabilities_test.cpp b/test/operand_capabilities_test.cpp
index bc0ee0551..60503461e 100644
--- a/test/operand_capabilities_test.cpp
+++ b/test/operand_capabilities_test.cpp
@@ -97,6 +97,14 @@ TEST_P(EnumCapabilityTest, Sample) {
} \
}
+#define CASE6(TYPE, VALUE, CAP1, CAP2, CAP3, CAP4, CAP5, CAP6) \
+ { \
+ SPV_OPERAND_TYPE_##TYPE, uint32_t(Spv##VALUE), CapabilitySet { \
+ SpvCapability##CAP1, SpvCapability##CAP2, SpvCapability##CAP3, \
+ SpvCapability##CAP4, SpvCapability##CAP5, SpvCapability##CAP6 \
+ } \
+ }
+
// See SPIR-V Section 3.3 Execution Model
INSTANTIATE_TEST_SUITE_P(
ExecutionModel, EnumCapabilityTest,
@@ -168,10 +176,10 @@ INSTANTIATE_TEST_SUITE_P(
Geometry),
CASE1(EXECUTION_MODE, ExecutionModeQuads, Tessellation),
CASE1(EXECUTION_MODE, ExecutionModeIsolines, Tessellation),
- CASE3(EXECUTION_MODE, ExecutionModeOutputVertices, Geometry,
- Tessellation, MeshShadingNV),
- CASE2(EXECUTION_MODE, ExecutionModeOutputPoints, Geometry,
- MeshShadingNV),
+ CASE4(EXECUTION_MODE, ExecutionModeOutputVertices, Geometry,
+ Tessellation, MeshShadingNV, MeshShadingEXT),
+ CASE3(EXECUTION_MODE, ExecutionModeOutputPoints, Geometry,
+ MeshShadingNV, MeshShadingEXT),
CASE1(EXECUTION_MODE, ExecutionModeOutputLineStrip, Geometry),
CASE1(EXECUTION_MODE, ExecutionModeOutputTriangleStrip, Geometry),
CASE1(EXECUTION_MODE, ExecutionModeVecTypeHint, Kernel),
@@ -486,11 +494,11 @@ INSTANTIATE_TEST_SUITE_P(
CASE1(BUILT_IN, BuiltInCullDistance, CullDistance), // Bug 1407, 15234
CASE1(BUILT_IN, BuiltInVertexId, Shader),
CASE1(BUILT_IN, BuiltInInstanceId, Shader),
- CASE5(BUILT_IN, BuiltInPrimitiveId, Geometry, Tessellation,
- RayTracingNV, RayTracingKHR, MeshShadingNV),
+ CASE6(BUILT_IN, BuiltInPrimitiveId, Geometry, Tessellation,
+ RayTracingNV, RayTracingKHR, MeshShadingNV, MeshShadingEXT),
CASE2(BUILT_IN, BuiltInInvocationId, Geometry, Tessellation),
- CASE3(BUILT_IN, BuiltInLayer, Geometry, ShaderViewportIndexLayerEXT, MeshShadingNV),
- CASE3(BUILT_IN, BuiltInViewportIndex, MultiViewport, ShaderViewportIndexLayerEXT, MeshShadingNV), // Bug 15234
+ CASE4(BUILT_IN, BuiltInLayer, Geometry, ShaderViewportIndexLayerEXT, MeshShadingNV, MeshShadingEXT),
+ CASE4(BUILT_IN, BuiltInViewportIndex, MultiViewport, ShaderViewportIndexLayerEXT, MeshShadingNV, MeshShadingEXT), // Bug 15234
CASE1(BUILT_IN, BuiltInTessLevelOuter, Tessellation),
CASE1(BUILT_IN, BuiltInTessLevelInner, Tessellation),
CASE1(BUILT_IN, BuiltInTessCoord, Tessellation),
@@ -533,11 +541,11 @@ INSTANTIATE_TEST_SUITE_P(
Values(SPV_ENV_UNIVERSAL_1_5),
ValuesIn(std::vector<EnumCapabilityCase>{
// SPIR-V 1.5 adds new capabilities to enable these two builtins.
- CASE4(BUILT_IN, BuiltInLayer, Geometry, ShaderLayer,
- ShaderViewportIndexLayerEXT, MeshShadingNV),
- CASE4(BUILT_IN, BuiltInViewportIndex, MultiViewport,
+ CASE5(BUILT_IN, BuiltInLayer, Geometry, ShaderLayer,
+ ShaderViewportIndexLayerEXT, MeshShadingNV, MeshShadingEXT),
+ CASE5(BUILT_IN, BuiltInViewportIndex, MultiViewport,
ShaderViewportIndex, ShaderViewportIndexLayerEXT,
- MeshShadingNV),
+ MeshShadingNV, MeshShadingEXT),
})));
// See SPIR-V Section 3.22 Selection Control
diff --git a/test/val/val_atomics_test.cpp b/test/val/val_atomics_test.cpp
index a0308d599..a7e4055af 100644
--- a/test/val/val_atomics_test.cpp
+++ b/test/val/val_atomics_test.cpp
@@ -778,8 +778,8 @@ OpAtomicStore %f32_var_function %device %relaxed %f32_1
EXPECT_THAT(
getDiagnosticString(),
HasSubstr("AtomicStore: Vulkan spec only allows storage classes for "
- "atomic to be: Uniform, Workgroup, Image, StorageBuffer, or "
- "PhysicalStorageBuffer."));
+ "atomic to be: Uniform, Workgroup, Image, StorageBuffer, "
+ "PhysicalStorageBuffer or TaskPayloadWorkgroupEXT."));
}
TEST_F(ValidateAtomics, AtomicStoreFunctionPointerStorageType) {
diff --git a/test/val/val_barriers_test.cpp b/test/val/val_barriers_test.cpp
index df5ee1678..2569de0d0 100644
--- a/test/val/val_barriers_test.cpp
+++ b/test/val/val_barriers_test.cpp
@@ -254,8 +254,9 @@ OpControlBarrier %device %device %none
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_2));
EXPECT_THAT(
getDiagnosticString(),
- HasSubstr("OpControlBarrier requires one of the following Execution "
- "Models: TessellationControl, GLCompute or Kernel"));
+ HasSubstr("OpControlBarrier requires one of the following "
+ "Execution Models: TessellationControl, GLCompute, Kernel, "
+ "MeshNV or TaskNV"));
}
TEST_F(ValidateBarriers, OpControlBarrierExecutionModelFragmentSpirv13) {
@@ -417,8 +418,9 @@ OpControlBarrier %subgroup %workgroup %acquire
EXPECT_THAT(getDiagnosticString(),
AnyVUID("VUID-StandaloneSpirv-None-04639"));
EXPECT_THAT(getDiagnosticString(),
- HasSubstr("Workgroup Memory Scope is limited to MeshNV, TaskNV, "
- "and GLCompute execution model"));
+ HasSubstr("Workgroup Memory Scope is limited to MeshNV, "
+ "TaskNV, MeshEXT, TaskEXT and GLCompute "
+ "execution model"));
}
TEST_F(ValidateBarriers,
@@ -433,8 +435,8 @@ OpControlBarrier %workgroup %subgroup %acquire
AnyVUID("VUID-StandaloneSpirv-None-04637"));
EXPECT_THAT(getDiagnosticString(),
HasSubstr("in Vulkan environment, Workgroup execution scope is "
- "only for TaskNV, MeshNV, TessellationControl, and "
- "GLCompute execution models"));
+ "only for TaskNV, MeshNV, TaskEXT, MeshEXT, "
+ "TessellationControl, and GLCompute execution models"));
}
TEST_F(ValidateBarriers, OpControlBarrierVulkan1p1WorkgroupComputeSuccess) {
@@ -544,10 +546,11 @@ OpControlBarrier %subgroup %workgroup %acquire_release
CompileSuccessfully(GenerateShaderCode(body, "", "Fragment"),
SPV_ENV_VULKAN_1_0);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_0));
- EXPECT_THAT(
- getDiagnosticString(),
- HasSubstr("OpControlBarrier requires one of the following Execution "
- "Models: TessellationControl, GLCompute or Kernel"));
+ EXPECT_THAT(getDiagnosticString(),
+ HasSubstr("OpControlBarrier requires one of the following "
+ "Execution "
+ "Models: TessellationControl, GLCompute, Kernel, "
+ "MeshNV or TaskNV"));
}
TEST_F(ValidateBarriers, OpControlBarrierSubgroupExecutionVertex1p1) {
@@ -588,8 +591,9 @@ OpControlBarrier %subgroup %workgroup %acquire_release
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(
getDiagnosticString(),
- HasSubstr("OpControlBarrier requires one of the following Execution "
- "Models: TessellationControl, GLCompute or Kernel"));
+ HasSubstr("OpControlBarrier requires one of the following "
+ "Execution Models: TessellationControl, GLCompute, Kernel, "
+ "MeshNV or TaskNV"));
}
TEST_F(ValidateBarriers, OpControlBarrierSubgroupExecutionGeometry1p1) {
@@ -631,10 +635,11 @@ OpControlBarrier %subgroup %workgroup %acquire_release
GenerateShaderCode(body, "OpCapability Geometry\n", "Geometry"),
SPV_ENV_VULKAN_1_0);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_0));
- EXPECT_THAT(
- getDiagnosticString(),
- HasSubstr("OpControlBarrier requires one of the following Execution "
- "Models: TessellationControl, GLCompute or Kernel"));
+ EXPECT_THAT(getDiagnosticString(),
+ HasSubstr("OpControlBarrier requires one of the following "
+ "Execution "
+ "Models: TessellationControl, GLCompute, Kernel, "
+ "MeshNV or TaskNV"));
}
TEST_F(ValidateBarriers,
@@ -679,10 +684,11 @@ OpControlBarrier %subgroup %workgroup %acquire_release
"TessellationEvaluation"),
SPV_ENV_VULKAN_1_0);
ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_0));
- EXPECT_THAT(
- getDiagnosticString(),
- HasSubstr("OpControlBarrier requires one of the following Execution "
- "Models: TessellationControl, GLCompute or Kernel"));
+ EXPECT_THAT(getDiagnosticString(),
+ HasSubstr("OpControlBarrier requires one of the following "
+ "Execution "
+ "Models: TessellationControl, GLCompute, Kernel, "
+ "MeshNV or TaskNV"));
}
TEST_F(ValidateBarriers, OpMemoryBarrierSuccess) {
diff --git a/test/val/val_builtins_test.cpp b/test/val/val_builtins_test.cpp
index 2cbe9a8ae..40832e024 100644
--- a/test/val/val_builtins_test.cpp
+++ b/test/val/val_builtins_test.cpp
@@ -784,8 +784,8 @@ INSTANTIATE_TEST_SUITE_P(
"VUID-NumWorkgroups-NumWorkgroups-04296 "
"VUID-WorkgroupId-WorkgroupId-04422"),
Values(TestResult(SPV_ERROR_INVALID_DATA,
- "to be used only with GLCompute, MeshNV, or "
- "TaskNV execution model"))));
+ "to be used only with GLCompute, MeshNV, "
+ "TaskNV, MeshEXT or TaskEXT execution model"))));
INSTANTIATE_TEST_SUITE_P(
ComputeShaderInputInt32Vec3NotInput,
@@ -1006,7 +1006,7 @@ INSTANTIATE_TEST_SUITE_P(
Values("VUID-Layer-Layer-04274 VUID-ViewportIndex-ViewportIndex-04406"),
Values(TestResult(SPV_ERROR_INVALID_DATA,
"Input storage class if execution model is Vertex, "
- "TessellationEvaluation, Geometry, or MeshNV",
+ "TessellationEvaluation, Geometry, MeshNV or MeshEXT",
"which is called with execution model"))));
INSTANTIATE_TEST_SUITE_P(
@@ -1311,14 +1311,14 @@ INSTANTIATE_TEST_SUITE_P(
INSTANTIATE_TEST_SUITE_P(
PrimitiveIdInvalidExecutionModel,
ValidateVulkanCombineBuiltInExecutionModelDataTypeResult,
- Combine(Values("PrimitiveId"), Values("Vertex", "GLCompute"),
- Values("Input"), Values("%u32"),
- Values("VUID-PrimitiveId-PrimitiveId-04330"),
- Values(TestResult(
- SPV_ERROR_INVALID_DATA,
- "to be used only with Fragment, TessellationControl, "
- "TessellationEvaluation, Geometry, MeshNV, IntersectionKHR, "
- "AnyHitKHR, and ClosestHitKHR execution models"))));
+ Combine(
+ Values("PrimitiveId"), Values("Vertex", "GLCompute"), Values("Input"),
+ Values("%u32"), Values("VUID-PrimitiveId-PrimitiveId-04330"),
+ Values(TestResult(SPV_ERROR_INVALID_DATA,
+ "to be used only with Fragment, TessellationControl, "
+ "TessellationEvaluation, Geometry, MeshNV, MeshEXT, "
+ "IntersectionKHR, "
+ "AnyHitKHR, and ClosestHitKHR execution models"))));
INSTANTIATE_TEST_SUITE_P(
PrimitiveIdFragmentNotInput,
@@ -1867,16 +1867,18 @@ INSTANTIATE_TEST_SUITE_P(
INSTANTIATE_TEST_SUITE_P(
DrawIndexInvalidExecutionModel,
ValidateVulkanCombineBuiltInExecutionModelDataTypeCapabilityExtensionResult,
- Combine(Values("DrawIndex"),
- Values("Fragment", "GLCompute", "Geometry", "TessellationControl",
- "TessellationEvaluation"),
- Values("Input"), Values("%u32"),
- Values("OpCapability DrawParameters\n"),
- Values("OpExtension \"SPV_KHR_shader_draw_parameters\"\n"),
- Values("VUID-DrawIndex-DrawIndex-04207"),
- Values(TestResult(SPV_ERROR_INVALID_DATA,
- "to be used only with Vertex, MeshNV, or TaskNV "
- "execution model"))));
+ Combine(
+ Values("DrawIndex"),
+ Values("Fragment", "GLCompute", "Geometry", "TessellationControl",
+ "TessellationEvaluation"),
+ Values("Input"), Values("%u32"),
+ Values("OpCapability DrawParameters\n"),
+ Values("OpExtension \"SPV_KHR_shader_draw_parameters\"\n"),
+ Values("VUID-DrawIndex-DrawIndex-04207"),
+ Values(TestResult(
+ SPV_ERROR_INVALID_DATA,
+ "to be used only with Vertex, MeshNV, TaskNV , MeshEXT or TaskEXT "
+ "execution model"))));
INSTANTIATE_TEST_SUITE_P(
DrawIndexNotInput,
@@ -2164,17 +2166,17 @@ INSTANTIATE_TEST_SUITE_P(
INSTANTIATE_TEST_SUITE_P(
PrimitiveIdRTNotExecutionMode,
ValidateGenericCombineBuiltInExecutionModelDataTypeCapabilityExtensionResult,
- Combine(Values(SPV_ENV_VULKAN_1_2), Values("PrimitiveId"),
- Values("RayGenerationKHR", "MissKHR", "CallableKHR"),
- Values("Input"), Values("%u32"),
- Values("OpCapability RayTracingKHR\n"),
- Values("OpExtension \"SPV_KHR_ray_tracing\"\n"),
- Values("VUID-PrimitiveId-PrimitiveId-04330"),
- Values(TestResult(
- SPV_ERROR_INVALID_DATA,
- "to be used only with Fragment, TessellationControl, "
- "TessellationEvaluation, Geometry, MeshNV, IntersectionKHR, "
- "AnyHitKHR, and ClosestHitKHR execution models"))));
+ Combine(
+ Values(SPV_ENV_VULKAN_1_2), Values("PrimitiveId"),
+ Values("RayGenerationKHR", "MissKHR", "CallableKHR"), Values("Input"),
+ Values("%u32"), Values("OpCapability RayTracingKHR\n"),
+ Values("OpExtension \"SPV_KHR_ray_tracing\"\n"),
+ Values("VUID-PrimitiveId-PrimitiveId-04330"),
+ Values(TestResult(SPV_ERROR_INVALID_DATA,
+ "to be used only with Fragment, TessellationControl, "
+ "TessellationEvaluation, Geometry, MeshNV, MeshEXT, "
+ "IntersectionKHR, "
+ "AnyHitKHR, and ClosestHitKHR execution models"))));
INSTANTIATE_TEST_SUITE_P(
PrimitiveIdRTNotInput,
@@ -2896,10 +2898,10 @@ TEST_F(ValidateBuiltIns, VulkanWorkgroupSizeFragment) {
CompileSuccessfully(generator.Build(), SPV_ENV_VULKAN_1_0);
ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
- EXPECT_THAT(
- getDiagnosticString(),
- HasSubstr("Vulkan spec allows BuiltIn WorkgroupSize to be used "
- "only with GLCompute, MeshNV, or TaskNV execution model"));
+ EXPECT_THAT(getDiagnosticString(),
+ HasSubstr("Vulkan spec allows BuiltIn WorkgroupSize to be used "
+ "only with GLCompute, MeshNV, TaskNV, MeshEXT or "
+ "TaskEXT execution model"));
EXPECT_THAT(getDiagnosticString(),
HasSubstr("is referencing ID <2> (OpConstantComposite) which is "
"decorated with BuiltIn WorkgroupSize in function <1> "
@@ -3356,7 +3358,7 @@ OpReturn
OpFunctionEnd
)";
- generator.add_at_the_end_ = function_body;
+ generator.add_at_the_end_ = function_body;
return generator;
}
@@ -3419,7 +3421,7 @@ OpReturn
OpFunctionEnd
)";
- generator.add_at_the_end_ = function_body;
+ generator.add_at_the_end_ = function_body;
return generator;
}
@@ -3437,7 +3439,6 @@ TEST_F(ValidateBuiltIns,
HasSubstr("VUID-FragDepth-FragDepth-04216"));
}
-
TEST_F(ValidateBuiltIns, AllowInstanceIdWithIntersectionShader) {
CodeGenerator generator = CodeGenerator::GetDefaultShaderCodeGenerator();
generator.capabilities_ += R"(
@@ -3766,8 +3767,8 @@ INSTANTIATE_TEST_SUITE_P(
Values("VUID-SubgroupId-SubgroupId-04367 "
"VUID-NumSubgroups-NumSubgroups-04293"),
Values(TestResult(SPV_ERROR_INVALID_DATA,
- "to be used only with GLCompute, MeshNV, or "
- "TaskNV execution model"))));
+ "to be used only with GLCompute, MeshNV, "
+ "TaskNV, MeshEXT or TaskEXT execution model"))));
INSTANTIATE_TEST_SUITE_P(
SubgroupNumAndIdNotU32, ValidateVulkanSubgroupBuiltIns,