mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-10-19 03:20:14 +00:00
spirv-val: Add Vulkan Group Operation VUID (#4086)
This commit is contained in:
parent
17ffa89097
commit
1bb80d2778
@ -47,6 +47,19 @@ spv_result_t ValidateGroupNonUniformBallotBitCount(ValidationState_t& _,
|
|||||||
"vector of four components "
|
"vector of four components "
|
||||||
"of integer type scalar";
|
"of integer type scalar";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto group = inst->GetOperandAs<uint32_t>(3);
|
||||||
|
if (spvIsVulkanEnv(_.context()->target_env)) {
|
||||||
|
if ((group != SpvGroupOperationReduce) &&
|
||||||
|
(group != SpvGroupOperationInclusiveScan) &&
|
||||||
|
(group != SpvGroupOperationExclusiveScan)) {
|
||||||
|
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||||
|
<< _.VkErrorID(4685)
|
||||||
|
<< "In Vulkan: The OpGroupNonUniformBallotBitCount group "
|
||||||
|
"operation must be only: Reduce, InclusiveScan, or "
|
||||||
|
"ExclusiveScan.";
|
||||||
|
}
|
||||||
|
}
|
||||||
return SPV_SUCCESS;
|
return SPV_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1667,6 +1667,8 @@ std::string ValidationState_t::VkErrorID(uint32_t id,
|
|||||||
return VUID_WRAP(VUID-ShadingRateKHR-ShadingRateKHR-04492);
|
return VUID_WRAP(VUID-ShadingRateKHR-ShadingRateKHR-04492);
|
||||||
case 4633:
|
case 4633:
|
||||||
return VUID_WRAP(VUID-StandaloneSpirv-None-04633);
|
return VUID_WRAP(VUID-StandaloneSpirv-None-04633);
|
||||||
|
case 4685:
|
||||||
|
return VUID_WRAP(VUID-StandaloneSpirv-OpGroupNonUniformBallotBitCount-04685);
|
||||||
default:
|
default:
|
||||||
return ""; // unknown id
|
return ""; // unknown id
|
||||||
};
|
};
|
||||||
|
@ -100,6 +100,7 @@ OpFunctionEnd)";
|
|||||||
SpvScope scopes[] = {SpvScopeCrossDevice, SpvScopeDevice, SpvScopeWorkgroup,
|
SpvScope scopes[] = {SpvScopeCrossDevice, SpvScopeDevice, SpvScopeWorkgroup,
|
||||||
SpvScopeSubgroup, SpvScopeInvocation};
|
SpvScopeSubgroup, SpvScopeInvocation};
|
||||||
|
|
||||||
|
using ValidateGroupNonUniform = spvtest::ValidateBase<bool>;
|
||||||
using GroupNonUniform = spvtest::ValidateBase<
|
using GroupNonUniform = spvtest::ValidateBase<
|
||||||
std::tuple<std::string, std::string, SpvScope, std::string, std::string>>;
|
std::tuple<std::string, std::string, SpvScope, std::string, std::string>>;
|
||||||
|
|
||||||
@ -288,6 +289,41 @@ INSTANTIATE_TEST_SUITE_P(GroupNonUniformBallotBitCountBadValue, GroupNonUniform,
|
|||||||
Values("Expected Value to be a vector of four "
|
Values("Expected Value to be a vector of four "
|
||||||
"components of integer type scalar")));
|
"components of integer type scalar")));
|
||||||
|
|
||||||
|
TEST_F(ValidateGroupNonUniform, VulkanGroupNonUniformBallotBitCountOperation) {
|
||||||
|
std::string test = R"(
|
||||||
|
OpCapability Shader
|
||||||
|
OpCapability GroupNonUniform
|
||||||
|
OpCapability GroupNonUniformBallot
|
||||||
|
OpCapability GroupNonUniformClustered
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%func = OpTypeFunction %void
|
||||||
|
%u32 = OpTypeInt 32 0
|
||||||
|
%u32vec4 = OpTypeVector %u32 4
|
||||||
|
%u32_0 = OpConstant %u32 0
|
||||||
|
%u32vec4_null = OpConstantComposite %u32vec4 %u32_0 %u32_0 %u32_0 %u32_0
|
||||||
|
%subgroup = OpConstant %u32 3
|
||||||
|
%main = OpFunction %void None %func
|
||||||
|
%main_entry = OpLabel
|
||||||
|
%result = OpGroupNonUniformBallotBitCount %u32 %subgroup ClusteredReduce %u32vec4_null
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
)";
|
||||||
|
|
||||||
|
CompileSuccessfully(test, SPV_ENV_VULKAN_1_1);
|
||||||
|
ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_1));
|
||||||
|
EXPECT_THAT(
|
||||||
|
getDiagnosticString(),
|
||||||
|
AnyVUID("VUID-StandaloneSpirv-OpGroupNonUniformBallotBitCount-04685"));
|
||||||
|
EXPECT_THAT(
|
||||||
|
getDiagnosticString(),
|
||||||
|
HasSubstr(
|
||||||
|
"In Vulkan: The OpGroupNonUniformBallotBitCount group operation must "
|
||||||
|
"be only: Reduce, InclusiveScan, or ExclusiveScan."));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace val
|
} // namespace val
|
||||||
} // namespace spvtools
|
} // namespace spvtools
|
||||||
|
Loading…
Reference in New Issue
Block a user