mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	gl_shader_decompiler: Add identifier to decompiled code
This commit is contained in:
		@@ -186,8 +186,10 @@ std::shared_ptr<Registry> MakeRegistry(const ShaderDiskCacheEntry& entry) {
 | 
			
		||||
std::shared_ptr<OGLProgram> 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));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user