/ src / Ryujinx.Graphics.Gpu / Engine / Types / PrimitiveType.cs
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  }