From b1061afed90db36c6b6d6cc19c6a4495bcef4fec Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Sat, 29 Feb 2020 16:30:20 -0300 Subject: gl_shader_decompiler: Add identifier to decompiled code --- src/video_core/renderer_opengl/gl_shader_cache.cpp | 6 ++++-- src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 15 ++++++++++----- src/video_core/renderer_opengl/gl_shader_decompiler.h | 3 ++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 593897787..e3d31c3eb 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp @@ -186,8 +186,10 @@ std::shared_ptr MakeRegistry(const ShaderDiskCacheEntry& entry) { std::shared_ptr BuildShader(const Device& device, ShaderType shader_type, u64 unique_identifier, const ShaderIR& ir, const Registry& registry, bool hint_retrievable = false) { - LOG_INFO(Render_OpenGL, "{}", MakeShaderID(unique_identifier, shader_type)); - const std::string glsl = DecompileShader(device, ir, registry, shader_type); + const std::string shader_id = MakeShaderID(unique_identifier, shader_type); + LOG_INFO(Render_OpenGL, "{}", shader_id); + + const std::string glsl = DecompileShader(device, ir, registry, shader_type, shader_id); OGLShader shader; shader.Create(glsl.c_str(), GetGLShaderType(shader_type)); diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 0adb51629..cb89daba1 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -393,9 +393,9 @@ std::string FlowStackTopName(MetaStackClass stack) { class GLSLDecompiler final { public: explicit GLSLDecompiler(const Device& device, const ShaderIR& ir, const Registry& registry, - ShaderType stage, std::string_view suffix) - : device{device}, ir{ir}, registry{registry}, stage{stage}, suffix{suffix}, - header{ir.GetHeader()} {} + ShaderType stage, std::string_view identifier, std::string_view suffix) + : device{device}, ir{ir}, registry{registry}, stage{stage}, + identifier{identifier}, suffix{suffix}, header{ir.GetHeader()} {} void Decompile() { DeclareHeader(); @@ -478,6 +478,9 @@ private: void DecompileAST(); void DeclareHeader() { + if (!identifier.empty()) { + code.AddLine("// {}", identifier); + } code.AddLine("#version 430 core"); code.AddLine("#extension GL_ARB_separate_shader_objects : enable"); if (device.HasShaderBallot()) { @@ -2477,6 +2480,7 @@ private: const ShaderIR& ir; const Registry& registry; const ShaderType stage; + const std::string_view identifier; const std::string_view suffix; const Header header; @@ -2698,8 +2702,9 @@ ShaderEntries MakeEntries(const VideoCommon::Shader::ShaderIR& ir) { } std::string DecompileShader(const Device& device, const ShaderIR& ir, const Registry& registry, - ShaderType stage, std::string_view suffix) { - GLSLDecompiler decompiler(device, ir, registry, stage, suffix); + ShaderType stage, std::string_view identifier, + std::string_view suffix) { + GLSLDecompiler decompiler(device, ir, registry, stage, identifier, suffix); decompiler.Decompile(); return decompiler.GetResult(); } diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.h b/src/video_core/renderer_opengl/gl_shader_decompiler.h index 68b68ee77..e7dbd810c 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.h +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.h @@ -78,6 +78,7 @@ ShaderEntries MakeEntries(const VideoCommon::Shader::ShaderIR& ir); std::string DecompileShader(const Device& device, const VideoCommon::Shader::ShaderIR& ir, const VideoCommon::Shader::Registry& registry, - Tegra::Engines::ShaderType stage, std::string_view suffix = {}); + Tegra::Engines::ShaderType stage, std::string_view identifier, + std::string_view suffix = {}); } // namespace OpenGL -- cgit v1.2.3