spirv-val: Add last TessLevelOuter and TessLevelInner VUID (#4055)
diff --git a/source/val/validate_builtins.cpp b/source/val/validate_builtins.cpp
index 9a3e481..d85d1f0 100644
--- a/source/val/validate_builtins.cpp
+++ b/source/val/validate_builtins.cpp
@@ -2475,8 +2475,9 @@
if (storage_class == SpvStorageClassInput) {
assert(function_id_ == 0);
+ uint32_t vuid = (decoration.params()[0] == SpvBuiltInTessLevelOuter) ? 4391 : 4395;
id_to_at_reference_checks_[referenced_from_inst.id()].push_back(std::bind(
- &BuiltInsValidator::ValidateNotCalledWithExecutionModel, this, -1,
+ &BuiltInsValidator::ValidateNotCalledWithExecutionModel, this, vuid,
"Vulkan spec doesn't allow TessLevelOuter/TessLevelInner to be "
"used "
"for variables with Input storage class if execution model is "
@@ -2487,8 +2488,9 @@
if (storage_class == SpvStorageClassOutput) {
assert(function_id_ == 0);
+ uint32_t vuid = (decoration.params()[0] == SpvBuiltInTessLevelOuter) ? 4392 : 4396;
id_to_at_reference_checks_[referenced_from_inst.id()].push_back(std::bind(
- &BuiltInsValidator::ValidateNotCalledWithExecutionModel, this, -1,
+ &BuiltInsValidator::ValidateNotCalledWithExecutionModel, this, vuid,
"Vulkan spec doesn't allow TessLevelOuter/TessLevelInner to be "
"used "
"for variables with Output storage class if execution model is "
diff --git a/source/val/validation_state.cpp b/source/val/validation_state.cpp
index 50c1240..1d67345 100644
--- a/source/val/validation_state.cpp
+++ b/source/val/validation_state.cpp
@@ -1547,10 +1547,18 @@
return VUID_WRAP(VUID-TessCoord-TessCoord-04389);
case 4390:
return VUID_WRAP(VUID-TessLevelOuter-TessLevelOuter-04390);
+ case 4391:
+ return VUID_WRAP(VUID-TessLevelOuter-TessLevelOuter-04391);
+ case 4392:
+ return VUID_WRAP(VUID-TessLevelOuter-TessLevelOuter-04392);
case 4393:
return VUID_WRAP(VUID-TessLevelOuter-TessLevelOuter-04393);
case 4394:
return VUID_WRAP(VUID-TessLevelInner-TessLevelInner-04394);
+ case 4395:
+ return VUID_WRAP(VUID-TessLevelInner-TessLevelInner-04395);
+ case 4396:
+ return VUID_WRAP(VUID-TessLevelInner-TessLevelInner-04396);
case 4397:
return VUID_WRAP(VUID-TessLevelInner-TessLevelInner-04397);
case 4398:
diff --git a/test/val/val_builtins_test.cpp b/test/val/val_builtins_test.cpp
index f0cd382..cce3cd5 100644
--- a/test/val/val_builtins_test.cpp
+++ b/test/val/val_builtins_test.cpp
@@ -1949,7 +1949,8 @@
TessLevelOuterOutputTese,
ValidateVulkanCombineBuiltInExecutionModelDataTypeResult,
Combine(Values("TessLevelOuter"), Values("TessellationEvaluation"),
- Values("Output"), Values("%f32arr4"), Values(nullptr),
+ Values("Output"), Values("%f32arr4"),
+ Values("VUID-TessLevelOuter-TessLevelOuter-04392"),
Values(TestResult(
SPV_ERROR_INVALID_DATA,
"Vulkan spec doesn't allow TessLevelOuter/TessLevelInner to be "
@@ -1960,7 +1961,8 @@
TessLevelOuterInputTesc,
ValidateVulkanCombineBuiltInExecutionModelDataTypeResult,
Combine(Values("TessLevelOuter"), Values("TessellationControl"),
- Values("Input"), Values("%f32arr4"), Values(nullptr),
+ Values("Input"), Values("%f32arr4"),
+ Values("VUID-TessLevelOuter-TessLevelOuter-04391"),
Values(TestResult(
SPV_ERROR_INVALID_DATA,
"Vulkan spec doesn't allow TessLevelOuter/TessLevelInner to be "
@@ -2036,7 +2038,8 @@
TessLevelInnerOutputTese,
ValidateVulkanCombineBuiltInExecutionModelDataTypeResult,
Combine(Values("TessLevelInner"), Values("TessellationEvaluation"),
- Values("Output"), Values("%f32arr2"), Values(nullptr),
+ Values("Output"), Values("%f32arr2"),
+ Values("VUID-TessLevelInner-TessLevelInner-04396"),
Values(TestResult(
SPV_ERROR_INVALID_DATA,
"Vulkan spec doesn't allow TessLevelOuter/TessLevelInner to be "
@@ -2047,7 +2050,8 @@
TessLevelInnerInputTesc,
ValidateVulkanCombineBuiltInExecutionModelDataTypeResult,
Combine(Values("TessLevelInner"), Values("TessellationControl"),
- Values("Input"), Values("%f32arr2"), Values(nullptr),
+ Values("Input"), Values("%f32arr2"),
+ Values("VUID-TessLevelInner-TessLevelInner-04395"),
Values(TestResult(
SPV_ERROR_INVALID_DATA,
"Vulkan spec doesn't allow TessLevelOuter/TessLevelInner to be "