From bd28ce90e6df04b5b15a5c1149523f3742af38cc Mon Sep 17 00:00:00 2001 From: gdkchan Date: Wed, 23 Sep 2020 20:48:34 -0300 Subject: Implement small indexed draws and other fixes to make guest Vulkan work (#1558) --- Ryujinx.Graphics.Gpu/State/MethodOffset.cs | 5 ++ Ryujinx.Graphics.Gpu/State/PrimitiveTopology.cs | 57 -------------- Ryujinx.Graphics.Gpu/State/PrimitiveType.cs | 100 ++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 57 deletions(-) delete mode 100644 Ryujinx.Graphics.Gpu/State/PrimitiveTopology.cs create mode 100644 Ryujinx.Graphics.Gpu/State/PrimitiveType.cs (limited to 'Ryujinx.Graphics.Gpu/State') diff --git a/Ryujinx.Graphics.Gpu/State/MethodOffset.cs b/Ryujinx.Graphics.Gpu/State/MethodOffset.cs index 13b699f3..8d2df79a 100644 --- a/Ryujinx.Graphics.Gpu/State/MethodOffset.cs +++ b/Ryujinx.Graphics.Gpu/State/MethodOffset.cs @@ -86,12 +86,17 @@ namespace Ryujinx.Graphics.Gpu.State PrimitiveRestartState = 0x591, IndexBufferState = 0x5f2, IndexBufferCount = 0x5f8, + DrawIndexedSmall = 0x5f9, + DrawIndexedSmall2 = 0x5fa, + DrawIndexedSmallIncInstance = 0x5fc, + DrawIndexedSmallIncInstance2 = 0x5fd, DepthBiasClamp = 0x61f, VertexBufferInstanced = 0x620, VertexProgramPointSize = 0x644, FaceState = 0x646, ViewportTransformEnable = 0x64b, ViewVolumeClipControl = 0x64f, + PrimitiveTypeOverride = 0x65c, LogicOpState = 0x671, Clear = 0x674, RtColorMask = 0x680, diff --git a/Ryujinx.Graphics.Gpu/State/PrimitiveTopology.cs b/Ryujinx.Graphics.Gpu/State/PrimitiveTopology.cs deleted file mode 100644 index 340991c2..00000000 --- a/Ryujinx.Graphics.Gpu/State/PrimitiveTopology.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Ryujinx.Graphics.GAL; - -namespace Ryujinx.Graphics.Gpu.State -{ - /// - /// Draw primitive type. - /// - enum PrimitiveType - { - Points, - Lines, - LineLoop, - LineStrip, - Triangles, - TriangleStrip, - TriangleFan, - Quads, - QuadStrip, - Polygon, - LinesAdjacency, - LineStripAdjacency, - TrianglesAdjacency, - TriangleStripAdjacency, - Patches - } - - static class PrimitiveTypeConverter - { - /// - /// Converts the primitive type into something that can be used with the host API. - /// - /// The primitive type to convert - /// A host compatible enum value - public static PrimitiveTopology Convert(this PrimitiveType type) - { - return type switch - { - PrimitiveType.Points => PrimitiveTopology.Points, - PrimitiveType.Lines => PrimitiveTopology.Lines, - PrimitiveType.LineLoop => PrimitiveTopology.LineLoop, - PrimitiveType.LineStrip => PrimitiveTopology.LineStrip, - PrimitiveType.Triangles => PrimitiveTopology.Triangles, - PrimitiveType.TriangleStrip => PrimitiveTopology.TriangleStrip, - PrimitiveType.TriangleFan => PrimitiveTopology.TriangleFan, - PrimitiveType.Quads => PrimitiveTopology.Quads, - PrimitiveType.QuadStrip => PrimitiveTopology.QuadStrip, - PrimitiveType.Polygon => PrimitiveTopology.Polygon, - PrimitiveType.LinesAdjacency => PrimitiveTopology.LinesAdjacency, - PrimitiveType.LineStripAdjacency => PrimitiveTopology.LineStripAdjacency, - PrimitiveType.TrianglesAdjacency => PrimitiveTopology.TrianglesAdjacency, - PrimitiveType.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency, - PrimitiveType.Patches => PrimitiveTopology.Patches, - _ => PrimitiveTopology.Triangles - }; - } - } -} \ No newline at end of file diff --git a/Ryujinx.Graphics.Gpu/State/PrimitiveType.cs b/Ryujinx.Graphics.Gpu/State/PrimitiveType.cs new file mode 100644 index 00000000..b49088aa --- /dev/null +++ b/Ryujinx.Graphics.Gpu/State/PrimitiveType.cs @@ -0,0 +1,100 @@ +using Ryujinx.Graphics.GAL; + +namespace Ryujinx.Graphics.Gpu.State +{ + /// + /// Draw primitive type. + /// + enum PrimitiveType + { + Points, + Lines, + LineLoop, + LineStrip, + Triangles, + TriangleStrip, + TriangleFan, + Quads, + QuadStrip, + Polygon, + LinesAdjacency, + LineStripAdjacency, + TrianglesAdjacency, + TriangleStripAdjacency, + Patches + } + + /// + /// Alternative primitive type that might override . + /// + enum PrimitiveTypeOverride + { + Invalid = 0, + Points = 1, + Lines = 2, + LineStrip = 3, + Triangles = 4, + TriangleStrip = 5, + TriangleFan = 0x1015, + LinesAdjacency = 10, + LineStripAdjacency = 11, + TrianglesAdjacency = 12, + TriangleStripAdjacency = 13, + Patches = 14 + } + + static class PrimitiveTypeConverter + { + /// + /// Converts the primitive type into something that can be used with the host API. + /// + /// The primitive type to convert + /// A host compatible enum value + public static PrimitiveTopology Convert(this PrimitiveType type) + { + return type switch + { + PrimitiveType.Points => PrimitiveTopology.Points, + PrimitiveType.Lines => PrimitiveTopology.Lines, + PrimitiveType.LineLoop => PrimitiveTopology.LineLoop, + PrimitiveType.LineStrip => PrimitiveTopology.LineStrip, + PrimitiveType.Triangles => PrimitiveTopology.Triangles, + PrimitiveType.TriangleStrip => PrimitiveTopology.TriangleStrip, + PrimitiveType.TriangleFan => PrimitiveTopology.TriangleFan, + PrimitiveType.Quads => PrimitiveTopology.Quads, + PrimitiveType.QuadStrip => PrimitiveTopology.QuadStrip, + PrimitiveType.Polygon => PrimitiveTopology.Polygon, + PrimitiveType.LinesAdjacency => PrimitiveTopology.LinesAdjacency, + PrimitiveType.LineStripAdjacency => PrimitiveTopology.LineStripAdjacency, + PrimitiveType.TrianglesAdjacency => PrimitiveTopology.TrianglesAdjacency, + PrimitiveType.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency, + PrimitiveType.Patches => PrimitiveTopology.Patches, + _ => PrimitiveTopology.Triangles + }; + } + + /// + /// Converts the primitive type into something that can be used with the host API. + /// + /// The primitive type to convert + /// A host compatible enum value + public static PrimitiveTopology Convert(this PrimitiveTypeOverride type) + { + return type switch + { + PrimitiveTypeOverride.Points => PrimitiveTopology.Points, + PrimitiveTypeOverride.Lines => PrimitiveTopology.Lines, + PrimitiveTypeOverride.LineStrip => PrimitiveTopology.LineStrip, + PrimitiveTypeOverride.Triangles => PrimitiveTopology.Triangles, + PrimitiveTypeOverride.TriangleStrip => PrimitiveTopology.TriangleStrip, + PrimitiveTypeOverride.TriangleFan => PrimitiveTopology.TriangleFan, + PrimitiveTypeOverride.LinesAdjacency => PrimitiveTopology.LinesAdjacency, + PrimitiveTypeOverride.LineStripAdjacency => PrimitiveTopology.LineStripAdjacency, + PrimitiveTypeOverride.TrianglesAdjacency => PrimitiveTopology.TrianglesAdjacency, + PrimitiveTypeOverride.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency, + PrimitiveTypeOverride.Patches => PrimitiveTopology.Patches, + _ => PrimitiveTopology.Triangles + }; + } + } +} \ No newline at end of file -- cgit v1.2.3