Vi: Implement ConvertScalingMode (#581)
* Vi: Implement ConvertScalingMode For now, it seems Nintendo just map 1:1 between the two enums. * Resolve style nits * Vi: Correct mapping order
This commit is contained in:
parent
9cbcbaa90c
commit
fec8e3489d
2 changed files with 55 additions and 0 deletions
|
@ -6,6 +6,7 @@ using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
|
using static Ryujinx.HLE.HOS.ErrorCode;
|
||||||
using static Ryujinx.HLE.HOS.Services.Android.Parcel;
|
using static Ryujinx.HLE.HOS.Services.Android.Parcel;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Vi
|
namespace Ryujinx.HLE.HOS.Services.Vi
|
||||||
|
@ -35,6 +36,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi
|
||||||
{ 2030, CreateStrayLayer },
|
{ 2030, CreateStrayLayer },
|
||||||
{ 2031, DestroyStrayLayer },
|
{ 2031, DestroyStrayLayer },
|
||||||
{ 2101, SetLayerScalingMode },
|
{ 2101, SetLayerScalingMode },
|
||||||
|
{ 2102, ConvertScalingMode },
|
||||||
{ 5202, GetDisplayVSyncEvent }
|
{ 5202, GetDisplayVSyncEvent }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -176,6 +178,35 @@ namespace Ryujinx.HLE.HOS.Services.Vi
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long ConvertScalingMode(ServiceCtx context)
|
||||||
|
{
|
||||||
|
SrcScalingMode scalingMode = (SrcScalingMode)context.RequestData.ReadInt32();
|
||||||
|
DstScalingMode? destScalingMode = ConvetScalingModeImpl(scalingMode);
|
||||||
|
|
||||||
|
if (!destScalingMode.HasValue)
|
||||||
|
{
|
||||||
|
return MakeError(ErrorModule.Vi, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
context.ResponseData.Write((ulong)destScalingMode);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private DstScalingMode? ConvetScalingModeImpl(SrcScalingMode srcScalingMode)
|
||||||
|
{
|
||||||
|
switch (srcScalingMode)
|
||||||
|
{
|
||||||
|
case SrcScalingMode.None: return DstScalingMode.None;
|
||||||
|
case SrcScalingMode.Freeze: return DstScalingMode.Freeze;
|
||||||
|
case SrcScalingMode.ScaleAndCrop: return DstScalingMode.ScaleAndCrop;
|
||||||
|
case SrcScalingMode.ScaleToWindow: return DstScalingMode.ScaleToWindow;
|
||||||
|
case SrcScalingMode.PreserveAspectRatio: return DstScalingMode.PreserveAspectRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public long GetDisplayVSyncEvent(ServiceCtx context)
|
public long GetDisplayVSyncEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
string name = GetDisplayName(context);
|
string name = GetDisplayName(context);
|
||||||
|
|
24
Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs
Normal file
24
Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Ryujinx.HLE.HOS.Services.Vi
|
||||||
|
{
|
||||||
|
enum SrcScalingMode
|
||||||
|
{
|
||||||
|
Freeze = 0,
|
||||||
|
ScaleToWindow = 1,
|
||||||
|
ScaleAndCrop = 2,
|
||||||
|
None = 3,
|
||||||
|
PreserveAspectRatio = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
enum DstScalingMode
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Freeze = 1,
|
||||||
|
ScaleToWindow = 2,
|
||||||
|
ScaleAndCrop = 3,
|
||||||
|
PreserveAspectRatio = 4
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue