SPU: Sync pending samples on ENDX reads and manual RAM writes

This commit is contained in:
Stenzek committed 2026-10-17 18:37:53 +10:00
1 parent 05650d942f
commit 670f0bb0c8
1 file changed
+5
+5
View File
@@ -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<s32>::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;