aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs38
1 files changed, 35 insertions, 3 deletions
diff --git a/Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs b/Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs
index 0a43dd1b..c94473a2 100644
--- a/Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs
+++ b/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()