GL: Fix shader/memory leak

This commit is contained in:
Stenzek
2023-04-10 23:50:09 +10:00
parent 3bbce19df2
commit fd0d12a4f4
6 changed files with 83 additions and 119 deletions

View File

@ -541,7 +541,7 @@ bool GPU_HW_OpenGL::CompilePrograms()
}
};
std::optional<GL::Program> prog = shader_cache.GetProgram(batch_vs, {}, fs, link_callback);
std::optional<GL::Program> prog = shader_cache.GetProgram(batch_vs, fs, link_callback);
if (!prog)
return false;
@ -571,11 +571,10 @@ bool GPU_HW_OpenGL::CompilePrograms()
const std::string fs = shadergen.GenerateDisplayFragmentShader(
ConvertToBoolUnchecked(depth_24bit), static_cast<InterlacedRenderMode>(interlaced), m_chroma_smoothing);
std::optional<GL::Program> prog =
shader_cache.GetProgram(vs, {}, fs, [this, use_binding_layout](GL::Program& prog) {
if (!IsGLES() && !use_binding_layout)
prog.BindFragData(0, "o_col0");
});
std::optional<GL::Program> prog = shader_cache.GetProgram(vs, fs, [this, use_binding_layout](GL::Program& prog) {
if (!IsGLES() && !use_binding_layout)
prog.BindFragData(0, "o_col0");
});
if (!prog)
return false;
@ -595,7 +594,7 @@ bool GPU_HW_OpenGL::CompilePrograms()
for (u8 interlaced = 0; interlaced < 2; interlaced++)
{
std::optional<GL::Program> prog = shader_cache.GetProgram(
shadergen.GenerateScreenQuadVertexShader(), {},
shadergen.GenerateScreenQuadVertexShader(),
shadergen.GenerateVRAMFillFragmentShader(ConvertToBoolUnchecked(wrapped), ConvertToBoolUnchecked(interlaced)),
[this, use_binding_layout](GL::Program& prog) {
if (!IsGLES() && !use_binding_layout)
@ -613,7 +612,7 @@ bool GPU_HW_OpenGL::CompilePrograms()
}
std::optional<GL::Program> prog =
shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(), {}, shadergen.GenerateVRAMReadFragmentShader(),
shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(), shadergen.GenerateVRAMReadFragmentShader(),
[this, use_binding_layout](GL::Program& prog) {
if (!IsGLES() && !use_binding_layout)
prog.BindFragData(0, "o_col0");
@ -630,12 +629,11 @@ bool GPU_HW_OpenGL::CompilePrograms()
m_vram_read_program = std::move(*prog);
progress.Increment();
prog =
shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(), {}, shadergen.GenerateVRAMCopyFragmentShader(),
[this, use_binding_layout](GL::Program& prog) {
if (!IsGLES() && !use_binding_layout)
prog.BindFragData(0, "o_col0");
});
prog = shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(), shadergen.GenerateVRAMCopyFragmentShader(),
[this, use_binding_layout](GL::Program& prog) {
if (!IsGLES() && !use_binding_layout)
prog.BindFragData(0, "o_col0");
});
if (!prog)
return false;
@ -648,7 +646,7 @@ bool GPU_HW_OpenGL::CompilePrograms()
m_vram_copy_program = std::move(*prog);
progress.Increment();
prog = shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(), {},
prog = shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(),
shadergen.GenerateVRAMUpdateDepthFragmentShader());
if (!prog)
return false;
@ -660,7 +658,7 @@ bool GPU_HW_OpenGL::CompilePrograms()
if (m_use_texture_buffer_for_vram_writes || m_use_ssbo_for_vram_writes)
{
prog = shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(), {},
prog = shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(),
shadergen.GenerateVRAMWriteFragmentShader(m_use_ssbo_for_vram_writes),
[this, use_binding_layout](GL::Program& prog) {
if (!IsGLES() && !use_binding_layout)
@ -682,7 +680,7 @@ bool GPU_HW_OpenGL::CompilePrograms()
if (m_downsample_mode == GPUDownsampleMode::Box)
{
prog = shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(), {},
prog = shader_cache.GetProgram(shadergen.GenerateScreenQuadVertexShader(),
shadergen.GenerateBoxSampleDownsampleFragmentShader(),
[this, use_binding_layout](GL::Program& prog) {
if (!IsGLES() && !use_binding_layout)