diff options
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Converters')
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}\"."); + } + } +} |
