Make structs readonly when applicable (#4002)

* Make all structs readonly when applicable. It should reduce amount of needless defensive copies

* Make structs with trivial boilerplate equality code record structs

* Remove unnecessary readonly modifiers from TextureCreateInfo

* Make BitMap structs readonly too
This commit is contained in:
Andrey Sukharev
2022-12-05 16:47:39 +03:00
committed by GitHub
parent ae13f0ab4d
commit 4da44e09cb
133 changed files with 156 additions and 378 deletions

View File

@ -3,7 +3,7 @@ using Spv.Generator;
namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
{
struct OperationResult
readonly struct OperationResult
{
public static OperationResult Invalid => new OperationResult(AggregateType.Invalid, null);

View File

@ -8,7 +8,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
/// <summary>
/// Delegate cache for SPIR-V instruction generators. Avoids delegate allocation when passing generators as arguments.
/// </summary>
internal struct SpirvDelegates
internal readonly struct SpirvDelegates
{
// Unary
public readonly FuncUnaryInstruction GlslFAbs;

View File

@ -1,33 +1,4 @@
using System;
namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
{
struct TextureMeta : IEquatable<TextureMeta>
{
public int CbufSlot { get; }
public int Handle { get; }
public TextureFormat Format { get; }
public TextureMeta(int cbufSlot, int handle, TextureFormat format)
{
CbufSlot = cbufSlot;
Handle = handle;
Format = format;
}
public override bool Equals(object obj)
{
return obj is TextureMeta other && Equals(other);
}
public bool Equals(TextureMeta other)
{
return CbufSlot == other.CbufSlot && Handle == other.Handle && Format == other.Format;
}
public override int GetHashCode()
{
return HashCode.Combine(CbufSlot, Handle, Format);
}
}
readonly record struct TextureMeta(int CbufSlot, int Handle, TextureFormat Format);
}