From fd95607700d22116f6d93271f6ac72ad23ee1946 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Wed, 16 Oct 2024 02:35:16 +0100 Subject: [PATCH] Core: apply Dolphin OnFrame patches right after boot --- Source/Core/Core/ConfigManager.cpp | 2 +- Source/Core/Core/PatchEngine.cpp | 10 +++++++++- Source/Core/Core/PatchEngine.h | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index 7eefe9b945..21d722290e 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -211,7 +211,7 @@ void SConfig::OnNewTitleLoad(const Core::CPUThreadGuard& guard) } CBoot::LoadMapFromFilename(guard, ppc_symbol_db); HLE::Reload(system); - PatchEngine::Reload(); + PatchEngine::Reload(system); HiresTexture::Update(); WC24PatchEngine::Reload(); } diff --git a/Source/Core/Core/PatchEngine.cpp b/Source/Core/Core/PatchEngine.cpp index 16be2960ba..9880977710 100644 --- a/Source/Core/Core/PatchEngine.cpp +++ b/Source/Core/Core/PatchEngine.cpp @@ -295,6 +295,13 @@ void RemoveMemoryPatch(std::size_t index) std::erase(s_on_frame_memory, index); } +static void ApplyStartupPatches(Core::System& system) +{ + ASSERT(Core::IsCPUThread()); + Core::CPUThreadGuard guard(system); + ApplyPatches(guard, s_on_frame); +} + bool ApplyFramePatches(Core::System& system) { const auto& ppc_state = system.GetPPCState(); @@ -332,10 +339,11 @@ void Shutdown() Gecko::Shutdown(); } -void Reload() +void Reload(Core::System& system) { Shutdown(); LoadPatches(); + ApplyStartupPatches(system); } } // namespace PatchEngine diff --git a/Source/Core/Core/PatchEngine.h b/Source/Core/Core/PatchEngine.h index 69ec0c9bb7..32e4ec93db 100644 --- a/Source/Core/Core/PatchEngine.h +++ b/Source/Core/Core/PatchEngine.h @@ -61,7 +61,7 @@ void RemoveMemoryPatch(std::size_t index); bool ApplyFramePatches(Core::System& system); void Shutdown(); -void Reload(); +void Reload(Core::System& system); inline int GetPatchTypeCharLength(PatchType type) {