Skip to content

Commit

Permalink
GS: Disable interlace skipping on FMVs on SW FMV switch
Browse files Browse the repository at this point in the history
  • Loading branch information
refractionpcsx2 committed Oct 29, 2023
1 parent bb7e08c commit 06e80f0
Show file tree
Hide file tree
Showing 7 changed files with 12 additions and 11 deletions.
2 changes: 1 addition & 1 deletion pcsx2-qt/QtHost.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -652,7 +652,7 @@ void EmuThread::switchRenderer(GSRendererType renderer)
if (!VMManager::HasValidVM())
return;

MTGS::SwitchRenderer(renderer);
MTGS::SwitchRenderer(renderer, EmuConfig.GS.InterlaceMode);
}

void EmuThread::changeDisc(CDVD_SourceType source, const QString& path)
Expand Down
4 changes: 2 additions & 2 deletions pcsx2/Counters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -477,9 +477,9 @@ static __fi void DoFMVSwitch()
if (EmuConfig.Gamefixes.SoftwareRendererFMVHack && (GSConfig.UseHardwareRenderer() || (RendererSwitched && GSConfig.Renderer == GSRendererType::SW)))
{
RendererSwitched = GSConfig.UseHardwareRenderer();

DevCon.Warning("FMV Switch");
// we don't use the sw toggle here, because it'll change back to auto if set to sw
MTGS::SwitchRenderer(new_fmv_state ? GSRendererType::SW : EmuConfig.GS.Renderer, false);
MTGS::SwitchRenderer(new_fmv_state ? GSRendererType::SW : EmuConfig.GS.Renderer, new_fmv_state ? GSInterlaceMode::AdaptiveTFF : EmuConfig.GS.InterlaceMode, false);
}
else
RendererSwitched = false;
Expand Down
4 changes: 3 additions & 1 deletion pcsx2/GS/GS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -780,7 +780,7 @@ void GSUpdateConfig(const Pcsx2Config::GSOptions& new_config)
}
}

void GSSwitchRenderer(GSRendererType new_renderer)
void GSSwitchRenderer(GSRendererType new_renderer, GSInterlaceMode new_interlace)
{
if (new_renderer == GSRendererType::Auto)
new_renderer = GSUtil::GetPreferredRenderer();
Expand All @@ -791,6 +791,8 @@ void GSSwitchRenderer(GSRendererType new_renderer)
const bool is_software_switch = (new_renderer == GSRendererType::SW || GSConfig.Renderer == GSRendererType::SW);
const Pcsx2Config::GSOptions old_config(GSConfig);
GSConfig.Renderer = new_renderer;
GSConfig.InterlaceMode = new_interlace;

if (!GSreopen(!is_software_switch, true, old_config))
pxFailRel("Failed to reopen GS for renderer switch.");
}
Expand Down
2 changes: 1 addition & 1 deletion pcsx2/GS/GS.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void GSgetTitleStats(std::string& info);
void GSTranslateWindowToDisplayCoordinates(float window_x, float window_y, float* display_x, float* display_y);

void GSUpdateConfig(const Pcsx2Config::GSOptions& new_config);
void GSSwitchRenderer(GSRendererType new_renderer);
void GSSwitchRenderer(GSRendererType new_renderer, GSInterlaceMode new_interlace);
bool GSSaveSnapshotToMemory(u32 window_width, u32 window_height, bool apply_aspect, bool crop_borders,
u32* width, u32* height, std::vector<u32>* pixels);
void GSJoinSnapshotThreads();
Expand Down
1 change: 0 additions & 1 deletion pcsx2/GS/Renderers/Common/GSRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ class GSRenderer : public GSState
void QueueSnapshot(const std::string& path, u32 gsdump_frames);
void StopGSDump();
void PresentCurrentFrame();

bool BeginCapture(std::string filename, const GSVector2i& size = GSVector2i(0, 0));
void EndCapture();
};
Expand Down
8 changes: 4 additions & 4 deletions pcsx2/MTGS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -990,7 +990,7 @@ void MTGS::UpdateVSyncMode()
SetVSyncMode(Host::GetEffectiveVSyncMode());
}

void MTGS::SwitchRenderer(GSRendererType renderer, bool display_message /* = true */)
void MTGS::SwitchRenderer(GSRendererType renderer, GSInterlaceMode interlace, bool display_message /* = true */)
{
pxAssertRel(IsOpen(), "MTGS is running");

Expand All @@ -1000,8 +1000,8 @@ void MTGS::SwitchRenderer(GSRendererType renderer, bool display_message /* = tru
Pcsx2Config::GSOptions::GetRendererName(renderer)), Host::OSD_INFO_DURATION);
}

RunOnGSThread([renderer]() {
GSSwitchRenderer(renderer);
RunOnGSThread([renderer, interlace]() {
GSSwitchRenderer(renderer, interlace);
});

// See note in ApplySettings() for reasoning here.
Expand All @@ -1018,7 +1018,7 @@ void MTGS::SetSoftwareRendering(bool software, bool display_message /* = true */
else
new_renderer = GSRendererType::SW;

SwitchRenderer(new_renderer, display_message);
SwitchRenderer(new_renderer, EmuConfig.GS.InterlaceMode, display_message);
}

void MTGS::ToggleSoftwareRendering()
Expand Down
2 changes: 1 addition & 1 deletion pcsx2/MTGS.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ namespace MTGS
void UpdateDisplayWindow();
void SetVSyncMode(VsyncMode mode);
void UpdateVSyncMode();
void SwitchRenderer(GSRendererType renderer, bool display_message = true);
void SwitchRenderer(GSRendererType renderer, GSInterlaceMode interlace, bool display_message = true);
void SetSoftwareRendering(bool software, bool display_message = true);
void ToggleSoftwareRendering();
bool SaveMemorySnapshot(u32 window_width, u32 window_height, bool apply_aspect, bool crop_borders,
Expand Down

0 comments on commit 06e80f0

Please sign in to comment.