From 4da44e09cb2a32f69b4a6b47221117b78e4618dc Mon Sep 17 00:00:00 2001 From: Andrey Sukharev Date: Mon, 5 Dec 2022 16:47:39 +0300 Subject: 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 --- .../CodeGen/Glsl/Instructions/InstInfo.cs | 2 +- .../CodeGen/Glsl/OperandManager.cs | 2 +- .../CodeGen/Spirv/OperationResult.cs | 2 +- .../CodeGen/Spirv/SpirvDelegates.cs | 2 +- .../CodeGen/Spirv/TextureMeta.cs | 33 ++-------------------- 5 files changed, 6 insertions(+), 35 deletions(-) (limited to 'Ryujinx.Graphics.Shader/CodeGen') diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstInfo.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstInfo.cs index fc9aef7e..7b2a6b46 100644 --- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstInfo.cs +++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstInfo.cs @@ -1,6 +1,6 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions { - struct InstInfo + readonly struct InstInfo { public InstType Type { get; } diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs index b7891426..ccc87a7f 100644 --- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs +++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs @@ -13,7 +13,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl { private static readonly string[] StagePrefixes = new string[] { "cp", "vp", "tcp", "tep", "gp", "fp" }; - private struct BuiltInAttribute + private readonly struct BuiltInAttribute { public string Name { get; } diff --git a/Ryujinx.Graphics.Shader/CodeGen/Spirv/OperationResult.cs b/Ryujinx.Graphics.Shader/CodeGen/Spirv/OperationResult.cs index f432f1c4..f80c8110 100644 --- a/Ryujinx.Graphics.Shader/CodeGen/Spirv/OperationResult.cs +++ b/Ryujinx.Graphics.Shader/CodeGen/Spirv/OperationResult.cs @@ -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); diff --git a/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvDelegates.cs b/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvDelegates.cs index fa0341ee..04c3be1b 100644 --- a/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvDelegates.cs +++ b/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvDelegates.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv /// /// Delegate cache for SPIR-V instruction generators. Avoids delegate allocation when passing generators as arguments. /// - internal struct SpirvDelegates + internal readonly struct SpirvDelegates { // Unary public readonly FuncUnaryInstruction GlslFAbs; diff --git a/Ryujinx.Graphics.Shader/CodeGen/Spirv/TextureMeta.cs b/Ryujinx.Graphics.Shader/CodeGen/Spirv/TextureMeta.cs index 686259ad..4de05603 100644 --- a/Ryujinx.Graphics.Shader/CodeGen/Spirv/TextureMeta.cs +++ b/Ryujinx.Graphics.Shader/CodeGen/Spirv/TextureMeta.cs @@ -1,33 +1,4 @@ -using System; - -namespace Ryujinx.Graphics.Shader.CodeGen.Spirv +namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { - struct TextureMeta : IEquatable - { - 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); } \ No newline at end of file -- cgit v1.2.3