aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader
diff options
context:
space:
mode:
authorAndrey Sukharev <SukharevAndrey@users.noreply.github.com>2022-12-05 16:47:39 +0300
committerGitHub <noreply@github.com>2022-12-05 14:47:39 +0100
commit4da44e09cb2a32f69b4a6b47221117b78e4618dc (patch)
treec3648a09202374dabff6fac472fe341bf9e1f0ee /Ryujinx.Graphics.Shader
parentae13f0ab4da5b371bba746c1bd6598baaa44585d (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')
-rw-r--r--Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstInfo.cs2
-rw-r--r--Ryujinx.Graphics.Shader/CodeGen/Glsl/OperandManager.cs2
-rw-r--r--Ryujinx.Graphics.Shader/CodeGen/Spirv/OperationResult.cs2
-rw-r--r--Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvDelegates.cs2
-rw-r--r--Ryujinx.Graphics.Shader/CodeGen/Spirv/TextureMeta.cs33
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/Block.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/DecodedProgram.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/Decoder.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/InstTable.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Decoders/Register.cs2
-rw-r--r--Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs2
-rw-r--r--Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Translation/AttributeInfo.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Translation/EmitterContext.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs4
-rw-r--r--Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs31
-rw-r--r--Ryujinx.Graphics.Shader/Translation/ShaderHeader.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Translation/Ssa.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Translation/TranslationOptions.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Translation/Translator.cs2
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; }