aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/State
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-09-23 20:48:34 -0300
committerGitHub <noreply@github.com>2020-09-24 09:48:34 +1000
commitbd28ce90e6df04b5b15a5c1149523f3742af38cc (patch)
tree4d30eaf20b8549e292896e3a7f9fc2aecacfbc2c /Ryujinx.Graphics.Gpu/State
parente00ca92063b9dda7b3272f6461610743cfa83ad5 (diff)
Implement small indexed draws and other fixes to make guest Vulkan work (#1558)
Diffstat (limited to 'Ryujinx.Graphics.Gpu/State')
-rw-r--r--Ryujinx.Graphics.Gpu/State/MethodOffset.cs5
-rw-r--r--Ryujinx.Graphics.Gpu/State/PrimitiveType.cs (renamed from Ryujinx.Graphics.Gpu/State/PrimitiveTopology.cs)43
2 files changed, 48 insertions, 0 deletions
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/PrimitiveType.cs
index 340991c2..b49088aa 100644
--- a/Ryujinx.Graphics.Gpu/State/PrimitiveTopology.cs
+++ b/Ryujinx.Graphics.Gpu/State/PrimitiveType.cs
@@ -24,6 +24,25 @@ namespace Ryujinx.Graphics.Gpu.State
Patches
}
+ /// <summary>
+ /// Alternative primitive type that might override <see cref="PrimitiveType"/>.
+ /// </summary>
+ 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
{
/// <summary>
@@ -53,5 +72,29 @@ namespace Ryujinx.Graphics.Gpu.State
_ => PrimitiveTopology.Triangles
};
}
+
+ /// <summary>
+ /// Converts the primitive type into something that can be used with the host API.
+ /// </summary>
+ /// <param name="type">The primitive type to convert</param>
+ /// <returns>A host compatible enum value</returns>
+ 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