diff --git a/Ryujinx.HLE/OsHle/Services/Aud/IAudioRenderer.cs b/Ryujinx.HLE/OsHle/Services/Aud/IAudioRenderer.cs index 70601202..d0a7cfc2 100644 --- a/Ryujinx.HLE/OsHle/Services/Aud/IAudioRenderer.cs +++ b/Ryujinx.HLE/OsHle/Services/Aud/IAudioRenderer.cs @@ -36,6 +36,9 @@ namespace Ryujinx.HLE.OsHle.Services.Aud public long RequestUpdateAudioRenderer(ServiceCtx Context) { long OutputPosition = Context.Request.ReceiveBuff[0].Position; + long OutputSize = Context.Request.ReceiveBuff[0].Size; + + AMemoryHelper.FillWithZeros(Context.Memory, OutputPosition, (int)OutputSize); long InputPosition = Context.Request.SendBuff[0].Position; @@ -52,26 +55,28 @@ namespace Ryujinx.HLE.OsHle.Services.Aud OutputDataHeader.EffectsSize = Params.EffectCount * 0x10; OutputDataHeader.SinksSize = Params.SinkCount * 0x20; OutputDataHeader.PerformanceManagerSize = 0x10; - OutputDataHeader.TotalSize = Marshal.SizeOf(OutputDataHeader) + OutputDataHeader.BehaviorSize + OutputDataHeader.MemoryPoolsSize + - OutputDataHeader.VoicesSize + OutputDataHeader.EffectsSize + OutputDataHeader.SinksSize + OutputDataHeader.PerformanceManagerSize; + OutputDataHeader.TotalSize = Marshal.SizeOf(OutputDataHeader) + + OutputDataHeader.BehaviorSize + + OutputDataHeader.MemoryPoolsSize + + OutputDataHeader.VoicesSize + + OutputDataHeader.EffectsSize + + OutputDataHeader.SinksSize + + OutputDataHeader.PerformanceManagerSize; AMemoryHelper.Write(Context.Memory, OutputPosition, OutputDataHeader); for (int Offset = 0x40; Offset < 0x40 + OutputDataHeader.MemoryPoolsSize; Offset += 0x10, MemoryPoolOffset += 0x20) { - MemoryPoolStates PoolState = (MemoryPoolStates) Context.Memory.ReadInt32(InputPosition + MemoryPoolOffset + 0x10); + MemoryPoolState PoolState = (MemoryPoolState)Context.Memory.ReadInt32(InputPosition + MemoryPoolOffset + 0x10); - if (PoolState == MemoryPoolStates.RequestAttach) + //TODO: Figure out what the other values does. + if (PoolState == MemoryPoolState.RequestAttach) { - Context.Memory.WriteInt32(OutputPosition + Offset, (int)MemoryPoolStates.Attached); + Context.Memory.WriteInt32(OutputPosition + Offset, (int)MemoryPoolState.Attached); } - else if (PoolState == MemoryPoolStates.RequestDetach) + else if (PoolState == MemoryPoolState.RequestDetach) { - Context.Memory.WriteInt32(OutputPosition + Offset, (int)MemoryPoolStates.Detached); - } - else - { - Context.Memory.WriteInt32(OutputPosition + Offset, (int)PoolState); + Context.Memory.WriteInt32(OutputPosition + Offset, (int)MemoryPoolState.Detached); } } @@ -118,4 +123,3 @@ namespace Ryujinx.HLE.OsHle.Services.Aud } } } - \ No newline at end of file diff --git a/Ryujinx.HLE/OsHle/Services/Aud/MemoryPoolState.cs b/Ryujinx.HLE/OsHle/Services/Aud/MemoryPoolState.cs new file mode 100644 index 00000000..892cde49 --- /dev/null +++ b/Ryujinx.HLE/OsHle/Services/Aud/MemoryPoolState.cs @@ -0,0 +1,13 @@ +namespace Ryujinx.HLE.OsHle.Services.Aud +{ + enum MemoryPoolState : int + { + Invalid = 0, + Unknown = 1, + RequestDetach = 2, + Detached = 3, + RequestAttach = 4, + Attached = 5, + Released = 6 + } +} diff --git a/Ryujinx.HLE/OsHle/Services/Aud/MemoryPoolStates.cs b/Ryujinx.HLE/OsHle/Services/Aud/MemoryPoolStates.cs deleted file mode 100644 index 20f9ce79..00000000 --- a/Ryujinx.HLE/OsHle/Services/Aud/MemoryPoolStates.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace Ryujinx.HLE.OsHle.Services.Aud -{ - enum MemoryPoolStates : int - { - Invalid = 0x0, - Unknown = 0x1, - RequestDetach = 0x2, - Detached = 0x3, - RequestAttach = 0x4, - Attached = 0x5, - Released = 0x6, - } -}