mirror of
https://gitee.com/openharmony/third_party_spirv-tools
synced 2025-02-24 16:50:39 +00:00
Validate that VertexId and InstanceId are not allowed in Vulkan. (#2036)
The Vulkan specification does not permit use of the VertexId and InstanceId BuiltIn decorations, so add a check to ensure they are not being used when the target environment is Vulkan.
This commit is contained in:
parent
f343a15764
commit
2b1f6b373c
@ -167,6 +167,8 @@ class BuiltInsValidator {
|
||||
const Instruction& inst);
|
||||
spv_result_t ValidateVertexIndexAtDefinition(const Decoration& decoration,
|
||||
const Instruction& inst);
|
||||
spv_result_t ValidateVertexIdOrInstanceIdAtDefinition(
|
||||
const Instruction& inst);
|
||||
spv_result_t ValidateWorkgroupSizeAtDefinition(const Decoration& decoration,
|
||||
const Instruction& inst);
|
||||
// Used for GlobalInvocationId, LocalInvocationId, NumWorkgroups, WorkgroupId.
|
||||
@ -2085,6 +2087,17 @@ spv_result_t BuiltInsValidator::ValidateVertexIndexAtDefinition(
|
||||
return ValidateVertexIndexAtReference(decoration, inst, inst, inst);
|
||||
}
|
||||
|
||||
spv_result_t BuiltInsValidator::ValidateVertexIdOrInstanceIdAtDefinition(
|
||||
const Instruction& inst) {
|
||||
if (spvIsVulkanEnv(_.context()->target_env)) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, &inst)
|
||||
<< "Vulkan spec doesn't allow BuiltIn VertexId/InstanceId "
|
||||
"to be used.";
|
||||
}
|
||||
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
|
||||
spv_result_t BuiltInsValidator::ValidateVertexIndexAtReference(
|
||||
const Decoration& decoration, const Instruction& built_in_inst,
|
||||
const Instruction& referenced_inst,
|
||||
@ -2441,7 +2454,9 @@ spv_result_t BuiltInsValidator::ValidateSingleBuiltInAtDefinition(
|
||||
return ValidateWorkgroupSizeAtDefinition(decoration, inst);
|
||||
}
|
||||
case SpvBuiltInVertexId:
|
||||
case SpvBuiltInInstanceId:
|
||||
case SpvBuiltInInstanceId: {
|
||||
return ValidateVertexIdOrInstanceIdAtDefinition(inst);
|
||||
}
|
||||
case SpvBuiltInLocalInvocationIndex:
|
||||
case SpvBuiltInWorkDim:
|
||||
case SpvBuiltInGlobalSize:
|
||||
|
@ -446,6 +446,16 @@ INSTANTIATE_TEST_CASE_P(
|
||||
"execution model is Fragment.",
|
||||
"which is called with execution model Fragment."))), );
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(
|
||||
VertexIdAndInstanceIdVertexInput,
|
||||
ValidateVulkanCombineBuiltInExecutionModelDataTypeResult,
|
||||
Combine(Values("VertexId", "InstanceId"), Values("Vertex"), Values("Input"),
|
||||
Values("%u32"),
|
||||
Values(TestResult(
|
||||
SPV_ERROR_INVALID_DATA,
|
||||
"Vulkan spec doesn't allow BuiltIn VertexId/InstanceId to be "
|
||||
"used."))), );
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(
|
||||
ClipAndCullDistanceVertexInput,
|
||||
ValidateVulkanCombineBuiltInExecutionModelDataTypeResult,
|
||||
|
Loading…
x
Reference in New Issue
Block a user