Ver Fonte

Improved Min/Mip -> MinFilter enum conversion

gdk há 6 anos atrás
pai
commit
cdeeac163f

+ 35 - 3
Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs

@@ -94,10 +94,42 @@ namespace Ryujinx.Graphics.Gpu.Image
 
         public MinFilter UnpackMinFilter()
         {
-            int minFilter = (int)(Word1 >> 4) & 3;
-            int mipFilter = (int)(Word1 >> 6) & 3;
+            SamplerMinFilter minFilter = (SamplerMinFilter)((Word1 >> 4) & 3);
+            SamplerMipFilter mipFilter = (SamplerMipFilter)((Word1 >> 6) & 3);
 
-            return (MinFilter)(minFilter + (mipFilter - 1) * 2);
+            return ConvertFilter(minFilter, mipFilter);
+        }
+
+        private static MinFilter ConvertFilter(SamplerMinFilter minFilter, SamplerMipFilter mipFilter)
+        {
+            switch (mipFilter)
+            {
+                case SamplerMipFilter.None:
+                    switch (minFilter)
+                    {
+                        case SamplerMinFilter.Nearest: return MinFilter.Nearest;
+                        case SamplerMinFilter.Linear:  return MinFilter.Linear;
+                    }
+                    break;
+
+                case SamplerMipFilter.Nearest:
+                    switch (minFilter)
+                    {
+                        case SamplerMinFilter.Nearest: return MinFilter.NearestMipmapNearest;
+                        case SamplerMinFilter.Linear:  return MinFilter.LinearMipmapNearest;
+                    }
+                    break;
+
+                case SamplerMipFilter.Linear:
+                    switch (minFilter)
+                    {
+                        case SamplerMinFilter.Nearest: return MinFilter.NearestMipmapLinear;
+                        case SamplerMinFilter.Linear:  return MinFilter.LinearMipmapLinear;
+                    }
+                    break;
+            }
+
+            return MinFilter.Nearest;
         }
 
         public ReductionFilter UnpackReductionFilter()

+ 8 - 0
Ryujinx.Graphics.Gpu/Image/SamplerMinFilter.cs

@@ -0,0 +1,8 @@
+namespace Ryujinx.Graphics.Gpu.Image
+{
+    enum SamplerMinFilter
+    {
+        Nearest = 1,
+        Linear
+    }
+}

+ 9 - 0
Ryujinx.Graphics.Gpu/Image/SamplerMipFilter.cs

@@ -0,0 +1,9 @@
+namespace Ryujinx.Graphics.Gpu.Image
+{
+    enum SamplerMipFilter
+    {
+        None = 1,
+        Nearest,
+        Linear
+    }
+}