GL: Fix shader/memory leak
This commit is contained in:
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user