aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2019-12-28 20:45:33 -0300
committerThog <thog@protonmail.com>2020-01-09 02:13:00 +0100
commitaf8498d6790ba83f1cf87eccf5f272f2ccbeb169 (patch)
treef4bbd0c418a056211f5077646100bedeb5e8fc13
parentd1ab9fb42c2fd9f018d4410ca619cd66294eafc9 (diff)
Add basic error logging to the GPU
-rw-r--r--Ryujinx.Graphics.Gpu/Image/Texture.cs6
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/AddressModeConverter.cs26
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/BlendFactorConverter.cs73
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/BlendOpConverter.cs35
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/CompareModeConverter.cs20
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/CompareOpConverter.cs41
-rw-r--r--Ryujinx.Graphics.OpenGL/Converters/DepthModeConverter.cs20
-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
-rw-r--r--Ryujinx.Graphics.OpenGL/Debugger.cs25
-rw-r--r--Ryujinx.Graphics.OpenGL/EnumConversion.cs423
-rw-r--r--Ryujinx.Graphics.OpenGL/FormatInfo.cs (renamed from Ryujinx.Graphics.OpenGL/Formats/FormatInfo.cs)2
-rw-r--r--Ryujinx.Graphics.OpenGL/FormatTable.cs (renamed from Ryujinx.Graphics.OpenGL/Formats/FormatTable.cs)2
-rw-r--r--Ryujinx.Graphics.OpenGL/Pipeline.cs22
-rw-r--r--Ryujinx.Graphics.OpenGL/Program.cs9
-rw-r--r--Ryujinx.Graphics.OpenGL/Ryujinx.Graphics.OpenGL.csproj1
-rw-r--r--Ryujinx.Graphics.OpenGL/TextureStorage.cs10
-rw-r--r--Ryujinx.Graphics.OpenGL/TextureView.cs3
-rw-r--r--Ryujinx.Graphics.OpenGL/VertexArray.cs1
27 files changed, 473 insertions, 493 deletions
diff --git a/Ryujinx.Graphics.Gpu/Image/Texture.cs b/Ryujinx.Graphics.Gpu/Image/Texture.cs
index b939e0b2..04657f39 100644
--- a/Ryujinx.Graphics.Gpu/Image/Texture.cs
+++ b/Ryujinx.Graphics.Gpu/Image/Texture.cs
@@ -1,4 +1,5 @@
using Ryujinx.Common;
+using Ryujinx.Common.Logging;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.GAL.Texture;
using Ryujinx.Graphics.Gpu.Memory;
@@ -7,7 +8,6 @@ using Ryujinx.Graphics.Texture.Astc;
using System;
using System.Collections.Generic;
using System.Diagnostics;
-using Ryujinx.Common.Logging;
namespace Ryujinx.Graphics.Gpu.Image
{
@@ -256,7 +256,9 @@ namespace Ryujinx.Graphics.Gpu.Image
_info.Levels,
out Span<byte> decoded))
{
- // TODO: Error.
+ string texInfo = $"{_info.Target} {_info.FormatInfo.Format} {_info.Width}x{_info.Height}x{_info.DepthOrLayers} levels {_info.Levels}";
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid ASTC texture at 0x{_info.Address:X} ({texInfo}).");
}
data = decoded;
diff --git a/Ryujinx.Graphics.OpenGL/Converters/AddressModeConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/AddressModeConverter.cs
deleted file mode 100644
index 8f9b5074..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/AddressModeConverter.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-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
deleted file mode 100644
index db5099a7..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/BlendFactorConverter.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-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:
- case BlendFactor.ZeroGl:
- return All.Zero;
- case BlendFactor.One:
- case BlendFactor.OneGl:
- return All.One;
- case BlendFactor.SrcColor:
- case BlendFactor.SrcColorGl:
- return All.SrcColor;
- case BlendFactor.OneMinusSrcColor:
- case BlendFactor.OneMinusSrcColorGl:
- return All.OneMinusSrcColor;
- case BlendFactor.SrcAlpha:
- case BlendFactor.SrcAlphaGl:
- return All.SrcAlpha;
- case BlendFactor.OneMinusSrcAlpha:
- case BlendFactor.OneMinusSrcAlphaGl:
- return All.OneMinusSrcAlpha;
- case BlendFactor.DstAlpha:
- case BlendFactor.DstAlphaGl:
- return All.DstAlpha;
- case BlendFactor.OneMinusDstAlpha:
- case BlendFactor.OneMinusDstAlphaGl:
- return All.OneMinusDstAlpha;
- case BlendFactor.DstColor:
- case BlendFactor.DstColorGl:
- return All.DstColor;
- case BlendFactor.OneMinusDstColor:
- case BlendFactor.OneMinusDstColorGl:
- return All.OneMinusDstColor;
- case BlendFactor.SrcAlphaSaturate:
- case BlendFactor.SrcAlphaSaturateGl:
- return All.SrcAlphaSaturate;
- case BlendFactor.Src1Color:
- case BlendFactor.Src1ColorGl:
- return All.Src1Color;
- case BlendFactor.OneMinusSrc1Color:
- case BlendFactor.OneMinusSrc1ColorGl:
- return All.OneMinusSrc1Color;
- case BlendFactor.Src1Alpha:
- case BlendFactor.Src1AlphaGl:
- return All.Src1Alpha;
- case BlendFactor.OneMinusSrc1Alpha:
- case BlendFactor.OneMinusSrc1AlphaGl:
- 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
deleted file mode 100644
index 66d6a145..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/BlendOpConverter.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-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:
- case BlendOp.AddGl:
- return BlendEquationMode.FuncAdd;
- case BlendOp.Subtract:
- case BlendOp.SubtractGl:
- return BlendEquationMode.FuncSubtract;
- case BlendOp.ReverseSubtract:
- case BlendOp.ReverseSubtractGl:
- return BlendEquationMode.FuncReverseSubtract;
- case BlendOp.Minimum:
- case BlendOp.MinimumGl:
- return BlendEquationMode.Min;
- case BlendOp.Maximum:
- case BlendOp.MaximumGl:
- 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
deleted file mode 100644
index c0287d8a..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/CompareModeConverter.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index a30ca02e..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/CompareOpConverter.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using Ryujinx.Graphics.GAL;
-
-namespace Ryujinx.Graphics.OpenGL
-{
- static class CompareOpConverter
- {
- public static All Convert(this CompareOp op)
- {
- switch (op)
- {
- case CompareOp.Never:
- case CompareOp.NeverGl:
- return All.Never;
- case CompareOp.Less:
- case CompareOp.LessGl:
- return All.Less;
- case CompareOp.Equal:
- case CompareOp.EqualGl:
- return All.Equal;
- case CompareOp.LessOrEqual:
- case CompareOp.LessOrEqualGl:
- return All.Lequal;
- case CompareOp.Greater:
- case CompareOp.GreaterGl:
- return All.Greater;
- case CompareOp.NotEqual:
- case CompareOp.NotEqualGl:
- return All.Notequal;
- case CompareOp.GreaterOrEqual:
- case CompareOp.GreaterOrEqualGl:
- return All.Gequal;
- case CompareOp.Always:
- case CompareOp.AlwaysGl:
- return All.Always;
- }
-
- return All.Never;
- }
- }
-}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/DepthModeConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/DepthModeConverter.cs
deleted file mode 100644
index a02f69d2..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/DepthModeConverter.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using OpenTK.Graphics.OpenGL;
-using Ryujinx.Graphics.GAL;
-using System;
-
-namespace Ryujinx.Graphics.OpenGL
-{
- static class DepthModeConverter
- {
- public static ClipDepthMode Convert(this DepthMode mode)
- {
- switch (mode)
- {
- case DepthMode.MinusOneToOne: return ClipDepthMode.NegativeOneToOne;
- case DepthMode.ZeroToOne: return ClipDepthMode.ZeroToOne;
- }
-
- throw new ArgumentException($"Invalid depth mode \"{mode}\".");
- }
- }
-}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/DepthStencilModeConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/DepthStencilModeConverter.cs
deleted file mode 100644
index 4d14bdea..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/DepthStencilModeConverter.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index 5c23b68a..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/FaceConverter.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-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
deleted file mode 100644
index 1cae36cd..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/FrontFaceConverter.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index d3100b98..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/IndexTypeConverter.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-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
deleted file mode 100644
index cb75ee89..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/MagFilterConverter.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-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;
- }
-
- return TextureMagFilter.Nearest;
- }
- }
-}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/MinFilterConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/MinFilterConverter.cs
deleted file mode 100644
index 01436299..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/MinFilterConverter.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-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;
- }
-
- return TextureMinFilter.Nearest;
- }
- }
-}
diff --git a/Ryujinx.Graphics.OpenGL/Converters/PrimitiveTopologyConverter.cs b/Ryujinx.Graphics.OpenGL/Converters/PrimitiveTopologyConverter.cs
deleted file mode 100644
index fe1dfe39..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/PrimitiveTopologyConverter.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-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
deleted file mode 100644
index 44fbe0a5..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/StencilOpConverter.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-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
deleted file mode 100644
index d9ce650f..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/SwizzleComponentConverter.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-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
deleted file mode 100644
index 6b524980..00000000
--- a/Ryujinx.Graphics.OpenGL/Converters/TargetConverter.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-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}\".");
- }
- }
-}
diff --git a/Ryujinx.Graphics.OpenGL/Debugger.cs b/Ryujinx.Graphics.OpenGL/Debugger.cs
index 9da98ae1..ff9fcd85 100644
--- a/Ryujinx.Graphics.OpenGL/Debugger.cs
+++ b/Ryujinx.Graphics.OpenGL/Debugger.cs
@@ -1,4 +1,5 @@
using OpenTK.Graphics.OpenGL;
+using Ryujinx.Common.Logging;
using System;
using System.Runtime.InteropServices;
@@ -12,16 +13,14 @@ namespace Ryujinx.Graphics.OpenGL
{
GL.Enable(EnableCap.DebugOutputSynchronous);
- int[] array = null;
+ GL.DebugMessageControl(DebugSourceControl.DontCare, DebugTypeControl.DontCare, DebugSeverityControl.DontCare, 0, (int[])null, true);
- GL.DebugMessageControl(DebugSourceControl.DontCare, DebugTypeControl.DontCare, DebugSeverityControl.DontCare, 0, array, true);
-
- _debugCallback = PrintDbg;
+ _debugCallback = GLDebugHandler;
GL.DebugMessageCallback(_debugCallback, IntPtr.Zero);
}
- private static void PrintDbg(
+ private static void GLDebugHandler(
DebugSource source,
DebugType type,
int id,
@@ -30,14 +29,20 @@ namespace Ryujinx.Graphics.OpenGL
IntPtr message,
IntPtr userParam)
{
- string msg = Marshal.PtrToStringAnsi(message);
+ string fullMessage = $"{type} {severity} {source} {Marshal.PtrToStringAnsi(message)}";
- if (type == DebugType.DebugTypeError && !msg.Contains("link"))
+ switch (type)
{
- throw new Exception(msg);
+ case DebugType.DebugTypeError:
+ Logger.PrintError(LogClass.Gpu, fullMessage);
+ break;
+ case DebugType.DebugTypePerformance:
+ Logger.PrintWarning(LogClass.Gpu, fullMessage);
+ break;
+ default:
+ Logger.PrintDebug(LogClass.Gpu, fullMessage);
+ break;
}
-
- System.Console.WriteLine("GL message: " + source + " " + type + " " + severity + " " + msg);
}
}
}
diff --git a/Ryujinx.Graphics.OpenGL/EnumConversion.cs b/Ryujinx.Graphics.OpenGL/EnumConversion.cs
new file mode 100644
index 00000000..99ed0404
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/EnumConversion.cs
@@ -0,0 +1,423 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Common.Logging;
+using Ryujinx.Graphics.GAL;
+using Ryujinx.Graphics.GAL.Blend;
+using Ryujinx.Graphics.GAL.Sampler;
+using Ryujinx.Graphics.GAL.Texture;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+ static class EnumConversion
+ {
+ 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;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(AddressMode)} enum value: {mode}.");
+
+ return TextureWrapMode.Clamp;
+ }
+
+ public static All Convert(this BlendFactor factor)
+ {
+ switch (factor)
+ {
+ case BlendFactor.Zero:
+ case BlendFactor.ZeroGl:
+ return All.Zero;
+ case BlendFactor.One:
+ case BlendFactor.OneGl:
+ return All.One;
+ case BlendFactor.SrcColor:
+ case BlendFactor.SrcColorGl:
+ return All.SrcColor;
+ case BlendFactor.OneMinusSrcColor:
+ case BlendFactor.OneMinusSrcColorGl:
+ return All.OneMinusSrcColor;
+ case BlendFactor.SrcAlpha:
+ case BlendFactor.SrcAlphaGl:
+ return All.SrcAlpha;
+ case BlendFactor.OneMinusSrcAlpha:
+ case BlendFactor.OneMinusSrcAlphaGl:
+ return All.OneMinusSrcAlpha;
+ case BlendFactor.DstAlpha:
+ case BlendFactor.DstAlphaGl:
+ return All.DstAlpha;
+ case BlendFactor.OneMinusDstAlpha:
+ case BlendFactor.OneMinusDstAlphaGl:
+ return All.OneMinusDstAlpha;
+ case BlendFactor.DstColor:
+ case BlendFactor.DstColorGl:
+ return All.DstColor;
+ case BlendFactor.OneMinusDstColor:
+ case BlendFactor.OneMinusDstColorGl:
+ return All.OneMinusDstColor;
+ case BlendFactor.SrcAlphaSaturate:
+ case BlendFactor.SrcAlphaSaturateGl:
+ return All.SrcAlphaSaturate;
+ case BlendFactor.Src1Color:
+ case BlendFactor.Src1ColorGl:
+ return All.Src1Color;
+ case BlendFactor.OneMinusSrc1Color:
+ case BlendFactor.OneMinusSrc1ColorGl:
+ return All.OneMinusSrc1Color;
+ case BlendFactor.Src1Alpha:
+ case BlendFactor.Src1AlphaGl:
+ return All.Src1Alpha;
+ case BlendFactor.OneMinusSrc1Alpha:
+ case BlendFactor.OneMinusSrc1AlphaGl:
+ 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;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(BlendFactor)} enum value: {factor}.");
+
+ return All.Zero;
+ }
+
+ public static BlendEquationMode Convert(this BlendOp op)
+ {
+ switch (op)
+ {
+ case BlendOp.Add:
+ case BlendOp.AddGl:
+ return BlendEquationMode.FuncAdd;
+ case BlendOp.Subtract:
+ case BlendOp.SubtractGl:
+ return BlendEquationMode.FuncSubtract;
+ case BlendOp.ReverseSubtract:
+ case BlendOp.ReverseSubtractGl:
+ return BlendEquationMode.FuncReverseSubtract;
+ case BlendOp.Minimum:
+ case BlendOp.MinimumGl:
+ return BlendEquationMode.Min;
+ case BlendOp.Maximum:
+ case BlendOp.MaximumGl:
+ return BlendEquationMode.Max;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(BlendOp)} enum value: {op}.");
+
+ return BlendEquationMode.FuncAdd;
+ }
+
+ public static TextureCompareMode Convert(this CompareMode mode)
+ {
+ switch (mode)
+ {
+ case CompareMode.None:
+ return TextureCompareMode.None;
+ case CompareMode.CompareRToTexture:
+ return TextureCompareMode.CompareRToTexture;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(CompareMode)} enum value: {mode}.");
+
+ return TextureCompareMode.None;
+ }
+
+ public static All Convert(this CompareOp op)
+ {
+ switch (op)
+ {
+ case CompareOp.Never:
+ case CompareOp.NeverGl:
+ return All.Never;
+ case CompareOp.Less:
+ case CompareOp.LessGl:
+ return All.Less;
+ case CompareOp.Equal:
+ case CompareOp.EqualGl:
+ return All.Equal;
+ case CompareOp.LessOrEqual:
+ case CompareOp.LessOrEqualGl:
+ return All.Lequal;
+ case CompareOp.Greater:
+ case CompareOp.GreaterGl:
+ return All.Greater;
+ case CompareOp.NotEqual:
+ case CompareOp.NotEqualGl:
+ return All.Notequal;
+ case CompareOp.GreaterOrEqual:
+ case CompareOp.GreaterOrEqualGl:
+ return All.Gequal;
+ case CompareOp.Always:
+ case CompareOp.AlwaysGl:
+ return All.Always;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(CompareOp)} enum value: {op}.");
+
+ return All.Never;
+ }
+
+ public static ClipDepthMode Convert(this DepthMode mode)
+ {
+ switch (mode)
+ {
+ case DepthMode.MinusOneToOne:
+ return ClipDepthMode.NegativeOneToOne;
+ case DepthMode.ZeroToOne:
+ return ClipDepthMode.ZeroToOne;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(DepthMode)} enum value: {mode}.");
+
+ return ClipDepthMode.NegativeOneToOne;
+ }
+
+ public static All Convert(this DepthStencilMode mode)
+ {
+ switch (mode)
+ {
+ case DepthStencilMode.Depth:
+ return All.Depth;
+ case DepthStencilMode.Stencil:
+ return All.Stencil;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(DepthStencilMode)} enum value: {mode}.");
+
+ return All.Depth;
+ }
+
+ 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;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(Face)} enum value: {face}.");
+
+ return CullFaceMode.Back;
+ }
+
+ public static FrontFaceDirection Convert(this FrontFace frontFace)
+ {
+ switch (frontFace)
+ {
+ case FrontFace.Clockwise:
+ return FrontFaceDirection.Cw;
+ case FrontFace.CounterClockwise:
+ return FrontFaceDirection.Ccw;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(FrontFace)} enum value: {frontFace}.");
+
+ return FrontFaceDirection.Cw;
+ }
+
+ 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;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(IndexType)} enum value: {type}.");
+
+ return DrawElementsType.UnsignedByte;
+ }
+
+ public static TextureMagFilter Convert(this MagFilter filter)
+ {
+ switch (filter)
+ {
+ case MagFilter.Nearest:
+ return TextureMagFilter.Nearest;
+ case MagFilter.Linear:
+ return TextureMagFilter.Linear;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(MagFilter)} enum value: {filter}.");
+
+ return TextureMagFilter.Nearest;
+ }
+
+ 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;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(MinFilter)} enum value: {filter}.");
+
+ return TextureMinFilter.Nearest;
+ }
+
+ 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;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(PrimitiveTopology)} enum value: {topology}.");
+
+ return PrimitiveType.Points;
+ }
+
+ 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;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(GAL.DepthStencil.StencilOp)} enum value: {op}.");
+
+ return StencilOp.Keep;
+ }
+
+ 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;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(SwizzleComponent)} enum value: {swizzleComponent}.");
+
+ return All.Zero;
+ }
+
+ 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;
+ }
+
+ Logger.PrintError(LogClass.Gpu, $"Invalid {nameof(Target)} enum value: {target}.");
+
+ return TextureTarget.Texture2D;
+ }
+ }
+}
diff --git a/Ryujinx.Graphics.OpenGL/Formats/FormatInfo.cs b/Ryujinx.Graphics.OpenGL/FormatInfo.cs
index a1fd723f..6aa70691 100644
--- a/Ryujinx.Graphics.OpenGL/Formats/FormatInfo.cs
+++ b/Ryujinx.Graphics.OpenGL/FormatInfo.cs
@@ -1,6 +1,6 @@
using OpenTK.Graphics.OpenGL;
-namespace Ryujinx.Graphics.OpenGL.Formats
+namespace Ryujinx.Graphics.OpenGL
{
struct FormatInfo
{
diff --git a/Ryujinx.Graphics.OpenGL/Formats/FormatTable.cs b/Ryujinx.Graphics.OpenGL/FormatTable.cs
index b67fe5c4..38197a90 100644
--- a/Ryujinx.Graphics.OpenGL/Formats/FormatTable.cs
+++ b/Ryujinx.Graphics.OpenGL/FormatTable.cs
@@ -2,7 +2,7 @@ using OpenTK.Graphics.OpenGL;
using Ryujinx.Graphics.GAL;
using System;
-namespace Ryujinx.Graphics.OpenGL.Formats
+namespace Ryujinx.Graphics.OpenGL
{
struct FormatTable
{
diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs
index 9b1fec33..64705862 100644
--- a/Ryujinx.Graphics.OpenGL/Pipeline.cs
+++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs
@@ -1,10 +1,10 @@
using OpenTK.Graphics.OpenGL;
+using Ryujinx.Common.Logging;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.GAL.Blend;
using Ryujinx.Graphics.GAL.Color;
using Ryujinx.Graphics.GAL.DepthStencil;
using Ryujinx.Graphics.GAL.InputAssembler;
-using Ryujinx.Graphics.OpenGL.Formats;
using Ryujinx.Graphics.Shader;
using System;
@@ -114,6 +114,10 @@ namespace Ryujinx.Graphics.OpenGL
{
((Sampler)sampler).Bind(unit);
}
+ else if (unit == -1)
+ {
+ Logger.PrintError(LogClass.Gpu, $"Invalid binding point: {stage} {index}.");
+ }
}
public void BindTexture(int index, ShaderStage stage, ITexture texture)
@@ -131,6 +135,10 @@ namespace Ryujinx.Graphics.OpenGL
((TextureView)texture).Bind(unit);
}
}
+ else if (unit == -1)
+ {
+ Logger.PrintError(LogClass.Gpu, $"Invalid binding point: {stage} {index}.");
+ }
}
public void BindStorageBuffer(int index, ShaderStage stage, BufferRange buffer)
@@ -151,6 +159,8 @@ namespace Ryujinx.Graphics.OpenGL
if (bindingPoint == -1)
{
+ Logger.PrintError(LogClass.Gpu, $"Invalid binding point: {stage} {index}.");
+
return;
}
@@ -289,6 +299,8 @@ namespace Ryujinx.Graphics.OpenGL
{
if (!_program.IsLinked)
{
+ Logger.PrintError(LogClass.Gpu, "Dispatch error, shader not linked.");
+
return;
}
@@ -301,6 +313,8 @@ namespace Ryujinx.Graphics.OpenGL
{
if (!_program.IsLinked)
{
+ Logger.PrintError(LogClass.Gpu, "Draw error, shader not linked.");
+
return;
}
@@ -407,13 +421,13 @@ namespace Ryujinx.Graphics.OpenGL
{
if (!_program.IsLinked)
{
+ Logger.PrintError(LogClass.Gpu, "Draw error, shader not linked.");
+
return;
}
PrepareForDraw();
- int firstIndexOffset = firstIndex;
-
int indexElemSize = 1;
switch (_elementsType)
@@ -450,7 +464,6 @@ namespace Ryujinx.Graphics.OpenGL
indexCount,
instanceCount,
indexBaseOffset,
- indexElemSize,
firstVertex,
firstInstance);
}
@@ -536,7 +549,6 @@ namespace Ryujinx.Graphics.OpenGL
int indexCount,
int instanceCount,
IntPtr indexBaseOffset,
- int indexElemSize,
int firstVertex,
int firstInstance)
{
diff --git a/Ryujinx.Graphics.OpenGL/Program.cs b/Ryujinx.Graphics.OpenGL/Program.cs
index 820910a9..be1cc7de 100644
--- a/Ryujinx.Graphics.OpenGL/Program.cs
+++ b/Ryujinx.Graphics.OpenGL/Program.cs
@@ -1,6 +1,7 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Common.Logging;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.Shader;
-using OpenTK.Graphics.OpenGL;
namespace Ryujinx.Graphics.OpenGL
{
@@ -190,13 +191,11 @@ namespace Ryujinx.Graphics.OpenGL
private void CheckProgramLink()
{
- int status = 0;
-
- GL.GetProgram(Handle, GetProgramParameterName.LinkStatus, out status);
+ GL.GetProgram(Handle, GetProgramParameterName.LinkStatus, out int status);
if (status == 0)
{
- // throw new System.Exception(GL.GetProgramInfoLog(Handle));
+ Logger.PrintError(LogClass.Gpu, $"Shader linking failed: {GL.GetProgramInfoLog(Handle)}");
}
else
{
diff --git a/Ryujinx.Graphics.OpenGL/Ryujinx.Graphics.OpenGL.csproj b/Ryujinx.Graphics.OpenGL/Ryujinx.Graphics.OpenGL.csproj
index 484e8682..e4343215 100644
--- a/Ryujinx.Graphics.OpenGL/Ryujinx.Graphics.OpenGL.csproj
+++ b/Ryujinx.Graphics.OpenGL/Ryujinx.Graphics.OpenGL.csproj
@@ -10,6 +10,7 @@
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\Ryujinx.Common\Ryujinx.Common.csproj" />
<ProjectReference Include="..\Ryujinx.Graphics.GAL\Ryujinx.Graphics.GAL.csproj" />
<ProjectReference Include="..\Ryujinx.Graphics.Shader\Ryujinx.Graphics.Shader.csproj" />
</ItemGroup>
diff --git a/Ryujinx.Graphics.OpenGL/TextureStorage.cs b/Ryujinx.Graphics.OpenGL/TextureStorage.cs
index d74b0a8e..482189ca 100644
--- a/Ryujinx.Graphics.OpenGL/TextureStorage.cs
+++ b/Ryujinx.Graphics.OpenGL/TextureStorage.cs
@@ -1,7 +1,7 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Common.Logging;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.GAL.Texture;
-using Ryujinx.Graphics.OpenGL.Formats;
-using OpenTK.Graphics.OpenGL;
namespace Ryujinx.Graphics.OpenGL
{
@@ -135,13 +135,15 @@ namespace Ryujinx.Graphics.OpenGL
_info.Height,
_info.Depth);
break;
+
+ default:
+ Logger.PrintError(LogClass.Gpu, $"Invalid or unsupported texture target: {target}.");
+ break;
}
}
public ITexture CreateDefaultView()
{
- int layers = _info.GetLayers();
-
return CreateView(_info, 0, 0);
}
diff --git a/Ryujinx.Graphics.OpenGL/TextureView.cs b/Ryujinx.Graphics.OpenGL/TextureView.cs
index 769f0339..2fd23d4c 100644
--- a/Ryujinx.Graphics.OpenGL/TextureView.cs
+++ b/Ryujinx.Graphics.OpenGL/TextureView.cs
@@ -1,7 +1,6 @@
+using OpenTK.Graphics.OpenGL;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.GAL.Texture;
-using Ryujinx.Graphics.OpenGL.Formats;
-using OpenTK.Graphics.OpenGL;
using System;
namespace Ryujinx.Graphics.OpenGL
diff --git a/Ryujinx.Graphics.OpenGL/VertexArray.cs b/Ryujinx.Graphics.OpenGL/VertexArray.cs
index cf87c953..c3c37813 100644
--- a/Ryujinx.Graphics.OpenGL/VertexArray.cs
+++ b/Ryujinx.Graphics.OpenGL/VertexArray.cs
@@ -1,6 +1,5 @@
using OpenTK.Graphics.OpenGL;
using Ryujinx.Graphics.GAL.InputAssembler;
-using Ryujinx.Graphics.OpenGL.Formats;
using System;
namespace Ryujinx.Graphics.OpenGL