From bba19ad66df9895fd49747e85a8cda5578afed9e Mon Sep 17 00:00:00 2001 From: Skyth <19259897+blueskythlikesclouds@users.noreply.github.com> Date: Mon, 7 Oct 2024 21:53:45 +0300 Subject: [PATCH] Add temporary fix for audio driver loop. --- UnleashedRecomp/apu/driver/xaudio_driver.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/UnleashedRecomp/apu/driver/xaudio_driver.cpp b/UnleashedRecomp/apu/driver/xaudio_driver.cpp index c000133..151c401 100644 --- a/UnleashedRecomp/apu/driver/xaudio_driver.cpp +++ b/UnleashedRecomp/apu/driver/xaudio_driver.cpp @@ -41,22 +41,23 @@ class VoiceCallback : public IXAudio2VoiceCallback void OnVoiceError(void* pBufferContext, HRESULT Error) override {} } gVoiceCallback; -inline PPC_FUNC(DriverLoop) +PPC_FUNC(DriverLoop) { GuestThread::SetThreadName(GetCurrentThreadId(), "Audio Driver"); - auto* cpu = GetPPCContext(); while (true) { if (!g_clientCallback) { + // NOTE: This if statement doesn't get compiled in without this barrier. What? + _ReadBarrier(); continue; } WaitForSingleObject(g_audioSemaphore, INFINITE); - cpu->r3.u64 = g_clientCallbackParam; - GuestCode::Run(g_clientCallback, cpu); + ctx.r3.u64 = g_clientCallbackParam; + GuestCode::Run(g_clientCallback, &ctx); } }