From c6d05301aae7509ea6a1ec29d39a72bac94d80b0 Mon Sep 17 00:00:00 2001 From: Mary-nyan Date: Wed, 9 Nov 2022 20:22:43 +0100 Subject: infra: Migrate to .NET 7 (#3795) * Update readme to mention .NET 7 * infra: Migrate to .NET 7 .NET 7 is still in preview but this prepare for the release coming up next month. * Use Random.Shared in CreateRandom * Move UInt128Utils.cs to Ryujinx.Common project * Fix inverted parameters in System.UInt128 constructor * Fix Visual Studio complains on Ryujinx.Graphics.Vic * time: Fix missing alignment enforcement in SystemClockContext Fixes at least Smash * time: Fix missing alignment enforcement in SteadyClockContext Fix games (like recent version of Smash) using time shared memory * Switch to .NET 7.0.100 release * Enable Tiered PGO * Ensure CreateId validity requirements are meet when doing random generation Also enforce correct packing layout for other Mii structures. This fix a Mario Kart 8 crashes related to the default Miis. --- Ryujinx.Common/Utilities/SpanHelpers.cs | 16 ++++++++-------- Ryujinx.Common/Utilities/UInt128Utils.cs | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 Ryujinx.Common/Utilities/UInt128Utils.cs (limited to 'Ryujinx.Common/Utilities') diff --git a/Ryujinx.Common/Utilities/SpanHelpers.cs b/Ryujinx.Common/Utilities/SpanHelpers.cs index 84c13023..4765eab3 100644 --- a/Ryujinx.Common/Utilities/SpanHelpers.cs +++ b/Ryujinx.Common/Utilities/SpanHelpers.cs @@ -7,19 +7,19 @@ namespace Ryujinx.Common.Utilities public static class SpanHelpers { [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Span CreateSpan(ref T reference, int length) + public static Span CreateSpan(scoped ref T reference, int length) { return MemoryMarshal.CreateSpan(ref reference, length); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Span AsSpan(ref T reference) where T : unmanaged + public static Span AsSpan(scoped ref T reference) where T : unmanaged { return CreateSpan(ref reference, 1); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Span AsSpan(ref TStruct reference) + public static Span AsSpan(scoped ref TStruct reference) where TStruct : unmanaged where TSpan : unmanaged { return CreateSpan(ref Unsafe.As(ref reference), @@ -27,25 +27,25 @@ namespace Ryujinx.Common.Utilities } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Span AsByteSpan(ref T reference) where T : unmanaged + public static Span AsByteSpan(scoped ref T reference) where T : unmanaged { return CreateSpan(ref Unsafe.As(ref reference), Unsafe.SizeOf()); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ReadOnlySpan CreateReadOnlySpan(ref T reference, int length) + public static ReadOnlySpan CreateReadOnlySpan(scoped ref T reference, int length) { return MemoryMarshal.CreateReadOnlySpan(ref reference, length); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ReadOnlySpan AsReadOnlySpan(ref T reference) where T : unmanaged + public static ReadOnlySpan AsReadOnlySpan(scoped ref T reference) where T : unmanaged { return CreateReadOnlySpan(ref reference, 1); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ReadOnlySpan AsReadOnlySpan(ref TStruct reference) + public static ReadOnlySpan AsReadOnlySpan(scoped ref TStruct reference) where TStruct : unmanaged where TSpan : unmanaged { return CreateReadOnlySpan(ref Unsafe.As(ref reference), @@ -53,7 +53,7 @@ namespace Ryujinx.Common.Utilities } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ReadOnlySpan AsReadOnlyByteSpan(ref T reference) where T : unmanaged + public static ReadOnlySpan AsReadOnlyByteSpan(scoped ref T reference) where T : unmanaged { return CreateReadOnlySpan(ref Unsafe.As(ref reference), Unsafe.SizeOf()); } diff --git a/Ryujinx.Common/Utilities/UInt128Utils.cs b/Ryujinx.Common/Utilities/UInt128Utils.cs new file mode 100644 index 00000000..8cc437d1 --- /dev/null +++ b/Ryujinx.Common/Utilities/UInt128Utils.cs @@ -0,0 +1,17 @@ +using System; + +namespace Ryujinx.Common.Utilities +{ + public static class UInt128Utils + { + public static UInt128 FromHex(string hex) + { + return new UInt128((ulong)Convert.ToInt64(hex.Substring(0, 16), 16), (ulong)Convert.ToInt64(hex.Substring(16), 16)); + } + + public static UInt128 CreateRandom() + { + return new UInt128((ulong)Random.Shared.NextInt64(), (ulong)Random.Shared.NextInt64()); + } + } +} \ No newline at end of file -- cgit v1.2.3