Initial work

This commit is contained in:
gdk 2019-10-13 03:02:07 -03:00 committed by Thog
parent f617fb542a
commit 1876b346fe
518 changed files with 15170 additions and 12486 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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