Skip to content

Commit 564f568

Browse files
committed
Update tools for spirv issue 373.
1 parent ff5c503 commit 564f568

2 files changed

Lines changed: 67 additions & 1 deletion

File tree

source/val/validate_ray_tracing_reorder.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,16 @@ spv_result_t RayReorderEXTPass(ValidationState_t& _, const Instruction* inst) {
991991
<< "Hit Object Attributes id must be a OpVariable of storage "
992992
"class HitObjectAttributeEXT";
993993
}
994+
995+
// Validate optional Hit Kind (operand 4)
996+
if (inst->operands().size() > 4) {
997+
const uint32_t hit_kind_type = _.GetOperandTypeId(inst, 4);
998+
if (!_.IsUnsignedIntScalarType(hit_kind_type) ||
999+
_.GetBitWidth(hit_kind_type) != 32) {
1000+
return _.diag(SPV_ERROR_INVALID_DATA, inst)
1001+
<< "Hit Kind must be a 32-bit unsigned int scalar";
1002+
}
1003+
}
9941004
break;
9951005
}
9961006

test/val/val_ray_tracing_reorder_test.cpp

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1447,7 +1447,8 @@ TEST_F(ValidateRayTracingReorderEXT,
14471447
EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_2));
14481448
}
14491449

1450-
TEST_F(ValidateRayTracingReorderEXT, HitObjectRecordFromQueryEXT) {
1450+
TEST_F(ValidateRayTracingReorderEXT,
1451+
HitObjectRecordFromQueryEXTWithoutHitKind) {
14511452
const std::string cap = R"(
14521453
OpCapability RayQueryKHR
14531454
)";
@@ -1472,6 +1473,61 @@ TEST_F(ValidateRayTracingReorderEXT, HitObjectRecordFromQueryEXT) {
14721473
EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_2));
14731474
}
14741475

1476+
TEST_F(ValidateRayTracingReorderEXT,
1477+
HitObjectRecordFromQueryEXTWithHitKind) {
1478+
const std::string cap = R"(
1479+
OpCapability RayQueryKHR
1480+
)";
1481+
const std::string extensions = R"(
1482+
OpExtension "SPV_KHR_ray_query"
1483+
)";
1484+
const std::string declarations = R"(
1485+
%uint = OpTypeInt 32 0
1486+
%uint_5 = OpConstant %uint 5
1487+
%uint_254 = OpConstant %uint 254
1488+
%rayquery_type = OpTypeRayQueryKHR
1489+
%_ptr_Function_rayquery = OpTypePointer Function %rayquery_type
1490+
)";
1491+
1492+
const std::string body = R"(
1493+
%ray_query = OpVariable %_ptr_Function_rayquery Function
1494+
OpHitObjectRecordFromQueryEXT %hObj %ray_query %uint_5 %attr %uint_254
1495+
)";
1496+
1497+
CompileSuccessfully(
1498+
GenerateReorderShaderCodeEXT(body, declarations, extensions, cap).c_str(),
1499+
SPV_ENV_VULKAN_1_2);
1500+
EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_2));
1501+
}
1502+
1503+
TEST_F(ValidateRayTracingReorderEXT,
1504+
HitObjectRecordFromQueryEXTHitKindWrongType) {
1505+
const std::string cap = R"(
1506+
OpCapability RayQueryKHR
1507+
)";
1508+
const std::string extensions = R"(
1509+
OpExtension "SPV_KHR_ray_query"
1510+
)";
1511+
const std::string declarations = R"(
1512+
%uint = OpTypeInt 32 0
1513+
%uint_5 = OpConstant %uint 5
1514+
%rayquery_type = OpTypeRayQueryKHR
1515+
%_ptr_Function_rayquery = OpTypePointer Function %rayquery_type
1516+
)";
1517+
1518+
const std::string body = R"(
1519+
%ray_query = OpVariable %_ptr_Function_rayquery Function
1520+
OpHitObjectRecordFromQueryEXT %hObj %ray_query %uint_5 %attr %float_1
1521+
)";
1522+
1523+
CompileSuccessfully(
1524+
GenerateReorderShaderCodeEXT(body, declarations, extensions, cap).c_str(),
1525+
SPV_ENV_VULKAN_1_2);
1526+
EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_2));
1527+
EXPECT_THAT(getDiagnosticString(),
1528+
HasSubstr("Hit Kind must be a 32-bit unsigned int scalar"));
1529+
}
1530+
14751531
TEST_F(ValidateRayTracingReorderEXT, HitObjectRecordMissMotionEXT) {
14761532
const std::string declarations = R"(
14771533
%uint = OpTypeInt 32 0

0 commit comments

Comments
 (0)