aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjduncanator <1518948+jduncanator@users.noreply.github.com>2019-02-15 15:47:40 +1100
committerGitHub <noreply@github.com>2019-02-15 15:47:40 +1100
commitfec8e3489d5719d0621b34ddfb9992506d7cf0f1 (patch)
tree5a5467fc5372e790484f0ee015ebe33e9de6b077
parent9cbcbaa90c2af78873d145850e0676b19b2ae79e (diff)
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
-rw-r--r--Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs31
-rw-r--r--Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs24
2 files changed, 55 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs b/Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs
index 039cc81f..b272e078 100644
--- a/Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs
+++ b/Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs
@@ -6,6 +6,7 @@ using System;
using System.IO;
using System.Text;
+using static Ryujinx.HLE.HOS.ErrorCode;
using static Ryujinx.HLE.HOS.Services.Android.Parcel;
namespace Ryujinx.HLE.HOS.Services.Vi
@@ -35,6 +36,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi
{ 2030, CreateStrayLayer },
{ 2031, DestroyStrayLayer },
{ 2101, SetLayerScalingMode },
+ { 2102, ConvertScalingMode },
{ 5202, GetDisplayVSyncEvent }
};
@@ -176,6 +178,35 @@ namespace Ryujinx.HLE.HOS.Services.Vi
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)
{
string name = GetDisplayName(context);
diff --git a/Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs b/Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs
new file mode 100644
index 00000000..824a27b7
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs
@@ -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
+ }
+}