From e88c269d022ae04c0b5fdaf71f03b44cc145820d Mon Sep 17 00:00:00 2001 From: Stenzek Date: Wed, 2 Oct 2019 11:33:20 +1000 Subject: [PATCH] PostProcessing: Don't use GS expansion shader for quad buffering w/ OpenGL OpenGL doesn't render to a 2-layer backbuffer like D3D/Vulkan for quad-buffered stereo, instead drawing twice with the eye selected by glDrawBuffer() (see OGL::Renderer::RenderXFBToScreen). --- Source/Core/VideoCommon/PostProcessing.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Source/Core/VideoCommon/PostProcessing.cpp b/Source/Core/VideoCommon/PostProcessing.cpp index 859715542b32..d8666c1ceeb9 100644 --- a/Source/Core/VideoCommon/PostProcessing.cpp +++ b/Source/Core/VideoCommon/PostProcessing.cpp @@ -714,11 +714,15 @@ bool PostProcessing::CompilePixelShader() bool PostProcessing::CompilePipeline() { + // OpenGL doesn't render to a 2-layer backbuffer like D3D/Vulkan for quad-buffered stereo, instead + // drawing twice and the eye selected by glDrawBuffer() (see OGL::Renderer::RenderXFBToScreen). + const bool use_quad_buffer_gs = g_ActiveConfig.stereo_mode == StereoMode::QuadBuffer && + g_ActiveConfig.backend_info.api_type != APIType::OpenGL; + AbstractPipelineConfig config = {}; config.vertex_shader = m_vertex_shader.get(); - config.geometry_shader = g_ActiveConfig.stereo_mode == StereoMode::QuadBuffer ? - g_shader_cache->GetTexcoordGeometryShader() : - nullptr; + config.geometry_shader = + use_quad_buffer_gs ? g_shader_cache->GetTexcoordGeometryShader() : nullptr; config.pixel_shader = m_pixel_shader.get(); config.rasterization_state = RenderState::GetNoCullRasterizationState(PrimitiveType::Triangles); config.depth_state = RenderState::GetNoDepthTestingDepthState();