Skip to content

Commit

Permalink
Allow OpTypeBool in UniformConstant (#5237)
Browse files Browse the repository at this point in the history
See KhronosGroup/SPIRV-Registry#72

* OpenGL allowed uniforms to be declared with boolean types, but the
  validator was overly strict in disallowing it
  • Loading branch information
alan-baker committed Jun 6, 2023
1 parent 5ed21eb commit 59b4feb
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 3 deletions.
5 changes: 3 additions & 2 deletions source/val/validate_memory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,7 @@ spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) {
storage_class != spv::StorageClass::CrossWorkgroup &&
storage_class != spv::StorageClass::Private &&
storage_class != spv::StorageClass::Function &&
storage_class != spv::StorageClass::UniformConstant &&
storage_class != spv::StorageClass::RayPayloadKHR &&
storage_class != spv::StorageClass::IncomingRayPayloadKHR &&
storage_class != spv::StorageClass::HitAttributeKHR &&
Expand Down Expand Up @@ -475,8 +476,8 @@ spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) {
"can only be used with non-externally visible shader Storage "
"Classes: Workgroup, CrossWorkgroup, Private, Function, "
"Input, Output, RayPayloadKHR, IncomingRayPayloadKHR, "
"HitAttributeKHR, CallableDataKHR, or "
"IncomingCallableDataKHR";
"HitAttributeKHR, CallableDataKHR, "
"IncomingCallableDataKHR, or UniformConstant";
}
}
}
Expand Down
21 changes: 20 additions & 1 deletion test/val/val_id_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2317,7 +2317,7 @@ OpFunctionEnd
"be used with non-externally visible shader Storage Classes: "
"Workgroup, CrossWorkgroup, Private, Function, Input, Output, "
"RayPayloadKHR, IncomingRayPayloadKHR, HitAttributeKHR, "
"CallableDataKHR, or IncomingCallableDataKHR")));
"CallableDataKHR, IncomingCallableDataKHR, or UniformConstant")));
}

TEST_P(ValidateIdWithMessage, OpVariableContainsBoolPrivateGood) {
Expand All @@ -2339,6 +2339,25 @@ OpFunctionEnd
EXPECT_EQ(SPV_SUCCESS, ValidateInstructions());
}

TEST_P(ValidateIdWithMessage, OpVariableContainsBoolUniformConstantGood) {
std::string spirv = kGLSL450MemoryModel + R"(
%bool = OpTypeBool
%int = OpTypeInt 32 0
%block = OpTypeStruct %bool %int
%_ptr_UniformConstant_block = OpTypePointer UniformConstant %block
%var = OpVariable %_ptr_UniformConstant_block UniformConstant
%void = OpTypeVoid
%fnty = OpTypeFunction %void
%main = OpFunction %void None %fnty
%entry = OpLabel
%load = OpLoad %block %var
OpReturn
OpFunctionEnd
)";
CompileSuccessfully(spirv.c_str());
EXPECT_EQ(SPV_SUCCESS, ValidateInstructions());
}

TEST_P(ValidateIdWithMessage, OpVariableContainsBoolPointerGood) {
std::string spirv = kGLSL450MemoryModel + R"(
%bool = OpTypeBool
Expand Down

0 comments on commit 59b4feb

Please sign in to comment.