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:
parent
647de4cd31
commit
c6d05301aa
71 changed files with 144 additions and 301 deletions
|
@ -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 };
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue