From ec6ddaf766ec53aa6ca4bbd58b7cfd61a8116e99 Mon Sep 17 00:00:00 2001
From: Kelebek1 <eeeedddccc@hotmail.co.uk>
Date: Tue, 10 Oct 2023 14:29:07 +0100
Subject: [PATCH] Clear DSP buffer after each execution

---
 .../adsp/apps/audio_renderer/audio_renderer.cpp          | 9 +++++++++
 src/audio_core/adsp/apps/audio_renderer/audio_renderer.h | 2 ++
 2 files changed, 11 insertions(+)

diff --git a/src/audio_core/adsp/apps/audio_renderer/audio_renderer.cpp b/src/audio_core/adsp/apps/audio_renderer/audio_renderer.cpp
index 972d5e45b..ef301d8b4 100644
--- a/src/audio_core/adsp/apps/audio_renderer/audio_renderer.cpp
+++ b/src/audio_core/adsp/apps/audio_renderer/audio_renderer.cpp
@@ -77,6 +77,7 @@ void AudioRenderer::Wait() {
                   "{}, got {}",
                   Message::RenderResponse, msg);
     }
+    PostDSPClearCommandBuffer();
 }
 
 void AudioRenderer::Send(Direction dir, u32 message) {
@@ -96,6 +97,14 @@ void AudioRenderer::SetCommandBuffer(s32 session_id, CpuAddr buffer, u64 size, u
     command_buffers[session_id].reset_buffer = reset;
 }
 
+void AudioRenderer::PostDSPClearCommandBuffer() noexcept {
+    for (auto& buffer : command_buffers) {
+        buffer.buffer = 0;
+        buffer.size = 0;
+        buffer.reset_buffer = false;
+    }
+}
+
 u32 AudioRenderer::GetRemainCommandCount(s32 session_id) const noexcept {
     return command_buffers[session_id].remaining_command_count;
 }
diff --git a/src/audio_core/adsp/apps/audio_renderer/audio_renderer.h b/src/audio_core/adsp/apps/audio_renderer/audio_renderer.h
index 85874d88a..57b89d9fe 100644
--- a/src/audio_core/adsp/apps/audio_renderer/audio_renderer.h
+++ b/src/audio_core/adsp/apps/audio_renderer/audio_renderer.h
@@ -85,6 +85,8 @@ private:
      */
     void CreateSinkStreams();
 
+    void PostDSPClearCommandBuffer() noexcept;
+
     /// Core system
     Core::System& system;
     /// The output sink the AudioRenderer will send samples to