Validate version requirement for Vulkan Memory Model (#6042) * SPV_KHR_vulkan_memory_model requires SPIR-V 1.3 * Additionally, validate that if Shader and CooperativeMatrixKHR are declared, VulkanMemoryModel must also be declared
diff --git a/source/val/validate_extensions.cpp b/source/val/validate_extensions.cpp index af64e6a..912b9ae 100644 --- a/source/val/validate_extensions.cpp +++ b/source/val/validate_extensions.cpp
@@ -1052,8 +1052,14 @@ } // anonymous namespace spv_result_t ValidateExtension(ValidationState_t& _, const Instruction* inst) { + std::string extension = GetExtensionString(&(inst->c_inst())); + if (_.version() < SPV_SPIRV_VERSION_WORD(1, 3)) { + if (extension == ExtensionToString(kSPV_KHR_vulkan_memory_model)) { + return _.diag(SPV_ERROR_WRONG_VERSION, inst) + << extension << " extension requires SPIR-V version 1.3 or later."; + } + } if (_.version() < SPV_SPIRV_VERSION_WORD(1, 4)) { - std::string extension = GetExtensionString(&(inst->c_inst())); if (extension == ExtensionToString(kSPV_KHR_workgroup_memory_explicit_layout) || extension == ExtensionToString(kSPV_EXT_mesh_shader) ||
diff --git a/source/val/validate_mode_setting.cpp b/source/val/validate_mode_setting.cpp index b37b898..baa98ce 100644 --- a/source/val/validate_mode_setting.cpp +++ b/source/val/validate_mode_setting.cpp
@@ -818,6 +818,20 @@ } } +spv_result_t ValidateCapability(ValidationState_t& _, const Instruction* inst) { + auto cap = inst->GetOperandAs<spv::Capability>(0); + if (cap == spv::Capability::CooperativeMatrixKHR) { + if (_.HasCapability(spv::Capability::Shader) && + !_.HasCapability(spv::Capability::VulkanMemoryModel)) { + return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst) + << "If the Shader and CooperativeMatrixKHR capabilities are " + "declared, the VulkanMemoryModel capability must also be " + "declared"; + } + } + return SPV_SUCCESS; +} + } // namespace spv_result_t ValidateFloatControls2(ValidationState_t& _) { @@ -896,6 +910,9 @@ case spv::Op::OpMemoryModel: if (auto error = ValidateMemoryModel(_, inst)) return error; break; + case spv::Op::OpCapability: + if (auto error = ValidateCapability(_, inst)) return error; + break; default: break; }
diff --git a/test/opt/aggressive_dead_code_elim_test.cpp b/test/opt/aggressive_dead_code_elim_test.cpp index f06993a..b255696 100644 --- a/test/opt/aggressive_dead_code_elim_test.cpp +++ b/test/opt/aggressive_dead_code_elim_test.cpp
@@ -8002,8 +8002,10 @@ const std::string text = R"( OpCapability CooperativeMatrixKHR OpCapability Shader + OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" - OpMemoryModel Logical GLSL450 + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %1 "main" %2 OpExecutionMode %1 LocalSize 64 1 1 OpSource HLSL 600
diff --git a/test/val/val_arithmetics_test.cpp b/test/val/val_arithmetics_test.cpp index 42f4ce7..2a15b28 100644 --- a/test/val/val_arithmetics_test.cpp +++ b/test/val/val_arithmetics_test.cpp
@@ -1477,10 +1477,11 @@ OpCapability CooperativeMatrixKHR OpCapability CooperativeMatrixReductionsNV OpCapability CooperativeMatrixPerElementOperationsNV +OpCapability VulkanMemoryModel OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_NV_cooperative_matrix2" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical Vulkan OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -1564,8 +1565,9 @@ %val18 = OpCooperativeMatrixMulAddKHR %u32matC %u32mat_A_1 %u32mat_B_1 %u32mat_C_1 )"; - CompileSuccessfully(GenerateCoopMatKHRCode("", body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode("", body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateArithmetics, CoopMatMatrixKHRTimesScalarMismatchFail) { @@ -1573,8 +1575,10 @@ %val1 = OpMatrixTimesScalar %f16matA %f16mat_A_1 %f32_1 )"; - CompileSuccessfully(GenerateCoopMatKHRCode("", body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode("", body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr("Expected scalar operand type to be equal to the component " @@ -1592,8 +1596,10 @@ %val1 = OpFAdd %f16matA %f16matdv_16x16_1 %f16mat_A_1 )"; - CompileSuccessfully(GenerateCoopMatKHRCode(types, body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr("Expected scopes of Matrix and Result Type to be identical")); @@ -1609,8 +1615,10 @@ %val1 = OpCooperativeMatrixMulAddKHR %mat16x4 %f16mat_A_1 %f16mat_B_1 %mat16x4_C_1 )"; - CompileSuccessfully(GenerateCoopMatKHRCode(types, body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr("Cooperative matrix 'N' mismatch: CooperativeMatrixMulAddKHR")); @@ -1641,8 +1649,9 @@ %val5 = OpCooperativeMatrixReduceNV %f16matC8 %f16mat_C_1 Row|Column %reducefunc )"; - CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateArithmetics, CoopMat2Reduce2x2DimFail) { @@ -1662,8 +1671,10 @@ %val1 = OpCooperativeMatrixReduceNV %f16matC %f16mat_C_1 2x2 %reducefunc )"; - CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("For Reduce2x2, result rows/cols must be half of " "matrix rows/cols: CooperativeMatrixReduceNV")); @@ -1688,8 +1699,10 @@ %val1 = OpCooperativeMatrixReduceNV %f16matC8x16 %f16mat_C_1 Row %reducefunc )"; - CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("For ReduceRow, result rows must match matrix rows: " "CooperativeMatrixReduceNV")); @@ -1714,8 +1727,10 @@ %val1 = OpCooperativeMatrixReduceNV %f16matC16x8 %f16mat_C_1 Column %reducefunc )"; - CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("For ReduceColumn, result cols must match matrix cols: " "CooperativeMatrixReduceNV")); @@ -1740,8 +1755,10 @@ %val1 = OpCooperativeMatrixReduceNV %f16matC8 %f16mat_C_1 Row|Column|2x2 %reducefunc )"; - CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("Reduce 2x2 must not be used with Row/Column: " "CooperativeMatrixReduceNV")); @@ -1764,8 +1781,10 @@ %val1 = OpCooperativeMatrixReduceNV %f16matC %f16mat_C_1 Row|Column %reducefunc )"; - CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("CombineFunc return type and parameters must match " "matrix component type: CooperativeMatrixReduceNV")); @@ -1800,8 +1819,9 @@ %val2 = OpCooperativeMatrixPerElementOpNV %f16matC %f16mat_C_1 %elemfunc2 %f16_1 )"; - CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateArithmetics, CoopMat2PerElementOpElemTyFail) { @@ -1822,8 +1842,9 @@ %val1 = OpCooperativeMatrixPerElementOpNV %f16matC %f16mat_C_1 %elemfunc )"; - CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("must match matrix component type")); } @@ -1846,8 +1867,9 @@ %val1 = OpCooperativeMatrixPerElementOpNV %f16matC %f16mat_C_1 %elemfunc )"; - CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(GenerateCoopMatKHRCode(extra_types, body).c_str(), + SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("must be a 32-bit integer")); }
diff --git a/test/val/val_atomics_test.cpp b/test/val/val_atomics_test.cpp index 1cec51e..4edd884 100644 --- a/test/val/val_atomics_test.cpp +++ b/test/val/val_atomics_test.cpp
@@ -2559,8 +2559,8 @@ OpFunctionEnd )"; - CompileSuccessfully(spirv); - EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateAtomics, CompareExchangeVolatileMismatch) { @@ -2587,8 +2587,8 @@ OpFunctionEnd )"; - CompileSuccessfully(spirv); - EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("Volatile mask setting must match for Equal and " "Unequal memory semantics")); @@ -2621,8 +2621,8 @@ )"; // This is ok because we cannot evaluate the spec constant defaults. - CompileSuccessfully(spirv); - EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateAtomics, VolatileRequiresVulkanMemoryModel) {
diff --git a/test/val/val_barriers_test.cpp b/test/val/val_barriers_test.cpp index 2d0bee7..bd84353 100644 --- a/test/val/val_barriers_test.cpp +++ b/test/val/val_barriers_test.cpp
@@ -1428,8 +1428,9 @@ OpFunctionEnd )"; - CompileSuccessfully(text); - EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("Memory Semantics Volatile can only be used with " "atomic instructions")); @@ -1455,8 +1456,9 @@ OpFunctionEnd )"; - CompileSuccessfully(text); - EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("Memory Semantics Volatile can only be used with " "atomic instructions")); @@ -1484,8 +1486,8 @@ OpFunctionEnd )"; - CompileSuccessfully(text); - EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateBarriers, CooperativeMatrixNonConstantSemantics) { @@ -1510,8 +1512,9 @@ OpFunctionEnd )"; - CompileSuccessfully(text); - EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("Memory Semantics must be a constant instruction when " "CooperativeMatrixNV capability is present"));
diff --git a/test/val/val_capability_test.cpp b/test/val/val_capability_test.cpp index 0d84caa..87a22c8 100644 --- a/test/val/val_capability_test.cpp +++ b/test/val/val_capability_test.cpp
@@ -2977,6 +2977,26 @@ EXPECT_THAT(getDiagnosticString(), Eq("")); } +TEST_F(ValidateCapability, + CooperativeMatrixKHRShaderRequiresVulkanMemoryModel) { + const auto spirv = R"( +OpCapability Shader +OpCapability CooperativeMatrixKHR +OpCapability Linkage +OpExtension "SPV_KHR_cooperative_matrix" +OpMemoryModel Logical GLSL450 +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_6); + EXPECT_EQ(SPV_ERROR_INVALID_CAPABILITY, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_6)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "If the Shader and CooperativeMatrixKHR capabilities are declared, " + "the VulkanMemoryModel capability must also be declared")); +} + } // namespace } // namespace val } // namespace spvtools
diff --git a/test/val/val_composites_test.cpp b/test/val/val_composites_test.cpp index 460ae58..7ac0df2 100644 --- a/test/val/val_composites_test.cpp +++ b/test/val/val_composites_test.cpp
@@ -1565,9 +1565,10 @@ OpCapability Shader OpCapability Float16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -1592,8 +1593,8 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr( @@ -1606,9 +1607,10 @@ OpCapability Shader OpCapability Float16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -1633,8 +1635,9 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr("Expected Constituent type to be equal to the component type")); @@ -2108,7 +2111,6 @@ OpCapability Float16 OpCapability CooperativeVectorNV OpExtension "SPV_NV_cooperative_vector" -OpExtension "SPV_KHR_vulkan_memory_model" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" %void = OpTypeVoid @@ -2144,7 +2146,6 @@ OpCapability Float16 OpCapability CooperativeVectorNV OpExtension "SPV_NV_cooperative_vector" -OpExtension "SPV_KHR_vulkan_memory_model" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" %void = OpTypeVoid @@ -2184,7 +2185,6 @@ OpCapability Float16 OpCapability CooperativeVectorNV OpExtension "SPV_NV_cooperative_vector" -OpExtension "SPV_KHR_vulkan_memory_model" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" %void = OpTypeVoid @@ -2220,7 +2220,6 @@ OpCapability Float16 OpCapability CooperativeVectorNV OpExtension "SPV_NV_cooperative_vector" -OpExtension "SPV_KHR_vulkan_memory_model" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" %void = OpTypeVoid @@ -2259,7 +2258,6 @@ OpCapability Float16 OpCapability CooperativeVectorNV OpExtension "SPV_NV_cooperative_vector" -OpExtension "SPV_KHR_vulkan_memory_model" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" %void = OpTypeVoid
diff --git a/test/val/val_conversion_test.cpp b/test/val/val_conversion_test.cpp index 69d4045..52d40d3 100644 --- a/test/val/val_conversion_test.cpp +++ b/test/val/val_conversion_test.cpp
@@ -1196,9 +1196,10 @@ OpCapability Float16 OpCapability Int16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -1263,8 +1264,8 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateConversion, CoopMatKHRConversionUseMismatchFail) { @@ -1273,9 +1274,10 @@ OpCapability Float16 OpCapability Int16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -1308,8 +1310,9 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr("Expected Use of Matrix type and Result Type to be identical")); @@ -1321,9 +1324,10 @@ OpCapability Float16 OpCapability Int16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -1356,8 +1360,9 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr("Expected scopes of Matrix and Result Type to be identical")); @@ -2147,10 +2152,11 @@ OpCapability Int16 OpCapability CooperativeMatrixConversionsNV OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_NV_cooperative_matrix2" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -2276,8 +2282,8 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateConversion, CoopMat2TransposeShapeFail) { @@ -2287,10 +2293,11 @@ OpCapability Int16 OpCapability CooperativeMatrixConversionsNV OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_NV_cooperative_matrix2" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -2319,8 +2326,9 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("Expected rows of Matrix type and Result Type to be " "swapped with columns")); @@ -2335,7 +2343,6 @@ OpCapability ReplicatedCompositesEXT OpExtension "SPV_NV_cooperative_vector" OpExtension "SPV_EXT_replicated_composites" -OpExtension "SPV_KHR_vulkan_memory_model" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" %void = OpTypeVoid @@ -2414,7 +2421,6 @@ OpCapability ReplicatedCompositesEXT OpExtension "SPV_NV_cooperative_vector" OpExtension "SPV_EXT_replicated_composites" -OpExtension "SPV_KHR_vulkan_memory_model" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" %void = OpTypeVoid
diff --git a/test/val/val_image_test.cpp b/test/val/val_image_test.cpp index 2a86c91..1376f6d 100644 --- a/test/val/val_image_test.cpp +++ b/test/val/val_image_test.cpp
@@ -1534,7 +1534,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -1668,7 +1669,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -2260,7 +2262,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -2408,7 +2411,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -2543,7 +2547,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -2699,7 +2704,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -2838,7 +2844,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -2976,7 +2983,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -3094,7 +3102,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -3111,7 +3120,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -3285,7 +3295,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -3589,7 +3600,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -5055,7 +5067,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -5183,7 +5196,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -5277,7 +5291,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -5494,7 +5509,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -5635,7 +5651,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -5652,7 +5669,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -5671,7 +5689,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( @@ -5693,7 +5712,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), @@ -5714,7 +5734,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -5733,7 +5754,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), @@ -5754,7 +5776,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), @@ -5775,7 +5798,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( @@ -5798,7 +5822,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } @@ -5815,7 +5840,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( @@ -5838,7 +5864,8 @@ )"; CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", "", SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") - .c_str()); + .c_str(), + SPV_ENV_UNIVERSAL_1_3); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); }
diff --git a/test/val/val_memory_test.cpp b/test/val/val_memory_test.cpp index 4a31035..15b1663 100644 --- a/test/val/val_memory_test.cpp +++ b/test/val/val_memory_test.cpp
@@ -2712,9 +2712,10 @@ OpCapability Shader OpCapability Float16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -2737,8 +2738,8 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr( @@ -2752,9 +2753,10 @@ OpCapability Shader OpCapability Float16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -2776,8 +2778,8 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr("The Result Type of OpCooperativeMatrixLengthKHR <id> " @@ -2790,9 +2792,10 @@ OpCapability Shader OpCapability Float16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -2814,8 +2817,8 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr("The type in OpCooperativeMatrixLengthKHR <id> '5[%uint]' " @@ -2828,9 +2831,10 @@ OpCapability Shader OpCapability Float16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" %void = OpTypeVoid %func = OpTypeFunction %void @@ -2852,8 +2856,8 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, VulkanRTAOutsideOfStructBad) { @@ -5450,8 +5454,8 @@ OpReturn OpFunctionEnd )"; - CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_0); - EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_0)); + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_3)); EXPECT_THAT(getDiagnosticString(), AnyVUID(" VUID-StandaloneSpirv-OpVariable-04734")); EXPECT_THAT(getDiagnosticString(), @@ -5478,8 +5482,8 @@ OpReturn OpFunctionEnd )"; - CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_0); - EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_0)); + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_3)); } TEST_F(ValidateMemory, LoadRuntimeArray) { @@ -7554,8 +7558,8 @@ R"( )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2TensorLayoutInvalidDimFail) { @@ -7568,8 +7572,8 @@ R"( )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("must be between 1 and 5")); } @@ -7583,8 +7587,8 @@ R"( )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("must be a valid TensorClampMode")); } @@ -7601,8 +7605,8 @@ R"( )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("must be between 1 and 5")); } @@ -7618,8 +7622,8 @@ R"( )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("Permutation values don't form a valid permutation")); } @@ -7636,8 +7640,8 @@ R"( )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("Incorrect number of permutation values.")); } @@ -7655,8 +7659,8 @@ %tl2 = OpTensorLayoutSetBlockSizeNV %layout %tl %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2TensorLayoutBlockSizeFail) { @@ -7672,8 +7676,8 @@ %tl2 = OpTensorLayoutSetBlockSizeNV %layout %tl %b %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("unexpected number of operands")); } @@ -7691,8 +7695,8 @@ %tl2 = OpTensorLayoutSetDimensionNV %layout %tl %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2TensorLayoutDimensionFail) { @@ -7708,8 +7712,8 @@ %tl2 = OpTensorLayoutSetDimensionNV %layout %tl %b %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("unexpected number of operands")); } @@ -7727,8 +7731,8 @@ %tl2 = OpTensorLayoutSetStrideNV %layout %tl %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2TensorLayoutStrideFail) { @@ -7744,8 +7748,8 @@ %tl2 = OpTensorLayoutSetStrideNV %layout %tl %b %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("unexpected number of operands")); } @@ -7763,8 +7767,8 @@ %tl2 = OpTensorLayoutSliceNV %layout %tl %b %b %b %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2TensorLayoutSliceFail) { @@ -7780,8 +7784,8 @@ %tl2 = OpTensorLayoutSliceNV %layout %tl %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("unexpected number of operands")); } @@ -7799,8 +7803,8 @@ %tl2 = OpTensorLayoutSetClampValueNV %layout %tl %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2TensorViewDimensionPass) { @@ -7819,8 +7823,8 @@ %tv2 = OpTensorViewSetDimensionNV %view %tv %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2TensorViewDimensionFail) { @@ -7839,8 +7843,8 @@ %tv2 = OpTensorViewSetDimensionNV %view %tv %b %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("unexpected number of operands")); } @@ -7861,8 +7865,8 @@ %tv2 = OpTensorViewSetStrideNV %view %tv %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2TensorViewStrideFail) { @@ -7881,8 +7885,8 @@ %tv2 = OpTensorViewSetStrideNV %view %tv %b %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("unexpected number of operands")); } @@ -7903,8 +7907,8 @@ %tv2 = OpTensorViewSetClipNV %view %tv %b %b %b %b )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2LoadStoreTensorPass) { @@ -7934,8 +7938,8 @@ OpCooperativeMatrixStoreTensorNV %array_ptr %mat %tl Aligned 4 TensorView %tv )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateMemory, CoopMat2LoadTensorWrongLayoutTypeFail) { @@ -7956,8 +7960,8 @@ %mat2 = OpCooperativeMatrixLoadTensorNV %f16mat %array_ptr %mat %tv None None )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("does not have a tensor layout type")); } @@ -7980,8 +7984,8 @@ %mat2 = OpCooperativeMatrixLoadTensorNV %f16mat %array_ptr %mat %tl None None )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("type does not match Result Type")); } @@ -8004,8 +8008,8 @@ %mat2 = OpCooperativeMatrixLoadTensorNV %f32mat %array_ptr %mat %tl None DecodeFunc %decodefunc )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("return type must match matrix component type")); } @@ -8043,8 +8047,8 @@ OpDecorate %psb2 Restrict )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT(getDiagnosticString(), HasSubstr("dimension equal to the tensor dimension")); } @@ -8078,8 +8082,8 @@ OpFunctionEnd )"); - CompileSuccessfully(spirv.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(spirv.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr("first parameter must be pointer to PhysicalStorageBuffer")); @@ -8241,8 +8245,8 @@ OpReturn OpFunctionEnd)"; - CompileSuccessfully(body.c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + CompileSuccessfully(body.c_str(), SPV_ENV_UNIVERSAL_1_3); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), HasSubstr(
diff --git a/test/val/val_misc_test.cpp b/test/val/val_misc_test.cpp index 2188e03..f645512 100644 --- a/test/val/val_misc_test.cpp +++ b/test/val/val_misc_test.cpp
@@ -378,9 +378,10 @@ OpCapability Float16 OpCapability Int16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" OpExecutionModeId %main LocalSizeId %u32_16 %u32_16 %u32_16 %void = OpTypeVoid @@ -411,9 +412,10 @@ OpCapability Float16 OpCapability Int16 OpCapability CooperativeMatrixKHR +OpCapability VulkanMemoryModelKHR OpExtension "SPV_KHR_cooperative_matrix" OpExtension "SPV_KHR_vulkan_memory_model" -OpMemoryModel Logical GLSL450 +OpMemoryModel Logical VulkanKHR OpEntryPoint GLCompute %main "main" OpExecutionModeId %main LocalSizeId %u32_16 %u32_8 %u32_16 %void = OpTypeVoid
diff --git a/test/val/val_opencl_test.cpp b/test/val/val_opencl_test.cpp index 9dab931..2f7526e 100644 --- a/test/val/val_opencl_test.cpp +++ b/test/val/val_opencl_test.cpp
@@ -43,23 +43,6 @@ "OpenCL\n")); } -TEST_F(ValidateOpenCL, NonOpenCLMemoryModelBad) { - std::string spirv = R"( - OpCapability Kernel - OpCapability Addresses - OpCapability VulkanMemoryModelKHR - OpExtension "SPV_KHR_vulkan_memory_model" - OpMemoryModel Physical32 VulkanKHR -)"; - - CompileSuccessfully(spirv); - - EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_OPENCL_1_2)); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("Memory model must be OpenCL in the OpenCL environment.")); -} - TEST_F(ValidateOpenCL, NonVoidSampledTypeImageBad) { std::string spirv = R"( OpCapability Addresses