Fix regression caused by wrong endian on GetAudioRendererWorkBufferSize version check
This commit is contained in:
parent
34037701c7
commit
ac91607ac3
1 changed files with 11 additions and 4 deletions
|
@ -6,6 +6,11 @@ namespace Ryujinx.Core.OsHle.Services.Aud
|
||||||
{
|
{
|
||||||
class IAudioRendererManager : IpcService
|
class IAudioRendererManager : IpcService
|
||||||
{
|
{
|
||||||
|
private const int Rev0Magic = ('R' << 0) |
|
||||||
|
('E' << 8) |
|
||||||
|
('V' << 16) |
|
||||||
|
('0' << 24);
|
||||||
|
|
||||||
private Dictionary<int, ServiceProcessRequest> m_Commands;
|
private Dictionary<int, ServiceProcessRequest> m_Commands;
|
||||||
|
|
||||||
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
|
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
|
||||||
|
@ -43,9 +48,11 @@ namespace Ryujinx.Core.OsHle.Services.Aud
|
||||||
long Unknown24 = Context.RequestData.ReadUInt32();
|
long Unknown24 = Context.RequestData.ReadUInt32();
|
||||||
long Unknown28 = Context.RequestData.ReadUInt32(); //SplitterCount
|
long Unknown28 = Context.RequestData.ReadUInt32(); //SplitterCount
|
||||||
long Unknown2c = Context.RequestData.ReadUInt32(); //Not used here in FW3.0.1
|
long Unknown2c = Context.RequestData.ReadUInt32(); //Not used here in FW3.0.1
|
||||||
uint RevMagic = Context.RequestData.ReadUInt32();
|
int RevMagic = Context.RequestData.ReadInt32();
|
||||||
|
|
||||||
if (RevMagic - 0x52455630 <= 3) //REV3 Max is supported
|
int Version = (RevMagic - Rev0Magic) >> 24;
|
||||||
|
|
||||||
|
if (Version <= 3) //REV3 Max is supported
|
||||||
{
|
{
|
||||||
long Size = RoundUp(Unknown8 * 4, 64);
|
long Size = RoundUp(Unknown8 * 4, 64);
|
||||||
Size += (UnknownC << 10);
|
Size += (UnknownC << 10);
|
||||||
|
@ -56,7 +63,7 @@ namespace Ryujinx.Core.OsHle.Services.Aud
|
||||||
Size += RoundUp((0x3C0 * (Unknown14 + UnknownC) + 4 * Unknown4) * (Unknown8 + 6), 64);
|
Size += RoundUp((0x3C0 * (Unknown14 + UnknownC) + 4 * Unknown4) * (Unknown8 + 6), 64);
|
||||||
Size += 0x2C0 * (Unknown14 + UnknownC) + 0x30 * (Unknown18 + (4 * Unknown10)) + 0x50;
|
Size += 0x2C0 * (Unknown14 + UnknownC) + 0x30 * (Unknown18 + (4 * Unknown10)) + 0x50;
|
||||||
|
|
||||||
if (RevMagic - 0x52455630 >= 3) //IsSplitterSupported
|
if (Version >= 3) //IsSplitterSupported
|
||||||
{
|
{
|
||||||
Size += RoundUp((NodeStatesGetWorkBufferSize((int)UnknownC + 1) + EdgeMatrixGetWorkBufferSize((int)UnknownC + 1)), 16);
|
Size += RoundUp((NodeStatesGetWorkBufferSize((int)UnknownC + 1) + EdgeMatrixGetWorkBufferSize((int)UnknownC + 1)), 16);
|
||||||
Size += 0xE0 * Unknown28 + 0x20 * Unknown24 + RoundUp(Unknown28 * 4, 16);
|
Size += 0xE0 * Unknown28 + 0x20 * Unknown24 + RoundUp(Unknown28 * 4, 16);
|
||||||
|
@ -81,7 +88,7 @@ namespace Ryujinx.Core.OsHle.Services.Aud
|
||||||
{
|
{
|
||||||
Context.ResponseData.Write(0L);
|
Context.ResponseData.Write(0L);
|
||||||
|
|
||||||
Context.Ns.Log.PrintError(LogClass.ServiceAudio, "Library Revision is not supported!");
|
Context.Ns.Log.PrintError(LogClass.ServiceAudio, $"Library Revision 0x{RevMagic:x8} is not supported!");
|
||||||
|
|
||||||
return 0x499;
|
return 0x499;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue