summaryrefslogtreecommitdiff
path: root/src/audio_core/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio_core/renderer')
-rw-r--r--src/audio_core/renderer/adsp/audio_renderer.cpp2
-rw-r--r--src/audio_core/renderer/adsp/audio_renderer.h1
-rw-r--r--src/audio_core/renderer/system_manager.cpp18
-rw-r--r--src/audio_core/renderer/system_manager.h7
4 files changed, 4 insertions, 24 deletions
diff --git a/src/audio_core/renderer/adsp/audio_renderer.cpp b/src/audio_core/renderer/adsp/audio_renderer.cpp
index 42b4b167a..503f40349 100644
--- a/src/audio_core/renderer/adsp/audio_renderer.cpp
+++ b/src/audio_core/renderer/adsp/audio_renderer.cpp
@@ -189,6 +189,8 @@ void AudioRenderer::ThreadFunc() {
189 max_time = std::min(command_buffer.time_limit, max_time); 189 max_time = std::min(command_buffer.time_limit, max_time);
190 command_list_processor.SetProcessTimeMax(max_time); 190 command_list_processor.SetProcessTimeMax(max_time);
191 191
192 streams[index]->WaitFreeSpace();
193
192 // Process the command list 194 // Process the command list
193 { 195 {
194 MICROPROFILE_SCOPE(Audio_Renderer); 196 MICROPROFILE_SCOPE(Audio_Renderer);
diff --git a/src/audio_core/renderer/adsp/audio_renderer.h b/src/audio_core/renderer/adsp/audio_renderer.h
index 151f38c1b..f97f9401e 100644
--- a/src/audio_core/renderer/adsp/audio_renderer.h
+++ b/src/audio_core/renderer/adsp/audio_renderer.h
@@ -12,6 +12,7 @@
12#include "common/common_types.h" 12#include "common/common_types.h"
13#include "common/reader_writer_queue.h" 13#include "common/reader_writer_queue.h"
14#include "common/thread.h" 14#include "common/thread.h"
15#include "common/polyfill_thread.h"
15 16
16namespace Core { 17namespace Core {
17namespace Timing { 18namespace Timing {
diff --git a/src/audio_core/renderer/system_manager.cpp b/src/audio_core/renderer/system_manager.cpp
index 9ddfa4a91..07d8ed093 100644
--- a/src/audio_core/renderer/system_manager.cpp
+++ b/src/audio_core/renderer/system_manager.cpp
@@ -17,11 +17,7 @@ MICROPROFILE_DEFINE(Audio_RenderSystemManager, "Audio", "Render System Manager",
17namespace AudioCore::AudioRenderer { 17namespace AudioCore::AudioRenderer {
18 18
19SystemManager::SystemManager(Core::System& core_) 19SystemManager::SystemManager(Core::System& core_)
20 : core{core_}, adsp{core.AudioCore().GetADSP()}, mailbox{adsp.GetRenderMailbox()}, 20 : core{core_}, adsp{core.AudioCore().GetADSP()}, mailbox{adsp.GetRenderMailbox()} {}
21 thread_event{Core::Timing::CreateEvent(
22 "AudioRendererSystemManager", [this](std::uintptr_t, s64 time, std::chrono::nanoseconds) {
23 return ThreadFunc2(time);
24 })} {}
25 21
26SystemManager::~SystemManager() { 22SystemManager::~SystemManager() {
27 Stop(); 23 Stop();
@@ -32,8 +28,6 @@ bool SystemManager::InitializeUnsafe() {
32 if (adsp.Start()) { 28 if (adsp.Start()) {
33 active = true; 29 active = true;
34 thread = std::jthread([this](std::stop_token stop_token) { ThreadFunc(); }); 30 thread = std::jthread([this](std::stop_token stop_token) { ThreadFunc(); });
35 core.CoreTiming().ScheduleLoopingEvent(std::chrono::nanoseconds(0), RENDER_TIME,
36 thread_event);
37 } 31 }
38 } 32 }
39 33
@@ -44,7 +38,6 @@ void SystemManager::Stop() {
44 if (!active) { 38 if (!active) {
45 return; 39 return;
46 } 40 }
47 core.CoreTiming().UnscheduleEvent(thread_event, {});
48 active = false; 41 active = false;
49 update.store(true); 42 update.store(true);
50 update.notify_all(); 43 update.notify_all();
@@ -110,16 +103,7 @@ void SystemManager::ThreadFunc() {
110 103
111 adsp.Signal(); 104 adsp.Signal();
112 adsp.Wait(); 105 adsp.Wait();
113
114 update.wait(false);
115 update.store(false);
116 } 106 }
117} 107}
118 108
119std::optional<std::chrono::nanoseconds> SystemManager::ThreadFunc2(s64 time) {
120 update.store(true);
121 update.notify_all();
122 return std::nullopt;
123}
124
125} // namespace AudioCore::AudioRenderer 109} // namespace AudioCore::AudioRenderer
diff --git a/src/audio_core/renderer/system_manager.h b/src/audio_core/renderer/system_manager.h
index 415ddb74f..1f0bbd8b4 100644
--- a/src/audio_core/renderer/system_manager.h
+++ b/src/audio_core/renderer/system_manager.h
@@ -68,11 +68,6 @@ private:
68 */ 68 */
69 void ThreadFunc(); 69 void ThreadFunc();
70 70
71 /**
72 * Signalling core timing thread to run ThreadFunc.
73 */
74 std::optional<std::chrono::nanoseconds> ThreadFunc2(s64 time);
75
76 enum class StreamState { 71 enum class StreamState {
77 Filling, 72 Filling,
78 Steady, 73 Steady,
@@ -95,8 +90,6 @@ private:
95 ADSP::ADSP& adsp; 90 ADSP::ADSP& adsp;
96 /// AudioRenderer mailbox for communication 91 /// AudioRenderer mailbox for communication
97 ADSP::AudioRenderer_Mailbox* mailbox{}; 92 ADSP::AudioRenderer_Mailbox* mailbox{};
98 /// Core timing event to signal main thread
99 std::shared_ptr<Core::Timing::EventType> thread_event;
100 /// Atomic for main thread to wait on 93 /// Atomic for main thread to wait on
101 std::atomic<bool> update{}; 94 std::atomic<bool> update{};
102}; 95};