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; }