From c74a047655e3b973df0981ded1b8f3c79b86b400 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Sat, 11 Feb 2023 18:20:21 +0100 Subject: [PATCH] [Win] Revert XE_USE_KUSER_SHARED back to 0 Also limit queued audio frames --- src/xenia/apu/audio_system.cc | 8 ++++---- src/xenia/apu/audio_system.h | 1 + src/xenia/base/platform_win.h | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/xenia/apu/audio_system.cc b/src/xenia/apu/audio_system.cc index 23eac5b8d..ea44f065a 100644 --- a/src/xenia/apu/audio_system.cc +++ b/src/xenia/apu/audio_system.cc @@ -46,10 +46,10 @@ AudioSystem::AudioSystem(cpu::Processor* processor) processor_(processor), worker_running_(false) { std::memset(clients_, 0, sizeof(clients_)); + queued_frames_ = std::max(cvars::max_queued_frames, (uint32_t)16); for (size_t i = 0; i < kMaximumClientCount; ++i) { - client_semaphores_[i] = - xe::threading::Semaphore::Create(0, cvars::max_queued_frames); + client_semaphores_[i] = xe::threading::Semaphore::Create(0, queued_frames_); wait_handles_[i] = client_semaphores_[i].get(); } shutdown_event_ = xe::threading::Event::CreateAutoResetEvent(false); @@ -179,7 +179,7 @@ X_STATUS AudioSystem::RegisterClient(uint32_t callback, uint32_t callback_arg, assert_true(index >= 0); auto client_semaphore = client_semaphores_[index].get(); - auto ret = client_semaphore->Release(cvars::max_queued_frames, nullptr); + auto ret = client_semaphore->Release(queued_frames_, nullptr); assert_true(ret); AudioDriver* driver; @@ -282,7 +282,7 @@ bool AudioSystem::Restore(ByteStream* stream) { client.in_use = true; auto client_semaphore = client_semaphores_[id].get(); - auto ret = client_semaphore->Release(cvars::max_queued_frames, nullptr); + auto ret = client_semaphore->Release(queued_frames_, nullptr); assert_true(ret); AudioDriver* driver = nullptr; diff --git a/src/xenia/apu/audio_system.h b/src/xenia/apu/audio_system.h index db6a29d37..54e2380d9 100644 --- a/src/xenia/apu/audio_system.h +++ b/src/xenia/apu/audio_system.h @@ -70,6 +70,7 @@ class AudioSystem { Memory* memory_ = nullptr; cpu::Processor* processor_ = nullptr; std::unique_ptr xma_decoder_; + uint32_t queued_frames_; std::atomic worker_running_ = {false}; kernel::object_ref worker_thread_; diff --git a/src/xenia/base/platform_win.h b/src/xenia/base/platform_win.h index d342a05b5..a608f04b4 100644 --- a/src/xenia/base/platform_win.h +++ b/src/xenia/base/platform_win.h @@ -37,7 +37,7 @@ #define XE_USE_NTDLL_FUNCTIONS 1 //chrispy: disabling this for now, more research needs to be done imo, although it does work very well on my machine // -#define XE_USE_KUSER_SHARED 1 +#define XE_USE_KUSER_SHARED 0 #if XE_USE_NTDLL_FUNCTIONS == 1 /* ntdll versions of functions often skip through a lot of extra garbage in