PrimitiveType.cs
1 using Ryujinx.Graphics.GAL; 2 3 namespace Ryujinx.Graphics.Gpu.Engine.Types 4 { 5 /// <summary> 6 /// Draw primitive type. 7 /// </summary> 8 enum PrimitiveType 9 { 10 Points, 11 Lines, 12 LineLoop, 13 LineStrip, 14 Triangles, 15 TriangleStrip, 16 TriangleFan, 17 Quads, 18 QuadStrip, 19 Polygon, 20 LinesAdjacency, 21 LineStripAdjacency, 22 TrianglesAdjacency, 23 TriangleStripAdjacency, 24 Patches, 25 } 26 27 /// <summary> 28 /// Alternative primitive type that might override <see cref="PrimitiveType"/>. 29 /// </summary> 30 enum PrimitiveTypeOverride 31 { 32 Points = 1, 33 Lines = 2, 34 LineStrip = 3, 35 Triangles = 4, 36 TriangleStrip = 5, 37 TriangleFan = 0x1015, 38 LinesAdjacency = 10, 39 LineStripAdjacency = 11, 40 TrianglesAdjacency = 12, 41 TriangleStripAdjacency = 13, 42 Patches = 14, 43 } 44 45 static class PrimitiveTypeConverter 46 { 47 /// <summary> 48 /// Converts the primitive type into something that can be used with the host API. 49 /// </summary> 50 /// <param name="type">The primitive type to convert</param> 51 /// <returns>A host compatible enum value</returns> 52 public static PrimitiveTopology Convert(this PrimitiveType type) 53 { 54 return type switch 55 { 56 #pragma warning disable IDE0055 // Disable formatting 57 PrimitiveType.Points => PrimitiveTopology.Points, 58 PrimitiveType.Lines => PrimitiveTopology.Lines, 59 PrimitiveType.LineLoop => PrimitiveTopology.LineLoop, 60 PrimitiveType.LineStrip => PrimitiveTopology.LineStrip, 61 PrimitiveType.Triangles => PrimitiveTopology.Triangles, 62 PrimitiveType.TriangleStrip => PrimitiveTopology.TriangleStrip, 63 PrimitiveType.TriangleFan => PrimitiveTopology.TriangleFan, 64 PrimitiveType.Quads => PrimitiveTopology.Quads, 65 PrimitiveType.QuadStrip => PrimitiveTopology.QuadStrip, 66 PrimitiveType.Polygon => PrimitiveTopology.Polygon, 67 PrimitiveType.LinesAdjacency => PrimitiveTopology.LinesAdjacency, 68 PrimitiveType.LineStripAdjacency => PrimitiveTopology.LineStripAdjacency, 69 PrimitiveType.TrianglesAdjacency => PrimitiveTopology.TrianglesAdjacency, 70 PrimitiveType.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency, 71 PrimitiveType.Patches => PrimitiveTopology.Patches, 72 _ => PrimitiveTopology.Triangles, 73 #pragma warning restore IDE0055 74 }; 75 } 76 77 /// <summary> 78 /// Converts the primitive type into something that can be used with the host API. 79 /// </summary> 80 /// <param name="type">The primitive type to convert</param> 81 /// <returns>A host compatible enum value</returns> 82 public static PrimitiveTopology Convert(this PrimitiveTypeOverride type) 83 { 84 return type switch 85 { 86 #pragma warning disable IDE0055 // Disable formatting 87 PrimitiveTypeOverride.Points => PrimitiveTopology.Points, 88 PrimitiveTypeOverride.Lines => PrimitiveTopology.Lines, 89 PrimitiveTypeOverride.LineStrip => PrimitiveTopology.LineStrip, 90 PrimitiveTypeOverride.Triangles => PrimitiveTopology.Triangles, 91 PrimitiveTypeOverride.TriangleStrip => PrimitiveTopology.TriangleStrip, 92 PrimitiveTypeOverride.TriangleFan => PrimitiveTopology.TriangleFan, 93 PrimitiveTypeOverride.LinesAdjacency => PrimitiveTopology.LinesAdjacency, 94 PrimitiveTypeOverride.LineStripAdjacency => PrimitiveTopology.LineStripAdjacency, 95 PrimitiveTypeOverride.TrianglesAdjacency => PrimitiveTopology.TrianglesAdjacency, 96 PrimitiveTypeOverride.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency, 97 PrimitiveTypeOverride.Patches => PrimitiveTopology.Patches, 98 _ => PrimitiveTopology.Triangles, 99 #pragma warning restore IDE0055 100 }; 101 } 102 } 103 }