Add temporary fix for audio driver loop.

This commit is contained in:
Skyth 2024-10-07 21:53:45 +03:00
parent 81d737e14f
commit bba19ad66d

View file

@ -41,22 +41,23 @@ class VoiceCallback : public IXAudio2VoiceCallback
void OnVoiceError(void* pBufferContext, HRESULT Error) override {} void OnVoiceError(void* pBufferContext, HRESULT Error) override {}
} gVoiceCallback; } gVoiceCallback;
inline PPC_FUNC(DriverLoop) PPC_FUNC(DriverLoop)
{ {
GuestThread::SetThreadName(GetCurrentThreadId(), "Audio Driver"); GuestThread::SetThreadName(GetCurrentThreadId(), "Audio Driver");
auto* cpu = GetPPCContext();
while (true) while (true)
{ {
if (!g_clientCallback) if (!g_clientCallback)
{ {
// NOTE: This if statement doesn't get compiled in without this barrier. What?
_ReadBarrier();
continue; continue;
} }
WaitForSingleObject(g_audioSemaphore, INFINITE); WaitForSingleObject(g_audioSemaphore, INFINITE);
cpu->r3.u64 = g_clientCallbackParam; ctx.r3.u64 = g_clientCallbackParam;
GuestCode::Run(g_clientCallback, cpu); GuestCode::Run(g_clientCallback, &ctx);
} }
} }