diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/ScopedRegister.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/ScopedRegister.cs index 18b1416ea..e4ebf1309 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/ScopedRegister.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/ScopedRegister.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 return; } - if (_operand.Type.IsInteger()) + if (_operand.Type.IsInteger) { _registerAllocator.FreeTempGprRegister(_operand.AsInt32()); } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/Compiler.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/Compiler.cs index 643d1e20d..ff11cbd41 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/Compiler.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/Compiler.cs @@ -381,7 +381,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 if (currentCond != ArmCondition.Al) { instructionPointer = context.CodeWriter.InstructionPointer; - context.Arm64Assembler.B(currentCond.Invert(), 0); + context.Arm64Assembler.B(currentCond.Inverse, 0); } } } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs index 8190bd7ea..943bc6897 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs @@ -104,7 +104,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 if (invert) { - conditions[i++] = ((ArmCondition)firstCond).Invert(); + conditions[i++] = ((ArmCondition)firstCond).Inverse; } else { diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/ArmCondition.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/ArmCondition.cs index caa2e593b..9293b497a 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/ArmCondition.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/ArmCondition.cs @@ -22,9 +22,9 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 static class ArmConditionExtensions { - public static ArmCondition Invert(this ArmCondition condition) + extension(ArmCondition condition) { - return (ArmCondition)((int)condition ^ 1); + public ArmCondition Inverse => (ArmCondition)((int)condition ^ 1); } } } diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs index 3eeda20bf..f6eb226ec 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs @@ -673,7 +673,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 public readonly void Mov(Operand rd, Operand rn) { - Debug.Assert(rd.Type.IsInteger()); + Debug.Assert(rd.Type.IsInteger); Orr(rd, new Operand(ZrRegister, RegisterType.Integer, rd.Type), rn); } @@ -4544,7 +4544,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 uint instruction; int scale; - if (type.IsInteger()) + if (type.IsInteger) { instruction = intInst; @@ -4580,7 +4580,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 { uint instruction; - if (type.IsInteger()) + if (type.IsInteger) { instruction = intInst; @@ -4610,7 +4610,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 { uint instruction; - if (type.IsInteger()) + if (type.IsInteger) { instruction = intInst; diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/RegisterSaveRestore.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/RegisterSaveRestore.cs index b4b8bb524..527448e1c 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/RegisterSaveRestore.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/RegisterSaveRestore.cs @@ -34,7 +34,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 int gprCalleeSavedRegsCount = BitOperations.PopCount(_gprMask); int fpSimdCalleeSavedRegsCount = BitOperations.PopCount(_fpSimdMask); - return (_hasCall ? 16 : 0) + Align16(gprCalleeSavedRegsCount * 8 + fpSimdCalleeSavedRegsCount * _fpSimdType.GetSizeInBytes()); + return (_hasCall ? 16 : 0) + Align16(gprCalleeSavedRegsCount * 8 + fpSimdCalleeSavedRegsCount * _fpSimdType.ByteSize); } public void WritePrologue(ref Assembler asm) @@ -46,7 +46,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 int fpSimdCalleeSavedRegsCount = BitOperations.PopCount(fpSimdMask); int reservedStackSize = Align16(_reservedStackSize); - int calleeSaveRegionSize = Align16(gprCalleeSavedRegsCount * 8 + fpSimdCalleeSavedRegsCount * _fpSimdType.GetSizeInBytes()) + reservedStackSize; + int calleeSaveRegionSize = Align16(gprCalleeSavedRegsCount * 8 + fpSimdCalleeSavedRegsCount * _fpSimdType.ByteSize) + reservedStackSize; int offset = 0; WritePrologueCalleeSavesPreIndexed(ref asm, ref gprMask, ref offset, calleeSaveRegionSize, OperandType.I64); @@ -103,7 +103,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 asm.StrRiUn(Register(reg, type), Register(Assembler.SpRegister), 0); } - offset += type.GetSizeInBytes(); + offset += type.ByteSize; } while (mask != 0) @@ -130,7 +130,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 asm.StpRiUn(Register(reg, type), Register(reg2, type), Register(Assembler.SpRegister), 0); } - offset += type.GetSizeInBytes() * 2; + offset += type.ByteSize * 2; } } @@ -144,7 +144,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 bool misalignedVector = _fpSimdType == OperandType.V128 && (gprCalleeSavedRegsCount & 1) != 0; - int offset = gprCalleeSavedRegsCount * 8 + fpSimdCalleeSavedRegsCount * _fpSimdType.GetSizeInBytes(); + int offset = gprCalleeSavedRegsCount * 8 + fpSimdCalleeSavedRegsCount * _fpSimdType.ByteSize; if (misalignedVector) { @@ -197,7 +197,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 mask &= ~(1u << reg2); - offset -= type.GetSizeInBytes() * 2; + offset -= type.ByteSize * 2; if (offset != 0) { @@ -215,7 +215,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 } else { - offset -= type.GetSizeInBytes(); + offset -= type.ByteSize; if (offset != 0) { diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/OperandType.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/OperandType.cs index cd36c6781..ddb33167e 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeGen/OperandType.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/OperandType.cs @@ -14,14 +14,11 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen static class OperandTypeExtensions { - public static bool IsInteger(this OperandType type) + extension(OperandType type) { - return type is OperandType.I32 or OperandType.I64; - } + public bool IsInteger => type is OperandType.I32 or OperandType.I64; - public static int GetSizeInBytes(this OperandType type) - { - return type switch + public int ByteSize => type switch { OperandType.FP32 => 4, OperandType.FP64 => 8, diff --git a/src/Ryujinx.Graphics.GAL/BlendFactor.cs b/src/Ryujinx.Graphics.GAL/BlendFactor.cs index 1dba229d6..99f946c3c 100644 --- a/src/Ryujinx.Graphics.GAL/BlendFactor.cs +++ b/src/Ryujinx.Graphics.GAL/BlendFactor.cs @@ -41,22 +41,12 @@ namespace Ryujinx.Graphics.GAL public static class BlendFactorExtensions { - public static bool IsDualSource(this BlendFactor factor) + extension(BlendFactor factor) { - switch (factor) - { - case BlendFactor.Src1Color: - case BlendFactor.Src1ColorGl: - case BlendFactor.Src1Alpha: - case BlendFactor.Src1AlphaGl: - case BlendFactor.OneMinusSrc1Color: - case BlendFactor.OneMinusSrc1ColorGl: - case BlendFactor.OneMinusSrc1Alpha: - case BlendFactor.OneMinusSrc1AlphaGl: - return true; - default: - return false; - } + public bool IsDualSource => factor is + BlendFactor.Src1Color or BlendFactor.Src1ColorGl or BlendFactor.Src1Alpha or BlendFactor.Src1AlphaGl + or BlendFactor.OneMinusSrc1Color or BlendFactor.OneMinusSrc1ColorGl or BlendFactor.OneMinusSrc1Alpha + or BlendFactor.OneMinusSrc1AlphaGl; } } } diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs index 8bdf859ef..bfbde0246 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs @@ -1298,10 +1298,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed FilterBlendFactor(blend.AlphaDstFactor, index)); if (enable && - (blend.ColorSrcFactor.IsDualSource() || - blend.ColorDstFactor.IsDualSource() || - blend.AlphaSrcFactor.IsDualSource() || - blend.AlphaDstFactor.IsDualSource())) + (blend.ColorSrcFactor.IsDualSource || + blend.ColorDstFactor.IsDualSource || + blend.AlphaSrcFactor.IsDualSource || + blend.AlphaDstFactor.IsDualSource)) { dualSourceBlendEnabled = true; } @@ -1326,10 +1326,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed FilterBlendFactor(blend.AlphaDstFactor, 0)); if (enable && - (blend.ColorSrcFactor.IsDualSource() || - blend.ColorDstFactor.IsDualSource() || - blend.AlphaSrcFactor.IsDualSource() || - blend.AlphaDstFactor.IsDualSource())) + (blend.ColorSrcFactor.IsDualSource || + blend.ColorDstFactor.IsDualSource || + blend.AlphaSrcFactor.IsDualSource || + blend.AlphaDstFactor.IsDualSource)) { dualSourceBlendEnabled = true; } diff --git a/src/Ryujinx.Graphics.OpenGL/Pipeline.cs b/src/Ryujinx.Graphics.OpenGL/Pipeline.cs index 27cf133e3..a83a674d2 100644 --- a/src/Ryujinx.Graphics.OpenGL/Pipeline.cs +++ b/src/Ryujinx.Graphics.OpenGL/Pipeline.cs @@ -812,10 +812,10 @@ namespace Ryujinx.Graphics.OpenGL EnsureFramebuffer(); _framebuffer.SetDualSourceBlend( - blend.ColorSrcFactor.IsDualSource() || - blend.ColorDstFactor.IsDualSource() || - blend.AlphaSrcFactor.IsDualSource() || - blend.AlphaDstFactor.IsDualSource()); + blend.ColorSrcFactor.IsDualSource || + blend.ColorDstFactor.IsDualSource || + blend.AlphaSrcFactor.IsDualSource || + blend.AlphaDstFactor.IsDualSource); if (_blendConstant != blend.BlendConstant) { diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs index 6e30fb03d..a7b82e742 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs @@ -83,7 +83,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl { if (context.Definitions.Stage == ShaderStage.Geometry) { - string inPrimitive = context.Definitions.InputTopology.ToGlslString(); + string inPrimitive = context.Definitions.InputTopology.GlslString; context.AppendLine($"layout (invocations = {context.Definitions.ThreadsPerInputPrimitive}, {inPrimitive}) in;"); @@ -98,7 +98,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl } else { - string outPrimitive = context.Definitions.OutputTopology.ToGlslString(); + string outPrimitive = context.Definitions.OutputTopology.GlslString; int maxOutputVertices = context.Definitions.MaxOutputVertices; context.AppendLine($"layout ({outPrimitive}, max_vertices = {maxOutputVertices}) out;"); diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs index 71860adb2..e1571fc78 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs @@ -390,7 +390,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv if (context.Definitions.Stage != ShaderStage.Vertex) { SpvInstruction perVertexInputStructType = CreatePerVertexStructType(context); - int arraySize = context.Definitions.Stage == ShaderStage.Geometry ? context.Definitions.InputTopology.ToInputVertices() : 32; + int arraySize = context.Definitions.Stage == ShaderStage.Geometry ? context.Definitions.InputTopology.InputVertexCount : 32; SpvInstruction perVertexInputArrayType = context.TypeArray(perVertexInputStructType, context.Constant(context.TypeU32(), arraySize)); SpvInstruction perVertexInputPointerType = context.TypePointer(StorageClass.Input, perVertexInputArrayType); SpvInstruction perVertexInputVariable = context.Variable(perVertexInputPointerType, StorageClass.Input); @@ -537,7 +537,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv if (!isPerPatch && IoMap.IsPerVertex(ioVariable, context.Definitions.Stage, isOutput)) { - int arraySize = context.Definitions.Stage == ShaderStage.Geometry ? context.Definitions.InputTopology.ToInputVertices() : 32; + int arraySize = context.Definitions.Stage == ShaderStage.Geometry ? context.Definitions.InputTopology.InputVertexCount : 32; spvType = context.TypeArray(spvType, context.Constant(context.TypeU32(), arraySize)); if (context.Definitions.GpPassthrough && context.HostCapabilities.SupportsGeometryShaderPassthrough) diff --git a/src/Ryujinx.Graphics.Shader/InputTopology.cs b/src/Ryujinx.Graphics.Shader/InputTopology.cs index 9438263de..074386b5d 100644 --- a/src/Ryujinx.Graphics.Shader/InputTopology.cs +++ b/src/Ryujinx.Graphics.Shader/InputTopology.cs @@ -11,9 +11,9 @@ namespace Ryujinx.Graphics.Shader static class InputTopologyExtensions { - public static string ToGlslString(this InputTopology topology) + extension(InputTopology topology) { - return topology switch + public string GlslString => topology switch { InputTopology.Points => "points", InputTopology.Lines => "lines", @@ -22,11 +22,8 @@ namespace Ryujinx.Graphics.Shader InputTopology.TrianglesAdjacency => "triangles_adjacency", _ => "points", }; - } - - public static int ToInputVertices(this InputTopology topology) - { - return topology switch + + public int InputVertexCount => topology switch { InputTopology.Points => 1, InputTopology.Lines => 2, @@ -35,17 +32,14 @@ namespace Ryujinx.Graphics.Shader InputTopology.TrianglesAdjacency => 6, _ => 1, }; - } - - public static int ToInputVerticesNoAdjacency(this InputTopology topology) - { - return topology switch + + public int InputVertexCountNoAdjacency => topology switch { InputTopology.Points => 1, InputTopology.Lines or - InputTopology.LinesAdjacency => 2, + InputTopology.LinesAdjacency => 2, InputTopology.Triangles or - InputTopology.TrianglesAdjacency => 3, + InputTopology.TrianglesAdjacency => 3, _ => 1, }; } diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitMove.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitMove.cs index df84c38f1..4c7127274 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitMove.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitMove.cs @@ -105,7 +105,7 @@ namespace Ryujinx.Graphics.Shader.Instructions } else { - src = Const(context.TranslatorContext.Definitions.InputTopology.ToInputVertices() << 16); + src = Const(context.TranslatorContext.Definitions.InputTopology.InputVertexCount << 16); } } else diff --git a/src/Ryujinx.Graphics.Shader/OutputTopology.cs b/src/Ryujinx.Graphics.Shader/OutputTopology.cs index dc4b304ad..a517fe861 100644 --- a/src/Ryujinx.Graphics.Shader/OutputTopology.cs +++ b/src/Ryujinx.Graphics.Shader/OutputTopology.cs @@ -9,9 +9,10 @@ namespace Ryujinx.Graphics.Shader static class OutputTopologyExtensions { - public static string ToGlslString(this OutputTopology topology) + + extension(OutputTopology topology) { - return topology switch + public string GlslString => topology switch { OutputTopology.LineStrip => "line_strip", OutputTopology.PointList => "points", diff --git a/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs b/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs index 94448626f..62dd9e2e7 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs @@ -135,7 +135,7 @@ namespace Ryujinx.Graphics.Shader.Translation } else if (TranslatorContext.Stage == ShaderStage.Geometry) { - int inputVertices = TranslatorContext.Definitions.InputTopology.ToInputVertices(); + int inputVertices = TranslatorContext.Definitions.InputTopology.InputVertexCount; Operand baseVertex = this.IMultiply(outputVertexOffset, Const(inputVertices)); @@ -404,7 +404,7 @@ namespace Ryujinx.Graphics.Shader.Translation else { inputStart = 0; - inputEnd = topology.ToInputVerticesNoAdjacency(); + inputEnd = topology.InputVertexCountNoAdjacency; inputStep = 1; } diff --git a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs index 537059e41..6fdc455db 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs @@ -133,7 +133,7 @@ namespace Ryujinx.Graphics.Shader.Translation } else if (stage == ShaderStage.Geometry) { - LocalTopologyRemapMemoryId = AddMemoryDefinition("local_topology_remap", AggregateType.Array | AggregateType.U32, inputTopology.ToInputVertices()); + LocalTopologyRemapMemoryId = AddMemoryDefinition("local_topology_remap", AggregateType.Array | AggregateType.U32, inputTopology.InputVertexCount); LocalGeometryOutputVertexCountMemoryId = AddMemoryDefinition("local_geometry_output_vertex", AggregateType.U32); LocalGeometryOutputIndexCountMemoryId = AddMemoryDefinition("local_geometry_output_index", AggregateType.U32); diff --git a/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs b/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs index fbdccd804..c11e65812 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs @@ -157,7 +157,7 @@ namespace Ryujinx.Graphics.Shader.Translation GpPassthrough = gpPassthrough; ThreadsPerInputPrimitive = threadsPerInputPrimitive; OutputTopology = outputTopology; - MaxOutputVertices = gpPassthrough ? graphicsState.Topology.ToInputVerticesNoAdjacency() : maxOutputVertices; + MaxOutputVertices = gpPassthrough ? graphicsState.Topology.InputVertexCountNoAdjacency : maxOutputVertices; ImapTypes = imapTypes; OmapTargets = omapTargets; OmapSampleMask = omapSampleMask; diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs index fa815d96c..bce15ea5a 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs @@ -644,7 +644,7 @@ namespace Ryujinx.Graphics.Vulkan { result.ThrowOnError(); } - else if (result.IsError()) + else if (result.IsError) { program.AddGraphicsPipeline(ref Internal, null); diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanException.cs b/src/Ryujinx.Graphics.Vulkan/VulkanException.cs index 5d67ab838..1ccf0363a 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanException.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanException.cs @@ -5,18 +5,17 @@ namespace Ryujinx.Graphics.Vulkan { static class ResultExtensions { - public static bool IsError(this Result result) + extension(Result result) { - // Only negative result codes are errors. - return result < Result.Success; - } + public bool IsError => result < Result.Success; - public static void ThrowOnError(this Result result) - { - // Only negative result codes are errors. - if (result.IsError()) + public void ThrowOnError() { - throw new VulkanException(result); + // Only negative result codes are errors. + if (result.IsError) + { + throw new VulkanException(result); + } } } } diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityExtensions.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityExtensions.cs index dd133ee15..845ac850c 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityExtensions.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Process/CapabilityExtensions.cs @@ -4,19 +4,16 @@ namespace Ryujinx.HLE.HOS.Kernel.Process { static class CapabilityExtensions { + extension(CapabilityType type) + { + public uint Flag => (uint)type + 1; + + public uint Id => (uint)BitOperations.TrailingZeroCount(type.Flag); + } + public static CapabilityType GetCapabilityType(this uint cap) { return (CapabilityType)(((cap + 1) & ~cap) - 1); } - - public static uint GetFlag(this CapabilityType type) - { - return (uint)type + 1; - } - - public static uint GetId(this CapabilityType type) - { - return (uint)BitOperations.TrailingZeroCount(type.GetFlag()); - } } } diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs index 745d3edd8..2d9d0ef47 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs @@ -133,7 +133,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process return Result.Success; } - int codeMask = 1 << (32 - BitOperations.LeadingZeroCount(code.GetFlag() + 1)); + int codeMask = 1 << (32 - BitOperations.LeadingZeroCount(code.Flag + 1)); // Check if the property was already set. if (((mask0 & codeMask) & 0x1e008) != 0)