mirror of
https://github.com/cemu-project/Cemu.git
synced 2026-04-26 04:45:18 -06:00
GL: clean up shader object after compilation
On Linux/mesa, when compiling a big shader cache like BOTW this saves about 8.2 GiB of RAM usage (only when ~/.cache/mesa_shader_cache and precompiled/_gl.bin cache is also fresh)
This commit is contained in:
parent
b2c34fb1df
commit
5ee74b5a6a
@ -146,6 +146,14 @@ RendererShaderGL::RendererShaderGL(ShaderType type, uint64 baseHash, uint64 auxH
|
||||
}
|
||||
|
||||
RendererShaderGL::~RendererShaderGL()
|
||||
{
|
||||
CleanupShaderObj();
|
||||
|
||||
if (m_program != 0)
|
||||
glDeleteProgram(m_program);
|
||||
}
|
||||
|
||||
void RendererShaderGL::CleanupShaderObj()
|
||||
{
|
||||
if (m_shader_object != 0 && m_shader_attached)
|
||||
glDetachShader(m_program, m_shader_object);
|
||||
@ -153,8 +161,7 @@ RendererShaderGL::~RendererShaderGL()
|
||||
if (m_shader_object != 0)
|
||||
glDeleteShader(m_shader_object);
|
||||
|
||||
if (m_program != 0)
|
||||
glDeleteProgram(m_program);
|
||||
m_shader_object = 0;
|
||||
}
|
||||
|
||||
void RendererShaderGL::PreponeCompilation(bool isRenderThread)
|
||||
@ -192,9 +199,8 @@ bool RendererShaderGL::WaitForCompiled()
|
||||
cemuLog_log(LogType::Force, "Compile error in shader. Log:");
|
||||
cemuLog_log(LogType::Force, infoLog);
|
||||
}
|
||||
if (m_shader_object != 0)
|
||||
glDeleteShader(m_shader_object);
|
||||
m_isCompiled = true;
|
||||
CleanupShaderObj();
|
||||
return false;
|
||||
}
|
||||
// get shader binary
|
||||
@ -213,12 +219,12 @@ bool RendererShaderGL::WaitForCompiled()
|
||||
cemuLog_log(LogType::Force, infoLog);
|
||||
}
|
||||
m_isCompiled = true;
|
||||
CleanupShaderObj();
|
||||
return false;
|
||||
}
|
||||
|
||||
/*glDetachShader(m_program, m_shader_object);
|
||||
m_shader_attached = false;*/
|
||||
m_isCompiled = true;
|
||||
CleanupShaderObj();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -10,6 +10,7 @@ public:
|
||||
|
||||
virtual ~RendererShaderGL();
|
||||
|
||||
void CleanupShaderObj();
|
||||
void PreponeCompilation(bool isRenderThread) override;
|
||||
bool IsCompiled() override;
|
||||
bool WaitForCompiled() override;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user