From 9a684ff06602e011bc997a7c47fc022bbd9498f6 Mon Sep 17 00:00:00 2001 From: Coxxs <58-coxxs@users.noreply.git.ryujinx.app> Date: Sat, 31 Jan 2026 11:22:14 -0600 Subject: [PATCH] audio: Fix crash due to invalid Splitter size Fix crash caused by reading incorrect size of Splitter data. In most games the crash doesnt happen if you have nn::audio::AudioRendererParameter VoiceCount aligned to 2, as that causes splitter data to be aligned by 0x10, but otherwise, the alignment by 0x10 done in SplitterContext->Update may exceed SplitterSize (which was previously labeled as Unknown24), causing a crash. (Crash can be replicated by doing AudioRendererParameter.voiceCount++; in any SDK 20.X game that works, which doesn't cause crash on actual hardware) (This patch is from a friend who makes mods.) --- src/Ryujinx.Audio/Renderer/Common/UpdateDataHeader.cs | 2 +- src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx.Audio/Renderer/Common/UpdateDataHeader.cs b/src/Ryujinx.Audio/Renderer/Common/UpdateDataHeader.cs index 98b224ebf..636935055 100644 --- a/src/Ryujinx.Audio/Renderer/Common/UpdateDataHeader.cs +++ b/src/Ryujinx.Audio/Renderer/Common/UpdateDataHeader.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Audio.Renderer.Common public uint MixesSize; public uint SinksSize; public uint PerformanceBufferSize; - public uint Unknown24; + public uint SplitterSize; public uint RenderInfoSize; #pragma warning disable IDE0051, CS0169 // Remove unused field diff --git a/src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs b/src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs index 52f1efd67..aa8be4af8 100644 --- a/src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs +++ b/src/Ryujinx.Audio/Renderer/Server/StateUpdater.cs @@ -433,8 +433,12 @@ namespace Ryujinx.Audio.Renderer.Server public ResultCode UpdateSplitter(SplitterContext context) { + long initialInputConsumed = _inputReader.Consumed; + if (context.Update(ref _inputReader)) { + _inputReader.SetConsumed(initialInputConsumed + _inputHeader.SplitterSize); + return ResultCode.Success; }