spirv-val: Label Interface Location/Component VUIDs (#5221)
diff --git a/source/val/validate_interfaces.cpp b/source/val/validate_interfaces.cpp
index 3566698..48f9e7d 100644
--- a/source/val/validate_interfaces.cpp
+++ b/source/val/validate_interfaces.cpp
@@ -388,6 +388,7 @@
for (uint32_t i = start; i < end; ++i) {
if (!locs->insert(i).second) {
return _.diag(SPV_ERROR_INVALID_DATA, entry_point)
+ << (is_output ? _.VkErrorID(8722) : _.VkErrorID(8721))
<< "Entry-point has conflicting " << storage_class
<< " location assignment at location " << i / 4
<< ", component " << i % 4;
@@ -459,6 +460,7 @@
uint32_t check = 4 * l + c;
if (!locations->insert(check).second) {
return _.diag(SPV_ERROR_INVALID_DATA, entry_point)
+ << (is_output ? _.VkErrorID(8722) : _.VkErrorID(8721))
<< "Entry-point has conflicting " << storage_class
<< " location assignment at location " << l
<< ", component " << c;
@@ -476,6 +478,7 @@
for (uint32_t l = start; l < end; ++l) {
if (!locations->insert(l).second) {
return _.diag(SPV_ERROR_INVALID_DATA, entry_point)
+ << (is_output ? _.VkErrorID(8722) : _.VkErrorID(8721))
<< "Entry-point has conflicting " << storage_class
<< " location assignment at location " << l / 4
<< ", component " << l % 4;
diff --git a/source/val/validation_state.cpp b/source/val/validation_state.cpp
index dbf0ba6..6072589 100644
--- a/source/val/validation_state.cpp
+++ b/source/val/validation_state.cpp
@@ -2180,6 +2180,10 @@
return VUID_WRAP(VUID-StandaloneSpirv-Component-07703);
case 7951:
return VUID_WRAP(VUID-StandaloneSpirv-SubgroupVoteKHR-07951);
+ case 8721:
+ return VUID_WRAP(VUID-StandaloneSpirv-OpEntryPoint-08721);
+ case 8722:
+ return VUID_WRAP(VUID-StandaloneSpirv-OpEntryPoint-08722);
default:
return ""; // unknown id
}
diff --git a/test/val/val_interfaces_test.cpp b/test/val/val_interfaces_test.cpp
index 1756528..39c6739 100644
--- a/test/val/val_interfaces_test.cpp
+++ b/test/val/val_interfaces_test.cpp
@@ -584,6 +584,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 0"));
}
@@ -611,6 +613,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
+ EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08722"));
EXPECT_THAT(
getDiagnosticString(),
HasSubstr("Entry-point has conflicting output location assignment "
@@ -699,6 +703,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 1"));
}
@@ -732,6 +738,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 1"));
}
@@ -762,6 +770,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 1"));
}
@@ -792,6 +802,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 2"));
}
@@ -822,6 +834,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 3"));
}
@@ -854,6 +868,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 1"));
}
@@ -886,6 +902,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 5"));
}
@@ -918,6 +936,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 7"));
}
@@ -950,6 +970,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 1"));
}
@@ -982,6 +1004,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 3"));
}
@@ -1016,6 +1040,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 15"));
}
@@ -1075,6 +1101,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08721"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting input location assignment "
"at location 1, component 1"));
}
@@ -1189,6 +1217,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
+ EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08722"));
EXPECT_THAT(
getDiagnosticString(),
HasSubstr("Entry-point has conflicting output location assignment "
@@ -1359,6 +1389,8 @@
CompileSuccessfully(text, SPV_ENV_VULKAN_1_0);
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
EXPECT_THAT(getDiagnosticString(),
+ AnyVUID("VUID-StandaloneSpirv-OpEntryPoint-08722"));
+ EXPECT_THAT(getDiagnosticString(),
HasSubstr("Entry-point has conflicting output location "
"assignment at location 1, component 1"));
}