From 7a2a1623d808495c0889ea1d13bcba94c32e68ca Mon Sep 17 00:00:00 2001 From: Sajjad Mirza <90873047+sajjadmirzanv@users.noreply.github.com> Date: Wed, 14 Feb 2024 16:43:02 -0800 Subject: [PATCH] Emit debug info for accelerationStructure and rayQuery variables. (#3502) * Add debug info for accelerationStructure and rayQuery variables. * Add test case for accelerationStructure and rayQuery --- SPIRV/SpvBuilder.cpp | 21 +-- SPIRV/SpvBuilder.h | 2 - .../spv.debuginfo.rt_types.glsl.rgen.out | 167 ++++++++++++++++++ Test/spv.debuginfo.rt_types.glsl.rgen | 23 +++ gtests/Spv.FromFile.cpp | 1 + 5 files changed, 200 insertions(+), 14 deletions(-) create mode 100644 Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out create mode 100644 Test/spv.debuginfo.rt_types.glsl.rgen diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 694413ef..062a7c79 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -1176,6 +1176,10 @@ Id Builder::makeAccelerationStructureType() groupedTypes[OpTypeAccelerationStructureKHR].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) { + spv::Id debugType = makeCompositeDebugType({}, "accelerationStructure", NonSemanticShaderDebugInfo100Structure, true); + debugId[type->getResultId()] = debugType; + } } else { type = groupedTypes[OpTypeAccelerationStructureKHR].back(); } @@ -1191,6 +1195,10 @@ Id Builder::makeRayQueryType() groupedTypes[OpTypeRayQueryKHR].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) { + spv::Id debugType = makeCompositeDebugType({}, "rayQuery", NonSemanticShaderDebugInfo100Structure, true); + debugId[type->getResultId()] = debugType; + } } else { type = groupedTypes[OpTypeRayQueryKHR].back(); } @@ -1476,17 +1484,6 @@ bool Builder::isSpecConstantOpCode(Op opcode) const } } -bool Builder::isRayTracingOpCode(Op opcode) const -{ - switch (opcode) { - case OpTypeAccelerationStructureKHR: - case OpTypeRayQueryKHR: - return true; - default: - return false; - } -} - Id Builder::makeNullConstant(Id typeId) { Instruction* constant; @@ -2368,7 +2365,7 @@ Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id t constantsTypesGlobals.push_back(std::unique_ptr(inst)); module.mapInstruction(inst); - if (emitNonSemanticShaderDebugInfo && !isRayTracingOpCode(getOpCode(type))) + if (emitNonSemanticShaderDebugInfo) { auto const debugResultId = createDebugGlobalVariable(debugId[type], name, inst->getResultId()); debugId[inst->getResultId()] = debugResultId; diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 17949e40..a65a98e3 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -326,8 +326,6 @@ public: // See if a resultId is valid for use as an initializer. bool isValidInitializer(Id resultId) const { return isConstant(resultId) || isGlobalVariable(resultId); } - bool isRayTracingOpCode(Op opcode) const; - int getScalarTypeWidth(Id typeId) const { Id scalarTypeId = getScalarTypeId(typeId); diff --git a/Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out b/Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out new file mode 100644 index 00000000..439fa065 --- /dev/null +++ b/Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out @@ -0,0 +1,167 @@ +spv.debuginfo.rt_types.glsl.rgen +// Module Version 10000 +// Generated by (magic number): 8000b +// Id's are bound by 122 + + Capability RayQueryKHR + Capability RayTracingNV + Extension "SPV_KHR_non_semantic_info" + Extension "SPV_KHR_ray_query" + Extension "SPV_NV_ray_tracing" + 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" + 3: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 14 "main" + 2: String "" + 8: String "uint" + 16: String "main" + 19: String "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed entry-point main +#line 1 +" + 33: String "rayFlags" + 40: String "float" + 46: String "tMin" + 53: String "tMax" + 60: String "rayQuery" + 62: String "@rayQuery" + 68: String "localRayQuery" + 72: String "accelerationStructure" + 73: String "@accelerationStructure" + 78: String "acc0" + 87: String "origin" + 90: String "block" + 97: String "int" + 110: String "bool" + SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_NV_ray_tracing" + Name 14 "main" + Name 31 "rayFlags" + Name 44 "tMin" + Name 51 "tMax" + Name 66 "localRayQuery" + Name 76 "acc0" + Name 85 "block" + MemberName 85(block) 0 "dir" + MemberName 85(block) 1 "origin" + Name 94 "" + Decorate 76(acc0) DescriptorSet 0 + Decorate 76(acc0) Binding 0 + MemberDecorate 85(block) 0 Offset 0 + MemberDecorate 85(block) 1 Offset 16 + Decorate 85(block) BufferBlock + 4: TypeVoid + 5: TypeFunction 4 + 7: TypeInt 32 0 + 10: 7(int) Constant 32 + 11: 7(int) Constant 6 + 12: 7(int) Constant 0 + 9: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12 + 13: 7(int) Constant 3 + 6: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 + 18: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19 + 20: 7(int) Constant 12 + 22: 7(int) Constant 1 + 23: 7(int) Constant 4 + 24: 7(int) Constant 2 + 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24 + 17: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20 + 28: TypePointer Function 7(int) + 29: 7(int) Constant 7 + 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 29 12 + 34: 7(int) Constant 15 + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 33 9 18 34 12 17 23 + 36: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) + 38: 7(int) Constant 9 + 39: TypeFloat 32 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 40 10 13 12 + 42: TypePointer Function 39(float) + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 41 29 12 + 47: 7(int) Constant 16 + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 46 41 18 47 12 17 23 + 50: 39(float) Constant 0 + 54: 7(int) Constant 17 + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 41 18 54 12 17 23 + 57: 39(float) Constant 1148846080 + 58: TypeRayQueryKHR + 61: 7(int) Constant 18 + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) + 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 60 22 18 61 12 21 62 63 13 + 64: TypePointer Private 58 + 65: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 59 11 12 +66(localRayQuery): 64(ptr) Variable Private + 69: 7(int) Constant 8 + 67: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 68 59 18 61 12 21 68 66(localRayQuery) 69 + 70: TypeAccelerationStructureKHR + 71: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 72 22 18 61 12 21 73 63 13 + 74: TypePointer UniformConstant 70 + 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 71 12 12 + 76(acc0): 74(ptr) Variable UniformConstant + 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 78 71 18 61 12 21 78 76(acc0) 69 + 82: 7(int) Constant 255 + 83: TypeVector 39(float) 3 + 84: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 13 + 85(block): TypeStruct 83(fvec3) 83(fvec3) + 86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 84 18 38 29 12 12 13 + 88: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 84 18 38 29 12 12 13 + 89: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 90 22 18 61 12 21 90 12 13 86 88 + 91: TypePointer ShaderRecordBufferKHR 85(block) + 92: 7(int) Constant 5343 + 93: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 89 92 12 + 94: 91(ptr) Variable ShaderRecordBufferKHR + 95: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 2 89 18 61 12 21 2 94 69 + 96: TypeInt 32 1 + 98: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 97 10 23 12 + 99: 96(int) Constant 1 + 100: TypePointer ShaderRecordBufferKHR 83(fvec3) + 101: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 84 92 12 + 105: 96(int) Constant 0 + 109: TypeBool + 111: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 110 10 24 12 + 114: 7(int) Constant 19 + 120: 7(int) Constant 21 + 14(main): 4 Function None 5 + 15: Label + 31(rayFlags): 28(ptr) Variable Function + 44(tMin): 42(ptr) Variable Function + 51(tMax): 42(ptr) Variable Function + 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12 + 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main) + 37: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 34 34 12 12 + 35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 32 31(rayFlags) 36 + Store 31(rayFlags) 38 + 49: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 47 47 12 12 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 45 44(tMin) 36 + Store 44(tMin) 50 + 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 54 54 12 12 + 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 51(tMax) 36 + Store 51(tMax) 57 + 80: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 61 61 12 12 + 79: 70 Load 76(acc0) + 81: 7(int) Load 31(rayFlags) + 102: 100(ptr) AccessChain 94 99 + 103: 83(fvec3) Load 102 + 104: 39(float) Load 44(tMin) + 106: 100(ptr) AccessChain 94 105 + 107: 83(fvec3) Load 106 + 108: 39(float) Load 51(tMax) + RayQueryInitializeKHR 66(localRayQuery) 79 81 82 103 104 107 108 + 113: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 114 114 12 12 + 112: 109(bool) RayQueryProceedKHR 66(localRayQuery) + 115: 109(bool) LogicalNot 112 + SelectionMerge 117 None + BranchConditional 115 116 117 + 116: Label + 118: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + 119: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 120 120 12 12 + RayQueryTerminateKHR 66(localRayQuery) + Branch 117 + 117: Label + 121: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 + Return + FunctionEnd diff --git a/Test/spv.debuginfo.rt_types.glsl.rgen b/Test/spv.debuginfo.rt_types.glsl.rgen new file mode 100644 index 00000000..8d5638fd --- /dev/null +++ b/Test/spv.debuginfo.rt_types.glsl.rgen @@ -0,0 +1,23 @@ +#version 460 +#extension GL_NV_ray_tracing : enable +#extension GL_EXT_ray_query : enable +layout(binding = 0, set = 0) uniform accelerationStructureEXT acc0; + +layout(shaderRecordNV) buffer block +{ + vec3 dir; + vec3 origin; +}; + +void main() +{ + rayQueryEXT localRayQuery; + uint rayFlags = gl_RayFlagsOpaqueEXT | gl_RayFlagsSkipClosestHitShaderEXT; + float tMin = 0.f; + float tMax = 1000.f; + rayQueryInitializeEXT(localRayQuery, acc0, rayFlags, 0xFF , origin, tMin, dir, tMax); + if (!rayQueryProceedEXT(localRayQuery)) + { + rayQueryTerminateEXT(localRayQuery); + } +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index f6ddf138..e5736ea4 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -946,6 +946,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.debuginfo.bufferref.glsl.frag", "spv.debuginfo.const_params.glsl.comp", "spv.debuginfo.scalar_types.glsl.frag", + "spv.debuginfo.rt_types.glsl.rgen", })), FileNameAsCustomTestSuffix );