Просмотр исходного кода

Implement ConvertScalingMode properly (#596)

* Implement ConvertScalingMode properly

* Fix up the naming

* Only values 2 and 4 are allowed

* Return a nullable enum from ConvetScalingMode

* Fix typo on method name

* Use convertedScalingMode
gdkchan 7 лет назад
Родитель
Сommit
6335753e38

+ 15 - 6
Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs

@@ -180,22 +180,31 @@ namespace Ryujinx.HLE.HOS.Services.Vi
 
         public long ConvertScalingMode(ServiceCtx context)
         {
-            SrcScalingMode  scalingMode     = (SrcScalingMode)context.RequestData.ReadInt32();
-            DstScalingMode? destScalingMode = ConvetScalingModeImpl(scalingMode);
+            SrcScalingMode scalingMode = (SrcScalingMode)context.RequestData.ReadInt32();
 
-            if (!destScalingMode.HasValue)
+            DstScalingMode? convertedScalingMode = ConvertScalingMode(scalingMode);
+
+            if (!convertedScalingMode.HasValue)
             {
+                //Scaling mode out of the range of valid values.
                 return MakeError(ErrorModule.Vi, 1);
             }
 
-            context.ResponseData.Write((ulong)destScalingMode);
+            if (scalingMode != SrcScalingMode.ScaleToWindow &&
+                scalingMode != SrcScalingMode.PreserveAspectRatio)
+            {
+                //Invalid scaling mode specified.
+                return MakeError(ErrorModule.Vi, 6);
+            }
+
+            context.ResponseData.Write((ulong)convertedScalingMode);
 
             return 0;
         }
 
-        private DstScalingMode? ConvetScalingModeImpl(SrcScalingMode srcScalingMode)
+        private DstScalingMode? ConvertScalingMode(SrcScalingMode source)
         {
-            switch (srcScalingMode)
+            switch (source)
             {
                 case SrcScalingMode.None:                return DstScalingMode.None;
                 case SrcScalingMode.Freeze:              return DstScalingMode.Freeze;

+ 9 - 13
Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs

@@ -1,24 +1,20 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Ryujinx.HLE.HOS.Services.Vi
+namespace Ryujinx.HLE.HOS.Services.Vi
 {
     enum SrcScalingMode
     {
-        Freeze = 0,
-        ScaleToWindow = 1,
-        ScaleAndCrop = 2,
-        None = 3,
+        None                = 0,
+        Freeze              = 1,
+        ScaleToWindow       = 2,
+        ScaleAndCrop        = 3,
         PreserveAspectRatio = 4
     }
 
     enum DstScalingMode
     {
-        None = 0,
-        Freeze = 1,
-        ScaleToWindow = 2,
-        ScaleAndCrop = 3,
+        Freeze              = 0,
+        ScaleToWindow       = 1,
+        ScaleAndCrop        = 2,
+        None                = 3,
         PreserveAspectRatio = 4
     }
 }