| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- using System;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- namespace Ryujinx.Graphics.Gpu.Shader
- {
- /// <summary>
- /// Shader code addresses in memory for each shader stage.
- /// </summary>
- struct ShaderAddresses : IEquatable<ShaderAddresses>
- {
- #pragma warning disable CS0649
- public ulong VertexA;
- public ulong VertexB;
- public ulong TessControl;
- public ulong TessEvaluation;
- public ulong Geometry;
- public ulong Fragment;
- #pragma warning restore CS0649
- /// <summary>
- /// Check if the addresses are equal.
- /// </summary>
- /// <param name="other">Shader addresses structure to compare with</param>
- /// <returns>True if they are equal, false otherwise</returns>
- public override bool Equals(object other)
- {
- return other is ShaderAddresses addresses && Equals(addresses);
- }
- /// <summary>
- /// Check if the addresses are equal.
- /// </summary>
- /// <param name="other">Shader addresses structure to compare with</param>
- /// <returns>True if they are equal, false otherwise</returns>
- public bool Equals(ShaderAddresses other)
- {
- return VertexA == other.VertexA &&
- VertexB == other.VertexB &&
- TessControl == other.TessControl &&
- TessEvaluation == other.TessEvaluation &&
- Geometry == other.Geometry &&
- Fragment == other.Fragment;
- }
- /// <summary>
- /// Computes hash code from the addresses.
- /// </summary>
- /// <returns>Hash code</returns>
- public override int GetHashCode()
- {
- return HashCode.Combine(VertexA, VertexB, TessControl, TessEvaluation, Geometry, Fragment);
- }
- /// <summary>
- /// Gets a view of the structure as a span of addresses.
- /// </summary>
- /// <returns>Span of addresses</returns>
- public Span<ulong> AsSpan()
- {
- return MemoryMarshal.CreateSpan(ref VertexA, Unsafe.SizeOf<ShaderAddresses>() / sizeof(ulong));
- }
- }
- }
|