From 670f0bb0c8a0d6dcd8ee858ffbd6b001d1da5131 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 17 Oct 2026 18:21:55 +1000 Subject: [PATCH] SPU: Sync pending samples on ENDX reads and manual RAM writes --- src/core/spu.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/spu.cpp b/src/core/spu.cpp index bc0051819..56f35f234 100644 --- a/src/core/spu.cpp +++ b/src/core/spu.cpp @@ -785,9 +785,11 @@ u16 SPU::ReadRegister(u32 offset) return Truncate16(s_state.reverb_on_register >> 16); case 0x1F801D9C - SPU_BASE: + GeneratePendingSamples(); return Truncate16(s_state.endx_register); case 0x1F801D9E - SPU_BASE: + GeneratePendingSamples(); return Truncate16(s_state.endx_register >> 16); case 0x1F801DA2 - SPU_BASE: @@ -1478,6 +1480,9 @@ void SPU::ManualTransferWrite(u16 value) ExecuteTransfer(nullptr, std::numeric_limits::max()); } + // Pending samples need to read the old data. + InternalGeneratePendingSamples(); + std::memcpy(&s_ram[s_state.transfer_address], &value, sizeof(u16)); s_state.transfer_address = (s_state.transfer_address + sizeof(u16)) & RAM_MASK;