From 35d3547b625212acf643526c456e3d0353b0d0d2 Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Mon, 2 May 2022 00:22:43 +0100 Subject: [PATCH] GS: Fix up SW FMV switch behaviour --- pcsx2/Counters.cpp | 10 ++++++++-- pcsx2/Pcsx2Config.cpp | 4 +--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pcsx2/Counters.cpp b/pcsx2/Counters.cpp index a80b59930d..d637da394c 100644 --- a/pcsx2/Counters.cpp +++ b/pcsx2/Counters.cpp @@ -433,6 +433,8 @@ void frameLimitReset() extern uint eecount_on_last_vdec; extern bool FMVstarted; extern bool EnableFMV; + +static bool RendererSwitched = false; static bool s_last_fmv_state = false; static __fi void DoFMVSwitch() @@ -477,11 +479,15 @@ static __fi void DoFMVSwitch() break; } - if (EmuConfig.Gamefixes.SoftwareRendererFMVHack && GSConfig.UseHardwareRenderer()) + if (EmuConfig.Gamefixes.SoftwareRendererFMVHack && (GSConfig.UseHardwareRenderer() || (RendererSwitched && GSConfig.Renderer == GSRendererType::SW))) { + RendererSwitched = GSConfig.UseHardwareRenderer(); + // we don't use the sw toggle here, because it'll change back to auto if set to sw - GetMTGS().SwitchRenderer(new_fmv_state ? GSRendererType::SW : GSConfig.Renderer, false); + GetMTGS().SwitchRenderer(new_fmv_state ? GSRendererType::SW : EmuConfig.GS.Renderer, false); } + else + RendererSwitched = false; } // Convenience function to update UI thread and set patches. diff --git a/pcsx2/Pcsx2Config.cpp b/pcsx2/Pcsx2Config.cpp index 04145038d9..5f71a86cec 100644 --- a/pcsx2/Pcsx2Config.cpp +++ b/pcsx2/Pcsx2Config.cpp @@ -653,9 +653,7 @@ void Pcsx2Config::GSOptions::MaskUpscalingHacks() bool Pcsx2Config::GSOptions::UseHardwareRenderer() const { - return (Renderer == GSRendererType::DX11 || Renderer == GSRendererType::DX12 || - Renderer == GSRendererType::OGL || Renderer == GSRendererType::VK || - Renderer == GSRendererType::Metal); + return (Renderer != GSRendererType::Null && Renderer != GSRendererType::SW); } VsyncMode Pcsx2Config::GetEffectiveVsyncMode() const