diff --git a/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp b/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp index 9cf9420e91..8ab5d70806 100644 --- a/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp +++ b/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp @@ -2974,17 +2974,15 @@ void GSDeviceOGL::RenderHW(GSHWDrawConfig& config) // Avoid changing framebuffer just to switch from rt+depth to rt and vice versa. bool fb_optimization_needs_barrier = false; - if (!draw_rt && GLState::rt && GLState::ds == draw_ds && config.tex != GLState::rt && - draw_ds && GLState::rt->GetSize() == draw_ds->GetSize() && !draw_ds_as_rt) + if (!(draw_rt || draw_ds_as_rt) && draw_ds && GLState::rt && GLState::rt->GetSize() == draw_ds->GetSize()) { draw_rt = GLState::rt; - fb_optimization_needs_barrier = !GLState::rt_written; + fb_optimization_needs_barrier = !GLState::rt_written && GLState::ds == draw_ds; } - else if (!draw_ds && GLState::ds && GLState::rt == draw_rt && config.tex != GLState::ds && - draw_rt && GLState::ds->GetSize() == draw_rt->GetSize() && !draw_ds_as_rt) + else if (!(draw_ds || draw_ds_as_rt) && draw_rt && GLState::ds && GLState::ds->GetSize() == draw_rt->GetSize()) { draw_ds = GLState::ds; - fb_optimization_needs_barrier = !GLState::ds_written; + fb_optimization_needs_barrier = !GLState::ds_written && GLState::rt == draw_rt; } // Be careful of the rt already being bound and the blend using the RT without a barrier.