mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-11-23 19:52:02 +00:00
Workaround for recent audren regression
This commit is contained in:
parent
c26ddd6259
commit
69697957e6
3 changed files with 29 additions and 25 deletions
|
@ -36,6 +36,9 @@ namespace Ryujinx.HLE.OsHle.Services.Aud
|
||||||
public long RequestUpdateAudioRenderer(ServiceCtx Context)
|
public long RequestUpdateAudioRenderer(ServiceCtx Context)
|
||||||
{
|
{
|
||||||
long OutputPosition = Context.Request.ReceiveBuff[0].Position;
|
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;
|
long InputPosition = Context.Request.SendBuff[0].Position;
|
||||||
|
|
||||||
|
@ -52,26 +55,28 @@ namespace Ryujinx.HLE.OsHle.Services.Aud
|
||||||
OutputDataHeader.EffectsSize = Params.EffectCount * 0x10;
|
OutputDataHeader.EffectsSize = Params.EffectCount * 0x10;
|
||||||
OutputDataHeader.SinksSize = Params.SinkCount * 0x20;
|
OutputDataHeader.SinksSize = Params.SinkCount * 0x20;
|
||||||
OutputDataHeader.PerformanceManagerSize = 0x10;
|
OutputDataHeader.PerformanceManagerSize = 0x10;
|
||||||
OutputDataHeader.TotalSize = Marshal.SizeOf(OutputDataHeader) + OutputDataHeader.BehaviorSize + OutputDataHeader.MemoryPoolsSize +
|
OutputDataHeader.TotalSize = Marshal.SizeOf(OutputDataHeader) +
|
||||||
OutputDataHeader.VoicesSize + OutputDataHeader.EffectsSize + OutputDataHeader.SinksSize + OutputDataHeader.PerformanceManagerSize;
|
OutputDataHeader.BehaviorSize +
|
||||||
|
OutputDataHeader.MemoryPoolsSize +
|
||||||
|
OutputDataHeader.VoicesSize +
|
||||||
|
OutputDataHeader.EffectsSize +
|
||||||
|
OutputDataHeader.SinksSize +
|
||||||
|
OutputDataHeader.PerformanceManagerSize;
|
||||||
|
|
||||||
AMemoryHelper.Write(Context.Memory, OutputPosition, OutputDataHeader);
|
AMemoryHelper.Write(Context.Memory, OutputPosition, OutputDataHeader);
|
||||||
|
|
||||||
for (int Offset = 0x40; Offset < 0x40 + OutputDataHeader.MemoryPoolsSize; Offset += 0x10, MemoryPoolOffset += 0x20)
|
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);
|
Context.Memory.WriteInt32(OutputPosition + Offset, (int)MemoryPoolState.Detached);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Context.Memory.WriteInt32(OutputPosition + Offset, (int)PoolState);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,4 +123,3 @@ namespace Ryujinx.HLE.OsHle.Services.Aud
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
13
Ryujinx.HLE/OsHle/Services/Aud/MemoryPoolState.cs
Normal file
13
Ryujinx.HLE/OsHle/Services/Aud/MemoryPoolState.cs
Normal file
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue