aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Engine/Types/PrimitiveType.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2021-07-11 17:20:40 -0300
committerGitHub <noreply@github.com>2021-07-11 17:20:40 -0300
commit40b21cc3c4d2622bbd4f88d43073341854d9a671 (patch)
tree6e9dc6a42e7c0bae5b03db468481771d5a6937ef /Ryujinx.Graphics.Gpu/Engine/Types/PrimitiveType.cs
parentb5190f16810eb77388c861d1d1773e19644808db (diff)
Separate GPU engines (part 2/2) (#2440)
* 3D engine now uses DeviceState too, plus new state modification tracking * Remove old methods code * Remove GpuState and friends * Optimize DeviceState, force inline some functions * This change was not supposed to go in * Proper channel initialization * Optimize state read/write methods even more * Fix debug build * Do not dirty state if the write is redundant * The YControl register should dirty either the viewport or front face state too, to update the host origin * Avoid redundant vertex buffer updates * Move state and get rid of the Ryujinx.Graphics.Gpu.State namespace * Comments and nits * Fix rebase * PR feedback * Move changed = false to improve codegen * PR feedback * Carry RyuJIT a bit more
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/Types/PrimitiveType.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Engine/Types/PrimitiveType.cs99
1 files changed, 99 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/Types/PrimitiveType.cs b/Ryujinx.Graphics.Gpu/Engine/Types/PrimitiveType.cs
new file mode 100644
index 00000000..dae63124
--- /dev/null
+++ b/Ryujinx.Graphics.Gpu/Engine/Types/PrimitiveType.cs
@@ -0,0 +1,99 @@
+using Ryujinx.Graphics.GAL;
+
+namespace Ryujinx.Graphics.Gpu.Engine.Types
+{
+ /// <summary>
+ /// Draw primitive type.
+ /// </summary>
+ enum PrimitiveType
+ {
+ Points,
+ Lines,
+ LineLoop,
+ LineStrip,
+ Triangles,
+ TriangleStrip,
+ TriangleFan,
+ Quads,
+ QuadStrip,
+ Polygon,
+ LinesAdjacency,
+ LineStripAdjacency,
+ TrianglesAdjacency,
+ TriangleStripAdjacency,
+ Patches
+ }
+
+ /// <summary>
+ /// Alternative primitive type that might override <see cref="PrimitiveType"/>.
+ /// </summary>
+ enum PrimitiveTypeOverride
+ {
+ 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>
+ /// 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 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
+ };
+ }
+
+ /// <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