spirv-val: Add last Position VUID (#4052)
diff --git a/source/val/validate_builtins.cpp b/source/val/validate_builtins.cpp
index 1d8a140..86adac9 100644
--- a/source/val/validate_builtins.cpp
+++ b/source/val/validate_builtins.cpp
@@ -1869,7 +1869,7 @@
storage_class != SpvStorageClassInput &&
storage_class != SpvStorageClassOutput) {
return _.diag(SPV_ERROR_INVALID_DATA, &referenced_from_inst)
- << "Vulkan spec allows BuiltIn Position to be only used for "
+ << _.VkErrorID(4320) << "Vulkan spec allows BuiltIn Position to be only used for "
"variables with Input or Output storage class. "
<< GetReferenceDesc(decoration, built_in_inst, referenced_inst,
referenced_from_inst)
@@ -1879,12 +1879,19 @@
if (storage_class == SpvStorageClassInput) {
assert(function_id_ == 0);
id_to_at_reference_checks_[referenced_from_inst.id()].push_back(std::bind(
- &BuiltInsValidator::ValidateNotCalledWithExecutionModel, this, 4320,
+ &BuiltInsValidator::ValidateNotCalledWithExecutionModel, this, 4319,
"Vulkan spec doesn't allow BuiltIn Position to be used "
"for variables "
"with Input storage class if execution model is Vertex.",
SpvExecutionModelVertex, decoration, built_in_inst,
referenced_from_inst, std::placeholders::_1));
+ id_to_at_reference_checks_[referenced_from_inst.id()].push_back(std::bind(
+ &BuiltInsValidator::ValidateNotCalledWithExecutionModel, this, 4319,
+ "Vulkan spec doesn't allow BuiltIn Position to be used "
+ "for variables "
+ "with Input storage class if execution model is MeshNV.",
+ SpvExecutionModelMeshNV, decoration, built_in_inst,
+ referenced_from_inst, std::placeholders::_1));
}
for (const SpvExecutionModel execution_model : execution_models_) {
diff --git a/source/val/validation_state.cpp b/source/val/validation_state.cpp
index 06abb54..bf756fe 100644
--- a/source/val/validation_state.cpp
+++ b/source/val/validation_state.cpp
@@ -1477,6 +1477,8 @@
return VUID_WRAP(VUID-PointSize-PointSize-04317);
case 4318:
return VUID_WRAP(VUID-Position-Position-04318);
+ case 4319:
+ return VUID_WRAP(VUID-Position-Position-04319);
case 4320:
return VUID_WRAP(VUID-Position-Position-04320);
case 4321:
diff --git a/test/val/val_builtins_test.cpp b/test/val/val_builtins_test.cpp
index 936279a..3fc06fb 100644
--- a/test/val/val_builtins_test.cpp
+++ b/test/val/val_builtins_test.cpp
@@ -1540,10 +1540,22 @@
"for variables with Output storage class"))));
INSTANTIATE_TEST_SUITE_P(
+ PositionInvalidStorageClass,
+ ValidateVulkanCombineBuiltInExecutionModelDataTypeResult,
+ Combine(Values("Position"),
+ Values("Geometry", "TessellationControl", "TessellationEvaluation"),
+ Values("Private"), Values("%f32vec4"),
+ Values("VUID-Position-Position-04320"),
+ Values(TestResult(
+ SPV_ERROR_INVALID_DATA,
+ "Vulkan spec allows BuiltIn Position to be only used for "
+ "variables with Input or Output storage class."))));
+
+INSTANTIATE_TEST_SUITE_P(
PositionVertexInput,
ValidateVulkanCombineBuiltInExecutionModelDataTypeResult,
Combine(Values("Position"), Values("Vertex"), Values("Input"),
- Values("%f32vec4"), Values("VUID-Position-Position-04320"),
+ Values("%f32vec4"), Values("VUID-Position-Position-04319"),
Values(TestResult(
SPV_ERROR_INVALID_DATA,
"Vulkan spec doesn't allow BuiltIn Position "