diff options
| author | jarcherNV <jarcher@nvidia.com> | 2025-06-06 14:30:06 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-06 14:30:06 -0700 |
| commit | 0d16228ae22fa2e1a00e62dc099eea08da7717fe (patch) | |
| tree | 067573914132892dc1336dcdea2c8b595f24f871 /source/slang/slang-emit-spirv.cpp | |
| parent | 649d533727b31b28397ffb3a530e655ac3861547 (diff) | |
Add command line option for separate debug info (#7178)
* Add command line option for separate debug info
Add command line arg -separate-debug-info which, if provided, produces
both a .spv and a .dbg.spv file. The .dbg.spv file contains full debug
info and the .spv file has all debug info stripped out.
Also add a DebugBuildIdentifier instruction to store a unique hash in
both the output files, so they can be more easily matched together.
A matching API is provided to allow using the Slang API to retrieve a
base and debug SPIRV as well as the debug build identifier string.
Diffstat (limited to 'source/slang/slang-emit-spirv.cpp')
| -rw-r--r-- | source/slang/slang-emit-spirv.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp index 0a3dab78a..ec9857ecf 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -2284,6 +2284,18 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex } return result; } + case kIROp_DebugBuildIdentifier: + { + ensureExtensionDeclaration(UnownedStringSlice("SPV_KHR_non_semantic_info")); + auto debugBuildIdentifier = as<IRDebugBuildIdentifier>(inst); + return emitOpDebugBuildIdentifier( + getSection(SpvLogicalSectionID::GlobalVariables), + inst, + inst->getFullType(), + getNonSemanticDebugInfoExtInst(), + debugBuildIdentifier->getBuildIdentifier(), + debugBuildIdentifier->getFlags()); + } case kIROp_GetStringHash: return emitGetStringHash(inst); case kIROp_AttributedType: @@ -9184,6 +9196,10 @@ SlangResult emitSPIRVFromIR( { context.ensureInst(inst); } + if (as<IRDebugBuildIdentifier>(inst)) + { + context.ensureInst(inst); + } if (shouldPreserveParams && as<IRGlobalParam>(inst)) { context.ensureInst(inst); |
