diff options
| author | Andrey Sukharev <SukharevAndrey@users.noreply.github.com> | 2022-12-05 16:47:39 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-05 14:47:39 +0100 |
| commit | 4da44e09cb2a32f69b4a6b47221117b78e4618dc (patch) | |
| tree | c3648a09202374dabff6fac472fe341bf9e1f0ee /Ryujinx.Graphics.Shader | |
| parent | ae13f0ab4da5b371bba746c1bd6598baaa44585d (diff) | |
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
Diffstat (limited to 'Ryujinx.Graphics.Shader')
21 files changed, 23 insertions, 81 deletions
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 /// <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; 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<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); }
\ No newline at end of file diff --git a/Ryujinx.Graphics.Shader/Decoders/Block.cs b/Ryujinx.Graphics.Shader/Decoders/Block.cs index ddd81cc5..7d94e3f9 100644 --- a/Ryujinx.Graphics.Shader/Decoders/Block.cs +++ b/Ryujinx.Graphics.Shader/Decoders/Block.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Graphics.Shader.Decoders } } - struct SyncTarget + readonly struct SyncTarget { public PushOpInfo PushOpInfo { get; } public int PushOpId { get; } diff --git a/Ryujinx.Graphics.Shader/Decoders/DecodedProgram.cs b/Ryujinx.Graphics.Shader/Decoders/DecodedProgram.cs index 80de41d7..2dd60155 100644 --- a/Ryujinx.Graphics.Shader/Decoders/DecodedProgram.cs +++ b/Ryujinx.Graphics.Shader/Decoders/DecodedProgram.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; namespace Ryujinx.Graphics.Shader.Decoders { - struct DecodedProgram : IEnumerable<DecodedFunction> + readonly struct DecodedProgram : IEnumerable<DecodedFunction> { public DecodedFunction MainFunction { get; } private readonly IReadOnlyDictionary<ulong, DecodedFunction> _functions; diff --git a/Ryujinx.Graphics.Shader/Decoders/Decoder.cs b/Ryujinx.Graphics.Shader/Decoders/Decoder.cs index 9dafb089..380c425e 100644 --- a/Ryujinx.Graphics.Shader/Decoders/Decoder.cs +++ b/Ryujinx.Graphics.Shader/Decoders/Decoder.cs @@ -473,7 +473,7 @@ namespace Ryujinx.Graphics.Shader.Decoders op = Unsafe.As<ulong, T>(ref rawOp); } - private struct BlockLocation + private readonly struct BlockLocation { public Block Block { get; } public int Index { get; } diff --git a/Ryujinx.Graphics.Shader/Decoders/InstTable.cs b/Ryujinx.Graphics.Shader/Decoders/InstTable.cs index 0a64632e..911f1581 100644 --- a/Ryujinx.Graphics.Shader/Decoders/InstTable.cs +++ b/Ryujinx.Graphics.Shader/Decoders/InstTable.cs @@ -6,7 +6,7 @@ namespace Ryujinx.Graphics.Shader.Decoders { private const int EncodingBits = 14; - private struct TableEntry + private readonly struct TableEntry { public InstName Name { get; } public InstEmitter Emitter { get; } diff --git a/Ryujinx.Graphics.Shader/Decoders/Register.cs b/Ryujinx.Graphics.Shader/Decoders/Register.cs index 30840d8c..e375096d 100644 --- a/Ryujinx.Graphics.Shader/Decoders/Register.cs +++ b/Ryujinx.Graphics.Shader/Decoders/Register.cs @@ -2,7 +2,7 @@ using System; namespace Ryujinx.Graphics.Shader.Decoders { - struct Register : IEquatable<Register> + readonly struct Register : IEquatable<Register> { public int Index { get; } diff --git a/Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs b/Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs index 799aec24..aea36423 100644 --- a/Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs +++ b/Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs @@ -5,7 +5,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr { static class InstructionInfo { - private struct InstInfo + private readonly struct InstInfo { public VariableType DestType { get; } diff --git a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs index 57253148..489a5910 100644 --- a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs +++ b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; namespace Ryujinx.Graphics.Shader.StructuredIr { - struct TransformFeedbackOutput + readonly struct TransformFeedbackOutput { public readonly bool Valid; public readonly int Buffer; diff --git a/Ryujinx.Graphics.Shader/Translation/AttributeInfo.cs b/Ryujinx.Graphics.Shader/Translation/AttributeInfo.cs index 839edbe9..1647f656 100644 --- a/Ryujinx.Graphics.Shader/Translation/AttributeInfo.cs +++ b/Ryujinx.Graphics.Shader/Translation/AttributeInfo.cs @@ -2,7 +2,7 @@ namespace Ryujinx.Graphics.Shader.Translation { - struct AttributeInfo + readonly struct AttributeInfo { private static readonly Dictionary<int, AttributeInfo> _builtInAttributes = new Dictionary<int, AttributeInfo>() { diff --git a/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs b/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs index ef5d7b96..7961ada8 100644 --- a/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs +++ b/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs @@ -21,7 +21,7 @@ namespace Ryujinx.Graphics.Shader.Translation public int OperationsCount => _operations.Count; - private struct BrxTarget + private readonly struct BrxTarget { public readonly Operand Selector; public readonly int ExpectedValue; diff --git a/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs b/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs index 1c5d8c54..073e120a 100644 --- a/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs +++ b/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs @@ -87,7 +87,7 @@ namespace Ryujinx.Graphics.Shader.Translation } } - private struct TreeNodeUse + private readonly struct TreeNodeUse { public TreeNode Node { get; } public int Index { get; } @@ -345,7 +345,7 @@ namespace Ryujinx.Graphics.Shader.Translation bool Matches(in InstOp opInfo); } - private struct PatternTreeNodeUse + private readonly struct PatternTreeNodeUse { public IPatternTreeNode Node { get; } public int Index { get; } diff --git a/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs b/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs index 158ba5ef..9e31831d 100644 --- a/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs +++ b/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs @@ -114,7 +114,7 @@ namespace Ryujinx.Graphics.Shader.Translation } } - public struct FunctionRegisterUsage + public readonly struct FunctionRegisterUsage { public Register[] InArguments { get; } public Register[] OutArguments { get; } diff --git a/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs b/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs index ae4107e8..12cd4cd1 100644 --- a/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs +++ b/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs @@ -69,36 +69,7 @@ namespace Ryujinx.Graphics.Shader.Translation private int _usedStorageBuffers; private int _usedStorageBuffersWrite; - private struct TextureInfo : IEquatable<TextureInfo> - { - public int CbufSlot { get; } - public int Handle { get; } - public bool Indexed { get; } - public TextureFormat Format { get; } - - public TextureInfo(int cbufSlot, int handle, bool indexed, TextureFormat format) - { - CbufSlot = cbufSlot; - Handle = handle; - Indexed = indexed; - Format = format; - } - - public override bool Equals(object obj) - { - return obj is TextureInfo other && Equals(other); - } - - public bool Equals(TextureInfo other) - { - return CbufSlot == other.CbufSlot && Handle == other.Handle && Indexed == other.Indexed && Format == other.Format; - } - - public override int GetHashCode() - { - return HashCode.Combine(CbufSlot, Handle, Indexed, Format); - } - } + private readonly record struct TextureInfo(int CbufSlot, int Handle, bool Indexed, TextureFormat Format); private struct TextureMeta { diff --git a/Ryujinx.Graphics.Shader/Translation/ShaderHeader.cs b/Ryujinx.Graphics.Shader/Translation/ShaderHeader.cs index e53c77af..b643262f 100644 --- a/Ryujinx.Graphics.Shader/Translation/ShaderHeader.cs +++ b/Ryujinx.Graphics.Shader/Translation/ShaderHeader.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.Shader.Translation ScreenLinear = 3 } - struct ImapPixelType + readonly struct ImapPixelType { public PixelImap X { get; } public PixelImap Y { get; } diff --git a/Ryujinx.Graphics.Shader/Translation/Ssa.cs b/Ryujinx.Graphics.Shader/Translation/Ssa.cs index 8c63d72d..16b8b924 100644 --- a/Ryujinx.Graphics.Shader/Translation/Ssa.cs +++ b/Ryujinx.Graphics.Shader/Translation/Ssa.cs @@ -108,7 +108,7 @@ namespace Ryujinx.Graphics.Shader.Translation } } - private struct Definition + private readonly struct Definition { public BasicBlock Block { get; } public Operand Local { get; } diff --git a/Ryujinx.Graphics.Shader/Translation/TranslationOptions.cs b/Ryujinx.Graphics.Shader/Translation/TranslationOptions.cs index 532e9abb..d9829ac4 100644 --- a/Ryujinx.Graphics.Shader/Translation/TranslationOptions.cs +++ b/Ryujinx.Graphics.Shader/Translation/TranslationOptions.cs @@ -1,6 +1,6 @@ namespace Ryujinx.Graphics.Shader.Translation { - public struct TranslationOptions + public readonly struct TranslationOptions { public TargetLanguage TargetLanguage { get; } public TargetApi TargetApi { get; } diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs index f8795c0f..3fb586cb 100644 --- a/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Graphics.Shader.Translation { private const int HeaderSize = 0x50; - internal struct FunctionCode + internal readonly struct FunctionCode { public Operation[] Code { get; } |
