Explorar el Código

Remove Half Conversion (#4106)

* Remove HalfConversion

* Update `CodeGenVersion`
Isaac Marovitz hace 3 años
padre
commit
8ac53c66b4

+ 1 - 1
Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs

@@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
         private const ushort FileFormatVersionMajor = 1;
         private const ushort FileFormatVersionMinor = 2;
         private const uint FileFormatVersionPacked = ((uint)FileFormatVersionMajor << 16) | FileFormatVersionMinor;
-        private const uint CodeGenVersion = 4069;
+        private const uint CodeGenVersion = 4106;
 
         private const string SharedTocFileName = "shared.toc";
         private const string SharedDataFileName = "shared.data";

+ 1 - 1
Ryujinx.Graphics.Shader/Translation/Optimizations/ConstantFolding.cs

@@ -262,7 +262,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
 
             value = (value >> operation.Index * 16) & 0xffff;
 
-            operation.TurnIntoCopy(ConstF(HalfConversion.HalfToSingle(value)));
+            operation.TurnIntoCopy(ConstF((float)BitConverter.UInt16BitsToHalf((ushort)value)));
         }
 
         private static void FPNegate(Operation operation)

+ 0 - 47
Ryujinx.Graphics.Shader/Translation/Optimizations/HalfConversion.cs

@@ -1,47 +0,0 @@
-using System;
-
-namespace Ryujinx.Graphics.Shader.Translation.Optimizations
-{
-    static class HalfConversion
-    {
-        public static float HalfToSingle(int value)
-        {
-            int mantissa = (value >> 0)  & 0x3ff;
-            int exponent = (value >> 10) & 0x1f;
-            int sign     = (value >> 15) & 0x1;
-
-            if (exponent == 0x1f)
-            {
-                // NaN or Infinity.
-                mantissa <<= 13;
-                exponent   = 0xff;
-            }
-            else if (exponent != 0 || mantissa != 0 )
-            {
-                if (exponent == 0)
-                {
-                    // Denormal.
-                    int e = -1;
-                    int m = mantissa;
-
-                    do
-                    {
-                        e++;
-                        m <<= 1;
-                    }
-                    while ((m & 0x400) == 0);
-
-                    mantissa = m & 0x3ff;
-                    exponent = e;
-                }
-
-                mantissa <<= 13;
-                exponent   = 127 - 15 + exponent;
-            }
-
-            int output = (sign << 31) | (exponent << 23) | mantissa;
-
-            return BitConverter.Int32BitsToSingle(output);
-        }
-    }
-}