diff options
| author | Dentomologist <dentomologist@gmail.com> | 2025-08-13 15:43:08 -0700 |
|---|---|---|
| committer | Dentomologist <dentomologist@gmail.com> | 2025-10-26 18:03:06 -0700 |
| commit | d5f079d78b8a894d03dee0590bfa691962f033f2 (patch) | |
| tree | 44ac344f14ad558e26824bf039eb8acff07a282d /Source/Core | |
| parent | 933071dd573c202de8c3c722e042d37d6bfcc2d1 (diff) | |
DSPEmulator: Extract UnpauseAndUnlock from PauseAndLock
Replace call to PauseAndLock(do_lock=false) with new function
UnpauseAndUnlock.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Core.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/Core/DSPEmulator.h | 1 | ||||
| -rw-r--r-- | Source/Core/Core/HW/DSPHLE/DSPHLE.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/Core/HW/DSPHLE/DSPHLE.h | 1 | ||||
| -rw-r--r-- | Source/Core/Core/HW/DSPLLE/DSPLLE.cpp | 12 | ||||
| -rw-r--r-- | Source/Core/Core/HW/DSPLLE/DSPLLE.h | 1 |
6 files changed, 20 insertions, 1 deletions
diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp index 0610098016..429d51d3ad 100644 --- a/Source/Core/Core/Core.cpp +++ b/Source/Core/Core/Core.cpp @@ -798,7 +798,7 @@ static void RestoreStateAndUnlock(Core::System& system, const bool unpause_on_un if (!IsRunning(system)) return; - system.GetDSP().GetDSPEmulator()->PauseAndLock(false); + system.GetDSP().GetDSPEmulator()->UnpauseAndUnlock(); ResetRumble(); // CPU is unlocked last because CPU::RestoreStateAndUnlock contains the synchronization mechanism diff --git a/Source/Core/Core/DSPEmulator.h b/Source/Core/Core/DSPEmulator.h index edd64cabad..59a400ea22 100644 --- a/Source/Core/Core/DSPEmulator.h +++ b/Source/Core/Core/DSPEmulator.h @@ -23,6 +23,7 @@ public: virtual void DoState(PointerWrap& p) = 0; virtual void PauseAndLock(bool do_lock) = 0; + virtual void UnpauseAndUnlock() = 0; virtual void DSP_WriteMailBoxHigh(bool cpu_mailbox, u16 value) = 0; virtual void DSP_WriteMailBoxLow(bool cpu_mailbox, u16 value) = 0; diff --git a/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp b/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp index e29fbddb71..325d9cc362 100644 --- a/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp +++ b/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp @@ -245,4 +245,8 @@ u16 DSPHLE::DSP_ReadControlRegister() void DSPHLE::PauseAndLock(bool do_lock) { } + +void DSPHLE::UnpauseAndUnlock() +{ +} } // namespace DSP::HLE diff --git a/Source/Core/Core/HW/DSPHLE/DSPHLE.h b/Source/Core/Core/HW/DSPHLE/DSPHLE.h index 08b5c75e03..7ba5c12b33 100644 --- a/Source/Core/Core/HW/DSPHLE/DSPHLE.h +++ b/Source/Core/Core/HW/DSPHLE/DSPHLE.h @@ -35,6 +35,7 @@ public: bool IsLLE() const override { return false; } void DoState(PointerWrap& p) override; void PauseAndLock(bool do_lock) override; + void UnpauseAndUnlock() override; void DSP_WriteMailBoxHigh(bool cpu_mailbox, u16 value) override; void DSP_WriteMailBoxLow(bool cpu_mailbox, u16 value) override; diff --git a/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp b/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp index 9925dd5354..9e8ee5baff 100644 --- a/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp +++ b/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp @@ -305,4 +305,16 @@ void DSPLLE::PauseAndLock(bool do_lock) } } } + +void DSPLLE::UnpauseAndUnlock() +{ + m_dsp_thread_mutex.unlock(); + + if (m_is_dsp_on_thread) + { + // Signal the DSP thread so it can perform any outstanding work now (if any) + m_ppc_event.Wait(); + m_dsp_event.Set(); + } +} } // namespace DSP::LLE diff --git a/Source/Core/Core/HW/DSPLLE/DSPLLE.h b/Source/Core/Core/HW/DSPLLE/DSPLLE.h index 5796fd8fee..3deb3be039 100644 --- a/Source/Core/Core/HW/DSPLLE/DSPLLE.h +++ b/Source/Core/Core/HW/DSPLLE/DSPLLE.h @@ -27,6 +27,7 @@ public: bool IsLLE() const override { return true; } void DoState(PointerWrap& p) override; void PauseAndLock(bool do_lock) override; + void UnpauseAndUnlock() override; void DSP_WriteMailBoxHigh(bool cpu_mailbox, u16 value) override; void DSP_WriteMailBoxLow(bool cpu_mailbox, u16 value) override; |
