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:
jduncanator 2019-02-15 15:47:40 +11:00 committed by GitHub
parent 9cbcbaa90c
commit fec8e3489d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 55 additions and 0 deletions

View file

@ -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);

View 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
}
}