mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-08-18 14:48:44 +02:00
* 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
99 lines
4.3 KiB
C#
99 lines
4.3 KiB
C#
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
|
|
};
|
|
}
|
|
}
|
|
} |