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