aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/Converters
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Converters')
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/AddressModeConverter.cs26
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/BlendFactorConverter.cs39
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/BlendOpConverter.cs25
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/CompareModeConverter.cs20
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/CompareOpConverter.cs28
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/DepthStencilModeConverter.cs20
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/FaceConverter.cs23
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/FrontFaceConverter.cs22
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/IndexTypeConverter.cs21
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/MagFilterConverter.cs20
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/MinFilterConverter.cs24
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/PrimitiveTopologyConverter.cs33
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/StencilOpConverter.cs27
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/SwizzleComponentConverter.cs24
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/TargetConverter.cs33
15 files changed, 385 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Converters/AddressModeConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/AddressModeConverter.cs
new file mode 100644
index 00000000..8f9b5074
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/AddressModeConverter.cs
@@ -0,0 +1,26 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL.Sampler;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class AddressModeConverter
+ {
+ public static TextureWrapMode Convert(this AddressMode mode)
+ {
+ switch (mode)
+ {
+ case AddressMode.Clamp : return TextureWrapMode.Clamp;
+ case AddressMode.Repeat : return TextureWrapMode.Repeat;
+ case AddressMode.MirrorClamp : return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampExt;
+ case AddressMode.MirrorClampToEdge : return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToEdgeExt;
+ case AddressMode.MirrorClampToBorder : return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToBorderExt;
+ case AddressMode.ClampToBorder : return TextureWrapMode.ClampToBorder;
+ case AddressMode.MirroredRepeat : return TextureWrapMode.MirroredRepeat;
+ case AddressMode.ClampToEdge : return TextureWrapMode.ClampToEdge;
+ }
+
+ throw new ArgumentException($"Invalid address mode \"{mode}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/BlendFactorConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/BlendFactorConverter.cs
new file mode 100644
index 00000000..1dc40522
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/BlendFactorConverter.cs
@@ -0,0 +1,39 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL.Blend;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class BlendFactorConverter
+ {
+ public static All Convert(this BlendFactor factor)
+ {
+ switch (factor)
+ {
+ case BlendFactor.Zero: return All.Zero;
+ case BlendFactor.One: return All.One;
+ case BlendFactor.SrcColor: return All.SrcColor;
+ case BlendFactor.OneMinusSrcColor: return All.OneMinusSrcColor;
+ case BlendFactor.SrcAlpha: return All.SrcAlpha;
+ case BlendFactor.OneMinusSrcAlpha: return All.OneMinusSrcAlpha;
+ case BlendFactor.DstAlpha: return All.DstAlpha;
+ case BlendFactor.OneMinusDstAlpha: return All.OneMinusDstAlpha;
+ case BlendFactor.DstColor: return All.DstColor;
+ case BlendFactor.OneMinusDstColor: return All.OneMinusDstColor;
+ case BlendFactor.SrcAlphaSaturate: return All.SrcAlphaSaturate;
+ case BlendFactor.Src1Color: return All.Src1Color;
+ case BlendFactor.OneMinusSrc1Color: return All.OneMinusSrc1Color;
+ case BlendFactor.Src1Alpha: return All.Src1Alpha;
+ case BlendFactor.OneMinusSrc1Alpha: return All.OneMinusSrc1Alpha;
+ case BlendFactor.ConstantColor: return All.ConstantColor;
+ case BlendFactor.OneMinusConstantColor: return All.OneMinusConstantColor;
+ case BlendFactor.ConstantAlpha: return All.ConstantAlpha;
+ case BlendFactor.OneMinusConstantAlpha: return All.OneMinusConstantAlpha;
+ }
+
+ return All.Zero;
+
+ throw new ArgumentException($"Invalid blend factor \"{factor}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/BlendOpConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/BlendOpConverter.cs
new file mode 100644
index 00000000..b33a3bf8
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/BlendOpConverter.cs
@@ -0,0 +1,25 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL.Blend;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class BlendOpConverter
+ {
+ public static BlendEquationMode Convert(this BlendOp op)
+ {
+ switch (op)
+ {
+ case BlendOp.Add: return BlendEquationMode.FuncAdd;
+ case BlendOp.Subtract: return BlendEquationMode.FuncSubtract;
+ case BlendOp.ReverseSubtract: return BlendEquationMode.FuncReverseSubtract;
+ case BlendOp.Minimum: return BlendEquationMode.Min;
+ case BlendOp.Maximum: return BlendEquationMode.Max;
+ }
+
+ return BlendEquationMode.FuncAdd;
+
+ throw new ArgumentException($"Invalid blend operation \"{op}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/CompareModeConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/CompareModeConverter.cs
new file mode 100644
index 00000000..c0287d8a
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/CompareModeConverter.cs
@@ -0,0 +1,20 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL.Sampler;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class CompareModeConverter
+ {
+ public static TextureCompareMode Convert(this CompareMode mode)
+ {
+ switch (mode)
+ {
+ case CompareMode.None: return TextureCompareMode.None;
+ case CompareMode.CompareRToTexture: return TextureCompareMode.CompareRToTexture;
+ }
+
+ throw new ArgumentException($"Invalid compare mode \"{mode}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/CompareOpConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/CompareOpConverter.cs
new file mode 100644
index 00000000..f592735b
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/CompareOpConverter.cs
@@ -0,0 +1,28 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class CompareOpConverter
+ {
+ public static All Convert(this CompareOp op)
+ {
+ switch (op)
+ {
+ case CompareOp.Never: return All.Never;
+ case CompareOp.Less: return All.Less;
+ case CompareOp.Equal: return All.Equal;
+ case CompareOp.LessOrEqual: return All.Lequal;
+ case CompareOp.Greater: return All.Greater;
+ case CompareOp.NotEqual: return All.Notequal;
+ case CompareOp.GreaterOrEqual: return All.Gequal;
+ case CompareOp.Always: return All.Always;
+ }
+
+ return All.Never;
+
+ throw new ArgumentException($"Invalid compare operation \"{op}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/DepthStencilModeConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/DepthStencilModeConverter.cs
new file mode 100644
index 00000000..4d14bdea
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/DepthStencilModeConverter.cs
@@ -0,0 +1,20 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL.Texture;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class DepthStencilModeConverter
+ {
+ public static All Convert(this DepthStencilMode mode)
+ {
+ switch (mode)
+ {
+ case DepthStencilMode.Depth: return All.Depth;
+ case DepthStencilMode.Stencil: return All.Stencil;
+ }
+
+ throw new ArgumentException($"Invalid depth stencil mode \"{mode}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/FaceConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/FaceConverter.cs
new file mode 100644
index 00000000..5c23b68a
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/FaceConverter.cs
@@ -0,0 +1,23 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class FaceConverter
+ {
+ public static CullFaceMode Convert(this Face face)
+ {
+ switch (face)
+ {
+ case Face.Back: return CullFaceMode.Back;
+ case Face.Front: return CullFaceMode.Front;
+ case Face.FrontAndBack: return CullFaceMode.FrontAndBack;
+ }
+
+ return CullFaceMode.FrontAndBack;
+
+ throw new ArgumentException($"Invalid face \"{face}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/FrontFaceConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/FrontFaceConverter.cs
new file mode 100644
index 00000000..1cae36cd
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/FrontFaceConverter.cs
@@ -0,0 +1,22 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class FrontFaceConverter
+ {
+ public static FrontFaceDirection Convert(this FrontFace frontFace)
+ {
+ switch (frontFace)
+ {
+ case FrontFace.Clockwise: return FrontFaceDirection.Cw;
+ case FrontFace.CounterClockwise: return FrontFaceDirection.Ccw;
+ }
+
+ return FrontFaceDirection.Cw;
+
+ throw new ArgumentException($"Invalid front face \"{frontFace}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/IndexTypeConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/IndexTypeConverter.cs
new file mode 100644
index 00000000..d3100b98
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/IndexTypeConverter.cs
@@ -0,0 +1,21 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class IndexTypeConverter
+ {
+ public static DrawElementsType Convert(this IndexType type)
+ {
+ switch (type)
+ {
+ case IndexType.UByte: return DrawElementsType.UnsignedByte;
+ case IndexType.UShort: return DrawElementsType.UnsignedShort;
+ case IndexType.UInt: return DrawElementsType.UnsignedInt;
+ }
+
+ throw new ArgumentException($"Invalid index type \"{type}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/MagFilterConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/MagFilterConverter.cs
new file mode 100644
index 00000000..d86d8014
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/MagFilterConverter.cs
@@ -0,0 +1,20 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL.Sampler;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class MagFilterConverter
+ {
+ public static TextureMagFilter Convert(this MagFilter filter)
+ {
+ switch (filter)
+ {
+ case MagFilter.Nearest: return TextureMagFilter.Nearest;
+ case MagFilter.Linear: return TextureMagFilter.Linear;
+ }
+
+ throw new ArgumentException($"Invalid filter \"{filter}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/MinFilterConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/MinFilterConverter.cs
new file mode 100644
index 00000000..128577f8
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/MinFilterConverter.cs
@@ -0,0 +1,24 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL.Sampler;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class MinFilterConverter
+ {
+ public static TextureMinFilter Convert(this MinFilter filter)
+ {
+ switch (filter)
+ {
+ case MinFilter.Nearest: return TextureMinFilter.Nearest;
+ case MinFilter.Linear: return TextureMinFilter.Linear;
+ case MinFilter.NearestMipmapNearest: return TextureMinFilter.NearestMipmapNearest;
+ case MinFilter.LinearMipmapNearest: return TextureMinFilter.LinearMipmapNearest;
+ case MinFilter.NearestMipmapLinear: return TextureMinFilter.NearestMipmapLinear;
+ case MinFilter.LinearMipmapLinear: return TextureMinFilter.LinearMipmapLinear;
+ }
+
+ throw new ArgumentException($"Invalid filter \"{filter}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/PrimitiveTopologyConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/PrimitiveTopologyConverter.cs
new file mode 100644
index 00000000..fe1dfe39
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/PrimitiveTopologyConverter.cs
@@ -0,0 +1,33 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class PrimitiveTopologyConverter
+ {
+ public static PrimitiveType Convert(this PrimitiveTopology topology)
+ {
+ switch (topology)
+ {
+ case PrimitiveTopology.Points: return PrimitiveType.Points;
+ case PrimitiveTopology.Lines: return PrimitiveType.Lines;
+ case PrimitiveTopology.LineLoop: return PrimitiveType.LineLoop;
+ case PrimitiveTopology.LineStrip: return PrimitiveType.LineStrip;
+ case PrimitiveTopology.Triangles: return PrimitiveType.Triangles;
+ case PrimitiveTopology.TriangleStrip: return PrimitiveType.TriangleStrip;
+ case PrimitiveTopology.TriangleFan: return PrimitiveType.TriangleFan;
+ case PrimitiveTopology.Quads: return PrimitiveType.Quads;
+ case PrimitiveTopology.QuadStrip: return PrimitiveType.QuadStrip;
+ case PrimitiveTopology.Polygon: return PrimitiveType.Polygon;
+ case PrimitiveTopology.LinesAdjacency: return PrimitiveType.LinesAdjacency;
+ case PrimitiveTopology.LineStripAdjacency: return PrimitiveType.LineStripAdjacency;
+ case PrimitiveTopology.TrianglesAdjacency: return PrimitiveType.TrianglesAdjacency;
+ case PrimitiveTopology.TriangleStripAdjacency: return PrimitiveType.TriangleStripAdjacency;
+ case PrimitiveTopology.Patches: return PrimitiveType.Patches;
+ }
+
+ throw new ArgumentException($"Invalid primitive topology \"{topology}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/StencilOpConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/StencilOpConverter.cs
new file mode 100644
index 00000000..44fbe0a5
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/StencilOpConverter.cs
@@ -0,0 +1,27 @@
+using OpenTK.Graphics.OpenGL;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class StencilOpConverter
+ {
+ public static StencilOp Convert(this GAL.DepthStencil.StencilOp op)
+ {
+ switch (op)
+ {
+ case GAL.DepthStencil.StencilOp.Keep: return StencilOp.Keep;
+ case GAL.DepthStencil.StencilOp.Zero: return StencilOp.Zero;
+ case GAL.DepthStencil.StencilOp.Replace: return StencilOp.Replace;
+ case GAL.DepthStencil.StencilOp.IncrementAndClamp: return StencilOp.Incr;
+ case GAL.DepthStencil.StencilOp.DecrementAndClamp: return StencilOp.Decr;
+ case GAL.DepthStencil.StencilOp.Invert: return StencilOp.Invert;
+ case GAL.DepthStencil.StencilOp.IncrementAndWrap: return StencilOp.IncrWrap;
+ case GAL.DepthStencil.StencilOp.DecrementAndWrap: return StencilOp.DecrWrap;
+ }
+
+ return StencilOp.Keep;
+
+ throw new ArgumentException($"Invalid stencil operation \"{op}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/SwizzleComponentConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/SwizzleComponentConverter.cs
new file mode 100644
index 00000000..d9ce650f
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/SwizzleComponentConverter.cs
@@ -0,0 +1,24 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL.Texture;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class SwizzleComponentConverter
+ {
+ public static All Convert(this SwizzleComponent swizzleComponent)
+ {
+ switch (swizzleComponent)
+ {
+ case SwizzleComponent.Zero: return All.Zero;
+ case SwizzleComponent.One: return All.One;
+ case SwizzleComponent.Red: return All.Red;
+ case SwizzleComponent.Green: return All.Green;
+ case SwizzleComponent.Blue: return All.Blue;
+ case SwizzleComponent.Alpha: return All.Alpha;
+ }
+
+ throw new ArgumentException($"Invalid swizzle component \"{swizzleComponent}\".");
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/TargetConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/TargetConverter.cs
new file mode 100644
index 00000000..6b524980
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Converters/TargetConverter.cs
@@ -0,0 +1,33 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Graphics.GAL.Texture;
+using System;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class TargetConverter
+ {
+ public static ImageTarget ConvertToImageTarget(this Target target)
+ {
+ return (ImageTarget)target.Convert();
+ }
+
+ public static TextureTarget Convert(this Target target)
+ {
+ switch (target)
+ {
+ case Target.Texture1D: return TextureTarget.Texture1D;
+ case Target.Texture2D: return TextureTarget.Texture2D;
+ case Target.Texture3D: return TextureTarget.Texture3D;
+ case Target.Texture1DArray: return TextureTarget.Texture1DArray;
+ case Target.Texture2DArray: return TextureTarget.Texture2DArray;
+ case Target.Texture2DMultisample: return TextureTarget.Texture2DMultisample;
+ case Target.Rectangle: return TextureTarget.TextureRectangle;
+ case Target.Cubemap: return TextureTarget.TextureCubeMap;
+ case Target.CubemapArray: return TextureTarget.TextureCubeMapArray;
+ case Target.TextureBuffer: return TextureTarget.TextureBuffer;
+ }
+
+ throw new ArgumentException($"Invalid target \"{target}\".");
+ }
+ }
+}