diff options
author | Pankaj Mistry <63069047+pmistryNV@users.noreply.github.com> | 2022-09-02 03:36:15 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-02 03:36:15 +0300 |
commit | 4c456f7da67c5437a6fb7d4d20d78e2a5ae2acf2 (patch) | |
tree | edc3b0df2b30f2baba2b2e3ca6fd0056dcd65489 /test | |
parent | 33113abf453572d3cf61b58d4378bbacb4206b1a (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.cpp | 32 | ||||
-rw-r--r-- | test/val/val_atomics_test.cpp | 4 | ||||
-rw-r--r-- | test/val/val_barriers_test.cpp | 46 | ||||
-rw-r--r-- | test/val/val_builtins_test.cpp | 83 |
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, |