From 3066a3824bd4e7e468397c8d88d77c443dcc72bc Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 7 Mar 2026 13:25:41 +1000 Subject: [PATCH] PostProcessing: Fix inconsistent unscaled input during reload --- src/util/postprocessing.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/util/postprocessing.cpp b/src/util/postprocessing.cpp index 772e568db..afb940a66 100644 --- a/src/util/postprocessing.cpp +++ b/src/util/postprocessing.cpp @@ -533,8 +533,8 @@ void PostProcessing::Chain::LoadStages(std::unique_lock& settings_lo // must be down here, because we need to compile first, triggered by CheckTargets() for (std::unique_ptr& shader : m_stages) { - m_wants_depth_buffer |= shader->WantsDepthBuffer(); - m_wants_unscaled_input |= shader->WantsUnscaledInput(); + m_wants_depth_buffer |= (shader->IsEnabled() && shader->WantsDepthBuffer()); + m_wants_unscaled_input |= (shader->IsEnabled() && shader->WantsUnscaledInput()); } m_needs_depth_buffer = m_enabled && m_wants_depth_buffer; if (m_wants_depth_buffer) @@ -567,6 +567,7 @@ void PostProcessing::Chain::UpdateSettings(std::unique_lock& setting const GPUTextureFormat prev_format = m_target_format; m_wants_depth_buffer = false; + m_wants_unscaled_input = false; const u32 prev_enabled_stage_count = static_cast(std::ranges::count_if( m_stages, [](const std::unique_ptr& shader) { return (shader && shader->IsEnabled()); })); @@ -646,7 +647,11 @@ void PostProcessing::Chain::UpdateSettings(std::unique_lock& setting // must be down here, because we need to compile first, triggered by CheckTargets() for (std::unique_ptr& shader : m_stages) - m_wants_depth_buffer |= shader->WantsDepthBuffer(); + { + m_wants_depth_buffer |= (shader->IsEnabled() && shader->WantsDepthBuffer()); + m_wants_unscaled_input |= (shader->IsEnabled() && shader->WantsUnscaledInput()); + } + m_needs_depth_buffer = m_enabled && m_wants_depth_buffer; if (m_wants_depth_buffer) DEV_LOG("Depth buffer is needed."); @@ -731,6 +736,7 @@ bool PostProcessing::Chain::CheckTargets(u32 source_width, u32 source_height, GP progress->SetProgressValue(0); m_wants_depth_buffer = false; + m_wants_unscaled_input = false; for (size_t i = 0; i < m_stages.size(); i++) { @@ -753,12 +759,14 @@ bool PostProcessing::Chain::CheckTargets(u32 source_width, u32 source_height, GP } progress->SetProgressValue(static_cast(i + 1)); - m_wants_depth_buffer |= shader->IsEnabled() && shader->WantsDepthBuffer(); // Don't adjust target size until first enabled shader. if (!shader->IsEnabled()) continue; + m_wants_depth_buffer |= shader->WantsDepthBuffer(); + m_wants_unscaled_input |= shader->WantsUnscaledInput(); + // First shader outputs at target size, so the input is now target size. source_width = target_width; source_height = target_height;