From b7eda71673690214dbe5c49fe1e4003909f607b2 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 6 Aug 2016 18:19:38 +0300 Subject: [PATCH] XAudio2.7 bug workaround --- rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp b/rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp index 0c57561684..f020b6bd54 100644 --- a/rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp +++ b/rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp @@ -129,6 +129,17 @@ void XAudio2Thread::xa27_open() void XAudio2Thread::xa27_add(const void* src, int size) { + XAUDIO2_VOICE_STATE state; + s_tls_source_voice->GetState(&state); + + // XAudio 2.7 bug workaround, when it says "SimpList: non-growable list ran out of room for new elements" and hits int 3 + if (state.BuffersQueued > 32) + { + LOG_WARNING(GENERAL, "XAudio2Thread : too many buffers enqueued (%d, pos=%u)", state.BuffersQueued, state.SamplesPlayed); + + return xa27_flush(); + } + XAUDIO2_BUFFER buffer; buffer.AudioBytes = size;