From 3ea0d7a37d2da932882438822e9fac3c0d67d4a2 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 15 Jun 2026 16:34:37 +0100 Subject: [PATCH] Remove "preferSourceDebug" compile flag, use sourceDebugInformation * This was previously only relevant for DXBC shaders that could have source debug information but didn't prefer source debug unless optimisation was disabled. This is inconsistent with how things are handled on SPIR-V and DXIL and in general it's considered now that the benefits of debugging in source outweigh the problems of debugging optimised code. --- qrenderdoc/Windows/ShaderViewer.cpp | 11 +---------- renderdoc/data/glsl_shaders.cpp | 5 ++--- renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp | 2 -- renderdoc/driver/shaders/dxbc/dxbc_common.h | 1 + renderdoc/driver/shaders/dxbc/dxbc_container.cpp | 8 -------- renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp | 2 +- renderdoc/driver/shaders/dxbc/dxbc_sdbg.h | 1 + renderdoc/driver/shaders/dxbc/dxbc_spdb.h | 1 + renderdoc/driver/shaders/dxil/dxil_bytecode.h | 2 ++ renderdoc/driver/shaders/dxil/dxil_reflect.cpp | 2 +- renderdoc/driver/shaders/spirv/spirv_reflect.cpp | 1 - 11 files changed, 10 insertions(+), 26 deletions(-) diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp index d0b9ef525..6f20f6add 100644 --- a/qrenderdoc/Windows/ShaderViewer.cpp +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -1105,16 +1105,7 @@ void ShaderViewer::debugShader(const ShaderReflection *shader, ResourceId pipeli m_Variables.push_back(c.after); } - bool preferSourceDebug = false; - - for(const ShaderCompileFlag &flag : m_ShaderDetails->debugInfo.compileFlags.flags) - { - if(flag.name == "preferSourceDebug") - { - preferSourceDebug = true; - break; - } - } + bool preferSourceDebug = m_ShaderDetails->debugInfo.sourceDebugInformation; updateDebugState(); diff --git a/renderdoc/data/glsl_shaders.cpp b/renderdoc/data/glsl_shaders.cpp index fcb06a8b0..556743563 100644 --- a/renderdoc/data/glsl_shaders.cpp +++ b/renderdoc/data/glsl_shaders.cpp @@ -676,7 +676,7 @@ void main() { { CHECK(refl.debugInfo.files[0].filename == "source0.glsl"); - REQUIRE(refl.debugInfo.compileFlags.flags.size() == 3); + REQUIRE(refl.debugInfo.compileFlags.flags.size() == 2); CHECK(refl.debugInfo.compileFlags.flags[0].name == "@cmdline"); @@ -690,8 +690,7 @@ void main() { CHECK(refl.debugInfo.compileFlags.flags[1].name == "@spirver"); CHECK(refl.debugInfo.compileFlags.flags[1].value == "spirv1.0"); - CHECK(refl.debugInfo.compileFlags.flags[2].name == "preferSourceDebug"); - CHECK(refl.debugInfo.compileFlags.flags[2].value == "1"); + CHECK(refl.debugInfo.sourceDebugInformation); } }; diff --git a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp index e4d6a1c5d..e67636800 100644 --- a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp @@ -329,8 +329,6 @@ void WrappedOpenGL::ShaderData::ProcessCompilation(WrappedOpenGL &drv, ResourceI reflection->debugInfo.debugStatus = spvReflection.debugInfo.debugStatus; reflection->debugInfo.sourceDebugInformation = spvReflection.debugInfo.sourceDebugInformation; - if(reflection->debugInfo.sourceDebugInformation) - reflection->debugInfo.compileFlags.flags.push_back({"preferSourceDebug", "1"}); if(HasExt[ARB_shader_storage_buffer_object]) { diff --git a/renderdoc/driver/shaders/dxbc/dxbc_common.h b/renderdoc/driver/shaders/dxbc/dxbc_common.h index cb4958325..25954368d 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_common.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_common.h @@ -508,6 +508,7 @@ public: virtual rdcstr GetEntryFunction() const = 0; virtual rdcstr GetShaderProfile() const = 0; + virtual bool HasSourceDebugInfo() const = 0; virtual ShaderCompileFlags GetShaderCompileFlags() const = 0; rdcarray Files; diff --git a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp index 31c660fc5..54e1f9bfb 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp @@ -2897,9 +2897,6 @@ void DXBCContainer::ProcessSourceInfo(const byte *chunkContents, uint32_t chunkS size_t cmdlineIdx = flags.flags.size(); for(size_t i = 0; i < flags.flags.size(); i++) { - if(flags.flags[i].name == "preferSourceDebug") - continue; - if(flags.flags[i].name == "@cmdline") { cmdlineIdx = i; @@ -3144,11 +3141,6 @@ ShaderCompileFlags EncodeFlags(const uint32_t flags, const rdcstr &profile) ret.flags = {{"@cmdline", cmdline.trimmed()}}; - // If D3DCOMPILE_SKIP_OPTIMIZATION is set, then prefer source-level debugging as it should be - // accurate enough to work with. - if(flags & D3DCOMPILE_SKIP_OPTIMIZATION) - ret.flags.push_back({"preferSourceDebug", "1"}); - return ret; } diff --git a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp index 24a4c2463..0ea6d8a22 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp @@ -326,7 +326,7 @@ void MakeShaderReflection(DXBC::DXBCContainer *dxbc, const ShaderEntryPoint &ent { refl->debugInfo.encoding = ShaderEncoding::HLSL; - refl->debugInfo.sourceDebugInformation = true; + refl->debugInfo.sourceDebugInformation = dxbc->GetDebugInfo()->HasSourceDebugInfo(); refl->debugInfo.compileFlags = dxbc->GetDebugInfo()->GetShaderCompileFlags(); diff --git a/renderdoc/driver/shaders/dxbc/dxbc_sdbg.h b/renderdoc/driver/shaders/dxbc/dxbc_sdbg.h index 849734163..3023a8bb7 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_sdbg.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_sdbg.h @@ -245,6 +245,7 @@ public: rdcstr GetCompilerSig() const { return m_CompilerSig; } rdcstr GetEntryFunction() const { return m_Entry; } rdcstr GetShaderProfile() const { return m_Profile; } + bool HasSourceDebugInfo() const { return true; } ShaderCompileFlags GetShaderCompileFlags() const { return EncodeFlags(m_ShaderFlags, m_Profile); } void GetLineInfo(size_t instruction, uintptr_t offset, LineColumnInfo &lineInfo) const; void GetCallstack(size_t instruction, uintptr_t offset, rdcarray &callstack) const; diff --git a/renderdoc/driver/shaders/dxbc/dxbc_spdb.h b/renderdoc/driver/shaders/dxbc/dxbc_spdb.h index cf284dabd..9bc02ee65 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_spdb.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_spdb.h @@ -301,6 +301,7 @@ public: rdcstr GetCompilerSig() const { return m_CompilerSig; } rdcstr GetEntryFunction() const { return m_Entry; } rdcstr GetShaderProfile() const { return m_Profile; } + bool HasSourceDebugInfo() const { return true; } ShaderCompileFlags GetShaderCompileFlags() const { return EncodeFlags(m_ShaderFlags, m_Profile); } void GetLineInfo(size_t instruction, uintptr_t offset, LineColumnInfo &lineInfo) const; void GetCallstack(size_t instruction, uintptr_t offset, rdcarray &callstack) const; diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index 42680afb3..68007bf13 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -1717,6 +1717,7 @@ public: rdcstr GetCompilerSig() const override { return m_CompilerSig; } rdcstr GetEntryFunction() const override { return m_EntryPoint; } rdcstr GetShaderProfile() const override { return m_Profile; } + bool HasSourceDebugInfo() const override { return m_SourceInfo; } ShaderCompileFlags GetShaderCompileFlags() const override { return m_CompileFlags; } void GetLineInfo(size_t instruction, uintptr_t offset, LineColumnInfo &lineInfo) const override; void GetCallstack(size_t instruction, uintptr_t offset, rdcarray &callstack) const override; @@ -1793,6 +1794,7 @@ protected: uint32_t m_DXILVersion; rdcstr m_CompilerSig, m_EntryPoint, m_Profile; + bool m_SourceInfo = false; ShaderCompileFlags m_CompileFlags; DXBC::ThreadScope m_Threadscope = DXBC::ThreadScope::Thread; diff --git a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp index 92b0afd7d..43cc6e371 100644 --- a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp @@ -1663,7 +1663,7 @@ DXBC::Reflection *Program::BuildReflection() } } if(!Files.empty()) - m_CompileFlags.flags.push_back({"preferSourceDebug", "1"}); + m_SourceInfo = true; } if(dx.source.args && dx.source.args->children.size() == 1) diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp index 6d1b3f3bc..4b7eabadb 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp @@ -1085,7 +1085,6 @@ void Reflector::MakeReflection(const GraphicsAPI sourceAPI, const ShaderStage st if(knownExtSet[ExtSet_ShaderDbg] != Id() && !reflection.debugInfo.files.empty()) { - reflection.debugInfo.compileFlags.flags.push_back({"preferSourceDebug", "1"}); reflection.debugInfo.sourceDebugInformation = true; }