@@ -41,58 +41,111 @@ void RegisterRayQueryValidation(Validator &gpuav, CommandBufferSubState &cb) {
4141 std::ostringstream strm;
4242
4343 const uint32_t error_sub_code = GetSubError (error_record);
44+ // opcode_type: 0 = OpRayQueryInitializeKHR, 1 = OpHitObjectTraceRayEXT, 2 = OpHitObjectTraceReorderExecuteEXT,
45+ // 3 = OpHitObjectTraceRayMotionEXT, 4 = OpHitObjectTraceMotionReorderExecuteEXT
46+ const uint32_t opcode_type = error_record[kInstRayQueryOpcodeType ];
47+ const bool is_hit_object = (opcode_type >= 1 );
48+ const char * opcode_name = " OpRayQueryInitializeKHR" ;
49+ if (opcode_type == 1 ) {
50+ opcode_name = " OpHitObjectTraceRayEXT" ;
51+ } else if (opcode_type == 2 ) {
52+ opcode_name = " OpHitObjectTraceReorderExecuteEXT" ;
53+ } else if (opcode_type == 3 ) {
54+ opcode_name = " OpHitObjectTraceRayMotionEXT" ;
55+ } else if (opcode_type == 4 ) {
56+ opcode_name = " OpHitObjectTraceMotionReorderExecuteEXT" ;
57+ }
58+
4459 switch (error_sub_code) {
4560 case kErrorSubCodeRayQueryNegativeMin : {
4661 // TODO - Figure a way to properly use GLSL floatBitsToUint and print the float values
47- strm << " OpRayQueryInitializeKHR operand Ray Tmin value is negative. " ;
48- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06349" ;
62+ strm << opcode_name << " operand Ray Tmin value is negative. " ;
63+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11879"
64+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06349" ;
4965 } break ;
5066 case kErrorSubCodeRayQueryNegativeMax : {
51- strm << " OpRayQueryInitializeKHR operand Ray Tmax value is negative. " ;
52- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06349" ;
67+ strm << opcode_name << " operand Ray Tmax value is negative. " ;
68+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11879"
69+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06349" ;
5370 } break ;
5471 case kErrorSubCodeRayQueryMinMax : {
55- strm << " OpRayQueryInitializeKHR operand Ray Tmax is less than RayTmin. " ;
56- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06350" ;
72+ strm << opcode_name << " operand Ray Tmax is less than RayTmin. " ;
73+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11880"
74+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06350" ;
5775 } break ;
5876 case kErrorSubCodeRayQueryMinNaN : {
59- strm << " OpRayQueryInitializeKHR operand Ray Tmin is NaN. " ;
60- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351" ;
77+ strm << opcode_name << " operand Ray Tmin is NaN. " ;
78+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11881"
79+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351" ;
6180 } break ;
6281 case kErrorSubCodeRayQueryMaxNaN : {
63- strm << " OpRayQueryInitializeKHR operand Ray Tmax is NaN. " ;
64- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351" ;
82+ strm << opcode_name << " operand Ray Tmax is NaN. " ;
83+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11881"
84+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351" ;
6585 } break ;
6686 case kErrorSubCodeRayQueryOriginNaN : {
67- strm << " OpRayQueryInitializeKHR operand Ray Origin contains a NaN. " ;
68- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351" ;
87+ strm << opcode_name << " operand Ray Origin contains a NaN. " ;
88+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11881"
89+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351" ;
6990 } break ;
7091 case kErrorSubCodeRayQueryDirectionNaN : {
71- strm << " OpRayQueryInitializeKHR operand Ray Direction contains a NaN. " ;
72- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351" ;
92+ strm << opcode_name << " operand Ray Direction contains a NaN. " ;
93+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11881"
94+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351" ;
7395 } break ;
7496 case kErrorSubCodeRayQueryOriginFinite : {
75- strm << " OpRayQueryInitializeKHR operand Ray Origin contains a non-finite value. " ;
76- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06348" ;
97+ strm << opcode_name << " operand Ray Origin contains a non-finite value. " ;
98+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11878"
99+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06348" ;
77100 } break ;
78101 case kErrorSubCodeRayQueryDirectionFinite : {
79- strm << " OpRayQueryInitializeKHR operand Ray Direction contains a non-finite value. " ;
80- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06348" ;
102+ strm << opcode_name << " operand Ray Direction contains a non-finite value. " ;
103+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11878"
104+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06348" ;
81105 } break ;
82106 case kErrorSubCodeRayQueryBothSkip : {
83107 const uint32_t value = error_record[kInstRayQueryParamOffset_0 ];
84- strm << " OpRayQueryInitializeKHR operand Ray Flags is 0x" << std::hex << value << " . " ;
85- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06889" ;
108+ strm << opcode_name << " operand Ray Flags is 0x" << std::hex << value << " . " ;
109+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11883"
110+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06889" ;
86111 } break ;
87112 case kErrorSubCodeRayQuerySkipCull : {
88113 const uint32_t value = error_record[kInstRayQueryParamOffset_0 ];
89- strm << " OpRayQueryInitializeKHR operand Ray Flags is 0x" << std::hex << value << " . " ;
90- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06890" ;
114+ strm << opcode_name << " operand Ray Flags is 0x" << std::hex << value << " . " ;
115+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11884"
116+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06890" ;
91117 } break ;
92118 case kErrorSubCodeRayQueryOpaque : {
93119 const uint32_t value = error_record[kInstRayQueryParamOffset_0 ];
94- strm << " OpRayQueryInitializeKHR operand Ray Flags is 0x" << std::hex << value << " . " ;
95- out_vuid_msg = " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06891" ;
120+ strm << opcode_name << " operand Ray Flags is 0x" << std::hex << value << " . " ;
121+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11885"
122+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06891" ;
123+ } break ;
124+ case kErrorSubCodeRayQuerySkipTrianglesWithPipelineSkipAABBs : {
125+ const uint32_t value = error_record[kInstRayQueryParamOffset_0 ];
126+ strm << opcode_name << " operand Ray Flags (0x" << std::hex << value
127+ << " ) contains SkipTrianglesKHR, but pipeline was created with VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR. " ;
128+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11886"
129+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06553" ;
130+ } break ;
131+ case kErrorSubCodeRayQuerySkipAABBsWithPipelineSkipTriangles : {
132+ const uint32_t value = error_record[kInstRayQueryParamOffset_0 ];
133+ strm << opcode_name << " operand Ray Flags (0x" << std::hex << value
134+ << " ) contains SkipAABBsKHR, but pipeline was created with VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR. " ;
135+ out_vuid_msg = is_hit_object ? " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11887"
136+ : " VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06554" ;
137+ } break ;
138+ case kErrorSubCodeRayQuerySBTIndexExceedsLimit : {
139+ // For this case, param_0 contains the SBT index and opcode_type slot contains the max SBT index
140+ const uint32_t sbt_index = error_record[kInstRayQueryParamOffset_0 ];
141+ const uint32_t max_sbt_index = error_record[kInstRayQueryOpcodeType ];
142+ strm << " OpHitObjectSetShaderBindingTableRecordIndexEXT SBT index (" << std::dec << sbt_index
143+ << " ) exceeds VkPhysicalDeviceRayTracingInvocationReorderPropertiesEXT::maxShaderBindingTableRecordIndex (" << max_sbt_index << " ). " ;
144+ out_vuid_msg = " VUID-RuntimeSpirv-maxShaderBindingTableRecordIndex-11888" ;
145+ } break ;
146+ case kErrorSubCodeRayQueryTimeOutOfRange : {
147+ strm << opcode_name << " operand time is not between 0.0 and 1.0. " ;
148+ out_vuid_msg = " VUID-RuntimeSpirv-OpHitObjectTraceRayEXT-11882" ;
96149 } break ;
97150 default :
98151 error_found = false ;
0 commit comments