summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorDentomologist <dentomologist@gmail.com>2025-08-13 15:43:08 -0700
committerDentomologist <dentomologist@gmail.com>2025-10-26 18:03:06 -0700
commitd5f079d78b8a894d03dee0590bfa691962f033f2 (patch)
tree44ac344f14ad558e26824bf039eb8acff07a282d /Source/Core
parent933071dd573c202de8c3c722e042d37d6bfcc2d1 (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.cpp2
-rw-r--r--Source/Core/Core/DSPEmulator.h1
-rw-r--r--Source/Core/Core/HW/DSPHLE/DSPHLE.cpp4
-rw-r--r--Source/Core/Core/HW/DSPHLE/DSPHLE.h1
-rw-r--r--Source/Core/Core/HW/DSPLLE/DSPLLE.cpp12
-rw-r--r--Source/Core/Core/HW/DSPLLE/DSPLLE.h1
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;