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.
This commit is contained in:
Mary-nyan 2022-11-09 20:22:43 +01:00 committed by GitHub
parent 647de4cd31
commit c6d05301aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
71 changed files with 144 additions and 301 deletions

View file

@ -1,4 +1,4 @@
using Ryujinx.HLE.Utilities;
using Ryujinx.Common.Utilities;
using System;
using System.Buffers.Binary;
@ -36,7 +36,7 @@ namespace Ryujinx.HLE.HOS.Services.Mii
public static UInt128 GetDeviceId()
{
// FIXME: call set:sys GetMiiAuthorId
return new UInt128("5279754d69694e780000000000000000"); // RyuMiiNx
return UInt128Utils.FromHex("5279754d69694e780000000000000000"); // RyuMiiNx
}
public static ReadOnlySpan<byte> Ver3FacelineColorTable => new byte[] { 0, 1, 2, 3, 4, 5 };

View file

@ -3,7 +3,7 @@ using System.Runtime.InteropServices;
namespace Ryujinx.HLE.HOS.Services.Mii.Types
{
[StructLayout(LayoutKind.Sequential, Size = 0x58)]
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x58)]
struct CharInfo : IStoredData<CharInfo>
{
public CreateId CreateId;

View file

@ -1,20 +1,19 @@
using Ryujinx.HLE.Utilities;
using System;
using System;
using System.Runtime.InteropServices;
namespace Ryujinx.HLE.HOS.Services.Mii.Types
{
[StructLayout(LayoutKind.Sequential, Size = 0x10)]
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x10)]
struct CreateId : IEquatable<CreateId>
{
public UInt128 Raw;
public bool IsNull => Raw.IsNull;
public bool IsValid => !IsNull && (Raw.High & 0xC0) == 0x80;
public bool IsNull => Raw == UInt128.Zero;
public bool IsValid => !IsNull && ((Raw >> 64) & 0xC0) == 0x80;
public CreateId(byte[] data)
public CreateId(UInt128 raw)
{
Raw = new UInt128(data);
Raw = raw;
}
public static bool operator ==(CreateId x, CreateId y)

View file

@ -1,11 +1,12 @@
using LibHac.Common;
using Ryujinx.HLE.Utilities;
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace Ryujinx.HLE.HOS.Services.Mii.Types
{
[StructLayout(LayoutKind.Sequential, Pack = 4, Size = Size)]
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = Size)]
struct StoreData : IStoredData<StoreData>
{
public const int Size = 0x44;

View file

@ -1,4 +1,5 @@
using Ryujinx.Cpu;
using Ryujinx.Common.Utilities;
using Ryujinx.Cpu;
using Ryujinx.HLE.HOS.Services.Mii.Types;
using Ryujinx.HLE.HOS.Services.Time;
using Ryujinx.HLE.HOS.Services.Time.Clock;
@ -62,7 +63,13 @@ namespace Ryujinx.HLE.HOS.Services.Mii
public CreateId MakeCreateId()
{
return new CreateId(Guid.NewGuid().ToByteArray());
UInt128 value = UInt128Utils.CreateRandom();
// Ensure the random ID generated is valid as a create id.
value &= ~new UInt128(0xC0, 0);
value |= new UInt128(0x80, 0);
return new CreateId(value);
}
}
}