mirror of
https://git.ryujinx.app/projects/Kenji-NX.git
synced 2026-10-04 13:58:49 +02:00
Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a2e09ad9a | ||
|
|
1bad72a388 | ||
|
|
9514d4c2c2 | ||
|
|
8655d58911 | ||
|
|
2cce274f58 | ||
|
|
19a8d1445e | ||
|
|
db35be690f | ||
|
|
e07f333a31 |
@@ -1,10 +1,4 @@
|
||||
<Solution>
|
||||
<Configurations>
|
||||
<BuildType Name="Debug" />
|
||||
<BuildType Name="Debug AOT" />
|
||||
<BuildType Name="Release" />
|
||||
<BuildType Name="Release AOT" />
|
||||
</Configurations>
|
||||
<Folder Name="/Solution Items/">
|
||||
<File Path=".editorconfig" />
|
||||
<File Path="Directory.Build.props" />
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<RuntimeIdentifiers>osx-arm64</RuntimeIdentifiers>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -406,7 +406,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
Operand res = EmitSoftFloatCall(context, nameof(SoftFloat32.FPSub), op1, op2);
|
||||
|
||||
return EmitUnaryMathCall(context, nameof(Math.Abs), res);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Abs), res);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -451,7 +451,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
Operand res = EmitSoftFloatCall(context, nameof(SoftFloat32.FPSub), op1, op2);
|
||||
|
||||
return EmitUnaryMathCall(context, nameof(Math.Abs), res);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Abs), res);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -483,7 +483,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
EmitScalarUnaryOpF(context, (op1) =>
|
||||
{
|
||||
return EmitUnaryMathCall(context, nameof(Math.Abs), op1);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -522,7 +522,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
EmitVectorUnaryOpF(context, (op1) =>
|
||||
{
|
||||
return EmitUnaryMathCall(context, nameof(Math.Abs), op1);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2246,7 +2246,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
EmitScalarUnaryOpF(context, (op1) =>
|
||||
{
|
||||
return EmitUnaryMathCall(context, nameof(Math.Floor), op1);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2265,7 +2265,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
EmitVectorUnaryOpF(context, (op1) =>
|
||||
{
|
||||
return EmitUnaryMathCall(context, nameof(Math.Floor), op1);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2322,7 +2322,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
EmitScalarUnaryOpF(context, (op1) =>
|
||||
{
|
||||
return EmitUnaryMathCall(context, nameof(Math.Ceiling), op1);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2341,7 +2341,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
EmitVectorUnaryOpF(context, (op1) =>
|
||||
{
|
||||
return EmitUnaryMathCall(context, nameof(Math.Ceiling), op1);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2390,7 +2390,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
EmitScalarUnaryOpF(context, (op1) =>
|
||||
{
|
||||
return EmitUnaryMathCall(context, nameof(Math.Truncate), op1);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2409,7 +2409,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
EmitVectorUnaryOpF(context, (op1) =>
|
||||
{
|
||||
return EmitUnaryMathCall(context, nameof(Math.Truncate), op1);
|
||||
return EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Abs), op1));
|
||||
EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitVectorUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Abs), op1));
|
||||
EmitVectorUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -726,8 +726,8 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
if (absolute)
|
||||
{
|
||||
ne = EmitUnaryMathCall(context, nameof(Math.Abs), ne);
|
||||
me = EmitUnaryMathCall(context, nameof(Math.Abs), me);
|
||||
ne = EmitUnaryMathCall(context, nameof(MathHelper.Abs), ne);
|
||||
me = EmitUnaryMathCall(context, nameof(MathHelper.Abs), me);
|
||||
}
|
||||
|
||||
Operand e = EmitSoftFloatCall(context, name, ne, me);
|
||||
|
||||
@@ -333,7 +333,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1));
|
||||
EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -349,7 +349,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitFcvt(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1), signed: true, scalar: false);
|
||||
EmitFcvt(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1), signed: true, scalar: false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -365,7 +365,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1));
|
||||
EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -538,7 +538,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Ceiling), op1));
|
||||
EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -554,7 +554,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Ceiling), op1));
|
||||
EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -357,10 +357,10 @@ namespace ARMeilleure.Instructions
|
||||
toConvert = EmitRoundMathCall(context, MidpointRounding.ToEven, toConvert);
|
||||
break;
|
||||
case 0b10: // Towards positive infinity
|
||||
toConvert = EmitUnaryMathCall(context, nameof(Math.Ceiling), toConvert);
|
||||
toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), toConvert);
|
||||
break;
|
||||
case 0b11: // Towards negative infinity
|
||||
toConvert = EmitUnaryMathCall(context, nameof(Math.Floor), toConvert);
|
||||
toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Floor), toConvert);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -494,10 +494,10 @@ namespace ARMeilleure.Instructions
|
||||
toConvert = EmitRoundMathCall(context, MidpointRounding.ToEven, toConvert);
|
||||
break;
|
||||
case 0b10: // Towards positive infinity
|
||||
toConvert = EmitUnaryMathCall(context, nameof(Math.Ceiling), toConvert);
|
||||
toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), toConvert);
|
||||
break;
|
||||
case 0b11: // Towards negative infinity
|
||||
toConvert = EmitUnaryMathCall(context, nameof(Math.Floor), toConvert);
|
||||
toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Floor), toConvert);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -534,7 +534,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(Math.Floor), m));
|
||||
EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), m));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -574,7 +574,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(Math.Ceiling), m));
|
||||
EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), m));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -613,7 +613,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Truncate), op1));
|
||||
EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -460,8 +460,8 @@ namespace ARMeilleure.Instructions
|
||||
IOpCodeSimd op = (IOpCodeSimd)context.CurrOp;
|
||||
|
||||
MethodInfo info = (op.Size & 1) == 0
|
||||
? typeof(MathF).GetMethod(name, [typeof(float)])
|
||||
: typeof(Math).GetMethod(name, [typeof(double)]);
|
||||
? typeof(MathHelperF).GetMethod(name, [typeof(float)])
|
||||
: typeof(MathHelper).GetMethod(name, [typeof(double)]);
|
||||
|
||||
return context.Call(info, n);
|
||||
}
|
||||
@@ -470,11 +470,11 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
IOpCodeSimd op = (IOpCodeSimd)context.CurrOp;
|
||||
|
||||
string name = nameof(Math.Round);
|
||||
string name = nameof(MathHelper.Round);
|
||||
|
||||
MethodInfo info = (op.Size & 1) == 0
|
||||
? typeof(MathF).GetMethod(name, [typeof(float), typeof(MidpointRounding)])
|
||||
: typeof(Math).GetMethod(name, [typeof(double), typeof(MidpointRounding)]);
|
||||
? typeof(MathHelperF).GetMethod(name, [typeof(float), typeof(int)])
|
||||
: typeof(MathHelper).GetMethod(name, [typeof(double), typeof(int)]);
|
||||
|
||||
return context.Call(info, n, Const((int)roundMode));
|
||||
}
|
||||
@@ -510,16 +510,16 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
context.MarkLabel(lbl1);
|
||||
context.BranchIf(lbl2, rMode, rP, Comparison.NotEqual);
|
||||
context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Ceiling), op));
|
||||
context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op));
|
||||
context.Branch(lblEnd);
|
||||
|
||||
context.MarkLabel(lbl2);
|
||||
context.BranchIf(lbl3, rMode, rM, Comparison.NotEqual);
|
||||
context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Floor), op));
|
||||
context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Floor), op));
|
||||
context.Branch(lblEnd);
|
||||
|
||||
context.MarkLabel(lbl3);
|
||||
context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Truncate), op));
|
||||
context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op));
|
||||
context.Branch(lblEnd);
|
||||
|
||||
context.MarkLabel(lblEnd);
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ARMeilleure.Instructions
|
||||
{
|
||||
static class MathHelper
|
||||
{
|
||||
[UnmanagedCallersOnly]
|
||||
public static double Abs(double value)
|
||||
{
|
||||
return Math.Abs(value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double Ceiling(double value)
|
||||
{
|
||||
return Math.Ceiling(value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double Floor(double value)
|
||||
{
|
||||
return Math.Floor(value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double Round(double value, int mode)
|
||||
{
|
||||
return Math.Round(value, (MidpointRounding)mode);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double Truncate(double value)
|
||||
{
|
||||
return Math.Truncate(value);
|
||||
}
|
||||
}
|
||||
|
||||
static class MathHelperF
|
||||
{
|
||||
[UnmanagedCallersOnly]
|
||||
public static float Abs(float value)
|
||||
{
|
||||
return MathF.Abs(value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float Ceiling(float value)
|
||||
{
|
||||
return MathF.Ceiling(value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float Floor(float value)
|
||||
{
|
||||
return MathF.Floor(value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float Round(float value, int mode)
|
||||
{
|
||||
return MathF.Round(value, (MidpointRounding)mode);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float Truncate(float value)
|
||||
{
|
||||
return MathF.Truncate(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ using ARMeilleure.Memory;
|
||||
using ARMeilleure.State;
|
||||
using ARMeilleure.Translation;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ARMeilleure.Instructions
|
||||
{
|
||||
@@ -34,6 +35,7 @@ namespace ARMeilleure.Instructions
|
||||
Context = null;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void Break(ulong address, int imm)
|
||||
{
|
||||
Statistics.PauseTimer();
|
||||
@@ -43,6 +45,7 @@ namespace ARMeilleure.Instructions
|
||||
Statistics.ResumeTimer();
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void SupervisorCall(ulong address, int imm)
|
||||
{
|
||||
Statistics.PauseTimer();
|
||||
@@ -52,6 +55,7 @@ namespace ARMeilleure.Instructions
|
||||
Statistics.ResumeTimer();
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void Undefined(ulong address, int opCode)
|
||||
{
|
||||
Statistics.PauseTimer();
|
||||
@@ -62,26 +66,31 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
|
||||
#region "System registers"
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong GetCtrEl0()
|
||||
{
|
||||
return GetContext().CtrEl0;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong GetDczidEl0()
|
||||
{
|
||||
return GetContext().DczidEl0;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong GetCntfrqEl0()
|
||||
{
|
||||
return GetContext().CntfrqEl0;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong GetCntpctEl0()
|
||||
{
|
||||
return GetContext().CntpctEl0;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong GetCntvctEl0()
|
||||
{
|
||||
return GetContext().CntvctEl0;
|
||||
@@ -89,26 +98,31 @@ namespace ARMeilleure.Instructions
|
||||
#endregion
|
||||
|
||||
#region "Read"
|
||||
[UnmanagedCallersOnly]
|
||||
public static byte ReadByte(ulong address)
|
||||
{
|
||||
return GetMemoryManager().ReadGuest<byte>(address);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ushort ReadUInt16(ulong address)
|
||||
{
|
||||
return GetMemoryManager().ReadGuest<ushort>(address);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint ReadUInt32(ulong address)
|
||||
{
|
||||
return GetMemoryManager().ReadGuest<uint>(address);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong ReadUInt64(ulong address)
|
||||
{
|
||||
return GetMemoryManager().ReadGuest<ulong>(address);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 ReadVector128(ulong address)
|
||||
{
|
||||
return GetMemoryManager().ReadGuest<V128>(address);
|
||||
@@ -116,47 +130,56 @@ namespace ARMeilleure.Instructions
|
||||
#endregion
|
||||
|
||||
#region "Write"
|
||||
[UnmanagedCallersOnly]
|
||||
public static void WriteByte(ulong address, byte value)
|
||||
{
|
||||
GetMemoryManager().WriteGuest(address, value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void WriteUInt16(ulong address, ushort value)
|
||||
{
|
||||
GetMemoryManager().WriteGuest(address, value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void WriteUInt32(ulong address, uint value)
|
||||
{
|
||||
GetMemoryManager().WriteGuest(address, value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void WriteUInt64(ulong address, ulong value)
|
||||
{
|
||||
GetMemoryManager().WriteGuest(address, value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void WriteVector128(ulong address, V128 value)
|
||||
{
|
||||
GetMemoryManager().WriteGuest(address, value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void EnqueueForRejit(ulong address)
|
||||
{
|
||||
Context.Translator.EnqueueForRejit(address, GetContext().ExecutionMode);
|
||||
}
|
||||
|
||||
public static void SignalMemoryTracking(ulong address, ulong size, bool write)
|
||||
[UnmanagedCallersOnly]
|
||||
public static void SignalMemoryTracking(ulong address, ulong size, byte write)
|
||||
{
|
||||
GetMemoryManager().SignalMemoryTracking(address, size, write);
|
||||
GetMemoryManager().SignalMemoryTracking(address, size, write == 1);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void ThrowInvalidMemoryAccess(ulong address)
|
||||
{
|
||||
throw new InvalidAccessException(address);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong GetFunctionAddress(ulong address)
|
||||
{
|
||||
TranslatedFunction function = Context.Translator.GetOrTranslate(address, GetContext().ExecutionMode);
|
||||
@@ -164,12 +187,14 @@ namespace ARMeilleure.Instructions
|
||||
return (ulong)function.FuncPointer.ToInt64();
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static void InvalidateCacheLine(ulong address)
|
||||
{
|
||||
Context.Translator.InvalidateJitCacheRegion(address, InstEmit.DczSizeInBytes);
|
||||
}
|
||||
|
||||
public static bool CheckSynchronization()
|
||||
[UnmanagedCallersOnly]
|
||||
public static byte CheckSynchronization()
|
||||
{
|
||||
Statistics.PauseTimer();
|
||||
|
||||
@@ -179,7 +204,7 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
Statistics.ResumeTimer();
|
||||
|
||||
return context.Running;
|
||||
return (byte)(context.Running ? 1 : 0);
|
||||
}
|
||||
|
||||
public static ExecutionContext GetContext()
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
using ARMeilleure.State;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ARMeilleure.Instructions
|
||||
{
|
||||
static class SoftFallback
|
||||
{
|
||||
#region "ShrImm64"
|
||||
[UnmanagedCallersOnly]
|
||||
public static long SignedShrImm64(long value, long roundConst, int shift)
|
||||
{
|
||||
if (roundConst == 0L)
|
||||
@@ -48,6 +50,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong UnsignedShrImm64(ulong value, long roundConst, int shift)
|
||||
{
|
||||
if (roundConst == 0L)
|
||||
@@ -92,6 +95,7 @@ namespace ARMeilleure.Instructions
|
||||
#endregion
|
||||
|
||||
#region "Saturation"
|
||||
[UnmanagedCallersOnly]
|
||||
public static int SatF32ToS32(float value)
|
||||
{
|
||||
if (float.IsNaN(value))
|
||||
@@ -103,6 +107,7 @@ namespace ARMeilleure.Instructions
|
||||
value <= int.MinValue ? int.MinValue : (int)value;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static long SatF32ToS64(float value)
|
||||
{
|
||||
if (float.IsNaN(value))
|
||||
@@ -114,6 +119,7 @@ namespace ARMeilleure.Instructions
|
||||
value <= long.MinValue ? long.MinValue : (long)value;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint SatF32ToU32(float value)
|
||||
{
|
||||
if (float.IsNaN(value))
|
||||
@@ -125,6 +131,7 @@ namespace ARMeilleure.Instructions
|
||||
value <= uint.MinValue ? uint.MinValue : (uint)value;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong SatF32ToU64(float value)
|
||||
{
|
||||
if (float.IsNaN(value))
|
||||
@@ -136,6 +143,7 @@ namespace ARMeilleure.Instructions
|
||||
value <= ulong.MinValue ? ulong.MinValue : (ulong)value;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static int SatF64ToS32(double value)
|
||||
{
|
||||
if (double.IsNaN(value))
|
||||
@@ -147,6 +155,7 @@ namespace ARMeilleure.Instructions
|
||||
value <= int.MinValue ? int.MinValue : (int)value;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static long SatF64ToS64(double value)
|
||||
{
|
||||
if (double.IsNaN(value))
|
||||
@@ -158,6 +167,7 @@ namespace ARMeilleure.Instructions
|
||||
value <= long.MinValue ? long.MinValue : (long)value;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint SatF64ToU32(double value)
|
||||
{
|
||||
if (double.IsNaN(value))
|
||||
@@ -169,6 +179,7 @@ namespace ARMeilleure.Instructions
|
||||
value <= uint.MinValue ? uint.MinValue : (uint)value;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong SatF64ToU64(double value)
|
||||
{
|
||||
if (double.IsNaN(value))
|
||||
@@ -182,6 +193,7 @@ namespace ARMeilleure.Instructions
|
||||
#endregion
|
||||
|
||||
#region "Count"
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong CountLeadingSigns(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.).
|
||||
{
|
||||
value ^= value >> 1;
|
||||
@@ -201,6 +213,7 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
private static ReadOnlySpan<byte> ClzNibbleTbl => [4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong CountLeadingZeros(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.).
|
||||
{
|
||||
if (value == 0ul)
|
||||
@@ -224,41 +237,49 @@ namespace ARMeilleure.Instructions
|
||||
#endregion
|
||||
|
||||
#region "Table"
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Tbl1(V128 vector, int bytes, V128 tb0)
|
||||
{
|
||||
return TblOrTbx(default, vector, bytes, tb0);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Tbl2(V128 vector, int bytes, V128 tb0, V128 tb1)
|
||||
{
|
||||
return TblOrTbx(default, vector, bytes, tb0, tb1);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Tbl3(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2)
|
||||
{
|
||||
return TblOrTbx(default, vector, bytes, tb0, tb1, tb2);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Tbl4(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3)
|
||||
{
|
||||
return TblOrTbx(default, vector, bytes, tb0, tb1, tb2, tb3);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Tbx1(V128 dest, V128 vector, int bytes, V128 tb0)
|
||||
{
|
||||
return TblOrTbx(dest, vector, bytes, tb0);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Tbx2(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1)
|
||||
{
|
||||
return TblOrTbx(dest, vector, bytes, tb0, tb1);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Tbx3(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2)
|
||||
{
|
||||
return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Tbx4(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3)
|
||||
{
|
||||
return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2, tb3);
|
||||
@@ -300,14 +321,22 @@ namespace ARMeilleure.Instructions
|
||||
private const uint Crc32RevPoly = 0xedb88320;
|
||||
private const uint Crc32cRevPoly = 0x82f63b78;
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint Crc32b(uint crc, byte value) => Crc32(crc, Crc32RevPoly, value);
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint Crc32h(uint crc, ushort value) => Crc32h(crc, Crc32RevPoly, value);
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint Crc32w(uint crc, uint value) => Crc32w(crc, Crc32RevPoly, value);
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint Crc32x(uint crc, ulong value) => Crc32x(crc, Crc32RevPoly, value);
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint Crc32cb(uint crc, byte value) => Crc32(crc, Crc32cRevPoly, value);
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint Crc32ch(uint crc, ushort value) => Crc32h(crc, Crc32cRevPoly, value);
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint Crc32cw(uint crc, uint value) => Crc32w(crc, Crc32cRevPoly, value);
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint Crc32cx(uint crc, ulong value) => Crc32x(crc, Crc32cRevPoly, value);
|
||||
|
||||
private static uint Crc32h(uint crc, uint poly, ushort val)
|
||||
@@ -358,21 +387,25 @@ namespace ARMeilleure.Instructions
|
||||
#endregion
|
||||
|
||||
#region "Aes"
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Decrypt(V128 value, V128 roundKey)
|
||||
{
|
||||
return CryptoHelper.AesInvSubBytes(CryptoHelper.AesInvShiftRows(value ^ roundKey));
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Encrypt(V128 value, V128 roundKey)
|
||||
{
|
||||
return CryptoHelper.AesSubBytes(CryptoHelper.AesShiftRows(value ^ roundKey));
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 InverseMixColumns(V128 value)
|
||||
{
|
||||
return CryptoHelper.AesInvMixColumns(value);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 MixColumns(V128 value)
|
||||
{
|
||||
return CryptoHelper.AesMixColumns(value);
|
||||
@@ -380,6 +413,7 @@ namespace ARMeilleure.Instructions
|
||||
#endregion
|
||||
|
||||
#region "Sha1"
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 HashChoose(V128 hash_abcd, uint hash_e, V128 wk)
|
||||
{
|
||||
for (int e = 0; e <= 3; e++)
|
||||
@@ -400,11 +434,13 @@ namespace ARMeilleure.Instructions
|
||||
return hash_abcd;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static uint FixedRotate(uint hash_e)
|
||||
{
|
||||
return hash_e.Rol(30);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 HashMajority(V128 hash_abcd, uint hash_e, V128 wk)
|
||||
{
|
||||
for (int e = 0; e <= 3; e++)
|
||||
@@ -425,6 +461,7 @@ namespace ARMeilleure.Instructions
|
||||
return hash_abcd;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 HashParity(V128 hash_abcd, uint hash_e, V128 wk)
|
||||
{
|
||||
for (int e = 0; e <= 3; e++)
|
||||
@@ -445,6 +482,7 @@ namespace ARMeilleure.Instructions
|
||||
return hash_abcd;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Sha1SchedulePart1(V128 w0_3, V128 w4_7, V128 w8_11)
|
||||
{
|
||||
ulong t2 = w4_7.Extract<ulong>(0);
|
||||
@@ -455,6 +493,7 @@ namespace ARMeilleure.Instructions
|
||||
return result ^ (w0_3 ^ w8_11);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Sha1SchedulePart2(V128 tw0_3, V128 w12_15)
|
||||
{
|
||||
V128 t = tw0_3 ^ (w12_15 >> 32);
|
||||
@@ -499,16 +538,19 @@ namespace ARMeilleure.Instructions
|
||||
#endregion
|
||||
|
||||
#region "Sha256"
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 HashLower(V128 hash_abcd, V128 hash_efgh, V128 wk)
|
||||
{
|
||||
return Sha256Hash(hash_abcd, hash_efgh, wk, part1: true);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 HashUpper(V128 hash_abcd, V128 hash_efgh, V128 wk)
|
||||
{
|
||||
return Sha256Hash(hash_abcd, hash_efgh, wk, part1: false);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Sha256SchedulePart1(V128 w0_3, V128 w4_7)
|
||||
{
|
||||
V128 result = new();
|
||||
@@ -527,6 +569,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 Sha256SchedulePart2(V128 w0_3, V128 w8_11, V128 w12_15)
|
||||
{
|
||||
V128 result = new();
|
||||
@@ -628,6 +671,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
#endregion
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static V128 PolynomialMult64_128(ulong op1, ulong op2)
|
||||
{
|
||||
V128 result = V128.Zero;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using ARMeilleure.State;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ARMeilleure.Instructions
|
||||
{
|
||||
@@ -312,6 +313,7 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
static class SoftFloat16_32
|
||||
{
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPConvert(ushort valueBits)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -487,6 +489,7 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
static class SoftFloat16_64
|
||||
{
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPConvert(ushort valueBits)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -662,6 +665,7 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
static class SoftFloat32_16
|
||||
{
|
||||
[UnmanagedCallersOnly]
|
||||
public static ushort FPConvert(float value)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -781,12 +785,19 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
static class SoftFloat32
|
||||
{
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPAdd(float value1, float value2)
|
||||
{
|
||||
return FPAddFpscr(value1, value2, false);
|
||||
return FPAddFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPAddFpscr(float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPAddFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPAddFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPAddFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -837,7 +848,8 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int FPCompare(float value1, float value2, bool signalNaNs)
|
||||
[UnmanagedCallersOnly]
|
||||
public static int FPCompare(float value1, float value2, byte signalNaNs)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = context.Fpcr;
|
||||
@@ -851,7 +863,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
result = 0b0011;
|
||||
|
||||
if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs)
|
||||
if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs == 1)
|
||||
{
|
||||
SoftFloat.FPProcessException(FPException.InvalidOp, context, fpcr);
|
||||
}
|
||||
@@ -875,12 +887,13 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareEQ(float value1, float value2)
|
||||
{
|
||||
return FPCompareEQFpscr(value1, value2, false);
|
||||
return FPCompareEQFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPCompareEQFpscr(float value1, float value2, bool standardFpscr)
|
||||
private static float FPCompareEQFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -907,12 +920,25 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
public static float FPCompareGE(float value1, float value2)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareEQFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareGEFpscr(value1, value2, false);
|
||||
return FPCompareEQFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
public static float FPCompareGEFpscr(float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareGE(float value1, float value2)
|
||||
{
|
||||
return FPCompareGEFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareGEFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareGEFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPCompareGEFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -936,12 +962,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareGT(float value1, float value2)
|
||||
{
|
||||
return FPCompareGTFpscr(value1, value2, false);
|
||||
return FPCompareGTFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPCompareGTFpscr(float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareGTFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareGTFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPCompareGTFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -965,26 +998,31 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareLE(float value1, float value2)
|
||||
{
|
||||
return FPCompareGE(value2, value1);
|
||||
return FPCompareGEFpscrImpl(value2, value1, false);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareLT(float value1, float value2)
|
||||
{
|
||||
return FPCompareGT(value2, value1);
|
||||
return FPCompareGTFpscrImpl(value2, value1, false);
|
||||
}
|
||||
|
||||
public static float FPCompareLEFpscr(float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareLEFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareGEFpscr(value2, value1, standardFpscr);
|
||||
return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1);
|
||||
}
|
||||
|
||||
public static float FPCompareLTFpscr(float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPCompareLTFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareGTFpscr(value2, value1, standardFpscr);
|
||||
return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPDiv(float value1, float value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -1037,12 +1075,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMax(float value1, float value2)
|
||||
{
|
||||
return FPMaxFpscr(value1, value2, false);
|
||||
return FPMaxFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPMaxFpscr(float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMaxFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPMaxFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPMaxFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -1103,12 +1148,13 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMaxNum(float value1, float value2)
|
||||
{
|
||||
return FPMaxNumFpscr(value1, value2, false);
|
||||
return FPMaxNumFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPMaxNumFpscr(float value1, float value2, bool standardFpscr)
|
||||
private static float FPMaxNumFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -1125,15 +1171,28 @@ namespace ARMeilleure.Instructions
|
||||
value2 = FPInfinity(true);
|
||||
}
|
||||
|
||||
return FPMaxFpscr(value1, value2, standardFpscr);
|
||||
return FPMaxFpscrImpl(value1, value2, standardFpscr);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMaxNumFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPMaxNumFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMin(float value1, float value2)
|
||||
{
|
||||
return FPMinFpscr(value1, value2, false);
|
||||
return FPMinFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPMinFpscr(float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMinFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPMinFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPMinFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -1194,12 +1253,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMinNum(float value1, float value2)
|
||||
{
|
||||
return FPMinNumFpscr(value1, value2, false);
|
||||
return FPMinNumFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPMinNumFpscr(float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMinNumFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPMinNumFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPMinNumFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -1216,15 +1282,22 @@ namespace ARMeilleure.Instructions
|
||||
value2 = FPInfinity(false);
|
||||
}
|
||||
|
||||
return FPMinFpscr(value1, value2, standardFpscr);
|
||||
return FPMinFpscrImpl(value1, value2, standardFpscr);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMul(float value1, float value2)
|
||||
{
|
||||
return FPMulFpscr(value1, value2, false);
|
||||
return FPMulFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPMulFpscr(float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMulFpscr(float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPMulFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPMulFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -1271,12 +1344,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMulAdd(float valueA, float value1, float value2)
|
||||
{
|
||||
return FPMulAddFpscr(valueA, value1, value2, false);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPMulAddFpscr(float valueA, float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMulAddFpscr(float valueA, float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPMulAddFpscrImpl(float valueA, float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -1342,20 +1422,23 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMulSub(float valueA, float value1, float value2)
|
||||
{
|
||||
value1 = value1.FPNeg();
|
||||
|
||||
return FPMulAdd(valueA, value1, value2);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPMulSubFpscr(float valueA, float value1, float value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMulSubFpscr(float valueA, float value1, float value2, byte standardFpscr)
|
||||
{
|
||||
value1 = value1.FPNeg();
|
||||
|
||||
return FPMulAddFpscr(valueA, value1, value2, standardFpscr);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPMulX(float value1, float value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -1401,27 +1484,36 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPNegMulAdd(float valueA, float value1, float value2)
|
||||
{
|
||||
valueA = valueA.FPNeg();
|
||||
value1 = value1.FPNeg();
|
||||
|
||||
return FPMulAdd(valueA, value1, value2);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, false);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPNegMulSub(float valueA, float value1, float value2)
|
||||
{
|
||||
valueA = valueA.FPNeg();
|
||||
|
||||
return FPMulAdd(valueA, value1, value2);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, false);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPRecipEstimate(float value)
|
||||
{
|
||||
return FPRecipEstimateFpscr(value, false);
|
||||
return FPRecipEstimateFpscrImpl(value, false);
|
||||
}
|
||||
|
||||
public static float FPRecipEstimateFpscr(float value, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPRecipEstimateFpscr(float value, byte standardFpscr)
|
||||
{
|
||||
return FPRecipEstimateFpscrImpl(value, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPRecipEstimateFpscrImpl(float value, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -1508,6 +1600,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPRecipStep(float value1, float value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -1533,15 +1626,16 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
product = FPMulFpscr(value1, value2, true);
|
||||
product = FPMulFpscrImpl(value1, value2, true);
|
||||
}
|
||||
|
||||
result = FPSubFpscr(FPTwo(false), product, true);
|
||||
result = FPSubFpscrImpl(FPTwo(false), product, true);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPRecipStepFused(float value1, float value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -1585,6 +1679,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPRecpX(float value)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -1610,12 +1705,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPRSqrtEstimate(float value)
|
||||
{
|
||||
return FPRSqrtEstimateFpscr(value, false);
|
||||
return FPRSqrtEstimateFpscrImpl(value, false);
|
||||
}
|
||||
|
||||
public static float FPRSqrtEstimateFpscr(float value, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPRSqrtEstimateFpscr(float value, byte standardFpscr)
|
||||
{
|
||||
return FPRSqrtEstimateFpscrImpl(value, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static float FPRSqrtEstimateFpscrImpl(float value, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -1729,6 +1831,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPRSqrtStep(float value1, float value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -1754,7 +1857,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
product = FPMulFpscr(value1, value2, true);
|
||||
product = FPMulFpscrImpl(value1, value2, true);
|
||||
}
|
||||
|
||||
result = FPHalvedSub(FPThree(false), product, context, fpcr);
|
||||
@@ -1763,6 +1866,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPRSqrtStepFused(float value1, float value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -1806,6 +1910,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPSqrt(float value)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -1848,12 +1953,13 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static float FPSub(float value1, float value2)
|
||||
{
|
||||
return FPSubFpscr(value1, value2, false);
|
||||
return FPSubFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static float FPSubFpscr(float value1, float value2, bool standardFpscr)
|
||||
private static float FPSubFpscrImpl(float value1, float value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2094,6 +2200,7 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
static class SoftFloat64_16
|
||||
{
|
||||
[UnmanagedCallersOnly]
|
||||
public static ushort FPConvert(double value)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -2213,12 +2320,19 @@ namespace ARMeilleure.Instructions
|
||||
|
||||
static class SoftFloat64
|
||||
{
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPAdd(double value1, double value2)
|
||||
{
|
||||
return FPAddFpscr(value1, value2, false);
|
||||
return FPAddFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPAddFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPAddFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPAddFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPAddFpscrImpl(double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2269,7 +2383,8 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int FPCompare(double value1, double value2, bool signalNaNs)
|
||||
[UnmanagedCallersOnly]
|
||||
public static int FPCompare(double value1, double value2, byte signalNaNs)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = context.Fpcr;
|
||||
@@ -2283,7 +2398,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
result = 0b0011;
|
||||
|
||||
if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs)
|
||||
if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs == 1)
|
||||
{
|
||||
SoftFloat.FPProcessException(FPException.InvalidOp, context, fpcr);
|
||||
}
|
||||
@@ -2307,12 +2422,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareEQ(double value1, double value2)
|
||||
{
|
||||
return FPCompareEQFpscr(value1, value2, false);
|
||||
return FPCompareEQFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPCompareEQFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareEQFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareEQFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPCompareEQFpscrImpl(double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2339,12 +2461,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareGE(double value1, double value2)
|
||||
{
|
||||
return FPCompareGEFpscr(value1, value2, false);
|
||||
return FPCompareGEFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPCompareGEFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareGEFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareGEFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPCompareGEFpscrImpl(double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2368,12 +2497,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareGT(double value1, double value2)
|
||||
{
|
||||
return FPCompareGTFpscr(value1, value2, false);
|
||||
return FPCompareGTFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPCompareGTFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareGTFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareGTFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPCompareGTFpscrImpl(double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2397,26 +2533,31 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareLE(double value1, double value2)
|
||||
{
|
||||
return FPCompareGE(value2, value1);
|
||||
return FPCompareGEFpscrImpl(value2, value1, false);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareLT(double value1, double value2)
|
||||
{
|
||||
return FPCompareGT(value2, value1);
|
||||
return FPCompareGTFpscrImpl(value2, value1, false);
|
||||
}
|
||||
|
||||
public static double FPCompareLEFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareLEFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareGEFpscr(value2, value1, standardFpscr);
|
||||
return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1);
|
||||
}
|
||||
|
||||
public static double FPCompareLTFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPCompareLTFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPCompareGTFpscr(value2, value1, standardFpscr);
|
||||
return FPCompareGTFpscrImpl(value2, value1, standardFpscr == 1);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPDiv(double value1, double value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -2469,12 +2610,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMax(double value1, double value2)
|
||||
{
|
||||
return FPMaxFpscr(value1, value2, false);
|
||||
return FPMaxFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPMaxFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMaxFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPMaxFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPMaxFpscrImpl(double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2535,12 +2683,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMaxNum(double value1, double value2)
|
||||
{
|
||||
return FPMaxNumFpscr(value1, value2, false);
|
||||
return FPMaxNumFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPMaxNumFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMaxNumFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPMaxNumFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPMaxNumFpscrImpl(double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2557,15 +2712,22 @@ namespace ARMeilleure.Instructions
|
||||
value2 = FPInfinity(true);
|
||||
}
|
||||
|
||||
return FPMaxFpscr(value1, value2, standardFpscr);
|
||||
return FPMaxFpscrImpl(value1, value2, standardFpscr);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMin(double value1, double value2)
|
||||
{
|
||||
return FPMinFpscr(value1, value2, false);
|
||||
return FPMinFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPMinFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMinFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPMinFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPMinFpscrImpl(double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2626,12 +2788,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMinNum(double value1, double value2)
|
||||
{
|
||||
return FPMinNumFpscr(value1, value2, false);
|
||||
return FPMinNumFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPMinNumFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMinNumFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPMinNumFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPMinNumFpscrImpl(double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2648,15 +2817,22 @@ namespace ARMeilleure.Instructions
|
||||
value2 = FPInfinity(false);
|
||||
}
|
||||
|
||||
return FPMinFpscr(value1, value2, standardFpscr);
|
||||
return FPMinFpscrImpl(value1, value2, standardFpscr);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMul(double value1, double value2)
|
||||
{
|
||||
return FPMulFpscr(value1, value2, false);
|
||||
return FPMulFpscrImpl(value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPMulFpscr(double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMulFpscr(double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPMulFpscrImpl(value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPMulFpscrImpl(double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2703,12 +2879,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMulAdd(double valueA, double value1, double value2)
|
||||
{
|
||||
return FPMulAddFpscr(valueA, value1, value2, false);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPMulAddFpscr(double valueA, double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMulAddFpscr(double valueA, double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPMulAddFpscrImpl(double valueA, double value1, double value2, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2774,20 +2957,23 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMulSub(double valueA, double value1, double value2)
|
||||
{
|
||||
value1 = value1.FPNeg();
|
||||
|
||||
return FPMulAdd(valueA, value1, value2);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, false);
|
||||
}
|
||||
|
||||
public static double FPMulSubFpscr(double valueA, double value1, double value2, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMulSubFpscr(double valueA, double value1, double value2, byte standardFpscr)
|
||||
{
|
||||
value1 = value1.FPNeg();
|
||||
|
||||
return FPMulAddFpscr(valueA, value1, value2, standardFpscr);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPMulX(double value1, double value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -2833,27 +3019,36 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPNegMulAdd(double valueA, double value1, double value2)
|
||||
{
|
||||
valueA = valueA.FPNeg();
|
||||
value1 = value1.FPNeg();
|
||||
|
||||
return FPMulAdd(valueA, value1, value2);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, false);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPNegMulSub(double valueA, double value1, double value2)
|
||||
{
|
||||
valueA = valueA.FPNeg();
|
||||
|
||||
return FPMulAdd(valueA, value1, value2);
|
||||
return FPMulAddFpscrImpl(valueA, value1, value2, false);
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPRecipEstimate(double value)
|
||||
{
|
||||
return FPRecipEstimateFpscr(value, false);
|
||||
return FPRecipEstimateFpscrImpl(value, false);
|
||||
}
|
||||
|
||||
public static double FPRecipEstimateFpscr(double value, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPRecipEstimateFpscr(double value, byte standardFpscr)
|
||||
{
|
||||
return FPRecipEstimateFpscrImpl(value, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPRecipEstimateFpscrImpl(double value, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -2940,6 +3135,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPRecipStep(double value1, double value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -2965,7 +3161,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
product = FPMulFpscr(value1, value2, true);
|
||||
product = FPMulFpscrImpl(value1, value2, true);
|
||||
}
|
||||
|
||||
result = FPSubFpscr(FPTwo(false), product, true);
|
||||
@@ -2974,6 +3170,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPRecipStepFused(double value1, double value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -3017,6 +3214,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPRecpX(double value)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -3042,12 +3240,19 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPRSqrtEstimate(double value)
|
||||
{
|
||||
return FPRSqrtEstimateFpscr(value, false);
|
||||
return FPRSqrtEstimateFpscrImpl(value, false);
|
||||
}
|
||||
|
||||
public static double FPRSqrtEstimateFpscr(double value, bool standardFpscr)
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPRSqrtEstimateFpscr(double value, byte standardFpscr)
|
||||
{
|
||||
return FPRSqrtEstimateFpscrImpl(value, standardFpscr == 1);
|
||||
}
|
||||
|
||||
private static double FPRSqrtEstimateFpscrImpl(double value, bool standardFpscr)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
|
||||
@@ -3161,6 +3366,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPRSqrtStep(double value1, double value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -3186,7 +3392,7 @@ namespace ARMeilleure.Instructions
|
||||
}
|
||||
else
|
||||
{
|
||||
product = FPMulFpscr(value1, value2, true);
|
||||
product = FPMulFpscrImpl(value1, value2, true);
|
||||
}
|
||||
|
||||
result = FPHalvedSub(FPThree(false), product, context, fpcr);
|
||||
@@ -3195,6 +3401,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPRSqrtStepFused(double value1, double value2)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -3238,6 +3445,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPSqrt(double value)
|
||||
{
|
||||
ExecutionContext context = NativeInterface.GetContext();
|
||||
@@ -3280,6 +3488,7 @@ namespace ARMeilleure.Instructions
|
||||
return result;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static double FPSub(double value1, double value2)
|
||||
{
|
||||
return FPSubFpscr(value1, value2, false);
|
||||
|
||||
@@ -1,18 +1,11 @@
|
||||
using System;
|
||||
|
||||
namespace ARMeilleure.Translation
|
||||
{
|
||||
class DelegateInfo
|
||||
{
|
||||
#pragma warning disable IDE0052 // Remove unread private member
|
||||
private readonly Delegate _dlg; // Ensure that this delegate will not be garbage collected.
|
||||
#pragma warning restore IDE0052
|
||||
|
||||
public nint FuncPtr { get; }
|
||||
|
||||
public DelegateInfo(Delegate dlg, nint funcPtr)
|
||||
public DelegateInfo(nint funcPtr)
|
||||
{
|
||||
_dlg = dlg;
|
||||
FuncPtr = funcPtr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
using ARMeilleure.Instructions;
|
||||
using ARMeilleure.State;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ARMeilleure.Translation
|
||||
{
|
||||
@@ -35,20 +33,6 @@ namespace ARMeilleure.Translation
|
||||
return _delegates.Values[index].FuncPtr; // O(1).
|
||||
}
|
||||
|
||||
public static IntPtr GetDelegateFuncPtr(MethodInfo info)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(info);
|
||||
|
||||
string key = GetKey(info);
|
||||
|
||||
if (!_delegates.TryGetValue(key, out DelegateInfo dlgInfo)) // O(log(n)).
|
||||
{
|
||||
throw new KeyNotFoundException($"({nameof(key)} = {key})");
|
||||
}
|
||||
|
||||
return dlgInfo.FuncPtr;
|
||||
}
|
||||
|
||||
public static int GetDelegateIndex(MethodInfo info)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(info);
|
||||
@@ -65,11 +49,11 @@ namespace ARMeilleure.Translation
|
||||
return index;
|
||||
}
|
||||
|
||||
private static void SetDelegateInfo(Delegate dlg, IntPtr funcPtr)
|
||||
private static void SetDelegateInfo(MethodInfo method)
|
||||
{
|
||||
string key = GetKey(dlg.Method);
|
||||
string key = GetKey(method);
|
||||
|
||||
_delegates.Add(key, new DelegateInfo(dlg, funcPtr)); // ArgumentException (key).
|
||||
_delegates.Add(key, new DelegateInfo(method.MethodHandle.GetFunctionPointer())); // ArgumentException (key).
|
||||
}
|
||||
|
||||
private static string GetKey(MethodInfo info)
|
||||
@@ -79,532 +63,183 @@ namespace ARMeilleure.Translation
|
||||
|
||||
private static readonly SortedList<string, DelegateInfo> _delegates;
|
||||
|
||||
static Delegates()
|
||||
unsafe static Delegates()
|
||||
{
|
||||
_delegates = new SortedList<string, DelegateInfo>();
|
||||
|
||||
var dlgMathAbs = new MathAbs(Math.Abs);
|
||||
var dlgMathCeiling = new MathCeiling(Math.Ceiling);
|
||||
var dlgMathFloor = new MathFloor(Math.Floor);
|
||||
var dlgMathRound = new MathRound(Math.Round);
|
||||
var dlgMathTruncate = new MathTruncate(Math.Truncate);
|
||||
SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Abs)));
|
||||
SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Ceiling)));
|
||||
SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Floor)));
|
||||
SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Round)));
|
||||
SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Truncate)));
|
||||
|
||||
var dlgMathFAbs = new MathFAbs(MathF.Abs);
|
||||
var dlgMathFCeiling = new MathFCeiling(MathF.Ceiling);
|
||||
var dlgMathFFloor = new MathFFloor(MathF.Floor);
|
||||
var dlgMathFRound = new MathFRound(MathF.Round);
|
||||
var dlgMathFTruncate = new MathFTruncate(MathF.Truncate);
|
||||
SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Abs)));
|
||||
SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Ceiling)));
|
||||
SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Floor)));
|
||||
SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Round)));
|
||||
SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Truncate)));
|
||||
|
||||
var dlgNativeInterfaceBreak = new NativeInterfaceBreak(NativeInterface.Break);
|
||||
var dlgNativeInterfaceCheckSynchronization = new NativeInterfaceCheckSynchronization(NativeInterface.CheckSynchronization);
|
||||
var dlgNativeInterfaceEnqueueForRejit = new NativeInterfaceEnqueueForRejit(NativeInterface.EnqueueForRejit);
|
||||
var dlgNativeInterfaceGetCntfrqEl0 = new NativeInterfaceGetCntfrqEl0(NativeInterface.GetCntfrqEl0);
|
||||
var dlgNativeInterfaceGetCntpctEl0 = new NativeInterfaceGetCntpctEl0(NativeInterface.GetCntpctEl0);
|
||||
var dlgNativeInterfaceGetCntvctEl0 = new NativeInterfaceGetCntvctEl0(NativeInterface.GetCntvctEl0);
|
||||
var dlgNativeInterfaceGetCtrEl0 = new NativeInterfaceGetCtrEl0(NativeInterface.GetCtrEl0);
|
||||
var dlgNativeInterfaceGetDczidEl0 = new NativeInterfaceGetDczidEl0(NativeInterface.GetDczidEl0);
|
||||
var dlgNativeInterfaceGetFunctionAddress = new NativeInterfaceGetFunctionAddress(NativeInterface.GetFunctionAddress);
|
||||
var dlgNativeInterfaceInvalidateCacheLine = new NativeInterfaceInvalidateCacheLine(NativeInterface.InvalidateCacheLine);
|
||||
var dlgNativeInterfaceReadByte = new NativeInterfaceReadByte(NativeInterface.ReadByte);
|
||||
var dlgNativeInterfaceReadUInt16 = new NativeInterfaceReadUInt16(NativeInterface.ReadUInt16);
|
||||
var dlgNativeInterfaceReadUInt32 = new NativeInterfaceReadUInt32(NativeInterface.ReadUInt32);
|
||||
var dlgNativeInterfaceReadUInt64 = new NativeInterfaceReadUInt64(NativeInterface.ReadUInt64);
|
||||
var dlgNativeInterfaceReadVector128 = new NativeInterfaceReadVector128(NativeInterface.ReadVector128);
|
||||
var dlgNativeInterfaceSignalMemoryTracking = new NativeInterfaceSignalMemoryTracking(NativeInterface.SignalMemoryTracking);
|
||||
var dlgNativeInterfaceSupervisorCall = new NativeInterfaceSupervisorCall(NativeInterface.SupervisorCall);
|
||||
var dlgNativeInterfaceThrowInvalidMemoryAccess = new NativeInterfaceThrowInvalidMemoryAccess(NativeInterface.ThrowInvalidMemoryAccess);
|
||||
var dlgNativeInterfaceUndefined = new NativeInterfaceUndefined(NativeInterface.Undefined);
|
||||
var dlgNativeInterfaceWriteByte = new NativeInterfaceWriteByte(NativeInterface.WriteByte);
|
||||
var dlgNativeInterfaceWriteUInt16 = new NativeInterfaceWriteUInt16(NativeInterface.WriteUInt16);
|
||||
var dlgNativeInterfaceWriteUInt32 = new NativeInterfaceWriteUInt32(NativeInterface.WriteUInt32);
|
||||
var dlgNativeInterfaceWriteUInt64 = new NativeInterfaceWriteUInt64(NativeInterface.WriteUInt64);
|
||||
var dlgNativeInterfaceWriteVector128 = new NativeInterfaceWriteVector128(NativeInterface.WriteVector128);
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.Break)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.CheckSynchronization)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.EnqueueForRejit)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntfrqEl0)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntpctEl0)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntvctEl0)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCtrEl0)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetDczidEl0)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetFunctionAddress)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.InvalidateCacheLine)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadByte)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt16)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt32)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt64)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadVector128)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SignalMemoryTracking)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SupervisorCall)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ThrowInvalidMemoryAccess)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.Undefined)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteByte)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteUInt16)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteUInt32)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteUInt64)));
|
||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteVector128)));
|
||||
|
||||
var dlgSoftFallbackCountLeadingSigns = new SoftFallbackCountLeadingSigns(SoftFallback.CountLeadingSigns);
|
||||
var dlgSoftFallbackCountLeadingZeros = new SoftFallbackCountLeadingZeros(SoftFallback.CountLeadingZeros);
|
||||
var dlgSoftFallbackCrc32b = new SoftFallbackCrc32b(SoftFallback.Crc32b);
|
||||
var dlgSoftFallbackCrc32cb = new SoftFallbackCrc32cb(SoftFallback.Crc32cb);
|
||||
var dlgSoftFallbackCrc32ch = new SoftFallbackCrc32ch(SoftFallback.Crc32ch);
|
||||
var dlgSoftFallbackCrc32cw = new SoftFallbackCrc32cw(SoftFallback.Crc32cw);
|
||||
var dlgSoftFallbackCrc32cx = new SoftFallbackCrc32cx(SoftFallback.Crc32cx);
|
||||
var dlgSoftFallbackCrc32h = new SoftFallbackCrc32h(SoftFallback.Crc32h);
|
||||
var dlgSoftFallbackCrc32w = new SoftFallbackCrc32w(SoftFallback.Crc32w);
|
||||
var dlgSoftFallbackCrc32x = new SoftFallbackCrc32x(SoftFallback.Crc32x);
|
||||
var dlgSoftFallbackDecrypt = new SoftFallbackDecrypt(SoftFallback.Decrypt);
|
||||
var dlgSoftFallbackEncrypt = new SoftFallbackEncrypt(SoftFallback.Encrypt);
|
||||
var dlgSoftFallbackFixedRotate = new SoftFallbackFixedRotate(SoftFallback.FixedRotate);
|
||||
var dlgSoftFallbackHashChoose = new SoftFallbackHashChoose(SoftFallback.HashChoose);
|
||||
var dlgSoftFallbackHashLower = new SoftFallbackHashLower(SoftFallback.HashLower);
|
||||
var dlgSoftFallbackHashMajority = new SoftFallbackHashMajority(SoftFallback.HashMajority);
|
||||
var dlgSoftFallbackHashParity = new SoftFallbackHashParity(SoftFallback.HashParity);
|
||||
var dlgSoftFallbackHashUpper = new SoftFallbackHashUpper(SoftFallback.HashUpper);
|
||||
var dlgSoftFallbackInverseMixColumns = new SoftFallbackInverseMixColumns(SoftFallback.InverseMixColumns);
|
||||
var dlgSoftFallbackMixColumns = new SoftFallbackMixColumns(SoftFallback.MixColumns);
|
||||
var dlgSoftFallbackPolynomialMult64_128 = new SoftFallbackPolynomialMult64_128(SoftFallback.PolynomialMult64_128);
|
||||
var dlgSoftFallbackSatF32ToS32 = new SoftFallbackSatF32ToS32(SoftFallback.SatF32ToS32);
|
||||
var dlgSoftFallbackSatF32ToS64 = new SoftFallbackSatF32ToS64(SoftFallback.SatF32ToS64);
|
||||
var dlgSoftFallbackSatF32ToU32 = new SoftFallbackSatF32ToU32(SoftFallback.SatF32ToU32);
|
||||
var dlgSoftFallbackSatF32ToU64 = new SoftFallbackSatF32ToU64(SoftFallback.SatF32ToU64);
|
||||
var dlgSoftFallbackSatF64ToS32 = new SoftFallbackSatF64ToS32(SoftFallback.SatF64ToS32);
|
||||
var dlgSoftFallbackSatF64ToS64 = new SoftFallbackSatF64ToS64(SoftFallback.SatF64ToS64);
|
||||
var dlgSoftFallbackSatF64ToU32 = new SoftFallbackSatF64ToU32(SoftFallback.SatF64ToU32);
|
||||
var dlgSoftFallbackSatF64ToU64 = new SoftFallbackSatF64ToU64(SoftFallback.SatF64ToU64);
|
||||
var dlgSoftFallbackSha1SchedulePart1 = new SoftFallbackSha1SchedulePart1(SoftFallback.Sha1SchedulePart1);
|
||||
var dlgSoftFallbackSha1SchedulePart2 = new SoftFallbackSha1SchedulePart2(SoftFallback.Sha1SchedulePart2);
|
||||
var dlgSoftFallbackSha256SchedulePart1 = new SoftFallbackSha256SchedulePart1(SoftFallback.Sha256SchedulePart1);
|
||||
var dlgSoftFallbackSha256SchedulePart2 = new SoftFallbackSha256SchedulePart2(SoftFallback.Sha256SchedulePart2);
|
||||
var dlgSoftFallbackSignedShrImm64 = new SoftFallbackSignedShrImm64(SoftFallback.SignedShrImm64);
|
||||
var dlgSoftFallbackTbl1 = new SoftFallbackTbl1(SoftFallback.Tbl1);
|
||||
var dlgSoftFallbackTbl2 = new SoftFallbackTbl2(SoftFallback.Tbl2);
|
||||
var dlgSoftFallbackTbl3 = new SoftFallbackTbl3(SoftFallback.Tbl3);
|
||||
var dlgSoftFallbackTbl4 = new SoftFallbackTbl4(SoftFallback.Tbl4);
|
||||
var dlgSoftFallbackTbx1 = new SoftFallbackTbx1(SoftFallback.Tbx1);
|
||||
var dlgSoftFallbackTbx2 = new SoftFallbackTbx2(SoftFallback.Tbx2);
|
||||
var dlgSoftFallbackTbx3 = new SoftFallbackTbx3(SoftFallback.Tbx3);
|
||||
var dlgSoftFallbackTbx4 = new SoftFallbackTbx4(SoftFallback.Tbx4);
|
||||
var dlgSoftFallbackUnsignedShrImm64 = new SoftFallbackUnsignedShrImm64(SoftFallback.UnsignedShrImm64);
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingSigns)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingZeros)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32b)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cb)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32ch)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cw)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cx)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32h)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32w)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32x)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Decrypt)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Encrypt)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.FixedRotate)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashChoose)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashLower)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashMajority)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashParity)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashUpper)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.InverseMixColumns)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.MixColumns)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.PolynomialMult64_128)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToS32)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToS64)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToU32)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToU64)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToS32)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToS64)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToU32)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToU64)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha1SchedulePart1)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha1SchedulePart2)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha256SchedulePart1)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha256SchedulePart2)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SignedShrImm64)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl1)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl2)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl3)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl4)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx1)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx2)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx3)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx4)));
|
||||
SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.UnsignedShrImm64)));
|
||||
|
||||
var dlgSoftFloat16_32FPConvert = new SoftFloat16_32FPConvert(SoftFloat16_32.FPConvert);
|
||||
var dlgSoftFloat16_64FPConvert = new SoftFloat16_64FPConvert(SoftFloat16_64.FPConvert);
|
||||
SetDelegateInfo(typeof(SoftFloat16_32).GetMethod(nameof(SoftFloat16_32.FPConvert)));
|
||||
SetDelegateInfo(typeof(SoftFloat16_64).GetMethod(nameof(SoftFloat16_64.FPConvert)));
|
||||
|
||||
var dlgSoftFloat32FPAdd = new SoftFloat32FPAdd(SoftFloat32.FPAdd);
|
||||
var dlgSoftFloat32FPAddFpscr = new SoftFloat32FPAddFpscr(SoftFloat32.FPAddFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPCompare = new SoftFloat32FPCompare(SoftFloat32.FPCompare);
|
||||
var dlgSoftFloat32FPCompareEQ = new SoftFloat32FPCompareEQ(SoftFloat32.FPCompareEQ);
|
||||
var dlgSoftFloat32FPCompareEQFpscr = new SoftFloat32FPCompareEQFpscr(SoftFloat32.FPCompareEQFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPCompareGE = new SoftFloat32FPCompareGE(SoftFloat32.FPCompareGE);
|
||||
var dlgSoftFloat32FPCompareGEFpscr = new SoftFloat32FPCompareGEFpscr(SoftFloat32.FPCompareGEFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPCompareGT = new SoftFloat32FPCompareGT(SoftFloat32.FPCompareGT);
|
||||
var dlgSoftFloat32FPCompareGTFpscr = new SoftFloat32FPCompareGTFpscr(SoftFloat32.FPCompareGTFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPCompareLE = new SoftFloat32FPCompareLE(SoftFloat32.FPCompareLE);
|
||||
var dlgSoftFloat32FPCompareLEFpscr = new SoftFloat32FPCompareLEFpscr(SoftFloat32.FPCompareLEFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPCompareLT = new SoftFloat32FPCompareLT(SoftFloat32.FPCompareLT);
|
||||
var dlgSoftFloat32FPCompareLTFpscr = new SoftFloat32FPCompareLTFpscr(SoftFloat32.FPCompareLTFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPDiv = new SoftFloat32FPDiv(SoftFloat32.FPDiv);
|
||||
var dlgSoftFloat32FPMax = new SoftFloat32FPMax(SoftFloat32.FPMax);
|
||||
var dlgSoftFloat32FPMaxFpscr = new SoftFloat32FPMaxFpscr(SoftFloat32.FPMaxFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPMaxNum = new SoftFloat32FPMaxNum(SoftFloat32.FPMaxNum);
|
||||
var dlgSoftFloat32FPMaxNumFpscr = new SoftFloat32FPMaxNumFpscr(SoftFloat32.FPMaxNumFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPMin = new SoftFloat32FPMin(SoftFloat32.FPMin);
|
||||
var dlgSoftFloat32FPMinFpscr = new SoftFloat32FPMinFpscr(SoftFloat32.FPMinFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPMinNum = new SoftFloat32FPMinNum(SoftFloat32.FPMinNum);
|
||||
var dlgSoftFloat32FPMinNumFpscr = new SoftFloat32FPMinNumFpscr(SoftFloat32.FPMinNumFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPMul = new SoftFloat32FPMul(SoftFloat32.FPMul);
|
||||
var dlgSoftFloat32FPMulFpscr = new SoftFloat32FPMulFpscr(SoftFloat32.FPMulFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPMulAdd = new SoftFloat32FPMulAdd(SoftFloat32.FPMulAdd);
|
||||
var dlgSoftFloat32FPMulAddFpscr = new SoftFloat32FPMulAddFpscr(SoftFloat32.FPMulAddFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPMulSub = new SoftFloat32FPMulSub(SoftFloat32.FPMulSub);
|
||||
var dlgSoftFloat32FPMulSubFpscr = new SoftFloat32FPMulSubFpscr(SoftFloat32.FPMulSubFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPMulX = new SoftFloat32FPMulX(SoftFloat32.FPMulX);
|
||||
var dlgSoftFloat32FPNegMulAdd = new SoftFloat32FPNegMulAdd(SoftFloat32.FPNegMulAdd);
|
||||
var dlgSoftFloat32FPNegMulSub = new SoftFloat32FPNegMulSub(SoftFloat32.FPNegMulSub);
|
||||
var dlgSoftFloat32FPRecipEstimate = new SoftFloat32FPRecipEstimate(SoftFloat32.FPRecipEstimate);
|
||||
var dlgSoftFloat32FPRecipEstimateFpscr = new SoftFloat32FPRecipEstimateFpscr(SoftFloat32.FPRecipEstimateFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPRecipStep = new SoftFloat32FPRecipStep(SoftFloat32.FPRecipStep); // A32 only.
|
||||
var dlgSoftFloat32FPRecipStepFused = new SoftFloat32FPRecipStepFused(SoftFloat32.FPRecipStepFused);
|
||||
var dlgSoftFloat32FPRecpX = new SoftFloat32FPRecpX(SoftFloat32.FPRecpX);
|
||||
var dlgSoftFloat32FPRSqrtEstimate = new SoftFloat32FPRSqrtEstimate(SoftFloat32.FPRSqrtEstimate);
|
||||
var dlgSoftFloat32FPRSqrtEstimateFpscr = new SoftFloat32FPRSqrtEstimateFpscr(SoftFloat32.FPRSqrtEstimateFpscr); // A32 only.
|
||||
var dlgSoftFloat32FPRSqrtStep = new SoftFloat32FPRSqrtStep(SoftFloat32.FPRSqrtStep); // A32 only.
|
||||
var dlgSoftFloat32FPRSqrtStepFused = new SoftFloat32FPRSqrtStepFused(SoftFloat32.FPRSqrtStepFused);
|
||||
var dlgSoftFloat32FPSqrt = new SoftFloat32FPSqrt(SoftFloat32.FPSqrt);
|
||||
var dlgSoftFloat32FPSub = new SoftFloat32FPSub(SoftFloat32.FPSub);
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPAdd)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPAddFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompare)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareEQ)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareEQFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGE)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGEFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGT)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGTFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLE)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLEFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLT)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLTFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPDiv)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMax)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxNum)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxNumFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMin)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinNum)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinNumFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMul)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulAdd)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulAddFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulSub)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulSubFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulX)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPNegMulAdd)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPNegMulSub)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipEstimate)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipEstimateFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipStep))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipStepFused)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecpX)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtEstimate)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtEstimateFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtStep))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtStepFused)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPSqrt)));
|
||||
SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPSub)));
|
||||
|
||||
var dlgSoftFloat32_16FPConvert = new SoftFloat32_16FPConvert(SoftFloat32_16.FPConvert);
|
||||
SetDelegateInfo(typeof(SoftFloat32_16).GetMethod(nameof(SoftFloat32_16.FPConvert)));
|
||||
|
||||
var dlgSoftFloat64FPAdd = new SoftFloat64FPAdd(SoftFloat64.FPAdd);
|
||||
var dlgSoftFloat64FPAddFpscr = new SoftFloat64FPAddFpscr(SoftFloat64.FPAddFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPCompare = new SoftFloat64FPCompare(SoftFloat64.FPCompare);
|
||||
var dlgSoftFloat64FPCompareEQ = new SoftFloat64FPCompareEQ(SoftFloat64.FPCompareEQ);
|
||||
var dlgSoftFloat64FPCompareEQFpscr = new SoftFloat64FPCompareEQFpscr(SoftFloat64.FPCompareEQFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPCompareGE = new SoftFloat64FPCompareGE(SoftFloat64.FPCompareGE);
|
||||
var dlgSoftFloat64FPCompareGEFpscr = new SoftFloat64FPCompareGEFpscr(SoftFloat64.FPCompareGEFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPCompareGT = new SoftFloat64FPCompareGT(SoftFloat64.FPCompareGT);
|
||||
var dlgSoftFloat64FPCompareGTFpscr = new SoftFloat64FPCompareGTFpscr(SoftFloat64.FPCompareGTFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPCompareLE = new SoftFloat64FPCompareLE(SoftFloat64.FPCompareLE);
|
||||
var dlgSoftFloat64FPCompareLEFpscr = new SoftFloat64FPCompareLEFpscr(SoftFloat64.FPCompareLEFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPCompareLT = new SoftFloat64FPCompareLT(SoftFloat64.FPCompareLT);
|
||||
var dlgSoftFloat64FPCompareLTFpscr = new SoftFloat64FPCompareLTFpscr(SoftFloat64.FPCompareLTFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPDiv = new SoftFloat64FPDiv(SoftFloat64.FPDiv);
|
||||
var dlgSoftFloat64FPMax = new SoftFloat64FPMax(SoftFloat64.FPMax);
|
||||
var dlgSoftFloat64FPMaxFpscr = new SoftFloat64FPMaxFpscr(SoftFloat64.FPMaxFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPMaxNum = new SoftFloat64FPMaxNum(SoftFloat64.FPMaxNum);
|
||||
var dlgSoftFloat64FPMaxNumFpscr = new SoftFloat64FPMaxNumFpscr(SoftFloat64.FPMaxNumFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPMin = new SoftFloat64FPMin(SoftFloat64.FPMin);
|
||||
var dlgSoftFloat64FPMinFpscr = new SoftFloat64FPMinFpscr(SoftFloat64.FPMinFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPMinNum = new SoftFloat64FPMinNum(SoftFloat64.FPMinNum);
|
||||
var dlgSoftFloat64FPMinNumFpscr = new SoftFloat64FPMinNumFpscr(SoftFloat64.FPMinNumFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPMul = new SoftFloat64FPMul(SoftFloat64.FPMul);
|
||||
var dlgSoftFloat64FPMulFpscr = new SoftFloat64FPMulFpscr(SoftFloat64.FPMulFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPMulAdd = new SoftFloat64FPMulAdd(SoftFloat64.FPMulAdd);
|
||||
var dlgSoftFloat64FPMulAddFpscr = new SoftFloat64FPMulAddFpscr(SoftFloat64.FPMulAddFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPMulSub = new SoftFloat64FPMulSub(SoftFloat64.FPMulSub);
|
||||
var dlgSoftFloat64FPMulSubFpscr = new SoftFloat64FPMulSubFpscr(SoftFloat64.FPMulSubFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPMulX = new SoftFloat64FPMulX(SoftFloat64.FPMulX);
|
||||
var dlgSoftFloat64FPNegMulAdd = new SoftFloat64FPNegMulAdd(SoftFloat64.FPNegMulAdd);
|
||||
var dlgSoftFloat64FPNegMulSub = new SoftFloat64FPNegMulSub(SoftFloat64.FPNegMulSub);
|
||||
var dlgSoftFloat64FPRecipEstimate = new SoftFloat64FPRecipEstimate(SoftFloat64.FPRecipEstimate);
|
||||
var dlgSoftFloat64FPRecipEstimateFpscr = new SoftFloat64FPRecipEstimateFpscr(SoftFloat64.FPRecipEstimateFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPRecipStep = new SoftFloat64FPRecipStep(SoftFloat64.FPRecipStep); // A32 only.
|
||||
var dlgSoftFloat64FPRecipStepFused = new SoftFloat64FPRecipStepFused(SoftFloat64.FPRecipStepFused);
|
||||
var dlgSoftFloat64FPRecpX = new SoftFloat64FPRecpX(SoftFloat64.FPRecpX);
|
||||
var dlgSoftFloat64FPRSqrtEstimate = new SoftFloat64FPRSqrtEstimate(SoftFloat64.FPRSqrtEstimate);
|
||||
var dlgSoftFloat64FPRSqrtEstimateFpscr = new SoftFloat64FPRSqrtEstimateFpscr(SoftFloat64.FPRSqrtEstimateFpscr); // A32 only.
|
||||
var dlgSoftFloat64FPRSqrtStep = new SoftFloat64FPRSqrtStep(SoftFloat64.FPRSqrtStep); // A32 only.
|
||||
var dlgSoftFloat64FPRSqrtStepFused = new SoftFloat64FPRSqrtStepFused(SoftFloat64.FPRSqrtStepFused);
|
||||
var dlgSoftFloat64FPSqrt = new SoftFloat64FPSqrt(SoftFloat64.FPSqrt);
|
||||
var dlgSoftFloat64FPSub = new SoftFloat64FPSub(SoftFloat64.FPSub);
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPAdd)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPAddFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompare)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareEQ)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareEQFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGE)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGEFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGT)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGTFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLE)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLEFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLT)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLTFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPDiv)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMax)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxNum)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxNumFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMin)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinNum)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinNumFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMul)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulAdd)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulAddFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulSub)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulSubFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulX)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPNegMulAdd)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPNegMulSub)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipEstimate)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipEstimateFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipStep))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipStepFused)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecpX)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtEstimate)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtEstimateFpscr))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtStep))); // A32 only.
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtStepFused)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPSqrt)));
|
||||
SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPSub)));
|
||||
|
||||
var dlgSoftFloat64_16FPConvert = new SoftFloat64_16FPConvert(SoftFloat64_16.FPConvert);
|
||||
|
||||
SetDelegateInfo(dlgMathAbs, Marshal.GetFunctionPointerForDelegate<MathAbs>(dlgMathAbs));
|
||||
SetDelegateInfo(dlgMathCeiling, Marshal.GetFunctionPointerForDelegate<MathCeiling>(dlgMathCeiling));
|
||||
SetDelegateInfo(dlgMathFloor, Marshal.GetFunctionPointerForDelegate<MathFloor>(dlgMathFloor));
|
||||
SetDelegateInfo(dlgMathRound, Marshal.GetFunctionPointerForDelegate<MathRound>(dlgMathRound));
|
||||
SetDelegateInfo(dlgMathTruncate, Marshal.GetFunctionPointerForDelegate<MathTruncate>(dlgMathTruncate));
|
||||
|
||||
SetDelegateInfo(dlgMathFAbs, Marshal.GetFunctionPointerForDelegate<MathFAbs>(dlgMathFAbs));
|
||||
SetDelegateInfo(dlgMathFCeiling, Marshal.GetFunctionPointerForDelegate<MathFCeiling>(dlgMathFCeiling));
|
||||
SetDelegateInfo(dlgMathFFloor, Marshal.GetFunctionPointerForDelegate<MathFFloor>(dlgMathFFloor));
|
||||
SetDelegateInfo(dlgMathFRound, Marshal.GetFunctionPointerForDelegate<MathFRound>(dlgMathFRound));
|
||||
SetDelegateInfo(dlgMathFTruncate, Marshal.GetFunctionPointerForDelegate<MathFTruncate>(dlgMathFTruncate));
|
||||
|
||||
SetDelegateInfo(dlgNativeInterfaceBreak, Marshal.GetFunctionPointerForDelegate<NativeInterfaceBreak>(dlgNativeInterfaceBreak));
|
||||
SetDelegateInfo(dlgNativeInterfaceCheckSynchronization, Marshal.GetFunctionPointerForDelegate<NativeInterfaceCheckSynchronization>(dlgNativeInterfaceCheckSynchronization));
|
||||
SetDelegateInfo(dlgNativeInterfaceEnqueueForRejit, Marshal.GetFunctionPointerForDelegate<NativeInterfaceEnqueueForRejit>(dlgNativeInterfaceEnqueueForRejit));
|
||||
SetDelegateInfo(dlgNativeInterfaceGetCntfrqEl0, Marshal.GetFunctionPointerForDelegate<NativeInterfaceGetCntfrqEl0>(dlgNativeInterfaceGetCntfrqEl0));
|
||||
SetDelegateInfo(dlgNativeInterfaceGetCntpctEl0, Marshal.GetFunctionPointerForDelegate<NativeInterfaceGetCntpctEl0>(dlgNativeInterfaceGetCntpctEl0));
|
||||
SetDelegateInfo(dlgNativeInterfaceGetCntvctEl0, Marshal.GetFunctionPointerForDelegate<NativeInterfaceGetCntvctEl0>(dlgNativeInterfaceGetCntvctEl0));
|
||||
SetDelegateInfo(dlgNativeInterfaceGetCtrEl0, Marshal.GetFunctionPointerForDelegate<NativeInterfaceGetCtrEl0>(dlgNativeInterfaceGetCtrEl0));
|
||||
SetDelegateInfo(dlgNativeInterfaceGetDczidEl0, Marshal.GetFunctionPointerForDelegate<NativeInterfaceGetDczidEl0>(dlgNativeInterfaceGetDczidEl0));
|
||||
SetDelegateInfo(dlgNativeInterfaceGetFunctionAddress, Marshal.GetFunctionPointerForDelegate<NativeInterfaceGetFunctionAddress>(dlgNativeInterfaceGetFunctionAddress));
|
||||
SetDelegateInfo(dlgNativeInterfaceInvalidateCacheLine, Marshal.GetFunctionPointerForDelegate<NativeInterfaceInvalidateCacheLine>(dlgNativeInterfaceInvalidateCacheLine));
|
||||
SetDelegateInfo(dlgNativeInterfaceReadByte, Marshal.GetFunctionPointerForDelegate<NativeInterfaceReadByte>(dlgNativeInterfaceReadByte));
|
||||
SetDelegateInfo(dlgNativeInterfaceReadUInt16, Marshal.GetFunctionPointerForDelegate<NativeInterfaceReadUInt16>(dlgNativeInterfaceReadUInt16));
|
||||
SetDelegateInfo(dlgNativeInterfaceReadUInt32, Marshal.GetFunctionPointerForDelegate<NativeInterfaceReadUInt32>(dlgNativeInterfaceReadUInt32));
|
||||
SetDelegateInfo(dlgNativeInterfaceReadUInt64, Marshal.GetFunctionPointerForDelegate<NativeInterfaceReadUInt64>(dlgNativeInterfaceReadUInt64));
|
||||
SetDelegateInfo(dlgNativeInterfaceReadVector128, Marshal.GetFunctionPointerForDelegate<NativeInterfaceReadVector128>(dlgNativeInterfaceReadVector128));
|
||||
SetDelegateInfo(dlgNativeInterfaceSignalMemoryTracking, Marshal.GetFunctionPointerForDelegate<NativeInterfaceSignalMemoryTracking>(dlgNativeInterfaceSignalMemoryTracking));
|
||||
SetDelegateInfo(dlgNativeInterfaceSupervisorCall, Marshal.GetFunctionPointerForDelegate<NativeInterfaceSupervisorCall>(dlgNativeInterfaceSupervisorCall));
|
||||
SetDelegateInfo(dlgNativeInterfaceThrowInvalidMemoryAccess, Marshal.GetFunctionPointerForDelegate<NativeInterfaceThrowInvalidMemoryAccess>(dlgNativeInterfaceThrowInvalidMemoryAccess));
|
||||
SetDelegateInfo(dlgNativeInterfaceUndefined, Marshal.GetFunctionPointerForDelegate<NativeInterfaceUndefined>(dlgNativeInterfaceUndefined));
|
||||
SetDelegateInfo(dlgNativeInterfaceWriteByte, Marshal.GetFunctionPointerForDelegate<NativeInterfaceWriteByte>(dlgNativeInterfaceWriteByte));
|
||||
SetDelegateInfo(dlgNativeInterfaceWriteUInt16, Marshal.GetFunctionPointerForDelegate<NativeInterfaceWriteUInt16>(dlgNativeInterfaceWriteUInt16));
|
||||
SetDelegateInfo(dlgNativeInterfaceWriteUInt32, Marshal.GetFunctionPointerForDelegate<NativeInterfaceWriteUInt32>(dlgNativeInterfaceWriteUInt32));
|
||||
SetDelegateInfo(dlgNativeInterfaceWriteUInt64, Marshal.GetFunctionPointerForDelegate<NativeInterfaceWriteUInt64>(dlgNativeInterfaceWriteUInt64));
|
||||
SetDelegateInfo(dlgNativeInterfaceWriteVector128, Marshal.GetFunctionPointerForDelegate<NativeInterfaceWriteVector128>(dlgNativeInterfaceWriteVector128));
|
||||
|
||||
SetDelegateInfo(dlgSoftFallbackCountLeadingSigns, Marshal.GetFunctionPointerForDelegate<SoftFallbackCountLeadingSigns>(dlgSoftFallbackCountLeadingSigns));
|
||||
SetDelegateInfo(dlgSoftFallbackCountLeadingZeros, Marshal.GetFunctionPointerForDelegate<SoftFallbackCountLeadingZeros>(dlgSoftFallbackCountLeadingZeros));
|
||||
SetDelegateInfo(dlgSoftFallbackCrc32b, Marshal.GetFunctionPointerForDelegate<SoftFallbackCrc32b>(dlgSoftFallbackCrc32b));
|
||||
SetDelegateInfo(dlgSoftFallbackCrc32cb, Marshal.GetFunctionPointerForDelegate<SoftFallbackCrc32cb>(dlgSoftFallbackCrc32cb));
|
||||
SetDelegateInfo(dlgSoftFallbackCrc32ch, Marshal.GetFunctionPointerForDelegate<SoftFallbackCrc32ch>(dlgSoftFallbackCrc32ch));
|
||||
SetDelegateInfo(dlgSoftFallbackCrc32cw, Marshal.GetFunctionPointerForDelegate<SoftFallbackCrc32cw>(dlgSoftFallbackCrc32cw));
|
||||
SetDelegateInfo(dlgSoftFallbackCrc32cx, Marshal.GetFunctionPointerForDelegate<SoftFallbackCrc32cx>(dlgSoftFallbackCrc32cx));
|
||||
SetDelegateInfo(dlgSoftFallbackCrc32h, Marshal.GetFunctionPointerForDelegate<SoftFallbackCrc32h>(dlgSoftFallbackCrc32h));
|
||||
SetDelegateInfo(dlgSoftFallbackCrc32w, Marshal.GetFunctionPointerForDelegate<SoftFallbackCrc32w>(dlgSoftFallbackCrc32w));
|
||||
SetDelegateInfo(dlgSoftFallbackCrc32x, Marshal.GetFunctionPointerForDelegate<SoftFallbackCrc32x>(dlgSoftFallbackCrc32x));
|
||||
SetDelegateInfo(dlgSoftFallbackDecrypt, Marshal.GetFunctionPointerForDelegate<SoftFallbackDecrypt>(dlgSoftFallbackDecrypt));
|
||||
SetDelegateInfo(dlgSoftFallbackEncrypt, Marshal.GetFunctionPointerForDelegate<SoftFallbackEncrypt>(dlgSoftFallbackEncrypt));
|
||||
SetDelegateInfo(dlgSoftFallbackFixedRotate, Marshal.GetFunctionPointerForDelegate<SoftFallbackFixedRotate>(dlgSoftFallbackFixedRotate));
|
||||
SetDelegateInfo(dlgSoftFallbackHashChoose, Marshal.GetFunctionPointerForDelegate<SoftFallbackHashChoose>(dlgSoftFallbackHashChoose));
|
||||
SetDelegateInfo(dlgSoftFallbackHashLower, Marshal.GetFunctionPointerForDelegate<SoftFallbackHashLower>(dlgSoftFallbackHashLower));
|
||||
SetDelegateInfo(dlgSoftFallbackHashMajority, Marshal.GetFunctionPointerForDelegate<SoftFallbackHashMajority>(dlgSoftFallbackHashMajority));
|
||||
SetDelegateInfo(dlgSoftFallbackHashParity, Marshal.GetFunctionPointerForDelegate<SoftFallbackHashParity>(dlgSoftFallbackHashParity));
|
||||
SetDelegateInfo(dlgSoftFallbackHashUpper, Marshal.GetFunctionPointerForDelegate<SoftFallbackHashUpper>(dlgSoftFallbackHashUpper));
|
||||
SetDelegateInfo(dlgSoftFallbackInverseMixColumns, Marshal.GetFunctionPointerForDelegate<SoftFallbackInverseMixColumns>(dlgSoftFallbackInverseMixColumns));
|
||||
SetDelegateInfo(dlgSoftFallbackMixColumns, Marshal.GetFunctionPointerForDelegate<SoftFallbackMixColumns>(dlgSoftFallbackMixColumns));
|
||||
SetDelegateInfo(dlgSoftFallbackPolynomialMult64_128, Marshal.GetFunctionPointerForDelegate<SoftFallbackPolynomialMult64_128>(dlgSoftFallbackPolynomialMult64_128));
|
||||
SetDelegateInfo(dlgSoftFallbackSatF32ToS32, Marshal.GetFunctionPointerForDelegate<SoftFallbackSatF32ToS32>(dlgSoftFallbackSatF32ToS32));
|
||||
SetDelegateInfo(dlgSoftFallbackSatF32ToS64, Marshal.GetFunctionPointerForDelegate<SoftFallbackSatF32ToS64>(dlgSoftFallbackSatF32ToS64));
|
||||
SetDelegateInfo(dlgSoftFallbackSatF32ToU32, Marshal.GetFunctionPointerForDelegate<SoftFallbackSatF32ToU32>(dlgSoftFallbackSatF32ToU32));
|
||||
SetDelegateInfo(dlgSoftFallbackSatF32ToU64, Marshal.GetFunctionPointerForDelegate<SoftFallbackSatF32ToU64>(dlgSoftFallbackSatF32ToU64));
|
||||
SetDelegateInfo(dlgSoftFallbackSatF64ToS32, Marshal.GetFunctionPointerForDelegate<SoftFallbackSatF64ToS32>(dlgSoftFallbackSatF64ToS32));
|
||||
SetDelegateInfo(dlgSoftFallbackSatF64ToS64, Marshal.GetFunctionPointerForDelegate<SoftFallbackSatF64ToS64>(dlgSoftFallbackSatF64ToS64));
|
||||
SetDelegateInfo(dlgSoftFallbackSatF64ToU32, Marshal.GetFunctionPointerForDelegate<SoftFallbackSatF64ToU32>(dlgSoftFallbackSatF64ToU32));
|
||||
SetDelegateInfo(dlgSoftFallbackSatF64ToU64, Marshal.GetFunctionPointerForDelegate<SoftFallbackSatF64ToU64>(dlgSoftFallbackSatF64ToU64));
|
||||
SetDelegateInfo(dlgSoftFallbackSha1SchedulePart1, Marshal.GetFunctionPointerForDelegate<SoftFallbackSha1SchedulePart1>(dlgSoftFallbackSha1SchedulePart1));
|
||||
SetDelegateInfo(dlgSoftFallbackSha1SchedulePart2, Marshal.GetFunctionPointerForDelegate<SoftFallbackSha1SchedulePart2>(dlgSoftFallbackSha1SchedulePart2));
|
||||
SetDelegateInfo(dlgSoftFallbackSha256SchedulePart1, Marshal.GetFunctionPointerForDelegate<SoftFallbackSha256SchedulePart1>(dlgSoftFallbackSha256SchedulePart1));
|
||||
SetDelegateInfo(dlgSoftFallbackSha256SchedulePart2, Marshal.GetFunctionPointerForDelegate<SoftFallbackSha256SchedulePart2>(dlgSoftFallbackSha256SchedulePart2));
|
||||
SetDelegateInfo(dlgSoftFallbackSignedShrImm64, Marshal.GetFunctionPointerForDelegate<SoftFallbackSignedShrImm64>(dlgSoftFallbackSignedShrImm64));
|
||||
SetDelegateInfo(dlgSoftFallbackTbl1, Marshal.GetFunctionPointerForDelegate<SoftFallbackTbl1>(dlgSoftFallbackTbl1));
|
||||
SetDelegateInfo(dlgSoftFallbackTbl2, Marshal.GetFunctionPointerForDelegate<SoftFallbackTbl2>(dlgSoftFallbackTbl2));
|
||||
SetDelegateInfo(dlgSoftFallbackTbl3, Marshal.GetFunctionPointerForDelegate<SoftFallbackTbl3>(dlgSoftFallbackTbl3));
|
||||
SetDelegateInfo(dlgSoftFallbackTbl4, Marshal.GetFunctionPointerForDelegate<SoftFallbackTbl4>(dlgSoftFallbackTbl4));
|
||||
SetDelegateInfo(dlgSoftFallbackTbx1, Marshal.GetFunctionPointerForDelegate<SoftFallbackTbx1>(dlgSoftFallbackTbx1));
|
||||
SetDelegateInfo(dlgSoftFallbackTbx2, Marshal.GetFunctionPointerForDelegate<SoftFallbackTbx2>(dlgSoftFallbackTbx2));
|
||||
SetDelegateInfo(dlgSoftFallbackTbx3, Marshal.GetFunctionPointerForDelegate<SoftFallbackTbx3>(dlgSoftFallbackTbx3));
|
||||
SetDelegateInfo(dlgSoftFallbackTbx4, Marshal.GetFunctionPointerForDelegate<SoftFallbackTbx4>(dlgSoftFallbackTbx4));
|
||||
SetDelegateInfo(dlgSoftFallbackUnsignedShrImm64, Marshal.GetFunctionPointerForDelegate<SoftFallbackUnsignedShrImm64>(dlgSoftFallbackUnsignedShrImm64));
|
||||
|
||||
SetDelegateInfo(dlgSoftFloat16_32FPConvert, Marshal.GetFunctionPointerForDelegate<SoftFloat16_32FPConvert>(dlgSoftFloat16_32FPConvert));
|
||||
SetDelegateInfo(dlgSoftFloat16_64FPConvert, Marshal.GetFunctionPointerForDelegate<SoftFloat16_64FPConvert>(dlgSoftFloat16_64FPConvert));
|
||||
|
||||
SetDelegateInfo(dlgSoftFloat32FPAdd, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPAdd>(dlgSoftFloat32FPAdd));
|
||||
SetDelegateInfo(dlgSoftFloat32FPAddFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPAddFpscr>(dlgSoftFloat32FPAddFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompare, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompare>(dlgSoftFloat32FPCompare));
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareEQ, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareEQ>(dlgSoftFloat32FPCompareEQ));
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareEQFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareEQFpscr>(dlgSoftFloat32FPCompareEQFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareGE, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareGE>(dlgSoftFloat32FPCompareGE));
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareGEFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareGEFpscr>(dlgSoftFloat32FPCompareGEFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareGT, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareGT>(dlgSoftFloat32FPCompareGT));
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareGTFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareGTFpscr>(dlgSoftFloat32FPCompareGTFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareLE, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareLE>(dlgSoftFloat32FPCompareLE));
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareLEFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareLEFpscr>(dlgSoftFloat32FPCompareLEFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareLT, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareLT>(dlgSoftFloat32FPCompareLT));
|
||||
SetDelegateInfo(dlgSoftFloat32FPCompareLTFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPCompareLTFpscr>(dlgSoftFloat32FPCompareLTFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPDiv, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPDiv>(dlgSoftFloat32FPDiv));
|
||||
SetDelegateInfo(dlgSoftFloat32FPMax, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMax>(dlgSoftFloat32FPMax));
|
||||
SetDelegateInfo(dlgSoftFloat32FPMaxFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMaxFpscr>(dlgSoftFloat32FPMaxFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPMaxNum, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMaxNum>(dlgSoftFloat32FPMaxNum));
|
||||
SetDelegateInfo(dlgSoftFloat32FPMaxNumFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMaxNumFpscr>(dlgSoftFloat32FPMaxNumFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPMin, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMin>(dlgSoftFloat32FPMin));
|
||||
SetDelegateInfo(dlgSoftFloat32FPMinFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMinFpscr>(dlgSoftFloat32FPMinFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPMinNum, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMinNum>(dlgSoftFloat32FPMinNum));
|
||||
SetDelegateInfo(dlgSoftFloat32FPMinNumFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMinNumFpscr>(dlgSoftFloat32FPMinNumFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPMul, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMul>(dlgSoftFloat32FPMul));
|
||||
SetDelegateInfo(dlgSoftFloat32FPMulFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMulFpscr>(dlgSoftFloat32FPMulFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPMulAdd, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMulAdd>(dlgSoftFloat32FPMulAdd));
|
||||
SetDelegateInfo(dlgSoftFloat32FPMulAddFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMulAddFpscr>(dlgSoftFloat32FPMulAddFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPMulSub, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMulSub>(dlgSoftFloat32FPMulSub));
|
||||
SetDelegateInfo(dlgSoftFloat32FPMulSubFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMulSubFpscr>(dlgSoftFloat32FPMulSubFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPMulX, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPMulX>(dlgSoftFloat32FPMulX));
|
||||
SetDelegateInfo(dlgSoftFloat32FPNegMulAdd, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPNegMulAdd>(dlgSoftFloat32FPNegMulAdd));
|
||||
SetDelegateInfo(dlgSoftFloat32FPNegMulSub, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPNegMulSub>(dlgSoftFloat32FPNegMulSub));
|
||||
SetDelegateInfo(dlgSoftFloat32FPRecipEstimate, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPRecipEstimate>(dlgSoftFloat32FPRecipEstimate));
|
||||
SetDelegateInfo(dlgSoftFloat32FPRecipEstimateFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPRecipEstimateFpscr>(dlgSoftFloat32FPRecipEstimateFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPRecipStep, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPRecipStep>(dlgSoftFloat32FPRecipStep)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPRecipStepFused, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPRecipStepFused>(dlgSoftFloat32FPRecipStepFused));
|
||||
SetDelegateInfo(dlgSoftFloat32FPRecpX, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPRecpX>(dlgSoftFloat32FPRecpX));
|
||||
SetDelegateInfo(dlgSoftFloat32FPRSqrtEstimate, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPRSqrtEstimate>(dlgSoftFloat32FPRSqrtEstimate));
|
||||
SetDelegateInfo(dlgSoftFloat32FPRSqrtEstimateFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPRSqrtEstimateFpscr>(dlgSoftFloat32FPRSqrtEstimateFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPRSqrtStep, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPRSqrtStep>(dlgSoftFloat32FPRSqrtStep)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat32FPRSqrtStepFused, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPRSqrtStepFused>(dlgSoftFloat32FPRSqrtStepFused));
|
||||
SetDelegateInfo(dlgSoftFloat32FPSqrt, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPSqrt>(dlgSoftFloat32FPSqrt));
|
||||
SetDelegateInfo(dlgSoftFloat32FPSub, Marshal.GetFunctionPointerForDelegate<SoftFloat32FPSub>(dlgSoftFloat32FPSub));
|
||||
|
||||
SetDelegateInfo(dlgSoftFloat32_16FPConvert, Marshal.GetFunctionPointerForDelegate<SoftFloat32_16FPConvert>(dlgSoftFloat32_16FPConvert));
|
||||
|
||||
SetDelegateInfo(dlgSoftFloat64FPAdd, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPAdd>(dlgSoftFloat64FPAdd));
|
||||
SetDelegateInfo(dlgSoftFloat64FPAddFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPAddFpscr>(dlgSoftFloat64FPAddFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompare, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompare>(dlgSoftFloat64FPCompare));
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareEQ, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareEQ>(dlgSoftFloat64FPCompareEQ));
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareEQFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareEQFpscr>(dlgSoftFloat64FPCompareEQFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareGE, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareGE>(dlgSoftFloat64FPCompareGE));
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareGEFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareGEFpscr>(dlgSoftFloat64FPCompareGEFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareGT, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareGT>(dlgSoftFloat64FPCompareGT));
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareGTFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareGTFpscr>(dlgSoftFloat64FPCompareGTFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareLE, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareLE>(dlgSoftFloat64FPCompareLE));
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareLEFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareLEFpscr>(dlgSoftFloat64FPCompareLEFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareLT, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareLT>(dlgSoftFloat64FPCompareLT));
|
||||
SetDelegateInfo(dlgSoftFloat64FPCompareLTFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPCompareLTFpscr>(dlgSoftFloat64FPCompareLTFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPDiv, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPDiv>(dlgSoftFloat64FPDiv));
|
||||
SetDelegateInfo(dlgSoftFloat64FPMax, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMax>(dlgSoftFloat64FPMax));
|
||||
SetDelegateInfo(dlgSoftFloat64FPMaxFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMaxFpscr>(dlgSoftFloat64FPMaxFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPMaxNum, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMaxNum>(dlgSoftFloat64FPMaxNum));
|
||||
SetDelegateInfo(dlgSoftFloat64FPMaxNumFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMaxNumFpscr>(dlgSoftFloat64FPMaxNumFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPMin, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMin>(dlgSoftFloat64FPMin));
|
||||
SetDelegateInfo(dlgSoftFloat64FPMinFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMinFpscr>(dlgSoftFloat64FPMinFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPMinNum, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMinNum>(dlgSoftFloat64FPMinNum));
|
||||
SetDelegateInfo(dlgSoftFloat64FPMinNumFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMinNumFpscr>(dlgSoftFloat64FPMinNumFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPMul, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMul>(dlgSoftFloat64FPMul));
|
||||
SetDelegateInfo(dlgSoftFloat64FPMulFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMulFpscr>(dlgSoftFloat64FPMulFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPMulAdd, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMulAdd>(dlgSoftFloat64FPMulAdd));
|
||||
SetDelegateInfo(dlgSoftFloat64FPMulAddFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMulAddFpscr>(dlgSoftFloat64FPMulAddFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPMulSub, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMulSub>(dlgSoftFloat64FPMulSub));
|
||||
SetDelegateInfo(dlgSoftFloat64FPMulSubFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMulSubFpscr>(dlgSoftFloat64FPMulSubFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPMulX, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPMulX>(dlgSoftFloat64FPMulX));
|
||||
SetDelegateInfo(dlgSoftFloat64FPNegMulAdd, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPNegMulAdd>(dlgSoftFloat64FPNegMulAdd));
|
||||
SetDelegateInfo(dlgSoftFloat64FPNegMulSub, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPNegMulSub>(dlgSoftFloat64FPNegMulSub));
|
||||
SetDelegateInfo(dlgSoftFloat64FPRecipEstimate, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPRecipEstimate>(dlgSoftFloat64FPRecipEstimate));
|
||||
SetDelegateInfo(dlgSoftFloat64FPRecipEstimateFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPRecipEstimateFpscr>(dlgSoftFloat64FPRecipEstimateFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPRecipStep, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPRecipStep>(dlgSoftFloat64FPRecipStep)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPRecipStepFused, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPRecipStepFused>(dlgSoftFloat64FPRecipStepFused));
|
||||
SetDelegateInfo(dlgSoftFloat64FPRecpX, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPRecpX>(dlgSoftFloat64FPRecpX));
|
||||
SetDelegateInfo(dlgSoftFloat64FPRSqrtEstimate, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPRSqrtEstimate>(dlgSoftFloat64FPRSqrtEstimate));
|
||||
SetDelegateInfo(dlgSoftFloat64FPRSqrtEstimateFpscr, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPRSqrtEstimateFpscr>(dlgSoftFloat64FPRSqrtEstimateFpscr)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPRSqrtStep, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPRSqrtStep>(dlgSoftFloat64FPRSqrtStep)); // A32 only.
|
||||
SetDelegateInfo(dlgSoftFloat64FPRSqrtStepFused, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPRSqrtStepFused>(dlgSoftFloat64FPRSqrtStepFused));
|
||||
SetDelegateInfo(dlgSoftFloat64FPSqrt, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPSqrt>(dlgSoftFloat64FPSqrt));
|
||||
SetDelegateInfo(dlgSoftFloat64FPSub, Marshal.GetFunctionPointerForDelegate<SoftFloat64FPSub>(dlgSoftFloat64FPSub));
|
||||
|
||||
SetDelegateInfo(dlgSoftFloat64_16FPConvert, Marshal.GetFunctionPointerForDelegate<SoftFloat64_16FPConvert>(dlgSoftFloat64_16FPConvert));
|
||||
SetDelegateInfo(typeof(SoftFloat64_16).GetMethod(nameof(SoftFloat64_16.FPConvert)));
|
||||
}
|
||||
|
||||
private delegate double MathAbs(double value);
|
||||
private delegate double MathCeiling(double a);
|
||||
private delegate double MathFloor(double d);
|
||||
private delegate double MathRound(double value, MidpointRounding mode);
|
||||
private delegate double MathTruncate(double d);
|
||||
|
||||
private delegate float MathFAbs(float x);
|
||||
private delegate float MathFCeiling(float x);
|
||||
private delegate float MathFFloor(float x);
|
||||
private delegate float MathFRound(float x, MidpointRounding mode);
|
||||
private delegate float MathFTruncate(float x);
|
||||
|
||||
private delegate void NativeInterfaceBreak(ulong address, int imm);
|
||||
private delegate bool NativeInterfaceCheckSynchronization();
|
||||
private delegate void NativeInterfaceEnqueueForRejit(ulong address);
|
||||
private delegate ulong NativeInterfaceGetCntfrqEl0();
|
||||
private delegate ulong NativeInterfaceGetCntpctEl0();
|
||||
private delegate ulong NativeInterfaceGetCntvctEl0();
|
||||
private delegate ulong NativeInterfaceGetCtrEl0();
|
||||
private delegate ulong NativeInterfaceGetDczidEl0();
|
||||
private delegate ulong NativeInterfaceGetFunctionAddress(ulong address);
|
||||
private delegate void NativeInterfaceInvalidateCacheLine(ulong address);
|
||||
private delegate byte NativeInterfaceReadByte(ulong address);
|
||||
private delegate ushort NativeInterfaceReadUInt16(ulong address);
|
||||
private delegate uint NativeInterfaceReadUInt32(ulong address);
|
||||
private delegate ulong NativeInterfaceReadUInt64(ulong address);
|
||||
private delegate V128 NativeInterfaceReadVector128(ulong address);
|
||||
private delegate void NativeInterfaceSignalMemoryTracking(ulong address, ulong size, bool write);
|
||||
private delegate void NativeInterfaceSupervisorCall(ulong address, int imm);
|
||||
private delegate void NativeInterfaceThrowInvalidMemoryAccess(ulong address);
|
||||
private delegate void NativeInterfaceUndefined(ulong address, int opCode);
|
||||
private delegate void NativeInterfaceWriteByte(ulong address, byte value);
|
||||
private delegate void NativeInterfaceWriteUInt16(ulong address, ushort value);
|
||||
private delegate void NativeInterfaceWriteUInt32(ulong address, uint value);
|
||||
private delegate void NativeInterfaceWriteUInt64(ulong address, ulong value);
|
||||
private delegate void NativeInterfaceWriteVector128(ulong address, V128 value);
|
||||
|
||||
private delegate ulong SoftFallbackCountLeadingSigns(ulong value, int size);
|
||||
private delegate ulong SoftFallbackCountLeadingZeros(ulong value, int size);
|
||||
private delegate uint SoftFallbackCrc32b(uint crc, byte value);
|
||||
private delegate uint SoftFallbackCrc32cb(uint crc, byte value);
|
||||
private delegate uint SoftFallbackCrc32ch(uint crc, ushort value);
|
||||
private delegate uint SoftFallbackCrc32cw(uint crc, uint value);
|
||||
private delegate uint SoftFallbackCrc32cx(uint crc, ulong value);
|
||||
private delegate uint SoftFallbackCrc32h(uint crc, ushort value);
|
||||
private delegate uint SoftFallbackCrc32w(uint crc, uint value);
|
||||
private delegate uint SoftFallbackCrc32x(uint crc, ulong value);
|
||||
private delegate V128 SoftFallbackDecrypt(V128 value, V128 roundKey);
|
||||
private delegate V128 SoftFallbackEncrypt(V128 value, V128 roundKey);
|
||||
private delegate uint SoftFallbackFixedRotate(uint hash_e);
|
||||
private delegate V128 SoftFallbackHashChoose(V128 hash_abcd, uint hash_e, V128 wk);
|
||||
private delegate V128 SoftFallbackHashLower(V128 hash_abcd, V128 hash_efgh, V128 wk);
|
||||
private delegate V128 SoftFallbackHashMajority(V128 hash_abcd, uint hash_e, V128 wk);
|
||||
private delegate V128 SoftFallbackHashParity(V128 hash_abcd, uint hash_e, V128 wk);
|
||||
private delegate V128 SoftFallbackHashUpper(V128 hash_abcd, V128 hash_efgh, V128 wk);
|
||||
private delegate V128 SoftFallbackInverseMixColumns(V128 value);
|
||||
private delegate V128 SoftFallbackMixColumns(V128 value);
|
||||
private delegate V128 SoftFallbackPolynomialMult64_128(ulong op1, ulong op2);
|
||||
private delegate int SoftFallbackSatF32ToS32(float value);
|
||||
private delegate long SoftFallbackSatF32ToS64(float value);
|
||||
private delegate uint SoftFallbackSatF32ToU32(float value);
|
||||
private delegate ulong SoftFallbackSatF32ToU64(float value);
|
||||
private delegate int SoftFallbackSatF64ToS32(double value);
|
||||
private delegate long SoftFallbackSatF64ToS64(double value);
|
||||
private delegate uint SoftFallbackSatF64ToU32(double value);
|
||||
private delegate ulong SoftFallbackSatF64ToU64(double value);
|
||||
private delegate V128 SoftFallbackSha1SchedulePart1(V128 w0_3, V128 w4_7, V128 w8_11);
|
||||
private delegate V128 SoftFallbackSha1SchedulePart2(V128 tw0_3, V128 w12_15);
|
||||
private delegate V128 SoftFallbackSha256SchedulePart1(V128 w0_3, V128 w4_7);
|
||||
private delegate V128 SoftFallbackSha256SchedulePart2(V128 w0_3, V128 w8_11, V128 w12_15);
|
||||
private delegate long SoftFallbackSignedShrImm64(long value, long roundConst, int shift);
|
||||
private delegate V128 SoftFallbackTbl1(V128 vector, int bytes, V128 tb0);
|
||||
private delegate V128 SoftFallbackTbl2(V128 vector, int bytes, V128 tb0, V128 tb1);
|
||||
private delegate V128 SoftFallbackTbl3(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2);
|
||||
private delegate V128 SoftFallbackTbl4(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3);
|
||||
private delegate V128 SoftFallbackTbx1(V128 dest, V128 vector, int bytes, V128 tb0);
|
||||
private delegate V128 SoftFallbackTbx2(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1);
|
||||
private delegate V128 SoftFallbackTbx3(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2);
|
||||
private delegate V128 SoftFallbackTbx4(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3);
|
||||
private delegate ulong SoftFallbackUnsignedShrImm64(ulong value, long roundConst, int shift);
|
||||
|
||||
private delegate float SoftFloat16_32FPConvert(ushort valueBits);
|
||||
|
||||
private delegate double SoftFloat16_64FPConvert(ushort valueBits);
|
||||
|
||||
private delegate float SoftFloat32FPAdd(float value1, float value2);
|
||||
private delegate float SoftFloat32FPAddFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate int SoftFloat32FPCompare(float value1, float value2, bool signalNaNs);
|
||||
private delegate float SoftFloat32FPCompareEQ(float value1, float value2);
|
||||
private delegate float SoftFloat32FPCompareEQFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPCompareGE(float value1, float value2);
|
||||
private delegate float SoftFloat32FPCompareGEFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPCompareGT(float value1, float value2);
|
||||
private delegate float SoftFloat32FPCompareGTFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPCompareLE(float value1, float value2);
|
||||
private delegate float SoftFloat32FPCompareLEFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPCompareLT(float value1, float value2);
|
||||
private delegate float SoftFloat32FPCompareLTFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPDiv(float value1, float value2);
|
||||
private delegate float SoftFloat32FPMax(float value1, float value2);
|
||||
private delegate float SoftFloat32FPMaxFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPMaxNum(float value1, float value2);
|
||||
private delegate float SoftFloat32FPMaxNumFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPMin(float value1, float value2);
|
||||
private delegate float SoftFloat32FPMinFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPMinNum(float value1, float value2);
|
||||
private delegate float SoftFloat32FPMinNumFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPMul(float value1, float value2);
|
||||
private delegate float SoftFloat32FPMulFpscr(float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPMulAdd(float valueA, float value1, float value2);
|
||||
private delegate float SoftFloat32FPMulAddFpscr(float valueA, float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPMulSub(float valueA, float value1, float value2);
|
||||
private delegate float SoftFloat32FPMulSubFpscr(float valueA, float value1, float value2, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPMulX(float value1, float value2);
|
||||
private delegate float SoftFloat32FPNegMulAdd(float valueA, float value1, float value2);
|
||||
private delegate float SoftFloat32FPNegMulSub(float valueA, float value1, float value2);
|
||||
private delegate float SoftFloat32FPRecipEstimate(float value);
|
||||
private delegate float SoftFloat32FPRecipEstimateFpscr(float value, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPRecipStep(float value1, float value2);
|
||||
private delegate float SoftFloat32FPRecipStepFused(float value1, float value2);
|
||||
private delegate float SoftFloat32FPRecpX(float value);
|
||||
private delegate float SoftFloat32FPRSqrtEstimate(float value);
|
||||
private delegate float SoftFloat32FPRSqrtEstimateFpscr(float value, bool standardFpscr);
|
||||
private delegate float SoftFloat32FPRSqrtStep(float value1, float value2);
|
||||
private delegate float SoftFloat32FPRSqrtStepFused(float value1, float value2);
|
||||
private delegate float SoftFloat32FPSqrt(float value);
|
||||
private delegate float SoftFloat32FPSub(float value1, float value2);
|
||||
|
||||
private delegate ushort SoftFloat32_16FPConvert(float value);
|
||||
|
||||
private delegate double SoftFloat64FPAdd(double value1, double value2);
|
||||
private delegate double SoftFloat64FPAddFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate int SoftFloat64FPCompare(double value1, double value2, bool signalNaNs);
|
||||
private delegate double SoftFloat64FPCompareEQ(double value1, double value2);
|
||||
private delegate double SoftFloat64FPCompareEQFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPCompareGE(double value1, double value2);
|
||||
private delegate double SoftFloat64FPCompareGEFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPCompareGT(double value1, double value2);
|
||||
private delegate double SoftFloat64FPCompareGTFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPCompareLE(double value1, double value2);
|
||||
private delegate double SoftFloat64FPCompareLEFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPCompareLT(double value1, double value2);
|
||||
private delegate double SoftFloat64FPCompareLTFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPDiv(double value1, double value2);
|
||||
private delegate double SoftFloat64FPMax(double value1, double value2);
|
||||
private delegate double SoftFloat64FPMaxFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPMaxNum(double value1, double value2);
|
||||
private delegate double SoftFloat64FPMaxNumFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPMin(double value1, double value2);
|
||||
private delegate double SoftFloat64FPMinFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPMinNum(double value1, double value2);
|
||||
private delegate double SoftFloat64FPMinNumFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPMul(double value1, double value2);
|
||||
private delegate double SoftFloat64FPMulFpscr(double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPMulAdd(double valueA, double value1, double value2);
|
||||
private delegate double SoftFloat64FPMulAddFpscr(double valueA, double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPMulSub(double valueA, double value1, double value2);
|
||||
private delegate double SoftFloat64FPMulSubFpscr(double valueA, double value1, double value2, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPMulX(double value1, double value2);
|
||||
private delegate double SoftFloat64FPNegMulAdd(double valueA, double value1, double value2);
|
||||
private delegate double SoftFloat64FPNegMulSub(double valueA, double value1, double value2);
|
||||
private delegate double SoftFloat64FPRecipEstimate(double value);
|
||||
private delegate double SoftFloat64FPRecipEstimateFpscr(double value, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPRecipStep(double value1, double value2);
|
||||
private delegate double SoftFloat64FPRecipStepFused(double value1, double value2);
|
||||
private delegate double SoftFloat64FPRecpX(double value);
|
||||
private delegate double SoftFloat64FPRSqrtEstimate(double value);
|
||||
private delegate double SoftFloat64FPRSqrtEstimateFpscr(double value, bool standardFpscr);
|
||||
private delegate double SoftFloat64FPRSqrtStep(double value1, double value2);
|
||||
private delegate double SoftFloat64FPRSqrtStepFused(double value1, double value2);
|
||||
private delegate double SoftFloat64FPSqrt(double value);
|
||||
private delegate double SoftFloat64FPSub(double value1, double value2);
|
||||
|
||||
private delegate ushort SoftFloat64_16FPConvert(double value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ namespace ARMeilleure.Translation
|
||||
|
||||
public virtual Operand Call(MethodInfo info, params Operand[] callArgs)
|
||||
{
|
||||
nint funcPtr = Delegates.GetDelegateFuncPtr(info);
|
||||
nint funcPtr = info.MethodHandle.GetFunctionPointer();
|
||||
|
||||
OperandType returnType = GetOperandType(info.ReturnType);
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<RuntimeIdentifiers>win-x64;osx-x64;linux-x64;win-arm64;osx-arm64;linux-arm64</RuntimeIdentifiers>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<DefineConstants Condition=" '$(ExtraDefineConstants)' != '' ">$(DefineConstants);$(ExtraDefineConstants)</DefineConstants>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Configurations>Debug;Release</Configurations>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
<Configurations>Debug;Release</Configurations>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
|
||||
<CompilerGeneratedFilesOutputPath>Generated</CompilerGeneratedFilesOutputPath>
|
||||
<IsRoslynComponent>true</IsRoslynComponent>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -26,12 +26,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
|
||||
{
|
||||
MemoryArrange.MemoryArrange4GiB or
|
||||
MemoryArrange.MemoryArrange4GiBSystemDev or
|
||||
MemoryArrange.MemoryArrange6GiBAppletDev => 3152 * MiB,
|
||||
MemoryArrange.MemoryArrange6GiBAppletDev => 3173 * MiB,
|
||||
MemoryArrange.MemoryArrange4GiBAppletDev => 2048 * MiB,
|
||||
MemoryArrange.MemoryArrange6GiB => 4783 * MiB,
|
||||
MemoryArrange.MemoryArrange8GiB => 6831 * MiB,
|
||||
MemoryArrange.MemoryArrange10GiB => 8879 * MiB,
|
||||
MemoryArrange.MemoryArrange12GiB => 10927 * MiB,
|
||||
MemoryArrange.MemoryArrange6GiB => 4804 * MiB,
|
||||
MemoryArrange.MemoryArrange8GiB => 6852 * MiB,
|
||||
MemoryArrange.MemoryArrange10GiB => 8900 * MiB,
|
||||
MemoryArrange.MemoryArrange12GiB => 10948 * MiB,
|
||||
_ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
<Configurations>Debug;Release</Configurations>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<IsPackable>false</IsPackable>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
<Configurations>Debug;Release</Configurations>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -7,10 +7,9 @@
|
||||
<TargetOS Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">windows</TargetOS>
|
||||
<TargetOS Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'">osx</TargetOS>
|
||||
<TargetOS Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true'">linux</TargetOS>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Configurations>Debug;Release</Configurations>
|
||||
<RunSettingsFilePath>$(MSBuildProjectDirectory)\.runsettings</RunSettingsFilePath>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace Ryujinx.UI.App.Common
|
||||
|
||||
private static byte[] GetResourceBytes(string resourceName)
|
||||
{
|
||||
Stream resourceStream = typeof(ApplicationLibrary).Assembly.GetManifestResourceStream(resourceName);
|
||||
Stream resourceStream = Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName);
|
||||
if (resourceStream != null)
|
||||
{
|
||||
byte[] resourceByteArray = new byte[resourceStream.Length];
|
||||
|
||||
@@ -34,14 +34,9 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
public BackendThreading BackendThreading { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Resolution Scale. An integer scale applied to applicable render targets. Values 1-4, or -1 to use a custom floating point scale instead.
|
||||
/// Resolution Scale. A float value containing the resolution scale.
|
||||
/// </summary>
|
||||
public int ResScale { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Custom Resolution Scale. A custom floating point scale applied to applicable render targets. Only active when Resolution Scale is -1.
|
||||
/// </summary>
|
||||
public float ResScaleCustom { get; set; }
|
||||
public float ResScale { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide.
|
||||
@@ -264,7 +259,7 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
/// Enables or disables low-power profiled translation cache persistency loading
|
||||
/// </summary>
|
||||
public bool EnableLowPowerPtc { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Clock tick scalar, in percent points (100 = 1.0).
|
||||
/// </summary>
|
||||
@@ -473,7 +468,7 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
/// Uses Hypervisor over JIT if available
|
||||
/// </summary>
|
||||
public bool UseHypervisor { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables the GDB stub
|
||||
/// </summary>
|
||||
|
||||
@@ -340,7 +340,7 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
/// <summary>
|
||||
/// Enables or disables profiled translation cache persistency
|
||||
/// </summary>
|
||||
public ReactiveObject<bool> EnablePtc { get; private set; }
|
||||
public ReactiveObject<bool> EnablePptc { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Clock tick scalar, in percent points (100 = 1.0).
|
||||
@@ -350,7 +350,7 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
/// <summary>
|
||||
/// Enables or disables low-power profiled translation cache persistency loading
|
||||
/// </summary>
|
||||
public ReactiveObject<bool> EnableLowPowerPtc { get; private set; }
|
||||
public ReactiveObject<bool> EnableLowPowerPptc { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Enables or disables guest Internet access
|
||||
@@ -401,7 +401,7 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
/// Skip User Profiles Manager
|
||||
/// </summary>
|
||||
public ReactiveObject<bool> SkipUserProfilesManager { get; private set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Uses Hypervisor over JIT if available
|
||||
/// </summary>
|
||||
@@ -418,10 +418,10 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
MatchSystemTime.Event += static (_, e) => LogValueChange(e, nameof(MatchSystemTime));
|
||||
EnableDockedMode = new ReactiveObject<bool>();
|
||||
EnableDockedMode.Event += static (_, e) => LogValueChange(e, nameof(EnableDockedMode));
|
||||
EnablePtc = new ReactiveObject<bool>();
|
||||
EnablePtc.Event += static (_, e) => LogValueChange(e, nameof(EnablePtc));
|
||||
EnableLowPowerPtc = new ReactiveObject<bool>();
|
||||
EnableLowPowerPtc.Event += static (_, e) => LogValueChange(e, nameof(EnableLowPowerPtc));
|
||||
EnablePptc = new ReactiveObject<bool>();
|
||||
EnablePptc.Event += static (_, e) => LogValueChange(e, nameof(EnablePptc));
|
||||
EnableLowPowerPptc = new ReactiveObject<bool>();
|
||||
EnableLowPowerPptc.Event += static (_, e) => LogValueChange(e, nameof(EnableLowPowerPptc));
|
||||
TickScalar = new ReactiveObject<long>();
|
||||
TickScalar.Event += static (_, e) => LogValueChange(e, nameof(TickScalar));
|
||||
TickScalar.Event += static (_, e) =>
|
||||
@@ -513,14 +513,9 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
public ReactiveObject<AspectRatio> AspectRatio { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Resolution Scale. An integer scale applied to applicable render targets. Values 1-4, or -1 to use a custom floating point scale instead.
|
||||
/// Resolution Scale. A float value containing the resolution scale.
|
||||
/// </summary>
|
||||
public ReactiveObject<int> ResScale { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Custom Resolution Scale. A custom floating point scale applied to applicable render targets. Only active when Resolution Scale is -1.
|
||||
/// </summary>
|
||||
public ReactiveObject<float> ResScaleCustom { get; private set; }
|
||||
public ReactiveObject<float> ResScale { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Directory to save the game shaders.
|
||||
@@ -611,10 +606,8 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
{
|
||||
BackendThreading = new ReactiveObject<BackendThreading>();
|
||||
BackendThreading.Event += static (_, e) => LogValueChange(e, nameof(BackendThreading));
|
||||
ResScale = new ReactiveObject<int>();
|
||||
ResScale = new ReactiveObject<float>();
|
||||
ResScale.Event += static (_, e) => LogValueChange(e, nameof(ResScale));
|
||||
ResScaleCustom = new ReactiveObject<float>();
|
||||
ResScaleCustom.Event += static (_, e) => LogValueChange(e, nameof(ResScaleCustom));
|
||||
MaxAnisotropy = new ReactiveObject<float>();
|
||||
MaxAnisotropy.Event += static (_, e) => LogValueChange(e, nameof(MaxAnisotropy));
|
||||
AspectRatio = new ReactiveObject<AspectRatio>();
|
||||
@@ -824,7 +817,6 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
BackendThreading = Graphics.BackendThreading,
|
||||
EnableFileLog = Logger.EnableFileLog,
|
||||
ResScale = Graphics.ResScale,
|
||||
ResScaleCustom = Graphics.ResScaleCustom,
|
||||
MaxAnisotropy = Graphics.MaxAnisotropy,
|
||||
AspectRatio = Graphics.AspectRatio,
|
||||
AntiAliasing = Graphics.AntiAliasing,
|
||||
@@ -864,8 +856,8 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
EnableTextureRecompression = Graphics.EnableTextureRecompression,
|
||||
EnableMacroHLE = Graphics.EnableMacroHLE,
|
||||
EnableColorSpacePassthrough = Graphics.EnableColorSpacePassthrough,
|
||||
EnablePtc = System.EnablePtc,
|
||||
EnableLowPowerPtc = System.EnableLowPowerPtc,
|
||||
EnablePtc = System.EnablePptc,
|
||||
EnableLowPowerPtc = System.EnableLowPowerPptc,
|
||||
TickScalar = System.TickScalar,
|
||||
EnableInternetAccess = System.EnableInternetAccess,
|
||||
EnableFsIntegrityChecks = System.EnableFsIntegrityChecks,
|
||||
@@ -953,8 +945,7 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
{
|
||||
Logger.EnableFileLog.Value = true;
|
||||
Graphics.BackendThreading.Value = BackendThreading.Auto;
|
||||
Graphics.ResScale.Value = 1;
|
||||
Graphics.ResScaleCustom.Value = 1.0f;
|
||||
Graphics.ResScale.Value = 1.0f;
|
||||
Graphics.MaxAnisotropy.Value = -1.0f;
|
||||
Graphics.AspectRatio.Value = AspectRatio.Fixed16x9;
|
||||
Graphics.GraphicsBackend.Value = DefaultGraphicsBackend();
|
||||
@@ -995,7 +986,7 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
Graphics.AntiAliasing.Value = AntiAliasing.None;
|
||||
Graphics.ScalingFilter.Value = ScalingFilter.Bilinear;
|
||||
Graphics.ScalingFilterLevel.Value = 80;
|
||||
System.EnablePtc.Value = true;
|
||||
System.EnablePptc.Value = true;
|
||||
System.EnableInternetAccess.Value = false;
|
||||
System.EnableFsIntegrityChecks.Value = true;
|
||||
System.FsGlobalAccessLogMode.Value = 0;
|
||||
@@ -1208,8 +1199,7 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
{
|
||||
Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 11.");
|
||||
|
||||
configurationFileFormat.ResScale = 1;
|
||||
configurationFileFormat.ResScaleCustom = 1.0f;
|
||||
configurationFileFormat.ResScale = 1.0f;
|
||||
|
||||
configurationFileUpdated = true;
|
||||
}
|
||||
@@ -1807,7 +1797,6 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
|
||||
Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog;
|
||||
Graphics.ResScale.Value = configurationFileFormat.ResScale;
|
||||
Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom;
|
||||
Graphics.MaxAnisotropy.Value = configurationFileFormat.MaxAnisotropy;
|
||||
Graphics.AspectRatio.Value = configurationFileFormat.AspectRatio;
|
||||
Graphics.ShadersDumpPath.Value = configurationFileFormat.GraphicsShadersDumpPath;
|
||||
@@ -1850,8 +1839,8 @@ namespace Ryujinx.UI.Common.Configuration
|
||||
Graphics.EnableTextureRecompression.Value = configurationFileFormat.EnableTextureRecompression;
|
||||
Graphics.EnableMacroHLE.Value = configurationFileFormat.EnableMacroHLE;
|
||||
Graphics.EnableColorSpacePassthrough.Value = configurationFileFormat.EnableColorSpacePassthrough;
|
||||
System.EnablePtc.Value = configurationFileFormat.EnablePtc;
|
||||
System.EnableLowPowerPtc.Value = configurationFileFormat.EnableLowPowerPtc;
|
||||
System.EnablePptc.Value = configurationFileFormat.EnablePtc;
|
||||
System.EnableLowPowerPptc.Value = configurationFileFormat.EnableLowPowerPtc;
|
||||
System.TickScalar.Value = configurationFileFormat.TickScalar;
|
||||
System.EnableInternetAccess.Value = configurationFileFormat.EnableInternetAccess;
|
||||
System.EnableFsIntegrityChecks.Value = configurationFileFormat.EnableFsIntegrityChecks;
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
using Ryujinx.UI.Common.Models;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Ryujinx.Common.Configuration
|
||||
{
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(CustomSettingsModel))]
|
||||
public partial class CustomSettingsMetadataJsonSerializerContext : JsonSerializerContext
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
using Ryujinx.Common.Configuration;
|
||||
using Ryujinx.Common.Logging;
|
||||
using Ryujinx.Common.Utilities;
|
||||
using Ryujinx.HLE;
|
||||
using Ryujinx.UI.Common.Configuration;
|
||||
using Ryujinx.UI.Common.Configuration.System;
|
||||
using System.IO;
|
||||
using CustomSettingsModel = Ryujinx.UI.Common.Models.CustomSettingsModel;
|
||||
using Path = System.IO.Path;
|
||||
|
||||
namespace Ryujinx.UI.Common.Helper
|
||||
{
|
||||
public static class CustomSettingsHelper
|
||||
{
|
||||
private static readonly CustomSettingsMetadataJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
|
||||
|
||||
public static CustomSettingsModel LoadCustomSettingsJson(string customSettingsJsonPath)
|
||||
{
|
||||
var customSettingsModel = new CustomSettingsModel();
|
||||
|
||||
if (!File.Exists(customSettingsJsonPath))
|
||||
{
|
||||
return customSettingsModel;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Logger.Info?.Print(LogClass.Configuration, $"Found custom settings data for application at {customSettingsJsonPath}");
|
||||
customSettingsModel = JsonHelper.DeserializeFromFile(customSettingsJsonPath, _serializerContext.CustomSettingsModel);
|
||||
return customSettingsModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.Error?.Print(LogClass.Configuration, $"Failed to deserialize custom settings data for application at {customSettingsJsonPath}");
|
||||
return customSettingsModel;
|
||||
}
|
||||
}
|
||||
|
||||
public static void SaveCustomSettingsJson(string customSettingsJsonPath, CustomSettingsModel customSettingsModel)
|
||||
{
|
||||
if (!File.Exists(customSettingsJsonPath))
|
||||
{
|
||||
string directoryPath = Path.GetDirectoryName(customSettingsJsonPath);
|
||||
|
||||
if (!string.IsNullOrEmpty(directoryPath))
|
||||
{
|
||||
Directory.CreateDirectory(directoryPath);
|
||||
}
|
||||
}
|
||||
|
||||
JsonHelper.SerializeToFile(customSettingsJsonPath, customSettingsModel, _serializerContext.CustomSettingsModel);
|
||||
}
|
||||
|
||||
public static bool HasCustomSettings(string customSettingsJsonPath)
|
||||
{
|
||||
return File.Exists(customSettingsJsonPath);
|
||||
}
|
||||
|
||||
public static void DeleteCustomSettings(string customSettingsJsonPath)
|
||||
{
|
||||
FileInfo file = new(customSettingsJsonPath);
|
||||
|
||||
if (file.Exists)
|
||||
{
|
||||
file.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public static void OverrideSettings(CustomSettingsModel customSettingsModel)
|
||||
{
|
||||
ConfigurationState.Instance.System.EnableDockedMode.Value = customSettingsModel.EnableDockedMode;
|
||||
ConfigurationState.Instance.System.Language.Value = (Language)customSettingsModel.SystemLanguage;
|
||||
ConfigurationState.Instance.System.Region.Value = (Region)customSettingsModel.SystemRegion;
|
||||
ConfigurationState.Instance.Graphics.VSyncMode.Value = (VSyncMode)customSettingsModel.VSyncMode;
|
||||
ConfigurationState.Instance.System.DramSize.Value = (MemoryConfiguration)customSettingsModel.DramSize;
|
||||
ConfigurationState.Instance.System.EnableFsIntegrityChecks.Value = customSettingsModel.EnableFsIntegrityChecks;
|
||||
ConfigurationState.Instance.System.IgnoreMissingServices.Value = customSettingsModel.IgnoreMissingServices;
|
||||
ConfigurationState.Instance.System.EnableLowPowerPptc.Value = customSettingsModel.EnableLowPowerPptc;
|
||||
ConfigurationState.Instance.System.MemoryManagerMode.Value = (MemoryManagerMode)customSettingsModel.MemoryManagerMode;
|
||||
ConfigurationState.Instance.System.UseHypervisor.Value = customSettingsModel.UseHypervisor;
|
||||
ConfigurationState.Instance.System.TickScalar.Value = customSettingsModel.TickScalar;
|
||||
ConfigurationState.Instance.System.AudioBackend.Value = customSettingsModel.AudioBackend;
|
||||
ConfigurationState.Instance.System.AudioVolume.Value = customSettingsModel.AudioVolume;
|
||||
ConfigurationState.Instance.Graphics.GraphicsBackend.Value = (GraphicsBackend)customSettingsModel.GraphicsBackend;
|
||||
ConfigurationState.Instance.Graphics.PreferredGpu.Value = customSettingsModel.PreferredGpu;
|
||||
ConfigurationState.Instance.Graphics.EnableShaderCache.Value = customSettingsModel.EnableShaderCache;
|
||||
ConfigurationState.Instance.Graphics.EnableTextureRecompression.Value = customSettingsModel.EnableTextureRecompression;
|
||||
ConfigurationState.Instance.Graphics.EnableMacroHLE.Value = customSettingsModel.EnableMacroHLE;
|
||||
ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Value = customSettingsModel.EnableColorSpacePassthrough;
|
||||
ConfigurationState.Instance.Graphics.ResScale.Value = customSettingsModel.ResScale;
|
||||
ConfigurationState.Instance.Graphics.MaxAnisotropy.Value = customSettingsModel.MaxAnisotropy;
|
||||
ConfigurationState.Instance.Graphics.BackendThreading.Value = (BackendThreading)customSettingsModel.BackendThreading;
|
||||
}
|
||||
|
||||
public static string PathToGameSettingsJson(ulong applicationIdBase)
|
||||
{
|
||||
return Path.Combine(AppDataManager.GamesDirPath, applicationIdBase.ToString("x16"), "settings.json");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,13 +31,13 @@ namespace Ryujinx.UI.Common.Helper
|
||||
|
||||
try
|
||||
{
|
||||
List<DownloadableContentContainer> downloadableContentContainerList = JsonHelper.DeserializeFromFile(downloadableContentJsonPath,
|
||||
_serializerContext.ListDownloadableContentContainer);
|
||||
// Logger.Info?.Print(LogClass.Configuration, $"Found downloadable content data for {applicationIdBase:x16} at {downloadableContentJsonPath}");
|
||||
List<DownloadableContentContainer> downloadableContentContainerList = JsonHelper.DeserializeFromFile(downloadableContentJsonPath,_serializerContext.ListDownloadableContentContainer);
|
||||
return LoadDownloadableContents(vfs, downloadableContentContainerList);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.Error?.Print(LogClass.Configuration, "Downloadable Content JSON failed to deserialize.");
|
||||
Logger.Error?.Print(LogClass.Configuration, $"Failed to deserialize downloadable content data for {applicationIdBase:x16} at {downloadableContentJsonPath}");
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,12 +39,13 @@ namespace Ryujinx.UI.Common.Helper
|
||||
|
||||
try
|
||||
{
|
||||
// Logger.Info?.Print(LogClass.Application, $"Found title updates data for {applicationIdBase:x16} at {titleUpdatesJsonPath}");
|
||||
TitleUpdateMetadata titleUpdateWindowData = JsonHelper.DeserializeFromFile(titleUpdatesJsonPath, _serializerContext.TitleUpdateMetadata);
|
||||
return LoadTitleUpdates(vfs, titleUpdateWindowData, applicationIdBase);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.Warning?.Print(LogClass.Application, $"Failed to deserialize title update data for {applicationIdBase:x16} at {titleUpdatesJsonPath}");
|
||||
Logger.Error?.Print(LogClass.Application, $"Failed to deserialize title updates data for {applicationIdBase:x16} at {titleUpdatesJsonPath}");
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
using Ryujinx.Common.Configuration;
|
||||
using Ryujinx.HLE;
|
||||
using Ryujinx.UI.Common.Configuration;
|
||||
|
||||
namespace Ryujinx.UI.Common.Models
|
||||
{
|
||||
// NOTE: most consuming code relies on this model being value-comparable
|
||||
public record CustomSettingsModel()
|
||||
{
|
||||
public bool HasCustomSettings { get; set; }
|
||||
public bool EnableDockedMode { get; set; }
|
||||
public int SystemLanguage { get; set; }
|
||||
public int SystemRegion { get; set; }
|
||||
public int VSyncMode { get; set; }
|
||||
public int DramSize { get; set; }
|
||||
public bool EnableFsIntegrityChecks { get; set; }
|
||||
public bool IgnoreMissingServices { get; set; }
|
||||
public bool EnablePptc { get; set; }
|
||||
public bool EnableLowPowerPptc { get; set; }
|
||||
public int MemoryManagerMode { get; set; }
|
||||
public bool UseHypervisor { get; set; }
|
||||
public long TickScalar { get; set; }
|
||||
public int GraphicsBackend { get; set; }
|
||||
public string PreferredGpu { get; set; }
|
||||
public bool EnableShaderCache { get; set; }
|
||||
public bool EnableTextureRecompression { get; set; }
|
||||
public bool EnableMacroHLE { get; set; }
|
||||
public bool EnableColorSpacePassthrough { get; set; }
|
||||
public float ResScale { get; set; }
|
||||
public float MaxAnisotropy { get; set; }
|
||||
public int BackendThreading { get; set; }
|
||||
public AudioBackend AudioBackend { get; set; }
|
||||
public float AudioVolume { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
+53
-41
@@ -43,6 +43,7 @@ using Ryujinx.UI.App.Common;
|
||||
using Ryujinx.UI.Common;
|
||||
using Ryujinx.UI.Common.Configuration;
|
||||
using Ryujinx.UI.Common.Helper;
|
||||
using Ryujinx.UI.Common.Models;
|
||||
using Silk.NET.Vulkan;
|
||||
using SkiaSharp;
|
||||
using SPB.Graphics.Exceptions;
|
||||
@@ -84,6 +85,7 @@ namespace Ryujinx.Ava
|
||||
|
||||
private readonly AccountManager _accountManager;
|
||||
private readonly UserChannelPersistence _userChannelPersistence;
|
||||
private readonly CustomSettingsModel _customSettingsModel;
|
||||
private readonly InputManager _inputManager;
|
||||
|
||||
private readonly MainWindowViewModel _viewModel;
|
||||
@@ -181,6 +183,12 @@ namespace Ryujinx.Ava
|
||||
_chrono = new Stopwatch();
|
||||
_ticksPerFrame = Stopwatch.Frequency / TargetFps;
|
||||
|
||||
if (CustomSettingsHelper.HasCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(applicationId)))
|
||||
{
|
||||
CustomSettingsModel customSettings = CustomSettingsHelper.LoadCustomSettingsJson(CustomSettingsHelper.PathToGameSettingsJson(applicationId));
|
||||
CustomSettingsHelper.OverrideSettings(customSettings);
|
||||
}
|
||||
|
||||
if (ApplicationPath.StartsWith("@SystemContent"))
|
||||
{
|
||||
ApplicationPath = VirtualFileSystem.SwitchPathToSystemPath(ApplicationPath);
|
||||
@@ -476,7 +484,7 @@ namespace Ryujinx.Ava
|
||||
|
||||
public void Start()
|
||||
{
|
||||
ARMeilleure.Optimizations.EcoFriendly = ConfigurationState.Instance.System.EnableLowPowerPtc;
|
||||
ARMeilleure.Optimizations.EcoFriendly = ConfigurationState.Instance.System.EnableLowPowerPptc;
|
||||
|
||||
if (OperatingSystem.IsWindows())
|
||||
{
|
||||
@@ -616,6 +624,12 @@ namespace Ryujinx.Ava
|
||||
_gpuCancellationTokenSource.Dispose();
|
||||
|
||||
DisposeGpu();
|
||||
|
||||
if (CustomSettingsHelper.HasCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(ApplicationId)))
|
||||
{
|
||||
Program.ReloadConfig();
|
||||
}
|
||||
|
||||
AppExit?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
@@ -959,45 +973,45 @@ namespace Ryujinx.Ava
|
||||
|
||||
Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}");
|
||||
|
||||
// Initialize Configuration.
|
||||
MemoryConfiguration memoryConfiguration = ConfigurationState.Instance.System.DramSize.Value;
|
||||
CustomSettingsModel customSettingsModel = CustomSettingsHelper.LoadCustomSettingsJson(CustomSettingsHelper.PathToGameSettingsJson(ApplicationId));
|
||||
|
||||
HLEConfiguration configuration = new(VirtualFileSystem,
|
||||
_viewModel.LibHacHorizonManager,
|
||||
ContentManager,
|
||||
_accountManager,
|
||||
_userChannelPersistence,
|
||||
renderer,
|
||||
InitializeAudio(),
|
||||
memoryConfiguration,
|
||||
_viewModel.UiHandler,
|
||||
(SystemLanguage)ConfigurationState.Instance.System.Language.Value,
|
||||
(RegionCode)ConfigurationState.Instance.System.Region.Value,
|
||||
ConfigurationState.Instance.Graphics.VSyncMode,
|
||||
ConfigurationState.Instance.System.EnableDockedMode,
|
||||
ConfigurationState.Instance.System.EnablePtc,
|
||||
ConfigurationState.Instance.System.TickScalar,
|
||||
ConfigurationState.Instance.System.EnableInternetAccess,
|
||||
ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None,
|
||||
ConfigurationState.Instance.System.FsGlobalAccessLogMode,
|
||||
ConfigurationState.Instance.System.MatchSystemTime
|
||||
? 0
|
||||
: ConfigurationState.Instance.System.SystemTimeOffset,
|
||||
ConfigurationState.Instance.System.TimeZone,
|
||||
ConfigurationState.Instance.System.MemoryManagerMode,
|
||||
ConfigurationState.Instance.System.IgnoreMissingServices,
|
||||
ConfigurationState.Instance.Graphics.AspectRatio,
|
||||
ConfigurationState.Instance.System.AudioVolume,
|
||||
ConfigurationState.Instance.System.UseHypervisor,
|
||||
ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value,
|
||||
ConfigurationState.Instance.Multiplayer.Mode,
|
||||
ConfigurationState.Instance.Multiplayer.DisableP2p,
|
||||
ConfigurationState.Instance.Multiplayer.LdnPassphrase,
|
||||
ConfigurationState.Instance.Multiplayer.LdnServer,
|
||||
ConfigurationState.Instance.Debug.EnableGdbStub,
|
||||
ConfigurationState.Instance.Debug.GdbStubPort,
|
||||
ConfigurationState.Instance.Debug.DebuggerSuspendOnStart,
|
||||
ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value);
|
||||
HLEConfiguration configuration = new(
|
||||
VirtualFileSystem,
|
||||
_viewModel.LibHacHorizonManager,
|
||||
ContentManager,
|
||||
_accountManager,
|
||||
_userChannelPersistence,
|
||||
renderer,
|
||||
InitializeAudio(),
|
||||
customSettingsModel.HasCustomSettings ? (MemoryConfiguration)customSettingsModel.DramSize : ConfigurationState.Instance.System.DramSize.Value,
|
||||
_viewModel.UiHandler,
|
||||
(SystemLanguage)ConfigurationState.Instance.System.Language.Value,
|
||||
(RegionCode)ConfigurationState.Instance.System.Region.Value,
|
||||
ConfigurationState.Instance.Graphics.VSyncMode,
|
||||
ConfigurationState.Instance.System.EnableDockedMode,
|
||||
ConfigurationState.Instance.System.EnablePptc,
|
||||
ConfigurationState.Instance.System.TickScalar,
|
||||
ConfigurationState.Instance.System.EnableInternetAccess,
|
||||
ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None,
|
||||
ConfigurationState.Instance.System.FsGlobalAccessLogMode,
|
||||
ConfigurationState.Instance.System.MatchSystemTime
|
||||
? 0
|
||||
: ConfigurationState.Instance.System.SystemTimeOffset,
|
||||
ConfigurationState.Instance.System.TimeZone,
|
||||
ConfigurationState.Instance.System.MemoryManagerMode,
|
||||
ConfigurationState.Instance.System.IgnoreMissingServices,
|
||||
ConfigurationState.Instance.Graphics.AspectRatio,
|
||||
ConfigurationState.Instance.System.AudioVolume,
|
||||
ConfigurationState.Instance.System.UseHypervisor,
|
||||
ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value,
|
||||
ConfigurationState.Instance.Multiplayer.Mode,
|
||||
ConfigurationState.Instance.Multiplayer.DisableP2p,
|
||||
ConfigurationState.Instance.Multiplayer.LdnPassphrase,
|
||||
ConfigurationState.Instance.Multiplayer.LdnServer,
|
||||
ConfigurationState.Instance.Debug.EnableGdbStub,
|
||||
ConfigurationState.Instance.Debug.GdbStubPort,
|
||||
ConfigurationState.Instance.Debug.DebuggerSuspendOnStart,
|
||||
ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value);
|
||||
|
||||
Device = new Switch(configuration);
|
||||
}
|
||||
@@ -1064,8 +1078,6 @@ namespace Ryujinx.Ava
|
||||
}
|
||||
}
|
||||
|
||||
MainWindowViewModel.SaveConfig();
|
||||
|
||||
return deviceDriver;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "يفتح نافذة إدارة تحديث اللُعبة",
|
||||
"GameListContextMenuManageDlc": "إدارة المحتوي الإضافي",
|
||||
"GameListContextMenuManageDlcToolTip": "يفتح نافذة إدارة المحتوي الإضافي",
|
||||
"GameListContextMenuManageCustomSettings": "إدارة ملف الإعدادات المخصصة",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "إدارة الإعدادات المخصصة للتطبيق المحدد",
|
||||
"GameListContextMenuCustomSettingsOpen": "فتح دليل الإعدادات المخصصة",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "فتح الدليل الذي يحتوي على الإعدادات المخصصة للتطبيق",
|
||||
"GameListContextMenuCacheManagement": "إدارة ذاكرة التخزين المؤقت",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "قائمة انتظار إعادة بناء الـPPTC",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "تنشيط PPTC لإعادة البناء في وقت الإقلاع عند بدء تشغيل اللعبة التالي",
|
||||
@@ -172,11 +176,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "مقياس الدقة",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "مخصص (لا ينصح به)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "الأصل (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (لا ينصح به)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "نسبة الارتفاع إلى العرض:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -207,8 +212,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "الكل",
|
||||
"SettingsTabLoggingEnableDebugLogs": "تمكين سجلات التصحيح",
|
||||
"SettingsTabInput": "الإدخال",
|
||||
"SettingsTabInputEnableDockedMode": "تركيب بالمنصة",
|
||||
"SettingsTabSystemEnableDockedMode": "تركيب بالمنصة",
|
||||
"SettingsTabInputDirectKeyboardAccess": "الوصول المباشر للوحة المفاتيح",
|
||||
"SettingsButtonDelete": "حذف",
|
||||
"SettingsButtonSave": "حفظ",
|
||||
"SettingsButtonClose": "إغلاق",
|
||||
"SettingsButtonOk": "موافق",
|
||||
@@ -487,9 +493,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "حذف الملف الشخصي",
|
||||
"DialogProfileDeleteProfileMessage": "هذا الإجراء لا رجعة فيه، هل أنت متأكد من أنك تريد المتابعة؟",
|
||||
"DialogWarning": "تحذير",
|
||||
"DialogCustomSettingsDeleteMessage": "أنت على وشك حذف الإعدادات المخصصة لـ:\n\n{0}\n\nهل أنت متأكد من أنك تريد المتابعة؟",
|
||||
"DialogPPTCDeletionMessage": "أنت على وشك الإنتظار لإعادة بناء ذاكرة التخزين المؤقت للترجمة المستمرة (PPTC) عند الإقلاع التالي لـ:\n\n{0}\n\nأمتأكد من رغبتك في المتابعة؟",
|
||||
"DialogPPTCDeletionErrorMessage": "خطأ خلال تنظيف ذاكرة التخزين المؤقت للترجمة المستمرة (PPTC) في {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "أنت على وشك حذف جميع بيانات PPTC من:\n\n{0}\n\nهل أنت متأكد من أنك تريد المتابعة؟",
|
||||
"DialogShaderDeletionMessage": "أنت على وشك حذف ذاكرة المظللات المؤقتة ل:\n\n{0}\n\nهل انت متأكد انك تريد المتابعة؟",
|
||||
"DialogShaderDeletionErrorMessage": "حدث خطأ أثناء تنظيف ذاكرة المظللات المؤقتة في {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "واجه ريوجينكس خطأ",
|
||||
@@ -528,7 +535,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "الرجاء إيقاف المحاكاة أو إغلاق المحاكي قبل بدء لعبة أخرى.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "الملف المحدد لا يحتوي على تحديث للعنوان المحدد!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "تحذير - خلفية متعددة المسارات",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "يجب إعادة تشغيل ريوجينكس بعد تغيير هذا الخيار حتى يتم تطبيقه بالكامل. اعتمادا على النظام الأساسي الخاص بك، قد تحتاج إلى تعطيل تعدد المسارات الخاص ببرنامج الرسومات التشغيل الخاص بك يدويًا عند استخدام الخاص بريوجينكس.",
|
||||
"DialogModManagerDeletionWarningMessage": "أنت على وشك حذف التعديل: {0}\n\nهل انت متأكد انك تريد المتابعة؟",
|
||||
"DialogModManagerDeletionAllWarningMessage": "أنت على وشك حذف كافة التعديلات لهذا العنوان.\n\nهل انت متأكد انك تريد المتابعة؟",
|
||||
"SettingsTabGraphicsFeaturesOptions": "المميزات",
|
||||
|
||||
@@ -67,6 +67,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Öffnet den Spiel-Update-Manager",
|
||||
"GameListContextMenuManageDlc": "Verwalten von DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "Öffnet den DLC-Manager",
|
||||
"GameListContextMenuManageCustomSettings": "Benutzerdefinierte Einstellungsdatei verwalten",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Verwalten Sie die benutzerdefinierten Einstellungen für die ausgewählte Anwendung",
|
||||
"GameListContextMenuCustomSettingsOpen": "Verzeichnis der benutzerdefinierten Einstellungen öffnen",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Öffnen Sie das Verzeichnis, das die benutzerdefinierten Einstellungen der Anwendung enthält",
|
||||
"GameListContextMenuCacheManagement": "Cache-Verwaltung",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "PPTC als ungültig markieren",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Markiert den PPTC als ungültig, sodass dieser beim nächsten Spielstart neu erstellt wird",
|
||||
@@ -173,11 +177,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "Auflösungsskalierung:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Benutzerdefiniert (nicht empfohlen)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Nativ (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Nicht empfohlen)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Bildseitenverhältnis:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -208,8 +213,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Alle",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Aktiviere Debug-Log",
|
||||
"SettingsTabInput": "Eingabe",
|
||||
"SettingsTabInputEnableDockedMode": "Angedockter Modus",
|
||||
"SettingsTabSystemEnableDockedMode": "Angedockter Modus",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Direkter Tastaturzugriff",
|
||||
"SettingsButtonDelete": "Löschen",
|
||||
"SettingsButtonSave": "Speichern",
|
||||
"SettingsButtonClose": "Schließen",
|
||||
"SettingsButtonOk": "OK",
|
||||
@@ -488,9 +494,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "Profil löschen",
|
||||
"DialogProfileDeleteProfileMessage": "Diese Aktion kann nicht rückgängig gemacht werden. Wirklich fortfahren?",
|
||||
"DialogWarning": "Warnung",
|
||||
"DialogCustomSettingsDeleteMessage": "Sie sind dabei, benutzerdefinierte Einstellungen zu löschen für:\n\n{0}\n\nSind Sie sicher, dass Sie fortfahren möchten?",
|
||||
"DialogPPTCDeletionMessage": "Du bist dabei den PPTC für das folgende Spiel als ungültig zu markieren:\n\n{0}\n\nWirklich fortfahren?",
|
||||
"DialogPPTCDeletionErrorMessage": "Fehler bei der Löschung des PPTC Caches bei {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "Sie sind dabei, alle PPTC-Daten zu löschen von:\n\n{0}\n\nSind Sie sicher, dass Sie fortfahren möchten?",
|
||||
"DialogShaderDeletionMessage": "Du bist dabei, den Shader Cache zu löschen für :\n\n{0}\n\nWirklich fortfahren?",
|
||||
"DialogShaderDeletionErrorMessage": "Es ist ein Fehler bei der Löschung des Shader Caches bei {0}: {1} aufgetreten",
|
||||
"DialogRyujinxErrorMessage": "Ein Fehler ist aufgetreten",
|
||||
@@ -529,7 +536,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Bitte beende die Emulation oder schließe den Emulator, vor dem Starten eines neuen Spiels",
|
||||
"DialogUpdateAddUpdateErrorMessage": "Die angegebene Datei enthält keine Updates für den ausgewählten Titel!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Warnung - Render Threading",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Ryujinx muss muss neu gestartet werden, damit die Änderungen wirksam werden. Abhängig von dem Betriebssystem muss möglicherweise das Multithreading des Treibers manuell deaktiviert werden, wenn Ryujinx verwendet wird.",
|
||||
"DialogModManagerDeletionWarningMessage": "Du bist dabei, diesen Mod zu lösche. {0}\n\nMöchtest du wirklich fortfahren?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "Du bist dabei, alle Mods für diesen Titel zu löschen.\n\nMöchtest du wirklich fortfahren?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Erweiterungen",
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Ανοίγει το παράθυρο διαχείρισης Ενημερώσεων Παιχνιδιού",
|
||||
"GameListContextMenuManageDlc": "Διαχείριση DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "Ανοίγει το παράθυρο διαχείρισης DLC",
|
||||
"GameListContextMenuManageCustomSettings": "Διαχείριση Αρχείου Προσαρμοσμένων Ρυθμίσεων",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Διαχειριστείτε τις προσαρμοσμένες ρυθμίσεις για την επιλεγμένη Εφαρμογή",
|
||||
"GameListContextMenuCustomSettingsOpen": "Άνοιγμα Καταλόγου Προσαρμοσμένων Ρυθμίσεων",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Ανοίξτε τον κατάλογο που περιέχει τις προσαρμοσμένες ρυθμίσεις της Εφαρμογής",
|
||||
"GameListContextMenuCacheManagement": "Διαχείριση Προσωρινής Μνήμης",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "Εκκαθάριση Προσωρινής Μνήμης PPTC",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Διαγράφει την προσωρινή μνήμη PPTC της εφαρμογής",
|
||||
@@ -172,11 +176,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "Κλίμακα Ανάλυσης:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Προσαρμοσμένο (Δεν συνιστάται)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Εγγενής (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Not recommended)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Αναλογία Απεικόνισης:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -207,8 +212,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Όλα",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Ενεργοποίηση Αρχείων Καταγραφής Εντοπισμού Σφαλμάτων",
|
||||
"SettingsTabInput": "Χειρισμός",
|
||||
"SettingsTabInputEnableDockedMode": "Ενεργοποίηση Docked Mode",
|
||||
"SettingsTabSystemEnableDockedMode": "Ενεργοποίηση Docked Mode",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Άμεση Πρόσβαση στο Πληκτρολόγιο",
|
||||
"SettingsButtonDelete": "Διαγραφή",
|
||||
"SettingsButtonSave": "Αποθήκευση",
|
||||
"SettingsButtonClose": "Κλείσιμο",
|
||||
"SettingsButtonOk": "ΟΚ",
|
||||
@@ -487,9 +493,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "Διαγραφή Προφίλ",
|
||||
"DialogProfileDeleteProfileMessage": "Αυτή η ενέργεια είναι μη αναστρέψιμη, είστε βέβαιοι ότι θέλετε να συνεχίσετε;",
|
||||
"DialogWarning": "Προειδοποίηση",
|
||||
"DialogCustomSettingsDeleteMessage": "Πρόκειται να διαγράψετε τις προσαρμοσμένες ρυθμίσεις για:\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;",
|
||||
"DialogPPTCDeletionMessage": "Πρόκειται να διαγράψετε την προσωρινή μνήμη PPTC για :\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;",
|
||||
"DialogPPTCDeletionErrorMessage": "Σφάλμα κατά την εκκαθάριση προσωρινής μνήμης PPTC στο {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "Πρόκειται να διαγράψετε όλα τα δεδομένα PPTC από:\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;",
|
||||
"DialogShaderDeletionMessage": "Πρόκειται να διαγράψετε την προσωρινή μνήμη Shader για :\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;",
|
||||
"DialogShaderDeletionErrorMessage": "Σφάλμα κατά την εκκαθάριση προσωρινής μνήμης Shader στο {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "Το Ryujinx αντιμετώπισε σφάλμα",
|
||||
@@ -528,7 +535,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Σταματήστε την εξομοίωση ή κλείστε τον εξομοιωτή πριν ξεκινήσετε ένα άλλο παιχνίδι.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "Το αρχείο δεν περιέχει ενημέρωση για τον επιλεγμένο τίτλο!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Προειδοποίηση - Backend Threading",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Το Ryujinx πρέπει να επανεκκινηθεί αφού αλλάξει αυτή η επιλογή για να εφαρμοστεί πλήρως. Ανάλογα με την πλατφόρμα σας, μπορεί να χρειαστεί να απενεργοποιήσετε με μη αυτόματο τρόπο το multithreading του ίδιου του προγράμματος οδήγησης όταν χρησιμοποιείτε το Ryujinx.",
|
||||
"DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Χαρακτηριστικά",
|
||||
|
||||
@@ -71,6 +71,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Opens the Title Update management window",
|
||||
"GameListContextMenuManageDlc": "Manage DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "Opens the DLC management window",
|
||||
"GameListContextMenuManageCustomSettings": "Manage Custom Settings",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Opens the Custom Settings management windows",
|
||||
"GameListContextMenuCustomSettingsOpen": "Open Custom Settings Directory",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Open the directory which contains Application's custom settings",
|
||||
"GameListContextMenuCacheManagement": "Cache Management",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "Queue PPTC Rebuild",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Trigger PPTC to rebuild at boot time on the next game launch",
|
||||
@@ -197,11 +201,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "Resolution Scale:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Custom (Not recommended)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Native (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Not recommended)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Aspect Ratio:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -238,8 +243,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "All",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Enable Debug Logs",
|
||||
"SettingsTabInput": "Input",
|
||||
"SettingsTabInputEnableDockedMode": "Docked Mode",
|
||||
"SettingsTabSystemEnableDockedMode": "Docked Mode",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Direct Keyboard Access",
|
||||
"SettingsButtonDelete": "Delete",
|
||||
"SettingsButtonSave": "Save",
|
||||
"SettingsButtonClose": "Close",
|
||||
"SettingsButtonOk": "OK",
|
||||
@@ -523,6 +529,7 @@
|
||||
"DialogProfileDeleteProfileTitle": "Deleting Profile",
|
||||
"DialogProfileDeleteProfileMessage": "This action is irreversible, are you sure you want to continue?",
|
||||
"DialogWarning": "Warning",
|
||||
"DialogCustomSettingsDeleteMessage": "You are about to delete custom settings for:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCDeletionMessage": "You are about to queue a PPTC rebuild on the next boot of:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCDeletionErrorMessage": "Error purging PPTC cache at {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
@@ -564,7 +571,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Please stop emulation or close the emulator before launching another game.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "The specified file does not contain an update for the selected title!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Warning - Backend Threading",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Ryujinx must be restarted after changing this option for it to apply fully. Depending on your platform, you may need to manually disable your driver's own multithreading when using Ryujinx's.",
|
||||
"DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Features",
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Abrir la ventana de gestión de actualizaciones de esta aplicación",
|
||||
"GameListContextMenuManageDlc": "Gestionar DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "Abrir la ventana de gestión del DLC",
|
||||
"GameListContextMenuManageCustomSettings": "Gestionar Archivo de Configuración Personalizada",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Gestionar la configuración personalizada para la Aplicación seleccionada",
|
||||
"GameListContextMenuCustomSettingsOpen": "Abrir Directorio de Configuración Personalizada",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Abrir el directorio que contiene la configuración personalizada de la Aplicación",
|
||||
"GameListContextMenuCacheManagement": "Gestión de caché ",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "Reconstruir PPTC en cola",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Elimina la caché de PPTC de esta aplicación",
|
||||
@@ -172,11 +176,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "x8",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "x16",
|
||||
"SettingsTabGraphicsResolutionScale": "Escala de resolución:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Personalizada (no recomendado)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Nativa (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "x2 (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "x3 (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (no recomendado)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Relación de aspecto:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -207,8 +212,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Todo",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Habilitar registros de debug",
|
||||
"SettingsTabInput": "Entrada",
|
||||
"SettingsTabInputEnableDockedMode": "Modo dock/TV",
|
||||
"SettingsTabSystemEnableDockedMode": "Modo dock/TV",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Acceso directo al teclado",
|
||||
"SettingsButtonDelete": "Eliminar",
|
||||
"SettingsButtonSave": "Guardar",
|
||||
"SettingsButtonClose": "Cerrar",
|
||||
"SettingsButtonOk": "Aceptar",
|
||||
@@ -487,9 +493,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "Eliminando perfil",
|
||||
"DialogProfileDeleteProfileMessage": "Esta acción es irreversible, ¿estás seguro de querer continuar?",
|
||||
"DialogWarning": "Advertencia",
|
||||
"DialogCustomSettingsDeleteMessage": "Está a punto de eliminar la configuración personalizada para:\n\n{0}\n\n¿Está seguro de que desea continuar?",
|
||||
"DialogPPTCDeletionMessage": "Vas a borrar la caché de PPTC para:\n\n{0}\n\n¿Estás seguro de querer continuar?",
|
||||
"DialogPPTCDeletionErrorMessage": "Error purgando la caché de PPTC en {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "Está a punto de eliminar todos los datos PPTC de:\n\n{0}\n\n¿Está seguro de que desea continuar?",
|
||||
"DialogShaderDeletionMessage": "Vas a borrar la caché de sombreadores para:\n\n{0}\n\n¿Estás seguro de querer continuar?",
|
||||
"DialogShaderDeletionErrorMessage": "Error purgando la caché de sombreadores en {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx ha encontrado un error",
|
||||
@@ -528,7 +535,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Por favor, detén la emulación o cierra el emulador antes de iniciar otro juego.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "¡Ese archivo no contiene una actualización para el título seleccionado!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Advertencia - multihilado de gráficos",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Ryujinx debe reiniciarse para aplicar este cambio. Dependiendo de tu plataforma, puede que tengas que desactivar manualmente la optimización enlazada de tus controladores gráficos para usar el multihilo de Ryujinx.",
|
||||
"DialogModManagerDeletionWarningMessage": "Estás a punto de eliminar el mod: {0}\n\n¿Estás seguro de que quieres continuar?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "Estás a punto de eliminar todos los Mods para este título.\n\n¿Estás seguro de que quieres continuar?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Funcionalidades",
|
||||
@@ -597,7 +603,7 @@
|
||||
"MemoryManagerSoftwareTooltip": "Usa una tabla de paginación de software para traducir direcciones. Ofrece la precisión más exacta pero el rendimiento más lento.",
|
||||
"MemoryManagerHostTooltip": "Mapea la memoria directamente en la dirección de espacio del host. Compilación y ejecución JIT mucho más rápida.",
|
||||
"MemoryManagerUnsafeTooltip": "Mapea la memoria directamente, pero no enmascara la dirección dentro del espacio de dirección del guest antes del acceso. El modo más rápido, pero a costa de seguridad. La aplicación guest puede acceder a la memoria desde cualquier parte en Ryujinx, así que ejecuta solo programas en los que confíes cuando uses este modo.",
|
||||
"UseHypervisorTooltip": "Usar Hypervisor en lugar de JIT. Mejora enormemente el rendimiento cuando está disponible, pero puede ser inestable en su estado actual.",
|
||||
"UseHypervisorTooltip": "Usar Hypervisor en lugar de JIT. Mejora enormemente el rendimiento cuando está disponible, pero puede ser inestable en su estado actual.",
|
||||
"DRamTooltip": "Expande la memoria DRAM del sistema emulado de 4GiB a 6GiB.\n\nUtilizar solo con packs de texturas HD o mods de resolución 4K. NO mejora el rendimiento.\n\nDesactívalo si no sabes qué hacer.",
|
||||
"IgnoreMissingServicesTooltip": "Hack para ignorar servicios no implementados del Horizon OS. Esto puede ayudar a sobrepasar crasheos cuando inicies ciertos juegos.\n\nDesactívalo si no sabes qué hacer.",
|
||||
"GraphicsBackendThreadingTooltip": "Ejecuta los comandos del motor gráfico en un segundo hilo. Acelera la compilación de sombreadores, reduce los tirones, y mejora el rendimiento en controladores gráficos que no realicen su propio procesamiento con múltiples hilos. Rendimiento ligeramente superior en controladores gráficos que soporten múltiples hilos.\n\nSelecciona \"Auto\" si no sabes qué hacer.",
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Ouvre la fenêtre de gestion des mises à jour du jeu",
|
||||
"GameListContextMenuManageDlc": "Gérer les DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "Ouvre la fenêtre de gestion des DLC",
|
||||
"GameListContextMenuManageCustomSettings": "Gérer les paramètres personnalisés",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Gérer les paramètres personnalisés pour l'Application sélectionnée",
|
||||
"GameListContextMenuCustomSettingsOpen": "Ouvrir le Répertoire des Paramètres Personnalisés",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Ouvrir le répertoire contenant les paramètres personnalisés de l'Application",
|
||||
"GameListContextMenuCacheManagement": "Gestion des caches",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "Reconstruction du PPTC",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Effectuer une reconstruction du PPTC au prochain démarrage du jeu",
|
||||
@@ -174,11 +178,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "x8",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "x16",
|
||||
"SettingsTabGraphicsResolutionScale": "Échelle de résolution:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Personnalisée (Non recommandée)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Natif (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "x2 (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "x3 (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Non recommandé)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Format d'affichage :",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -209,8 +214,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Tout",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Activer les journaux de debug",
|
||||
"SettingsTabInput": "Contrôles",
|
||||
"SettingsTabInputEnableDockedMode": "Active le mode station d'accueil",
|
||||
"SettingsTabSystemEnableDockedMode": "Active le mode station d'accueil",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Accès direct au clavier",
|
||||
"SettingsButtonDelete": "Supprimer",
|
||||
"SettingsButtonSave": "Enregistrer",
|
||||
"SettingsButtonClose": "Fermer",
|
||||
"SettingsButtonOk": "OK",
|
||||
@@ -489,9 +495,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "Supprimer le profil",
|
||||
"DialogProfileDeleteProfileMessage": "Cette action est irréversible, êtes-vous sûr de vouloir continuer ?",
|
||||
"DialogWarning": "Avertissement",
|
||||
"DialogCustomSettingsDeleteMessage": "Vous êtes sur le point de supprimer les paramètres personnalisés pour :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?",
|
||||
"DialogPPTCDeletionMessage": "Vous êtes sur le point de mettre en file d'attente une reconstruction PPTC au prochain démarrage de :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?",
|
||||
"DialogPPTCDeletionErrorMessage": "Erreur lors de la purge du cache PPTC à {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "Vous êtes sur le point de supprimer toutes les données PPTC de :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?",
|
||||
"DialogShaderDeletionMessage": "Vous êtes sur le point de supprimer le cache du Shader pour :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?",
|
||||
"DialogShaderDeletionErrorMessage": "Erreur lors de la purge du cache du Shader à {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx a rencontré une erreur",
|
||||
@@ -530,7 +537,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Veuillez arrêter l'émulation ou fermer l'émulateur avant de lancer un autre jeu.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "Le fichier spécifié ne contient pas de mise à jour pour le titre sélectionné !",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Avertissement - Backend Threading ",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Ryujinx doit être redémarré après avoir changé cette option pour qu'elle s'applique complètement. Selon votre plate-forme, vous devrez peut-être désactiver manuellement le multithreading de votre pilote lorsque vous utilisez Ryujinx.",
|
||||
"DialogModManagerDeletionWarningMessage": "Vous êtes sur le point de supprimer le mod : {0}\n\nÊtes-vous sûr de vouloir continuer ?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "Vous êtes sur le point de supprimer tous les mods pour ce titre.\n\nÊtes-vous sûr de vouloir continuer ?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Fonctionnalités",
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "פותח את חלון מנהל עדכוני המשחקים",
|
||||
"GameListContextMenuManageDlc": "מנהל הרחבות",
|
||||
"GameListContextMenuManageDlcToolTip": "פותח את חלון מנהל הרחבות המשחקים",
|
||||
"GameListContextMenuManageCustomSettings": "נהל קובץ הגדרות מותאמות אישית",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "נהל הגדרות מותאמות אישית עבור האפליקציה שנבחרה",
|
||||
"GameListContextMenuCustomSettingsOpen": "פתח תיקיית הגדרות מותאמות אישית",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "פתח את התיקייה המכילה את הגדרות מותאמות אישית של האפליקציה",
|
||||
"GameListContextMenuCacheManagement": "ניהול מטמון",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "הוסף PPTC לתור בנייה מחדש",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "גרום ל-PPTC להבנות מחדש בפתיחה הבאה של המשחק",
|
||||
@@ -172,11 +176,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "קנה מידה של רזולוציה:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "מותאם אישית (לא מומלץ)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "מקורי (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (לא מומלץ)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "יחס גובה-רוחב:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -207,8 +212,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "הכל",
|
||||
"SettingsTabLoggingEnableDebugLogs": "אפשר רישום ניפוי באגים",
|
||||
"SettingsTabInput": "קלט",
|
||||
"SettingsTabInputEnableDockedMode": "מצב עגינה",
|
||||
"SettingsTabSystemEnableDockedMode": "מצב עגינה",
|
||||
"SettingsTabInputDirectKeyboardAccess": "גישה ישירה למקלדת",
|
||||
"SettingsButtonDelete": "מחק",
|
||||
"SettingsButtonSave": "שמירה",
|
||||
"SettingsButtonClose": "סגירה",
|
||||
"SettingsButtonOk": "אישור",
|
||||
@@ -487,9 +493,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "מוחק פרופיל",
|
||||
"DialogProfileDeleteProfileMessage": "פעולה זו היא בלתי הפיכה, האם אתם בטוחים שברצונכם להמשיך?",
|
||||
"DialogWarning": "אזהרה",
|
||||
"DialogCustomSettingsDeleteMessage": "אתה עומד למחוק הגדרות מותאמות אישית עבור:\n\n{0}\n\nהאם אתה בטוח שברצונך להמשיך?",
|
||||
"DialogPPTCDeletionMessage": "אם תמשיכו אתם עומדים לגרום לבנייה מחדש של מטמון ה-PPTC עבור:\n\n{0}",
|
||||
"DialogPPTCDeletionErrorMessage": "שגיאה בטיהור מטמון PPTC ב-{0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "אתה עומד למחוק את כל נתוני PPTC מ:\n\n{0}\n\nהאם אתה בטוח שברצונך להמשיך?",
|
||||
"DialogShaderDeletionMessage": "אם תמשיכו אתם עומדים למחוק את מטמון ההצללות עבור:\n\n{0}",
|
||||
"DialogShaderDeletionErrorMessage": "שגיאה בניקוי מטמון ההצללות ב-{0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "ריוג'ינקס נתקלה בשגיאה",
|
||||
@@ -528,7 +535,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "אנא הפסק את האמולציה או סגור את האמולטור לפני הפעלת משחק אחר.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "הקובץ שצוין אינו מכיל עדכון עבור המשחק שנבחר!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "אזהרה - ריבוי תהליכי רקע",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "יש להפעיל מחדש את ריוג'ינקס לאחר שינוי אפשרות זו כדי שהיא תחול במלואה. בהתאם לפלטפורמה שלך, ייתכן שיהיה עליך להשבית ידנית את ריבוי ההליכים של ההתקן שלך בעת השימוש ב-ריוג'ינקס.",
|
||||
"DialogModManagerDeletionWarningMessage": "אתה עומד למחוק את המוד: {0}\nהאם אתה בטוח שאתה רוצה להמשיך?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "אתה עומד למחוק את כל המודים בשביל משחק זה.\n\nהאם אתה בטוח שאתה רוצה להמשיך?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "אפשרויות",
|
||||
|
||||
@@ -70,6 +70,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Apre la finestra di gestione aggiornamenti del gioco",
|
||||
"GameListContextMenuManageDlc": "Gestisci DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "Apre la finestra di gestione dei DLC",
|
||||
"GameListContextMenuManageCustomSettings": "Gestisci le impostazioni personalizzate",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Gestisci le impostazioni personalizzate per l'Applicazione selezionata",
|
||||
"GameListContextMenuCustomSettingsOpen": "Apri Directory Impostazioni Personalizzate",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Apri la directory che contiene le impostazioni personalizzate dell'Applicazione",
|
||||
"GameListContextMenuCacheManagement": "Gestione della cache",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "Accoda rigenerazione della cache PPTC",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Esegue la rigenerazione della cache PPTC al prossimo avvio del gioco",
|
||||
@@ -195,11 +199,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "Scala della risoluzione:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Personalizzata (Non raccomandata)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Nativa (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Non consigliato)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Rapporto d'aspetto:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -230,8 +235,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Tutto",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Attiva log di debug",
|
||||
"SettingsTabInput": "Comandi",
|
||||
"SettingsTabInputEnableDockedMode": "Attiva modalità TV",
|
||||
"SettingsTabSystemEnableDockedMode": "Attiva modalità TV",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Accesso diretto alla tastiera",
|
||||
"SettingsButtonDelete": "Elimina",
|
||||
"SettingsButtonSave": "Salva",
|
||||
"SettingsButtonClose": "Chiudi",
|
||||
"SettingsButtonOk": "OK",
|
||||
@@ -515,10 +521,11 @@
|
||||
"DialogProfileDeleteProfileTitle": "Eliminazione profilo",
|
||||
"DialogProfileDeleteProfileMessage": "Quest'azione è irreversibile, sei sicuro di voler continuare?",
|
||||
"DialogWarning": "Avviso",
|
||||
"DialogPPTCDeletionMessage": "Stai per accodare la rigenerazione della cache PPTC al prossimo avvio per:\n\n{0}\n\nSei sicuro di voler proseguire?",
|
||||
"DialogCustomSettingsDeleteMessage": "Stai per eliminare le impostazioni personalizzate per:\n\n{0}\n\nSei sicuro di voler procedere?",
|
||||
"DialogPPTCDeletionMessage": "Stai per accodare la rigenerazione della cache PPTC al prossimo avvio per:\n\n{0}\n\nSei sicuro di voler procedere?",
|
||||
"DialogPPTCDeletionErrorMessage": "Errore nell'eliminazione della cache PPTC a {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "Stai per eliminare i tutti i dati della cache PPTC da:\n\n{0}\n\nSei sicuro di voler proseguire?",
|
||||
"DialogShaderDeletionMessage": "Stai per eliminare la cache degli shader per:\n\n{0}\n\nSei sicuro di voler proseguire?",
|
||||
"DialogPPTCNukeMessage": "Stai per eliminare tutti i dati PPTC da:\n\n{0}\n\nSei sicuro di voler procedere?",
|
||||
"DialogShaderDeletionMessage": "Stai per eliminare la cache degli shader per:\n\n{0}\n\nSei sicuro di voler procedere?",
|
||||
"DialogShaderDeletionErrorMessage": "Errore nell'eliminazione della cache degli shader a {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx ha riscontrato un errore",
|
||||
"DialogInvalidTitleIdErrorMessage": "Errore UI: Il gioco selezionato non ha un ID titolo valido",
|
||||
@@ -556,7 +563,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Ferma l'emulazione o chiudi l'emulatore prima di avviare un altro gioco.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "Il file specificato non contiene un aggiornamento per il titolo selezionato!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Avviso - Backend Threading",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Ryujinx deve essere riavviato dopo aver cambiato questa opzione per applicarla completamente. A seconda della tua piattaforma, potrebbe essere necessario disabilitare manualmente il multithreading del driver quando usi quello di Ryujinx.",
|
||||
"DialogModManagerDeletionWarningMessage": "Stai per eliminare la mod: {0}\n\nConfermi di voler procedere?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "Stai per eliminare tutte le mod per questo titolo.\n\nVuoi davvero procedere?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Funzionalità",
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "タイトルのアップデート管理ウインドウを開きます",
|
||||
"GameListContextMenuManageDlc": "DLCを管理",
|
||||
"GameListContextMenuManageDlcToolTip": "DLC管理ウインドウを開きます",
|
||||
"GameListContextMenuManageCustomSettings": "カスタム設定ファイルを管理",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "選択したアプリケーションのカスタム設定を管理します",
|
||||
"GameListContextMenuCustomSettingsOpen": "カスタム設定ディレクトリを開く",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "アプリケーションのカスタム設定を含むディレクトリを開きます",
|
||||
"GameListContextMenuCacheManagement": "キャッシュ管理",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "PPTC を再構築",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "次回のゲーム起動時に PPTC を再構築します",
|
||||
@@ -172,11 +176,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "解像度:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "カスタム (非推奨)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "ネイティブ (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (非推奨)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "アスペクト比:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -207,8 +212,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "すべて",
|
||||
"SettingsTabLoggingEnableDebugLogs": "デバッグログを有効にする",
|
||||
"SettingsTabInput": "入力",
|
||||
"SettingsTabInputEnableDockedMode": "ドッキングモード",
|
||||
"SettingsTabSystemEnableDockedMode": "ドッキングモード",
|
||||
"SettingsTabInputDirectKeyboardAccess": "キーボード直接アクセス",
|
||||
"SettingsButtonDelete": "削除",
|
||||
"SettingsButtonSave": "セーブ",
|
||||
"SettingsButtonClose": "閉じる",
|
||||
"SettingsButtonOk": "OK",
|
||||
@@ -487,9 +493,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "プロファイルを削除中",
|
||||
"DialogProfileDeleteProfileMessage": "このアクションは元に戻せません. 本当に続けてよろしいですか?",
|
||||
"DialogWarning": "警告",
|
||||
"DialogCustomSettingsDeleteMessage": "次のカスタム設定を削除しようとしています:\n\n{0}\n\n続行してもよろしいですか?",
|
||||
"DialogPPTCDeletionMessage": "次回起動時に PPTC を再構築します:\n\n{0}\n\n実行してよろしいですか?",
|
||||
"DialogPPTCDeletionErrorMessage": "PPTC キャッシュ破棄エラー {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "次のすべてのPPTCデータを削除しようとしています:\n\n{0}\n\n続行してもよろしいですか?",
|
||||
"DialogShaderDeletionMessage": "シェーダーキャッシュを破棄しようとしています:\n\n{0}\n\n実行してよろしいですか?",
|
||||
"DialogShaderDeletionErrorMessage": "シェーダーキャッシュ破棄エラー {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "エラーが発生しました",
|
||||
@@ -528,7 +535,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "別のゲームを起動する前に, エミュレーションを中止またはエミュレータを閉じてください.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "選択されたファイルはこのタイトル用のアップデートではありません!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "警告 - バックエンドスレッディング",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "このオプションの変更を完全に適用するには Ryujinx の再起動が必要です. プラットフォームによっては, Ryujinx のものを使用する前に手動でドライバ自身のマルチスレッディングを無効にする必要があるかもしれません.",
|
||||
"DialogModManagerDeletionWarningMessage": "以下のModを削除しようとしています: {0}\n\n続行してもよろしいですか?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "このタイトルの Mod をすべて削除しようとしています.\n\n続行してもよろしいですか?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "機能",
|
||||
|
||||
@@ -68,6 +68,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "타이틀 업데이트 관리 창 열기",
|
||||
"GameListContextMenuManageDlc": "DLC 관리",
|
||||
"GameListContextMenuManageDlcToolTip": "DLC 관리 창 열기",
|
||||
"GameListContextMenuManageCustomSettings": "사용자 지정 설정 파일 관리",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "선택한 애플리케이션에 대한 사용자 지정 설정을 관리합니다",
|
||||
"GameListContextMenuCustomSettingsOpen": "사용자 지정 설정 디렉토리 열기",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "애플리케이션의 사용자 지정 설정이 포함된 디렉토리를 엽니다",
|
||||
"GameListContextMenuCacheManagement": "캐시 관리",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "대기열 PPTC 재구성",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "다음 게임 시작에서 부팅 시 PPTC가 다시 빌드하도록 트리거",
|
||||
@@ -175,11 +179,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8배",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16배",
|
||||
"SettingsTabGraphicsResolutionScale": "해상도 배율 :",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "사용자 정의(권장하지 않음)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "원본(720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2배(1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3배(2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (권장하지 않음)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "종횡비 :",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -210,8 +215,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "모두",
|
||||
"SettingsTabLoggingEnableDebugLogs": "디버그 로그 활성화",
|
||||
"SettingsTabInput": "입력",
|
||||
"SettingsTabInputEnableDockedMode": "도킹 모드",
|
||||
"SettingsTabSystemEnableDockedMode": "도킹 모드",
|
||||
"SettingsTabInputDirectKeyboardAccess": "직접 키보드 접속",
|
||||
"SettingsButtonDelete": "삭제",
|
||||
"SettingsButtonSave": "저장",
|
||||
"SettingsButtonClose": "닫기",
|
||||
"SettingsButtonOk": "확인",
|
||||
@@ -490,9 +496,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "프로필 삭제",
|
||||
"DialogProfileDeleteProfileMessage": "이 작업은 되돌릴 수 없습니다. 계속하겠습니까?",
|
||||
"DialogWarning": "경고",
|
||||
"DialogCustomSettingsDeleteMessage": "다음에 대한 사용자 지정 설정을 삭제하려고 합니다:\n\n{0}\n\n계속 진행하시겠습니까?",
|
||||
"DialogPPTCDeletionMessage": "다음 부팅 시, PPTC 재구축을 대기열에 추가 :\n\n{0}\n\n계속하겠습니까?",
|
||||
"DialogPPTCDeletionErrorMessage": "{0}에서 PPTC 캐시 삭제 오류 : {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "다음에서 모든 PPTC 데이터를 삭제하려고 합니다:\n\n{0}\n\n계속 진행하시겠습니까?",
|
||||
"DialogShaderDeletionMessage": "다음에 대한 셰이더 캐시 삭제 :\n\n{0}\n\n계속하겠습니까?",
|
||||
"DialogShaderDeletionErrorMessage": "{0}에서 셰이더 캐시 제거 오류 : {1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx에 오류 발생",
|
||||
@@ -531,7 +538,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "다른 게임을 시작하기 전에 에뮬레이션을 중지하거나 에뮬레이터를 닫으세요.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "지정된 파일에 선택한 제목에 대한 업데이트가 포함되어 있지 않습니다!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "경고 - 후단부 스레딩",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "변경 사항을 완전히 적용하려면 이 옵션을 변경한 후, Ryujinx를 다시 시작해야 합니다. 플랫폼에 따라 Ryujinx를 사용할 때 드라이버 자체의 멀티스레딩을 수동으로 비활성화해야 할 수도 있습니다.",
|
||||
"DialogModManagerDeletionWarningMessage": "해당 Mod를 삭제하려고 합니다: {0}\n\n정말로 삭제하시겠습니까?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "해당 타이틀에 대한 모든 Mod들을 삭제하려고 합니다.\n\n정말로 삭제하시겠습니까?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "기능",
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Otwiera okno zarządzania aktualizacjami danej aplikacji",
|
||||
"GameListContextMenuManageDlc": "Zarządzaj dodatkową zawartością (DLC)",
|
||||
"GameListContextMenuManageDlcToolTip": "Otwiera okno zarządzania dodatkową zawartością",
|
||||
"GameListContextMenuManageCustomSettings": "Zarządzaj Plikiem Ustawień Niestandardowych",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Zarządzaj ustawieniami niestandardowymi dla wybranej Aplikacji",
|
||||
"GameListContextMenuCustomSettingsOpen": "Otwórz Katalog Ustawień Niestandardowych",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Otwórz katalog zawierający ustawienia niestandardowe Aplikacji",
|
||||
"GameListContextMenuCacheManagement": "Zarządzanie Cache",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "Zakolejkuj rekompilację PPTC",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Zainicjuj Rekompilację PPTC przy następnym uruchomieniu gry",
|
||||
@@ -172,11 +176,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "Skalowanie rozdzielczości:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Niestandardowa (Niezalecane)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Natywna (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (niezalecane)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Format obrazu:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -207,8 +212,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Wszystko",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Włącz dzienniki zdarzeń do debugowania",
|
||||
"SettingsTabInput": "Sterowanie",
|
||||
"SettingsTabInputEnableDockedMode": "Tryb zadokowany",
|
||||
"SettingsTabSystemEnableDockedMode": "Tryb zadokowany",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Bezpośredni dostęp do klawiatury",
|
||||
"SettingsButtonDelete": "Usuń",
|
||||
"SettingsButtonSave": "Zapisz",
|
||||
"SettingsButtonClose": "Zamknij",
|
||||
"SettingsButtonOk": "OK",
|
||||
@@ -487,9 +493,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "Usuwanie Profilu",
|
||||
"DialogProfileDeleteProfileMessage": "Ta czynność jest nieodwracalna, czy na pewno chcesz kontynuować?",
|
||||
"DialogWarning": "Uwaga",
|
||||
"DialogCustomSettingsDeleteMessage": "Zamierzasz usunąć ustawienia niestandardowe dla:\n\n{0}\n\nCzy na pewno chcesz kontynuować?",
|
||||
"DialogPPTCDeletionMessage": "Masz zamiar umieścić w kolejce rekompilację PPTC przy następnym uruchomieniu:\n\n{0}\n\nCzy na pewno chcesz kontynuować?",
|
||||
"DialogPPTCDeletionErrorMessage": "Błąd czyszczenia cache PPTC w {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "Zamierzasz usunąć wszystkie dane PPTC z:\n\n{0}\n\nCzy na pewno chcesz kontynuować?",
|
||||
"DialogShaderDeletionMessage": "Zamierzasz usunąć cache Shaderów dla :\n\n{0}\n\nNa pewno chcesz kontynuować?",
|
||||
"DialogShaderDeletionErrorMessage": "Błąd czyszczenia cache Shaderów w {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx napotkał błąd",
|
||||
@@ -528,7 +535,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Zatrzymaj emulację lub zamknij emulator przed uruchomieniem innej gry.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "Określony plik nie zawiera aktualizacji dla wybranego tytułu!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Ostrzeżenie — Wątki Backend",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Ryujinx musi zostać ponownie uruchomiony po zmianie tej opcji, aby działał w pełni. W zależności od platformy może być konieczne ręczne wyłączenie sterownika wielowątkowości podczas korzystania z Ryujinx.",
|
||||
"DialogModManagerDeletionWarningMessage": "Zamierzasz usunąć modyfikacje: {0}\n\nCzy na pewno chcesz kontynuować?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "Zamierzasz usunąć wszystkie modyfikacje dla wybranego tytułu: {0}\n\nCzy na pewno chcesz kontynuować?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Funkcje",
|
||||
|
||||
@@ -68,6 +68,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Abre a janela de gerenciamento de atualizações",
|
||||
"GameListContextMenuManageDlc": "Gerenciar DLCs",
|
||||
"GameListContextMenuManageDlcToolTip": "Abre a janela de gerenciamento de DLCs",
|
||||
"GameListContextMenuManageCustomSettings": "Gerenciar Arquivo de Configurações Personalizadas",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Gerenciar as configurações personalizadas para a Aplicação selecionada",
|
||||
"GameListContextMenuCustomSettingsOpen": "Abrir Diretório de Configurações Personalizadas",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Abrir o diretório que contém as configurações personalizadas da Aplicação",
|
||||
"GameListContextMenuCacheManagement": "Gerenciamento de cache",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "Limpar cache PPTC",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Deleta o cache PPTC armazenado em disco do jogo",
|
||||
@@ -175,11 +179,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "Escala de resolução:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Customizada (não recomendado)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Nativa (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (não recomendado)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Proporção:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -210,8 +215,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Todos",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Habilitar logs de depuração",
|
||||
"SettingsTabInput": "Controle",
|
||||
"SettingsTabInputEnableDockedMode": "Habilitar modo TV",
|
||||
"SettingsTabSystemEnableDockedMode": "Habilitar modo TV",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Acesso direto ao teclado",
|
||||
"SettingsButtonDelete": "Excluir",
|
||||
"SettingsButtonSave": "Salvar",
|
||||
"SettingsButtonClose": "Fechar",
|
||||
"SettingsButtonOk": "OK",
|
||||
@@ -490,9 +496,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "Apagando perfil",
|
||||
"DialogProfileDeleteProfileMessage": "Essa ação é irreversível, tem certeza que deseja continuar?",
|
||||
"DialogWarning": "Alerta",
|
||||
"DialogCustomSettingsDeleteMessage": "Você está prestes a excluir as configurações personalizadas para:\n\n{0}\n\nTem certeza de que deseja continuar?",
|
||||
"DialogPPTCDeletionMessage": "Você está prestes a apagar o cache PPTC para :\n\n{0}\n\nTem certeza que deseja continuar?",
|
||||
"DialogPPTCDeletionErrorMessage": "Erro apagando cache PPTC em {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "Você está prestes a excluir todos os dados PPTC de:\n\n{0}\n\nTem certeza de que deseja continuar?",
|
||||
"DialogShaderDeletionMessage": "Você está prestes a apagar o cache de Shader para :\n\n{0}\n\nTem certeza que deseja continuar?",
|
||||
"DialogShaderDeletionErrorMessage": "Erro apagando o cache de Shader em {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx encontrou um erro",
|
||||
@@ -531,7 +538,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Por favor, pare a emulação ou feche o emulador antes de abrir outro jogo.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "O arquivo especificado não contém atualizações para o título selecionado!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Alerta - Threading da API gráfica",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Ryujinx precisa ser reiniciado após mudar essa opção para que ela tenha efeito. Dependendo da sua plataforma, pode ser preciso desabilitar o multithreading do driver de vídeo quando usar o Ryujinx.",
|
||||
"DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Recursos",
|
||||
|
||||
@@ -70,6 +70,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Открывает окно управления обновлениями приложения",
|
||||
"GameListContextMenuManageDlc": "Управление DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "Открывает окно управления DLC",
|
||||
"GameListContextMenuManageCustomSettings": "Управление файлом пользовательских настроек",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Управление пользовательскими настройками для выбранного приложения",
|
||||
"GameListContextMenuCustomSettingsOpen": "Открыть каталог пользовательских настроек",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Открыть каталог, содержащий пользовательские настройки приложения",
|
||||
"GameListContextMenuCacheManagement": "Управление кэшем",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "Перестроить очередь PPTC",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Запускает перестройку PPTC во время следующего запуска игры.",
|
||||
@@ -194,11 +198,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "Масштабирование:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Пользовательское (не рекомендуется)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Нативное (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (не рекомендуется)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Соотношение сторон:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -229,8 +234,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Всё",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Включить журнал отладки",
|
||||
"SettingsTabInput": "Управление",
|
||||
"SettingsTabInputEnableDockedMode": "Стационарный режим",
|
||||
"SettingsTabSystemEnableDockedMode": "Стационарный режим",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Прямой ввод клавиатуры",
|
||||
"SettingsButtonDelete": "Удалить",
|
||||
"SettingsButtonSave": "Сохранить",
|
||||
"SettingsButtonClose": "Закрыть",
|
||||
"SettingsButtonOk": "Ок",
|
||||
@@ -514,9 +520,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "Удаление профиля",
|
||||
"DialogProfileDeleteProfileMessage": "Это действие необратимо. Вы уверены, что хотите продолжить?",
|
||||
"DialogWarning": "Внимание",
|
||||
"DialogCustomSettingsDeleteMessage": "Вы собираетесь удалить пользовательские настройки для:\n\n{0}\n\nВы уверены, что хотите продолжить?",
|
||||
"DialogPPTCDeletionMessage": "Вы собираетесь перестроить кэш PPTC при следующем запуске для:\n\n{0}\n\nВы уверены, что хотите продолжить?",
|
||||
"DialogPPTCDeletionErrorMessage": "Ошибка очистки кэша PPTC в {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "Вы собираетесь удалить все данные PPTC из:\n\n{0}\n\nВы уверены, что хотите продолжить?",
|
||||
"DialogShaderDeletionMessage": "Вы собираетесь удалить кэш шейдеров для:\n\n{0}\n\nВы уверены, что хотите продолжить?",
|
||||
"DialogShaderDeletionErrorMessage": "Ошибка очистки кэша шейдеров в {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx обнаружил ошибку",
|
||||
@@ -555,7 +562,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Пожалуйста, остановите эмуляцию или закройте эмулятор перед запуском другой игры.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "Указанный файл не содержит обновлений для выбранного приложения",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Предупреждение: многопоточность в бэкенде",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Для применения этой настройки необходимо перезапустить Ryujinx. В зависимости от используемой вами операционной системы вам может потребоваться вручную отключить многопоточность драйвера при использовании Ryujinx.",
|
||||
"DialogModManagerDeletionWarningMessage": "Вы сейчас удалите мод: {0}\n\nВы уверены, что хотите продолжить?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "Вы сейчас удалите все выбранные моды для этой игры.\n\nВы уверены, что хотите продолжить?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Функции & Улучшения",
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "เปิดหน้าต่างการจัดการการอัพเดตหัวข้อ",
|
||||
"GameListContextMenuManageDlc": "จัดการ DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "เปิดหน้าต่างจัดการ DLC",
|
||||
"GameListContextMenuManageCustomSettings": "จัดการไฟล์การตั้งค่าที่กำหนดเอง",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "จัดการการตั้งค่าที่กำหนดเองสำหรับแอปพลิเคชันที่เลือก",
|
||||
"GameListContextMenuCustomSettingsOpen": "เปิดไดเรกทอรีการตั้งค่าที่กำหนดเอง",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "เปิดไดเรกทอรีที่มีการตั้งค่าที่กำหนดเองของแอปพลิเคชัน",
|
||||
"GameListContextMenuCacheManagement": "จัดการ แคช",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "เพิ่มเข้าคิวงาน PPTC ที่สร้างใหม่",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "ทริกเกอร์ PPTC ให้สร้างใหม่ในเวลาบูตเมื่อเปิดตัวเกมครั้งถัดไป",
|
||||
@@ -172,11 +176,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "อัตราส่วนความละเอียด:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "กำหนดเอง (ไม่แนะนำ)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "พื้นฐานของระบบ (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (ไม่แนะนำ)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "อัตราส่วนภาพ:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -207,8 +212,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "ทั้งหมด",
|
||||
"SettingsTabLoggingEnableDebugLogs": "เปิดใช้งาน ประวัติแก้ไขข้อบกพร่อง",
|
||||
"SettingsTabInput": "ป้อนข้อมูล",
|
||||
"SettingsTabInputEnableDockedMode": "ด็อกโหมด",
|
||||
"SettingsTabSystemEnableDockedMode": "ด็อกโหมด",
|
||||
"SettingsTabInputDirectKeyboardAccess": "เข้าถึงคีย์บอร์ดโดยตรง",
|
||||
"SettingsButtonDelete": "ลบ",
|
||||
"SettingsButtonSave": "บันทึก",
|
||||
"SettingsButtonClose": "ปิด",
|
||||
"SettingsButtonOk": "ตกลง",
|
||||
@@ -487,9 +493,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "กำลังลบโปรไฟล์",
|
||||
"DialogProfileDeleteProfileMessage": "การดำเนินการนี้ไม่สามารถย้อนกลับได้ คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?",
|
||||
"DialogWarning": "คำเตือน",
|
||||
"DialogCustomSettingsDeleteMessage": "คุณกำลังจะลบการตั้งค่าที่กำหนดเองสำหรับ:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?",
|
||||
"DialogPPTCDeletionMessage": "คุณกำลังจะจัดคิวการสร้าง PPTC ใหม่ในการบูตครั้งถัดไป:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?",
|
||||
"DialogPPTCDeletionErrorMessage": "มีข้อผิดพลาดในการล้างแคช PPTC {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "คุณกำลังจะลบข้อมูล PPTC ทั้งหมดจาก:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?",
|
||||
"DialogShaderDeletionMessage": "คุณกำลังจะลบ เชเดอร์แคช:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?",
|
||||
"DialogShaderDeletionErrorMessage": "เกิดข้อผิดพลาดในการล้าง เชเดอร์แคช {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "รียูจินซ์ พบข้อผิดพลาด",
|
||||
@@ -528,7 +535,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "โปรดหยุดการจำลอง หรือปิดโปรแกรมจำลองก่อนที่จะเปิดเกมอื่น",
|
||||
"DialogUpdateAddUpdateErrorMessage": "ไฟล์ที่ระบุไม่มีการอัพเดตสำหรับชื่อเรื่องที่เลือก!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "คำเตือน - การทำเธรดแบ็กเอนด์",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "รียูจินซ์ ต้องรีสตาร์ทหลังจากเปลี่ยนตัวเลือกนี้จึงจะใช้งานได้อย่างสมบูรณ์ คุณอาจต้องปิดการใช้งาน มัลติเธรด ของไดรเวอร์ของคุณด้วยตนเองเมื่อใช้ รียูจินซ์ ทั้งนี้ขึ้นอยู่กับแพลตฟอร์มของคุณ",
|
||||
"DialogModManagerDeletionWarningMessage": "คุณกำลังจะลบ ม็อด: {0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "คุณกำลังจะลบม็อดทั้งหมดสำหรับชื่อนี้\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "คุณสมบัติ",
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Oyun Güncelleme Yönetim Penceresini Açar",
|
||||
"GameListContextMenuManageDlc": "DLC'leri Yönet",
|
||||
"GameListContextMenuManageDlcToolTip": "DLC yönetim penceresini açar",
|
||||
"GameListContextMenuManageCustomSettings": "Özel Ayarlar Dosyasını Yönet",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Seçilen Uygulama için özel ayarları yönetin",
|
||||
"GameListContextMenuCustomSettingsOpen": "Özel Ayarlar Dizinini Aç",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Uygulamanın özel ayarlarını içeren dizini açın",
|
||||
"GameListContextMenuCacheManagement": "Önbellek Yönetimi",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "PPTC Yeniden Yapılandırmasını Başlat",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Oyunun bir sonraki açılışında PPTC'yi yeniden yapılandır",
|
||||
@@ -172,11 +176,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "Çözünürlük Ölçeği:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Özel (Tavsiye Edilmez)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Yerel (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Tavsiye Edilmez)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "En-Boy Oranı:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -207,8 +212,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Hepsi",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Hata Ayıklama Loglarını Etkinleştir",
|
||||
"SettingsTabInput": "Giriş Yöntemi",
|
||||
"SettingsTabInputEnableDockedMode": "Docked Modu Etkinleştir",
|
||||
"SettingsTabSystemEnableDockedMode": "Docked Modu Etkinleştir",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Doğrudan Klavye Erişimi",
|
||||
"SettingsButtonDelete": "Sil",
|
||||
"SettingsButtonSave": "Kaydet",
|
||||
"SettingsButtonClose": "Kapat",
|
||||
"SettingsButtonOk": "Tamam",
|
||||
@@ -487,9 +493,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "Profil Siliniyor",
|
||||
"DialogProfileDeleteProfileMessage": "Bu eylem geri döndürülemez, devam etmek istediğinizden emin misiniz?",
|
||||
"DialogWarning": "Uyarı",
|
||||
"DialogCustomSettingsDeleteMessage": "Şunun için özel ayarları silmek üzeresiniz:\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?",
|
||||
"DialogPPTCDeletionMessage": "Belirtilen PPTC cache silinecek :\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?",
|
||||
"DialogPPTCDeletionErrorMessage": "Belirtilen PPTC cache temizlenirken hata {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "Şuradan tüm PPTC verilerini silmek üzeresiniz:\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?",
|
||||
"DialogShaderDeletionMessage": "Belirtilen Shader cache silinecek :\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?",
|
||||
"DialogShaderDeletionErrorMessage": "Belirtilen Shader cache temizlenirken hata {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx bir hata ile karşılaştı",
|
||||
@@ -528,7 +535,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Lütfen yeni bir oyun açmadan önce emülasyonu durdurun veya emülatörü kapatın.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "Belirtilen dosya seçilen oyun için güncelleme içermiyor!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Uyarı - Backend Threading",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Bu seçeneğin tamamen uygulanması için Ryujinx'in kapatıp açılması gerekir. Kullandığınız işletim sistemine bağlı olarak, Ryujinx'in multithreading'ini kullanırken driver'ınızın multithreading seçeneğini kapatmanız gerekebilir.",
|
||||
"DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Özellikler",
|
||||
|
||||
@@ -68,6 +68,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "Відкриває вікно керування оновленням заголовка",
|
||||
"GameListContextMenuManageDlc": "Керування DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "Відкриває вікно керування DLC",
|
||||
"GameListContextMenuManageCustomSettings": "Керувати файлом користувацьких налаштувань",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "Керувати користувацькими налаштуваннями для вибраного застосунку",
|
||||
"GameListContextMenuCustomSettingsOpen": "Відкрити каталог користувацьких налаштувань",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "Відкрити каталог, що містить користувацькі налаштування застосунку",
|
||||
"GameListContextMenuCacheManagement": "Керування кешем",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "Очистити кеш PPTC",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "Видаляє кеш PPTC програми",
|
||||
@@ -175,11 +179,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "Роздільна здатність:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "Користувацька (не рекомендовано)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "Стандартний (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Не рекомендується)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "Співвідношення сторін:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -210,8 +215,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "Все",
|
||||
"SettingsTabLoggingEnableDebugLogs": "Увімкнути журнали налагодження",
|
||||
"SettingsTabInput": "Введення",
|
||||
"SettingsTabInputEnableDockedMode": "Режим док-станції",
|
||||
"SettingsTabSystemEnableDockedMode": "Режим док-станції",
|
||||
"SettingsTabInputDirectKeyboardAccess": "Прямий доступ з клавіатури",
|
||||
"SettingsButtonDelete": "Видалити",
|
||||
"SettingsButtonSave": "Зберегти",
|
||||
"SettingsButtonClose": "Закрити",
|
||||
"SettingsButtonOk": "Гаразд",
|
||||
@@ -490,9 +496,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "Видалення профілю",
|
||||
"DialogProfileDeleteProfileMessage": "Цю дію неможливо скасувати. Ви впевнені, що бажаєте продовжити?",
|
||||
"DialogWarning": "Увага",
|
||||
"DialogCustomSettingsDeleteMessage": "Ви збираєтеся видалити користувацькі налаштування для:\n\n{0}\n\nВи впевнені, що хочете продовжити?",
|
||||
"DialogPPTCDeletionMessage": "Ви збираєтеся видалити кеш PPTC для:\n\n{0}\n\nВи впевнені, що бажаєте продовжити?",
|
||||
"DialogPPTCDeletionErrorMessage": "Помилка очищення кешу PPTC на {0}: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "Ви збираєтеся видалити всі дані PPTC з:\n\n{0}\n\nВи впевнені, що хочете продовжити?",
|
||||
"DialogShaderDeletionMessage": "Ви збираєтеся видалити кеш шейдерів для:\n\n{0}\n\nВи впевнені, що бажаєте продовжити?",
|
||||
"DialogShaderDeletionErrorMessage": "Помилка очищення кешу шейдерів на {0}: {1}",
|
||||
"DialogRyujinxErrorMessage": "У Ryujinx сталася помилка",
|
||||
@@ -531,7 +538,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "Зупиніть емуляцію або закрийте емулятор перед запуском іншої гри.",
|
||||
"DialogUpdateAddUpdateErrorMessage": "Зазначений файл не містить оновлення для вибраного заголовка!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "Попередження - потокове керування сервером",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "Ryujinx потрібно перезапустити після зміни цього параметра, щоб він застосовувався повністю. Залежно від вашої платформи вам може знадобитися вручну вимкнути власну багатопотоковість драйвера під час використання Ryujinx.",
|
||||
"DialogModManagerDeletionWarningMessage": "Ви збираєтесь видалити модифікацію: {0}\n\nВи дійсно бажаєте продовжити?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "Ви збираєтесь видалити всі модифікації для цього Додатка.\n\nВи дійсно бажаєте продовжити?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "Особливості",
|
||||
|
||||
@@ -68,6 +68,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "打开游戏更新管理窗口",
|
||||
"GameListContextMenuManageDlc": "管理 DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "打开 DLC 管理窗口",
|
||||
"GameListContextMenuManageCustomSettings": "管理自定义设置文件",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "管理所选应用程序的自定义设置",
|
||||
"GameListContextMenuCustomSettingsOpen": "打开自定义设置目录",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "打开包含应用程序自定义设置的目录",
|
||||
"GameListContextMenuCacheManagement": "缓存管理",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "清除 PPTC 缓存文件",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "删除游戏的 PPTC 缓存文件,下次启动游戏时重新编译生成 PPTC 缓存文件",
|
||||
@@ -175,11 +179,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8x",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16x",
|
||||
"SettingsTabGraphicsResolutionScale": "分辨率缩放:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "自定义(不推荐)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "原生 (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2 倍 (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3 倍 (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4 倍 (2880p/4320p) (不推荐)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "宽高比:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -210,8 +215,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "全部",
|
||||
"SettingsTabLoggingEnableDebugLogs": "启用调试日志",
|
||||
"SettingsTabInput": "输入",
|
||||
"SettingsTabInputEnableDockedMode": "主机模式",
|
||||
"SettingsTabSystemEnableDockedMode": "主机模式",
|
||||
"SettingsTabInputDirectKeyboardAccess": "直通键盘控制",
|
||||
"SettingsButtonDelete": "删除",
|
||||
"SettingsButtonSave": "保存",
|
||||
"SettingsButtonClose": "关闭",
|
||||
"SettingsButtonOk": "确定",
|
||||
@@ -490,9 +496,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "删除配置文件",
|
||||
"DialogProfileDeleteProfileMessage": "删除后不可恢复,确认删除吗?",
|
||||
"DialogWarning": "警告",
|
||||
"DialogCustomSettingsDeleteMessage": "您即将删除以下项目的自定义设置:\n\n{0}\n\n您确定要继续吗?",
|
||||
"DialogPPTCDeletionMessage": "您即将删除:\n\n{0} 的 PPTC 缓存文件\n\n确定吗?",
|
||||
"DialogPPTCDeletionErrorMessage": "清除 {0} 的 PPTC 缓存文件时出错:{1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "您即将清除以下项目的所有 PPTC 数据:\n\n{0}\n\n您确定要继续吗?",
|
||||
"DialogShaderDeletionMessage": "您即将删除:\n\n{0} 的着色器缓存文件\n\n确定吗?",
|
||||
"DialogShaderDeletionErrorMessage": "清除 {0} 的着色器缓存文件时出错:{1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx 模拟器发生错误",
|
||||
@@ -531,7 +538,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "请停止模拟或关闭模拟器,再启动另一个游戏。",
|
||||
"DialogUpdateAddUpdateErrorMessage": "选择的文件不是当前游戏的更新!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "警告 - 图形引擎多线程",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "更改此选项后,必须重启 Ryujinx 模拟器才能生效。\n\n当启用图形引擎多线程时,根据显卡不同,您可能需要手动禁用显卡驱动程序自身的多线程(线程优化)。",
|
||||
"DialogModManagerDeletionWarningMessage": "您即将删除 MOD:{0} \n\n确定吗?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "您即将删除该游戏的所有 MOD,\n\n确定吗?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "功能",
|
||||
|
||||
@@ -68,6 +68,10 @@
|
||||
"GameListContextMenuManageTitleUpdatesToolTip": "開啟遊戲更新管理視窗",
|
||||
"GameListContextMenuManageDlc": "管理 DLC",
|
||||
"GameListContextMenuManageDlcToolTip": "開啟 DLC 管理視窗",
|
||||
"GameListContextMenuManageCustomSettings": "管理自訂設定檔案",
|
||||
"GameListContextMenuManageCustomSettingsToolTip": "管理所選應用程式的自訂設定",
|
||||
"GameListContextMenuCustomSettingsOpen": "開啟自訂設定目錄",
|
||||
"GameListContextMenuCustomSettingsOpenToolTip": "開啟包含應用程式自訂設定的目錄",
|
||||
"GameListContextMenuCacheManagement": "快取管理",
|
||||
"GameListContextMenuCacheManagementPurgePptc": "佇列 PPTC 重建",
|
||||
"GameListContextMenuCacheManagementPurgePptcToolTip": "下一次啟動遊戲時,觸發 PPTC 進行重建",
|
||||
@@ -175,11 +179,12 @@
|
||||
"SettingsTabGraphicsAnisotropicFiltering8x": "8 倍",
|
||||
"SettingsTabGraphicsAnisotropicFiltering16x": "16 倍",
|
||||
"SettingsTabGraphicsResolutionScale": "解析度比例:",
|
||||
"SettingsTabGraphicsResolutionScaleCustom": "自訂 (不建議使用)",
|
||||
"SettingsTabGraphicsResolutionScaleNative": "原生 (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale2x": "2 倍 (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale3x": "3 倍 (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale4x": "4 倍 (2880p/4320p) (不建議使用)",
|
||||
"SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)",
|
||||
"SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)",
|
||||
"SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)",
|
||||
"SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)",
|
||||
"SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)",
|
||||
"SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)",
|
||||
"SettingsTabGraphicsAspectRatio": "顯示長寬比例:",
|
||||
"SettingsTabGraphicsAspectRatio4x3": "4:3",
|
||||
"SettingsTabGraphicsAspectRatio16x9": "16:9",
|
||||
@@ -210,8 +215,9 @@
|
||||
"SettingsTabLoggingGraphicsBackendLogLevelAll": "全部",
|
||||
"SettingsTabLoggingEnableDebugLogs": "啟用偵錯日誌",
|
||||
"SettingsTabInput": "輸入",
|
||||
"SettingsTabInputEnableDockedMode": "底座模式",
|
||||
"SettingsTabSystemEnableDockedMode": "底座模式",
|
||||
"SettingsTabInputDirectKeyboardAccess": "鍵盤直接存取",
|
||||
"SettingsButtonDelete": "刪除",
|
||||
"SettingsButtonSave": "儲存",
|
||||
"SettingsButtonClose": "關閉",
|
||||
"SettingsButtonOk": "確定",
|
||||
@@ -490,9 +496,10 @@
|
||||
"DialogProfileDeleteProfileTitle": "刪除設定檔",
|
||||
"DialogProfileDeleteProfileMessage": "此動作不可復原,您確定要繼續嗎?",
|
||||
"DialogWarning": "警告",
|
||||
"DialogCustomSettingsDeleteMessage": "您即將刪除以下項目的自訂設定:\n\n{0}\n\n您確定要繼續嗎?",
|
||||
"DialogPPTCDeletionMessage": "您將在下一次啟動時佇列重建以下遊戲的 PPTC:\n\n{0}\n\n您確定要繼續嗎?",
|
||||
"DialogPPTCDeletionErrorMessage": "在 {0} 清除 PPTC 快取時出錯: {1}",
|
||||
"DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?",
|
||||
"DialogPPTCNukeMessage": "您即將清除以下項目的所有 PPTC 資料:\n\n{0}\n\n您確定要繼續嗎?",
|
||||
"DialogShaderDeletionMessage": "您將刪除以下遊戲的著色器快取:\n\n{0}\n\n您確定要繼續嗎?",
|
||||
"DialogShaderDeletionErrorMessage": "在 {0} 清除著色器快取時出錯: {1}",
|
||||
"DialogRyujinxErrorMessage": "Ryujinx 遇到錯誤",
|
||||
@@ -531,7 +538,6 @@
|
||||
"DialogLoadAppGameAlreadyLoadedSubMessage": "請停止模擬或關閉模擬器,然後再啟動另一款遊戲。",
|
||||
"DialogUpdateAddUpdateErrorMessage": "指定檔案不包含所選遊戲的更新!",
|
||||
"DialogSettingsBackendThreadingWarningTitle": "警告 - 後端執行緒處理中",
|
||||
"DialogSettingsBackendThreadingWarningMessage": "變更此選項後,必須重新啟動 Ryujinx 才能完全生效。使用 Ryujinx 的多執行緒功能時,可能需要手動停用驅動程式本身的多執行緒功能,這取決於您的平台。",
|
||||
"DialogModManagerDeletionWarningMessage": "您將刪除模組: {0}\n\n您確定要繼續嗎?",
|
||||
"DialogModManagerDeletionAllWarningMessage": "您即將刪除此遊戲的所有模組。\n\n您確定要繼續嗎?",
|
||||
"SettingsTabGraphicsFeaturesOptions": "功能",
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace Ryujinx.Headless
|
||||
HideCursorMode = configurationState.HideCursor;
|
||||
|
||||
if (NeedsOverride(nameof(DisablePTC)))
|
||||
DisablePTC = !configurationState.System.EnablePtc;
|
||||
DisablePTC = !configurationState.System.EnablePptc;
|
||||
|
||||
if (NeedsOverride(nameof(EnableInternetAccess)))
|
||||
EnableInternetAccess = configurationState.System.EnableInternetAccess;
|
||||
|
||||
+13
-13
@@ -11,8 +11,6 @@
|
||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
|
||||
<IncludeSourceRevisionInInformationalVersion Condition="'$(Configuration)'=='Release'">false</IncludeSourceRevisionInInformationalVersion>
|
||||
<Configurations>Debug;Release;Debug AOT;Release AOT</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="RemoveNativePackagePdbs" AfterTargets="ResolvePackageAssets">
|
||||
@@ -170,16 +168,18 @@
|
||||
<ItemGroup>
|
||||
<TrimmerRootDescriptor Include="TrimmerRootDescriptor.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="$(Configuration.EndsWith('AOT'))">
|
||||
<RdXmlFile Include="rd.xml" />
|
||||
<ItemGroup>
|
||||
<Compile Update="UI\Views\Settings\CustomSettingsSystemView.axaml.cs">
|
||||
<DependentUpon>CustomSettingsSystemView.axaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="UI\Views\Settings\CustomSettingsGraphicsView.axaml.cs">
|
||||
<DependentUpon>CustomSettingsGraphicsView.axaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="UI\Windows\CustomSettingsWindow.axaml.cs">
|
||||
<DependentUpon>CustomSettingsWindow.axaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="UI\Views\Settings\CustomSettingsAudioView.axaml.cs">
|
||||
<DependentUpon>CustomSettingsAudioView.axaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition="$(Configuration.EndsWith('AOT'))">
|
||||
<PublishAot>true</PublishAot>
|
||||
<IsAotCompatible>true</IsAotCompatible>
|
||||
<TrimmerSingleWarn>false</TrimmerSingleWarn>
|
||||
<InvariantGlobalization>false</InvariantGlobalization>
|
||||
<OptimizationPreference>Speed</OptimizationPreference>
|
||||
<PublishSingleFile>false</PublishSingleFile>
|
||||
<TrimMode>full</TrimMode>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
||||
@@ -42,6 +42,10 @@
|
||||
Click="OpenDownloadableContentManager_Click"
|
||||
Header="{locale:Locale GameListContextMenuManageDlc}"
|
||||
ToolTip.Tip="{locale:Locale GameListContextMenuManageDlcToolTip}" />
|
||||
<MenuItem
|
||||
Click="OpenCustomSettingsManager_Click"
|
||||
Header="{locale:Locale GameListContextMenuManageCustomSettings}"
|
||||
ToolTip.Tip="{locale:Locale GameListContextMenuManageCustomSettingsToolTip}" />
|
||||
<MenuItem
|
||||
Click="OpenCheatManager_Click"
|
||||
Header="{locale:Locale GameListContextMenuManageCheat}"
|
||||
@@ -51,6 +55,10 @@
|
||||
Header="{locale:Locale GameListContextMenuManageMod}"
|
||||
ToolTip.Tip="{locale:Locale GameListContextMenuManageModToolTip}" />
|
||||
<Separator />
|
||||
<MenuItem
|
||||
Click="OpenCustomSettings_Click"
|
||||
Header="{locale:Locale GameListContextMenuCustomSettingsOpen}"
|
||||
ToolTip.Tip="{locale:Locale GameListContextMenuCustomSettingsOpenToolTip}" />
|
||||
<MenuItem
|
||||
Click="OpenModsDirectory_Click"
|
||||
Header="{locale:Locale GameListContextMenuOpenModsDirectory}"
|
||||
|
||||
@@ -103,6 +103,23 @@ namespace Ryujinx.Ava.UI.Controls
|
||||
}
|
||||
}
|
||||
|
||||
public async void OpenCustomSettingsManager_Click(object sender, RoutedEventArgs args)
|
||||
{
|
||||
var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel;
|
||||
|
||||
if (viewModel?.SelectedApplication != null)
|
||||
{
|
||||
await new CustomSettingsWindow(
|
||||
viewModel.VirtualFileSystem,
|
||||
viewModel.SelectedApplication.IdString,
|
||||
viewModel.SelectedApplication.Name,
|
||||
viewModel.SelectedApplication.Icon,
|
||||
viewModel.SelectedApplication.Path).ShowDialog(viewModel.TopLevel as Window);
|
||||
|
||||
viewModel.RefreshView();
|
||||
}
|
||||
}
|
||||
|
||||
public async void OpenCheatManager_Click(object sender, RoutedEventArgs args)
|
||||
{
|
||||
MainWindowViewModel viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel;
|
||||
@@ -157,6 +174,54 @@ namespace Ryujinx.Ava.UI.Controls
|
||||
}
|
||||
}
|
||||
|
||||
public async void ManageCustomSettings_Click(object sender, RoutedEventArgs args)
|
||||
{
|
||||
var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel;
|
||||
|
||||
if (viewModel?.SelectedApplication != null)
|
||||
{
|
||||
await new CustomSettingsWindow(
|
||||
viewModel.VirtualFileSystem,
|
||||
viewModel.SelectedApplication.IdString,
|
||||
viewModel.SelectedApplication.Name,
|
||||
viewModel.SelectedApplication.Icon,
|
||||
viewModel.SelectedApplication.Path).ShowDialog(viewModel.TopLevel as Window);
|
||||
}
|
||||
}
|
||||
|
||||
public async void DeleteCustomSettings_Click(object sender, RoutedEventArgs args)
|
||||
{
|
||||
if (sender is not MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel })
|
||||
return;
|
||||
|
||||
UserResult result = await ContentDialogHelper.CreateLocalizedConfirmationDialog(
|
||||
LocaleManager.Instance[LocaleKeys.DialogWarning],
|
||||
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogCustomSettingsDeleteMessage, viewModel.SelectedApplication.Name)
|
||||
);
|
||||
|
||||
if (result == UserResult.Yes)
|
||||
{
|
||||
CustomSettingsHelper.DeleteCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(viewModel.SelectedApplication.Id));
|
||||
}
|
||||
}
|
||||
|
||||
public void OpenCustomSettings_Click(object sender, RoutedEventArgs args)
|
||||
{
|
||||
var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel;
|
||||
|
||||
if (viewModel?.SelectedApplication != null)
|
||||
{
|
||||
string customConfigDir = Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString);
|
||||
|
||||
if (!Directory.Exists(customConfigDir))
|
||||
{
|
||||
Directory.CreateDirectory(customConfigDir);
|
||||
}
|
||||
|
||||
OpenHelper.OpenFolder(customConfigDir);
|
||||
}
|
||||
}
|
||||
|
||||
public async void PurgePtcCache_Click(object sender, RoutedEventArgs args)
|
||||
{
|
||||
MainWindowViewModel viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel;
|
||||
|
||||
@@ -0,0 +1,359 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Media.Imaging;
|
||||
using Avalonia.Threading;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Ryujinx.Audio.Backends.OpenAL;
|
||||
using Ryujinx.Audio.Backends.SDL3;
|
||||
using Ryujinx.Audio.Backends.SoundIo;
|
||||
using Ryujinx.Ava.Common.Locale;
|
||||
using Ryujinx.Ava.UI.Helpers;
|
||||
using Ryujinx.Graphics.Vulkan;
|
||||
using Ryujinx.UI.Common.Configuration;
|
||||
using Ryujinx.UI.Common.Helper;
|
||||
using Ryujinx.UI.Common.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
public partial class CustomSettingsViewModel : BaseModel
|
||||
{
|
||||
[ObservableProperty]
|
||||
private bool _isVulkanAvailable = true;
|
||||
private readonly List<string> _gpuIds = [];
|
||||
|
||||
private int ComputePreferredGpuIndex(string PreferredGpu)
|
||||
{
|
||||
return _gpuIds.Contains(PreferredGpu) ? _gpuIds.IndexOf(PreferredGpu) : 0;
|
||||
}
|
||||
|
||||
private string ComputePreferredGpu(int PreferredGpuIndex)
|
||||
{
|
||||
return _gpuIds.ElementAtOrDefault(PreferredGpuIndex);
|
||||
}
|
||||
|
||||
private int ComputeResScaleIndex(float ResScale)
|
||||
{
|
||||
if (ResScale <= 0.5f)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if (ResScale <= 0.75f)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (int)Math.Ceiling(ResScale) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
private float ComputeResScale(int ResScaleIndex)
|
||||
{
|
||||
switch (ResScaleIndex)
|
||||
{
|
||||
case 0:
|
||||
return 0.5f;
|
||||
case 1:
|
||||
return 0.75f;
|
||||
case 2:
|
||||
return 1.0f;
|
||||
case 3:
|
||||
return 2.0f;
|
||||
case 4:
|
||||
return 3.0f;
|
||||
case 5:
|
||||
return 4.0f;
|
||||
default:
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
private int ComputeMaxAnisotropyIndex(float MaxAnisotropy)
|
||||
{
|
||||
return MaxAnisotropy == -1.0f ? 0 : (int)(MathF.Log2(MaxAnisotropy));
|
||||
}
|
||||
|
||||
private float ComputeMaxAnisotropy(int MaxAnisotropyIndex)
|
||||
{
|
||||
switch (MaxAnisotropyIndex)
|
||||
{
|
||||
case 0:
|
||||
return -1.0f;
|
||||
case 1:
|
||||
return 2.0f;
|
||||
case 2:
|
||||
return 4.0f;
|
||||
case 3:
|
||||
return 8.0f;
|
||||
case 4:
|
||||
return 16.0f;
|
||||
default:
|
||||
return 2.0f;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsMacOS => OperatingSystem.IsMacOS();
|
||||
public bool IsOpenGLAvailable => !OperatingSystem.IsMacOS();
|
||||
public bool IsHypervisorAvailable => OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64;
|
||||
public ulong ApplicationIdBase { get; set; }
|
||||
public string ApplicationName { get; set; }
|
||||
public Bitmap GameIcon { get; set; }
|
||||
public ObservableCollection<ComboBoxItem> AvailableGpus { get; set; }
|
||||
public CustomSettingsModel CustomSettingsModel { get; set; }
|
||||
public event Action CloseWindow;
|
||||
|
||||
// System settings
|
||||
public bool EnableDockedMode { get; set; }
|
||||
public int SystemLanguage { get; set; }
|
||||
public int SystemRegion { get; set; }
|
||||
public int DramSize { get; set; }
|
||||
public bool EnableFsIntegrityChecks { get; set; }
|
||||
public bool IgnoreMissingServices { get; set; }
|
||||
|
||||
// CPU settings
|
||||
public bool EnablePptc { get; set; }
|
||||
public bool EnableLowPowerPptc { get; set; }
|
||||
public int MemoryManagerMode { get; set; }
|
||||
public bool UseHypervisor { get; set; }
|
||||
public long TurboMultiplier
|
||||
{
|
||||
get;
|
||||
set
|
||||
{
|
||||
if (field != value)
|
||||
{
|
||||
field = value;
|
||||
|
||||
OnPropertyChanged();
|
||||
OnPropertyChanged((nameof(TurboMultiplierPercentageText)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string TurboMultiplierPercentageText => $"{TurboMultiplier}%";
|
||||
|
||||
// Graphics settings
|
||||
public int VSyncMode { get; set; }
|
||||
public int GraphicsBackend { get; set; }
|
||||
public int PreferredGpuIndex { get; set; }
|
||||
public bool EnableShaderCache { get; set; }
|
||||
public bool EnableTextureRecompression { get; set; }
|
||||
public bool EnableMacroHLE { get; set; }
|
||||
public bool EnableColorSpacePassthrough { get; set; }
|
||||
public bool ColorSpacePassthroughAvailable => IsMacOS;
|
||||
public int ResScaleIndex { get; set; }
|
||||
public int MaxAnisotropyIndex { get; set; }
|
||||
public int BackendThreading { get; set; }
|
||||
|
||||
// Audio settings
|
||||
public bool IsOpenAlEnabled { get; set; }
|
||||
public bool IsSoundIoEnabled { get; set; }
|
||||
public bool IsSDL3Enabled { get; set; }
|
||||
public AudioBackend AudioBackend { get; set; }
|
||||
|
||||
public float Volume
|
||||
{
|
||||
get;
|
||||
set
|
||||
{
|
||||
field = value;
|
||||
|
||||
ConfigurationState.Instance.System.AudioVolume.Value = field / 100;
|
||||
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public CustomSettingsViewModel(string titleId, byte[] icon, string titleName)
|
||||
{
|
||||
AvailableGpus = [];
|
||||
ApplicationIdBase = ulong.Parse(titleId, NumberStyles.HexNumber);
|
||||
CustomSettingsModel = CustomSettingsHelper.LoadCustomSettingsJson(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase));
|
||||
|
||||
Task.Run(CheckSoundBackends);
|
||||
|
||||
if (icon is { Length: > 0 })
|
||||
{
|
||||
using MemoryStream ms = new(icon);
|
||||
GameIcon = new Bitmap(ms);
|
||||
}
|
||||
|
||||
if (Program.PreviewerDetached)
|
||||
{
|
||||
Task.Run(LoadAvailableGpus);
|
||||
LoadCurrentConfiguration();
|
||||
}
|
||||
}
|
||||
|
||||
public async Task CheckSoundBackends()
|
||||
{
|
||||
IsOpenAlEnabled = OpenALHardwareDeviceDriver.IsSupported;
|
||||
IsSoundIoEnabled = SoundIoHardwareDeviceDriver.IsSupported;
|
||||
IsSDL3Enabled = SDL3HardwareDeviceDriver.IsSupported;
|
||||
|
||||
await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
OnPropertyChanged(nameof(IsOpenAlEnabled));
|
||||
OnPropertyChanged(nameof(IsSoundIoEnabled));
|
||||
OnPropertyChanged(nameof(IsSDL3Enabled));
|
||||
});
|
||||
}
|
||||
|
||||
private async Task LoadAvailableGpus()
|
||||
{
|
||||
AvailableGpus.Clear();
|
||||
|
||||
var devices = VulkanRenderer.GetPhysicalDevices();
|
||||
|
||||
if (devices.Length == 0)
|
||||
{
|
||||
IsVulkanAvailable = false;
|
||||
GraphicsBackend = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var device in devices)
|
||||
{
|
||||
await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
_gpuIds.Add(device.Id);
|
||||
|
||||
AvailableGpus.Add(new ComboBoxItem { Content = $"{device.Name} {(device.IsDiscrete ? "(dGPU)" : "")}" });
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// GPU configuration needs to be loaded during the async method or it will always return 0.
|
||||
PreferredGpuIndex = ComputePreferredGpuIndex(ConfigurationState.Instance.Graphics.PreferredGpu.Value);
|
||||
|
||||
Dispatcher.UIThread.Post(() => OnPropertyChanged(nameof(PreferredGpuIndex)));
|
||||
}
|
||||
public void LoadCurrentConfiguration()
|
||||
{
|
||||
ConfigurationState config = ConfigurationState.Instance;
|
||||
|
||||
if (!CustomSettingsHelper.HasCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase)))
|
||||
{
|
||||
// Load all settings from global configuration
|
||||
EnableDockedMode = config.System.EnableDockedMode.Value;
|
||||
SystemLanguage = (int)config.System.Language.Value;
|
||||
SystemRegion = (int)config.System.Region.Value;
|
||||
VSyncMode = (int)config.Graphics.VSyncMode.Value;
|
||||
DramSize = (int)config.System.DramSize.Value;
|
||||
EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks.Value;
|
||||
IgnoreMissingServices = config.System.IgnoreMissingServices.Value;
|
||||
EnablePptc = config.System.EnablePptc.Value;
|
||||
EnableLowPowerPptc = config.System.EnableLowPowerPptc.Value;
|
||||
MemoryManagerMode = (int)config.System.MemoryManagerMode.Value;
|
||||
UseHypervisor = config.System.UseHypervisor.Value;
|
||||
TurboMultiplier = config.System.TickScalar.Value;
|
||||
GraphicsBackend = (int)config.Graphics.GraphicsBackend.Value;
|
||||
PreferredGpuIndex = ComputePreferredGpuIndex(config.Graphics.PreferredGpu.Value);
|
||||
EnableShaderCache = config.Graphics.EnableShaderCache.Value;
|
||||
EnableTextureRecompression = config.Graphics.EnableTextureRecompression.Value;
|
||||
EnableMacroHLE = config.Graphics.EnableMacroHLE.Value;
|
||||
EnableColorSpacePassthrough = config.Graphics.EnableColorSpacePassthrough.Value;
|
||||
ResScaleIndex = ComputeResScaleIndex(config.Graphics.ResScale);
|
||||
MaxAnisotropyIndex = ComputeMaxAnisotropyIndex(config.Graphics.MaxAnisotropy);
|
||||
BackendThreading = (int)config.Graphics.BackendThreading.Value;
|
||||
AudioBackend = config.System.AudioBackend.Value;
|
||||
Volume = config.System.AudioVolume * 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Load all settings from custom configuration
|
||||
EnableDockedMode = CustomSettingsModel.EnableDockedMode;
|
||||
SystemLanguage = CustomSettingsModel.SystemLanguage;
|
||||
SystemRegion = CustomSettingsModel.SystemRegion;
|
||||
VSyncMode = CustomSettingsModel.VSyncMode;
|
||||
DramSize = CustomSettingsModel.DramSize;
|
||||
EnableFsIntegrityChecks = CustomSettingsModel.EnableFsIntegrityChecks;
|
||||
IgnoreMissingServices = CustomSettingsModel.IgnoreMissingServices;
|
||||
EnablePptc = CustomSettingsModel.EnablePptc;
|
||||
EnableLowPowerPptc = CustomSettingsModel.EnableLowPowerPptc;
|
||||
MemoryManagerMode = CustomSettingsModel.MemoryManagerMode;
|
||||
UseHypervisor = CustomSettingsModel.UseHypervisor;
|
||||
TurboMultiplier = CustomSettingsModel.TickScalar;
|
||||
GraphicsBackend = CustomSettingsModel.GraphicsBackend;
|
||||
PreferredGpuIndex = ComputePreferredGpuIndex(CustomSettingsModel.PreferredGpu);
|
||||
EnableShaderCache = CustomSettingsModel.EnableShaderCache;
|
||||
EnableTextureRecompression = CustomSettingsModel.EnableTextureRecompression;
|
||||
EnableMacroHLE = CustomSettingsModel.EnableMacroHLE;
|
||||
EnableColorSpacePassthrough = CustomSettingsModel.EnableColorSpacePassthrough;
|
||||
ResScaleIndex = ComputeResScaleIndex(CustomSettingsModel.ResScale);
|
||||
MaxAnisotropyIndex = ComputeMaxAnisotropyIndex(CustomSettingsModel.MaxAnisotropy);
|
||||
BackendThreading = CustomSettingsModel.BackendThreading;
|
||||
AudioBackend = CustomSettingsModel.AudioBackend;
|
||||
Volume = CustomSettingsModel.AudioVolume * 100;
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteSettings()
|
||||
{
|
||||
if (CustomSettingsHelper.HasCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase)))
|
||||
{
|
||||
CustomSettingsHelper.DeleteCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase));
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveSettings()
|
||||
{
|
||||
CustomSettingsModel.HasCustomSettings = true;
|
||||
CustomSettingsModel.EnableDockedMode = EnableDockedMode;
|
||||
CustomSettingsModel.SystemLanguage = SystemLanguage;
|
||||
CustomSettingsModel.SystemRegion = SystemRegion;
|
||||
CustomSettingsModel.VSyncMode = VSyncMode;
|
||||
CustomSettingsModel.DramSize = DramSize;
|
||||
CustomSettingsModel.EnableFsIntegrityChecks = EnableFsIntegrityChecks;
|
||||
CustomSettingsModel.IgnoreMissingServices = IgnoreMissingServices;
|
||||
CustomSettingsModel.EnablePptc = EnablePptc;
|
||||
CustomSettingsModel.EnableLowPowerPptc = EnableLowPowerPptc;
|
||||
CustomSettingsModel.MemoryManagerMode = MemoryManagerMode;
|
||||
CustomSettingsModel.UseHypervisor = UseHypervisor;
|
||||
CustomSettingsModel.TickScalar = TurboMultiplier;
|
||||
CustomSettingsModel.GraphicsBackend = GraphicsBackend;
|
||||
CustomSettingsModel.PreferredGpu = ComputePreferredGpu(PreferredGpuIndex);
|
||||
CustomSettingsModel.EnableShaderCache = EnableShaderCache;
|
||||
CustomSettingsModel.EnableTextureRecompression = EnableTextureRecompression;
|
||||
CustomSettingsModel.EnableMacroHLE = EnableMacroHLE;
|
||||
CustomSettingsModel.ResScale = ComputeResScale(ResScaleIndex);
|
||||
CustomSettingsModel.MaxAnisotropy = ComputeMaxAnisotropy(MaxAnisotropyIndex);
|
||||
CustomSettingsModel.BackendThreading = BackendThreading;
|
||||
CustomSettingsModel.AudioBackend = AudioBackend;
|
||||
CustomSettingsModel.AudioVolume = Volume / 100;
|
||||
CustomSettingsHelper.SaveCustomSettingsJson(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase), CustomSettingsModel);
|
||||
}
|
||||
|
||||
public async void DeleteButton()
|
||||
{
|
||||
UserResult result = await ContentDialogHelper.CreateLocalizedConfirmationDialog(
|
||||
LocaleManager.Instance[LocaleKeys.DialogWarning],
|
||||
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogCustomSettingsDeleteMessage, ApplicationName)
|
||||
);
|
||||
|
||||
if (result == UserResult.Yes)
|
||||
{
|
||||
DeleteSettings();
|
||||
CloseWindow?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
public void CancelButton()
|
||||
{
|
||||
CloseWindow?.Invoke();
|
||||
}
|
||||
|
||||
public void SaveButton()
|
||||
{
|
||||
SaveSettings();
|
||||
CloseWindow?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,7 @@ using Ryujinx.Graphics.Vulkan;
|
||||
using Ryujinx.HLE;
|
||||
using Ryujinx.HLE.FileSystem;
|
||||
using Ryujinx.HLE.HOS.Services.Time.TimeZone;
|
||||
using Ryujinx.HLE.HOS.SystemState;
|
||||
using Ryujinx.UI.Common.Configuration;
|
||||
using Ryujinx.UI.Common.Configuration.System;
|
||||
using System;
|
||||
@@ -47,8 +48,6 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
private readonly Dictionary<string, string> _networkInterfaces;
|
||||
|
||||
private int _resolutionScale;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _isVulkanAvailable = true;
|
||||
|
||||
@@ -69,51 +68,79 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
private bool _enableGDBStub;
|
||||
|
||||
public int ResolutionScale
|
||||
private int ComputePreferredGpuIndex(string PreferredGpu)
|
||||
{
|
||||
get => _resolutionScale;
|
||||
set
|
||||
{
|
||||
_resolutionScale = value;
|
||||
return _gpuIds.Contains(PreferredGpu) ? _gpuIds.IndexOf(PreferredGpu) : 0;
|
||||
}
|
||||
|
||||
OnPropertyChanged(nameof(CustomResolutionScale));
|
||||
OnPropertyChanged(nameof(IsCustomResolutionScaleActive));
|
||||
private string ComputePreferredGpu(int PreferredGpuIndex)
|
||||
{
|
||||
return _gpuIds.ElementAtOrDefault((int)PreferredGpuIndex);
|
||||
}
|
||||
|
||||
private int ComputeResScaleIndex(float ResScale)
|
||||
{
|
||||
if (ResScale <= 0.5f)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if (ResScale <= 0.75f)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (int)Math.Ceiling(ResScale) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
public int GraphicsBackendMultithreadingIndex
|
||||
private float ComputeResScale(int ResScaleIndex)
|
||||
{
|
||||
get;
|
||||
set
|
||||
switch (ResScaleIndex)
|
||||
{
|
||||
field = value;
|
||||
|
||||
if (field != (int)ConfigurationState.Instance.Graphics.BackendThreading.Value)
|
||||
{
|
||||
Dispatcher.UIThread.InvokeAsync(() =>
|
||||
ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogSettingsBackendThreadingWarningMessage],
|
||||
"",
|
||||
"",
|
||||
LocaleManager.Instance[LocaleKeys.InputDialogOk],
|
||||
LocaleManager.Instance[LocaleKeys.DialogSettingsBackendThreadingWarningTitle])
|
||||
);
|
||||
}
|
||||
|
||||
OnPropertyChanged();
|
||||
case 0:
|
||||
return 0.5f;
|
||||
case 1:
|
||||
return 0.75f;
|
||||
case 2:
|
||||
return 1.0f;
|
||||
case 3:
|
||||
return 2.0f;
|
||||
case 4:
|
||||
return 3.0f;
|
||||
case 5:
|
||||
return 4.0f;
|
||||
default:
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
public float CustomResolutionScale
|
||||
private int ComputeMaxAnisotropyIndex(float MaxAnisotropy)
|
||||
{
|
||||
get;
|
||||
set
|
||||
{
|
||||
field = value;
|
||||
return MaxAnisotropy == -1.0f ? 0 : (int)(MathF.Log2(MaxAnisotropy));
|
||||
}
|
||||
|
||||
OnPropertyChanged();
|
||||
private float ComputeMaxAnisotropy(int MaxAnisotropyIndex)
|
||||
{
|
||||
switch (MaxAnisotropyIndex)
|
||||
{
|
||||
case 0:
|
||||
return -1.0f;
|
||||
case 1:
|
||||
return 2.0f;
|
||||
case 2:
|
||||
return 4.0f;
|
||||
case 3:
|
||||
return 8.0f;
|
||||
case 4:
|
||||
return 16.0f;
|
||||
default:
|
||||
return 2.0f;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsMacOS => OperatingSystem.IsMacOS();
|
||||
|
||||
public bool IsOpenGLAvailable => !OperatingSystem.IsMacOS();
|
||||
|
||||
public bool IsHypervisorAvailable => OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64;
|
||||
@@ -140,8 +167,6 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsMacOS => OperatingSystem.IsMacOS();
|
||||
|
||||
public bool EnableDiscordIntegration { get; set; }
|
||||
public bool CheckUpdatesOnStart { get; set; }
|
||||
public bool ShowConfirmExit { get; set; }
|
||||
@@ -260,10 +285,9 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
public bool IsSoundIoEnabled { get; set; }
|
||||
public bool IsSDL3Enabled { get; set; }
|
||||
public bool IsAudioToolboxEnabled { get; set; }
|
||||
public bool IsCustomResolutionScaleActive => _resolutionScale == 4;
|
||||
public bool IsScalingFilterActive => _scalingFilter == (int)Ryujinx.Common.Configuration.ScalingFilter.Fsr;
|
||||
|
||||
public bool IsVulkanSelected => GraphicsBackendIndex == 0;
|
||||
public bool IsVulkanSelected => GraphicsBackend == 0;
|
||||
public bool UseHypervisor { get; set; }
|
||||
public bool DisableP2P { get; set; }
|
||||
|
||||
@@ -292,8 +316,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
public int Region { get; set; }
|
||||
public int FsGlobalAccessLogMode { get; set; }
|
||||
public int AudioBackend { get; set; }
|
||||
public int MaxAnisotropy { get; set; }
|
||||
public int ResScaleIndex { get; set; }
|
||||
public int MaxAnisotropyIndex { get; set; }
|
||||
public int AspectRatio { get; set; }
|
||||
public int BackendThreading { get; set; }
|
||||
public int AntiAliasingEffect { get; set; }
|
||||
public string ScalingFilterLevelText => ScalingFilterLevel.ToString("0");
|
||||
|
||||
@@ -312,7 +338,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
public int MemoryMode { get; set; }
|
||||
public int BaseStyleIndex { get; set; }
|
||||
|
||||
public int GraphicsBackendIndex
|
||||
public int GraphicsBackend
|
||||
{
|
||||
get;
|
||||
set
|
||||
@@ -484,7 +510,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
if (devices.Length == 0)
|
||||
{
|
||||
IsVulkanAvailable = false;
|
||||
GraphicsBackendIndex = 1;
|
||||
GraphicsBackend = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -500,8 +526,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
}
|
||||
|
||||
// GPU configuration needs to be loaded during the async method or it will always return 0.
|
||||
PreferredGpuIndex = _gpuIds.Contains(ConfigurationState.Instance.Graphics.PreferredGpu) ?
|
||||
_gpuIds.IndexOf(ConfigurationState.Instance.Graphics.PreferredGpu) : 0;
|
||||
PreferredGpuIndex = ComputePreferredGpuIndex(ConfigurationState.Instance.Graphics.PreferredGpu.Value);
|
||||
|
||||
Dispatcher.UIThread.Post(() => OnPropertyChanged(nameof(PreferredGpuIndex)));
|
||||
}
|
||||
@@ -618,24 +643,23 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
SkipUserProfiles = config.System.SkipUserProfilesManager;
|
||||
|
||||
// CPU
|
||||
EnablePptc = config.System.EnablePtc;
|
||||
EnableLowPowerPptc = config.System.EnableLowPowerPtc;
|
||||
EnablePptc = config.System.EnablePptc;
|
||||
EnableLowPowerPptc = config.System.EnableLowPowerPptc;
|
||||
MemoryMode = (int)config.System.MemoryManagerMode.Value;
|
||||
UseHypervisor = config.System.UseHypervisor;
|
||||
TurboMultiplier = config.System.TickScalar;
|
||||
|
||||
// Graphics
|
||||
GraphicsBackendIndex = (int)config.Graphics.GraphicsBackend.Value;
|
||||
GraphicsBackend = (int)config.Graphics.GraphicsBackend.Value;
|
||||
// Physical devices are queried asynchronously hence the preferred index config value is loaded in LoadAvailableGpus().
|
||||
EnableShaderCache = config.Graphics.EnableShaderCache;
|
||||
EnableTextureRecompression = config.Graphics.EnableTextureRecompression;
|
||||
EnableMacroHLE = config.Graphics.EnableMacroHLE;
|
||||
EnableColorSpacePassthrough = config.Graphics.EnableColorSpacePassthrough;
|
||||
ResolutionScale = config.Graphics.ResScale == -1 ? 4 : config.Graphics.ResScale - 1;
|
||||
CustomResolutionScale = config.Graphics.ResScaleCustom;
|
||||
MaxAnisotropy = config.Graphics.MaxAnisotropy == -1 ? 0 : (int)(MathF.Log2(config.Graphics.MaxAnisotropy));
|
||||
ResScaleIndex = ComputeResScaleIndex(config.Graphics.ResScale);
|
||||
MaxAnisotropyIndex = ComputeMaxAnisotropyIndex(config.Graphics.MaxAnisotropy);
|
||||
AspectRatio = (int)config.Graphics.AspectRatio.Value;
|
||||
GraphicsBackendMultithreadingIndex = (int)config.Graphics.BackendThreading.Value;
|
||||
BackendThreading = (int)config.Graphics.BackendThreading.Value;
|
||||
ShaderDumpPath = config.Graphics.ShadersDumpPath;
|
||||
TextureDumpPath = config.Graphics.TexturesDumpPath.Value;
|
||||
TextureDumpFormatIndex = (int)config.Graphics.TexturesDumpFileFormat.Value;
|
||||
@@ -738,33 +762,31 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
config.System.SkipUserProfilesManager.Value = SkipUserProfiles;
|
||||
|
||||
// CPU
|
||||
config.System.EnablePtc.Value = EnablePptc;
|
||||
config.System.EnableLowPowerPtc.Value = EnableLowPowerPptc;
|
||||
config.System.EnablePptc.Value = EnablePptc;
|
||||
config.System.EnableLowPowerPptc.Value = EnableLowPowerPptc;
|
||||
config.System.MemoryManagerMode.Value = (MemoryManagerMode)MemoryMode;
|
||||
config.System.UseHypervisor.Value = UseHypervisor;
|
||||
config.System.TickScalar.Value = TurboMultiplier;
|
||||
|
||||
// Graphics
|
||||
config.Graphics.GraphicsBackend.Value = (GraphicsBackend)GraphicsBackendIndex;
|
||||
config.Graphics.GraphicsBackend.Value = (GraphicsBackend)GraphicsBackend;
|
||||
config.Graphics.PreferredGpu.Value = _gpuIds.ElementAtOrDefault(PreferredGpuIndex);
|
||||
config.Graphics.EnableShaderCache.Value = EnableShaderCache;
|
||||
config.Graphics.EnableTextureRecompression.Value = EnableTextureRecompression;
|
||||
config.Graphics.EnableMacroHLE.Value = EnableMacroHLE;
|
||||
config.Graphics.EnableColorSpacePassthrough.Value = EnableColorSpacePassthrough;
|
||||
config.Graphics.ResScale.Value = ResolutionScale == 4 ? -1 : ResolutionScale + 1;
|
||||
config.Graphics.ResScaleCustom.Value = CustomResolutionScale;
|
||||
config.Graphics.MaxAnisotropy.Value = MaxAnisotropy == 0 ? -1 : MathF.Pow(2, MaxAnisotropy);
|
||||
config.Graphics.ResScale.Value = ComputeResScale(ResScaleIndex);
|
||||
config.Graphics.MaxAnisotropy.Value = ComputeMaxAnisotropy(MaxAnisotropyIndex);
|
||||
config.Graphics.AspectRatio.Value = (AspectRatio)AspectRatio;
|
||||
config.Graphics.AntiAliasing.Value = (AntiAliasing)AntiAliasingEffect;
|
||||
config.Graphics.ScalingFilter.Value = (ScalingFilter)ScalingFilter;
|
||||
config.Graphics.ScalingFilterLevel.Value = ScalingFilterLevel;
|
||||
|
||||
if (ConfigurationState.Instance.Graphics.BackendThreading != (BackendThreading)GraphicsBackendMultithreadingIndex)
|
||||
if (ConfigurationState.Instance.Graphics.BackendThreading != (BackendThreading)BackendThreading)
|
||||
{
|
||||
DriverUtilities.ToggleOGLThreading(GraphicsBackendMultithreadingIndex == (int)BackendThreading.Off);
|
||||
DriverUtilities.ToggleOGLThreading(BackendThreading == (int)Ryujinx.Common.Configuration.BackendThreading.Off);
|
||||
}
|
||||
|
||||
config.Graphics.BackendThreading.Value = (BackendThreading)GraphicsBackendMultithreadingIndex;
|
||||
config.Graphics.BackendThreading.Value = (BackendThreading)BackendThreading;
|
||||
config.Graphics.ShadersDumpPath.Value = ShaderDumpPath;
|
||||
config.Graphics.TexturesDumpPath.Value = TextureDumpPath;
|
||||
config.Graphics.TexturesDumpFileFormat.Value = (TextureFileFormat)TextureDumpFormatIndex;
|
||||
|
||||
@@ -40,12 +40,13 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
{
|
||||
List<CheckBox> checkBoxes = [];
|
||||
|
||||
foreach (FileTypes fileName in Enum.GetValues<FileTypes>())
|
||||
foreach (object item in Enum.GetValues(typeof(FileTypes)))
|
||||
{
|
||||
string fileName = Enum.GetName(typeof(FileTypes), item);
|
||||
checkBoxes.Add(new CheckBox
|
||||
{
|
||||
Content = $".{fileName}",
|
||||
IsChecked = fileName.GetConfigValue(ConfigurationState.Instance.UI.ShownFileTypes),
|
||||
IsChecked = ((FileTypes)item).GetConfigValue(ConfigurationState.Instance.UI.ShownFileTypes),
|
||||
Command = MiniCommand.Create(() => Window.ToggleFileType(fileName)),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
<UserControl
|
||||
x:Class="Ryujinx.Ava.UI.Views.Settings.CustomSettingsAudioView"
|
||||
xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls"
|
||||
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
||||
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||
mc:Ignorable="d"
|
||||
x:DataType="viewModels:CustomSettingsViewModel">
|
||||
<Design.DataContext>
|
||||
<viewModels:SettingsViewModel />
|
||||
</Design.DataContext>
|
||||
<ScrollViewer
|
||||
Name="AudioPage"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
VerticalScrollBarVisibility="Auto">
|
||||
<Border Classes="settings">
|
||||
<StackPanel
|
||||
Margin="10"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical"
|
||||
Spacing="10">
|
||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabAudio}" />
|
||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
Text="{locale:Locale SettingsTabSystemAudioBackend}"
|
||||
ToolTip.Tip="{locale:Locale AudioBackendTooltip}"
|
||||
Width="250" />
|
||||
<ComboBox SelectedIndex="{Binding AudioBackend}"
|
||||
Width="350"
|
||||
HorizontalContentAlignment="Left">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemAudioBackendDummy}" />
|
||||
<ComboBoxItem
|
||||
IsEnabled="{Binding IsOpenAlEnabled}"
|
||||
Content="{locale:Locale SettingsTabSystemAudioBackendOpenAL}" />
|
||||
<ComboBoxItem
|
||||
IsEnabled="{Binding IsSoundIoEnabled}"
|
||||
Content="{locale:Locale SettingsTabSystemAudioBackendSoundIO}" />
|
||||
<ComboBoxItem
|
||||
IsEnabled="{Binding IsSDL3Enabled}"
|
||||
Content="{locale:Locale SettingsTabSystemAudioBackendSDL3}" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
Text="{locale:Locale SettingsTabSystemAudioVolume}"
|
||||
ToolTip.Tip="{locale:Locale AudioVolumeTooltip}"
|
||||
Width="250" />
|
||||
<ui:FANumberBox Value="{Binding Volume}"
|
||||
ToolTip.Tip="{locale:Locale AudioVolumeTooltip}"
|
||||
Width="350"
|
||||
SmallChange="1"
|
||||
LargeChange="10"
|
||||
SimpleNumberFormat="F0"
|
||||
SpinButtonPlacementMode="Inline"
|
||||
Minimum="0"
|
||||
Maximum="100" />
|
||||
</StackPanel>
|
||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||
<controls:SliderScroll Value="{Binding Volume}"
|
||||
Margin="250,0,0,0"
|
||||
ToolTip.Tip="{locale:Locale AudioVolumeTooltip}"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
SmallChange="1"
|
||||
TickFrequency="1"
|
||||
IsSnapToTickEnabled="True"
|
||||
LargeChange="10"
|
||||
Width="350" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</ScrollViewer>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,12 @@
|
||||
using Avalonia.Controls;
|
||||
|
||||
namespace Ryujinx.Ava.UI.Views.Settings
|
||||
{
|
||||
public partial class CustomSettingsAudioView : UserControl
|
||||
{
|
||||
public CustomSettingsAudioView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
<UserControl
|
||||
x:Class="Ryujinx.Ava.UI.Views.Settings.CustomSettingsCPUView"
|
||||
xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
||||
mc:Ignorable="d"
|
||||
x:DataType="viewModels:CustomSettingsViewModel">
|
||||
<Design.DataContext>
|
||||
<viewModels:SettingsViewModel />
|
||||
</Design.DataContext>
|
||||
<ScrollViewer
|
||||
Name="CpuPage"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
VerticalScrollBarVisibility="Auto">
|
||||
<Border Classes="settings">
|
||||
<StackPanel
|
||||
Margin="10"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical"
|
||||
Spacing="10">
|
||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabCpuCache}" />
|
||||
<StackPanel
|
||||
Margin="10,0,0,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical">
|
||||
<CheckBox IsChecked="{Binding EnablePptc}">
|
||||
<TextBlock Text="{locale:Locale SettingsTabSystemEnablePptc}"
|
||||
ToolTip.Tip="{locale:Locale PptcToggleTooltip}" />
|
||||
</CheckBox>
|
||||
<CheckBox IsChecked="{Binding EnableLowPowerPptc}">
|
||||
<TextBlock Text="{locale:Locale SettingsTabSystemEnableLowPowerPptc}"
|
||||
ToolTip.Tip="{locale:Locale LowPowerPptcToggleTooltip}" />
|
||||
</CheckBox>
|
||||
</StackPanel>
|
||||
<Separator Height="1" />
|
||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabCpuMemory}" />
|
||||
<StackPanel
|
||||
Margin="10,0,0,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
Text="{locale:Locale SettingsTabSystemMemoryManagerMode}"
|
||||
ToolTip.Tip="{locale:Locale MemoryManagerTooltip}"
|
||||
Width="250" />
|
||||
<ComboBox SelectedIndex="{Binding MemoryManagerMode}"
|
||||
ToolTip.Tip="{locale:Locale MemoryManagerTooltip}"
|
||||
HorizontalContentAlignment="Left"
|
||||
Width="350">
|
||||
<ComboBoxItem
|
||||
ToolTip.Tip="{locale:Locale MemoryManagerSoftwareTooltip}"
|
||||
Content="{locale:Locale SettingsTabSystemMemoryManagerModeSoftware}" />
|
||||
<ComboBoxItem
|
||||
ToolTip.Tip="{locale:Locale MemoryManagerHostTooltip}"
|
||||
Content="{locale:Locale SettingsTabSystemMemoryManagerModeHost}" />
|
||||
<ComboBoxItem
|
||||
ToolTip.Tip="{locale:Locale MemoryManagerUnsafeTooltip}"
|
||||
Content="{locale:Locale SettingsTabSystemMemoryManagerModeHostUnchecked}" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<CheckBox IsChecked="{Binding UseHypervisor}"
|
||||
IsVisible="{Binding IsHypervisorAvailable}"
|
||||
ToolTip.Tip="{locale:Locale UseHypervisorTooltip}">
|
||||
<TextBlock Text="{locale:Locale SettingsTabSystemUseHypervisor}"
|
||||
ToolTip.Tip="{locale:Locale UseHypervisorTooltip}" />
|
||||
</CheckBox>
|
||||
</StackPanel>
|
||||
<Separator Height="1" />
|
||||
<StackPanel
|
||||
Orientation="Vertical"
|
||||
Spacing="5">
|
||||
<TextBlock
|
||||
Classes="h1"
|
||||
Text="{locale:Locale SettingsTabSystemHacks}" />
|
||||
<TextBlock
|
||||
Foreground="{DynamicResource SecondaryTextColor}"
|
||||
TextDecorations="Underline"
|
||||
Text="{locale:Locale SettingsTabSystemHacksNote}" />
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
Margin="10,0,0,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical">
|
||||
<StackPanel Margin="0,0,0,10"
|
||||
Orientation="Horizontal">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
Background="Transparent"
|
||||
Text="{locale:Locale SettingsTabSystemTurboMultiplier}"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabSystemTurboMultiplierToolTip}"
|
||||
Width="250" />
|
||||
<ui:FANumberBox ToolTip.Tip="{locale:Locale SettingsTabSystemTurboMultiplierValueToolTip}"
|
||||
Value="{Binding TurboMultiplier}"
|
||||
Width="165"
|
||||
SmallChange="1.0"
|
||||
LargeChange="10"
|
||||
SimpleNumberFormat="F0"
|
||||
SpinButtonPlacementMode="Hidden"
|
||||
Minimum="50"
|
||||
Maximum="1000" />
|
||||
<Slider Value="{Binding TurboMultiplier}"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabSystemTurboMultiplierValueToolTip}"
|
||||
MinWidth="175"
|
||||
Margin="10,-3,0,0"
|
||||
Height="32"
|
||||
Padding="0,-5"
|
||||
TickFrequency="1"
|
||||
IsSnapToTickEnabled="True"
|
||||
LargeChange="10"
|
||||
SmallChange="1"
|
||||
VerticalAlignment="Center"
|
||||
Minimum="50"
|
||||
Maximum="1000" />
|
||||
<TextBlock Margin="5,0"
|
||||
Width="40"
|
||||
Text="{Binding TurboMultiplierPercentageText}"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</ScrollViewer>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,12 @@
|
||||
using Avalonia.Controls;
|
||||
|
||||
namespace Ryujinx.Ava.UI.Views.Settings
|
||||
{
|
||||
public partial class CustomSettingsCPUView : UserControl
|
||||
{
|
||||
public CustomSettingsCPUView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
<UserControl
|
||||
x:Class="Ryujinx.Ava.UI.Views.Settings.CustomSettingsGraphicsView"
|
||||
xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls"
|
||||
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
||||
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||
Design.Width="1000"
|
||||
mc:Ignorable="d"
|
||||
x:DataType="viewModels:CustomSettingsViewModel">
|
||||
<Design.DataContext>
|
||||
<viewModels:SettingsViewModel />
|
||||
</Design.DataContext>
|
||||
<ScrollViewer
|
||||
Name="GraphicsPage"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
VerticalScrollBarVisibility="Auto">
|
||||
<Border Classes="settings">
|
||||
<StackPanel
|
||||
Margin="10"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical"
|
||||
Spacing="10">
|
||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGraphicsAPI}" />
|
||||
<StackPanel Margin="10,0,0,0" Orientation="Vertical" Spacing="10">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsBackendTooltip}"
|
||||
Text="{locale:Locale SettingsTabGraphicsBackend}"
|
||||
Width="250" />
|
||||
<ComboBox Width="350"
|
||||
HorizontalContentAlignment="Left"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsBackendTooltip}"
|
||||
SelectedIndex="{Binding GraphicsBackend}">
|
||||
<ComboBoxItem
|
||||
IsVisible="{Binding IsVulkanAvailable}"
|
||||
Content="Vulkan" />
|
||||
<ComboBoxItem
|
||||
IsEnabled="{Binding IsOpenGLAvailable}"
|
||||
Content="OpenGL" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsPreferredGpuTooltip}"
|
||||
Text="{locale:Locale SettingsTabGraphicsPreferredGpu}"
|
||||
Width="250" />
|
||||
<ComboBox Width="350"
|
||||
HorizontalContentAlignment="Left"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsPreferredGpuTooltip}"
|
||||
SelectedIndex="{Binding PreferredGpuIndex}"
|
||||
ItemsSource="{Binding AvailableGpus}"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<Separator Height="1" />
|
||||
<TextBlock Classes="h1" Text="{locale:Locale SettingsTabGraphicsFeatures}" />
|
||||
<StackPanel Margin="10,0,0,0" Orientation="Vertical" Spacing="10">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<CheckBox IsChecked="{Binding EnableShaderCache}"
|
||||
ToolTip.Tip="{locale:Locale ShaderCacheToggleTooltip}">
|
||||
<TextBlock Text="{locale:Locale SettingsTabGraphicsEnableShaderCache}" />
|
||||
</CheckBox>
|
||||
<CheckBox IsChecked="{Binding EnableTextureRecompression}"
|
||||
ToolTip.Tip="{locale:Locale SettingsEnableTextureRecompressionTooltip}">
|
||||
<TextBlock Text="{locale:Locale SettingsEnableTextureRecompression}" />
|
||||
</CheckBox>
|
||||
<CheckBox IsChecked="{Binding EnableMacroHLE}"
|
||||
ToolTip.Tip="{locale:Locale SettingsEnableMacroHLETooltip}">
|
||||
<TextBlock Text="{locale:Locale SettingsEnableMacroHLE}" />
|
||||
</CheckBox>
|
||||
<CheckBox IsChecked="{Binding EnableColorSpacePassthrough}"
|
||||
IsVisible="{Binding ColorSpacePassthroughAvailable}"
|
||||
ToolTip.Tip="{locale:Locale SettingsEnableColorSpacePassthroughTooltip}">
|
||||
<TextBlock Text="{locale:Locale SettingsEnableColorSpacePassthrough}" />
|
||||
</CheckBox>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
ToolTip.Tip="{locale:Locale ResolutionScaleTooltip}"
|
||||
Text="{locale:Locale SettingsTabGraphicsResolutionScale}"
|
||||
Width="250" />
|
||||
<ComboBox SelectedIndex="{Binding ResScaleIndex}"
|
||||
Width="350"
|
||||
HorizontalContentAlignment="Left"
|
||||
ToolTip.Tip="{locale:Locale ResolutionScaleTooltip}">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale05x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale075x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale10x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale20x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale30x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale40x}" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
ToolTip.Tip="{locale:Locale AnisotropyTooltip}"
|
||||
Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering}"
|
||||
Width="250" />
|
||||
<ComboBox SelectedIndex="{Binding MaxAnisotropyIndex}"
|
||||
Width="350"
|
||||
HorizontalContentAlignment="Left"
|
||||
ToolTip.Tip="{locale:Locale AnisotropyTooltip}">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsAnisotropicFilteringAuto}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsAnisotropicFiltering2x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsAnisotropicFiltering4x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsAnisotropicFiltering8x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsAnisotropicFiltering16x}" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
Margin="10,0,0,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical"
|
||||
Spacing="10">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
ToolTip.Tip="{locale:Locale GraphicsBackendThreadingTooltip}"
|
||||
Text="{locale:Locale SettingsTabGraphicsBackendMultithreading}"
|
||||
Width="250" />
|
||||
<ComboBox Width="350"
|
||||
HorizontalContentAlignment="Left"
|
||||
ToolTip.Tip="{locale:Locale GalThreadingTooltip}"
|
||||
SelectedIndex="{Binding BackendThreading}">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale CommonAuto}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale CommonOff}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale CommonOn}" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</ScrollViewer>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,12 @@
|
||||
using Avalonia.Controls;
|
||||
|
||||
namespace Ryujinx.Ava.UI.Views.Settings
|
||||
{
|
||||
public partial class CustomSettingsGraphicsView : UserControl
|
||||
{
|
||||
public CustomSettingsGraphicsView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
<UserControl
|
||||
x:Class="Ryujinx.Ava.UI.Views.Settings.CustomSettingsSystemView"
|
||||
xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||
xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
|
||||
mc:Ignorable="d"
|
||||
x:DataType="viewModels:CustomSettingsViewModel">
|
||||
<UserControl.Resources>
|
||||
<helpers:TimeZoneConverter x:Key="TimeZone" />
|
||||
</UserControl.Resources>
|
||||
<Design.DataContext>
|
||||
<viewModels:SettingsViewModel />
|
||||
</Design.DataContext>
|
||||
<ScrollViewer
|
||||
Name="SystemPage"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
VerticalScrollBarVisibility="Auto">
|
||||
<Border Classes="settings">
|
||||
<StackPanel
|
||||
Margin="10"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical"
|
||||
Spacing="10">
|
||||
<TextBlock
|
||||
Classes="h1"
|
||||
Text="{locale:Locale SettingsTabSystemCore}" />
|
||||
<StackPanel
|
||||
Margin="10,0,0,0"
|
||||
Orientation="Vertical">
|
||||
<StackPanel
|
||||
Margin="0,0,0,10"
|
||||
Orientation="Horizontal">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
Text="{locale:Locale SettingsTabSystemSystemRegion}"
|
||||
Width="250" />
|
||||
<ComboBox
|
||||
SelectedIndex="{Binding SystemRegion}"
|
||||
ToolTip.Tip="{locale:Locale RegionTooltip}"
|
||||
HorizontalContentAlignment="Left"
|
||||
Width="350">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemRegionJapan}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemRegionUSA}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemRegionEurope}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemRegionAustralia}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemRegionChina}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemRegionKorea}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemRegionTaiwan}" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
Margin="0,0,0,10"
|
||||
Orientation="Horizontal">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
Text="{locale:Locale SettingsTabSystemSystemLanguage}"
|
||||
ToolTip.Tip="{locale:Locale LanguageTooltip}"
|
||||
Width="250" />
|
||||
<ComboBox
|
||||
SelectedIndex="{Binding SystemLanguage}"
|
||||
ToolTip.Tip="{locale:Locale LanguageTooltip}"
|
||||
HorizontalContentAlignment="Left"
|
||||
Width="350">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageJapanese}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageAmericanEnglish}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageFrench}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageGerman}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageItalian}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageSpanish}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageChinese}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageKorean}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageDutch}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguagePortuguese}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageRussian}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageTaiwanese}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageBritishEnglish}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageCanadianFrench}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageLatinAmericanSpanish}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageSimplifiedChinese}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageTraditionalChinese}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemSystemLanguageBrazilianPortuguese}" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<CheckBox IsChecked="{Binding EnableFsIntegrityChecks}">
|
||||
<TextBlock
|
||||
Text="{locale:Locale SettingsTabSystemEnableFsIntegrityChecks}"
|
||||
ToolTip.Tip="{locale:Locale FsIntegrityToggleTooltip}" />
|
||||
</CheckBox>
|
||||
<CheckBox IsChecked="{Binding EnableDockedMode}">
|
||||
<TextBlock
|
||||
Text="{locale:Locale SettingsTabSystemEnableDockedMode}"
|
||||
ToolTip.Tip="{locale:Locale DockModeToggleTooltip}" />
|
||||
</CheckBox>
|
||||
<StackPanel Margin="0,10,0,10"
|
||||
Orientation="Horizontal">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
Text="{locale:Locale SettingsTabSystemVSyncMode}"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabSystemVSyncModeTooltip}"
|
||||
Width="250" />
|
||||
<ComboBox
|
||||
SelectedIndex="{Binding VSyncMode}"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabSystemVSyncModeTooltip}"
|
||||
HorizontalContentAlignment="Left"
|
||||
Width="350">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemVSyncModeSwitch}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemVSyncModeUnbounded}" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<Separator Height="1" />
|
||||
<StackPanel
|
||||
Orientation="Vertical"
|
||||
Spacing="5">
|
||||
<TextBlock
|
||||
Classes="h1"
|
||||
Text="{locale:Locale SettingsTabSystemHacks}" />
|
||||
<TextBlock
|
||||
Foreground="{DynamicResource SecondaryTextColor}"
|
||||
Text="{locale:Locale SettingsTabSystemHacksNote}" />
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
Margin="10,0,0,0"
|
||||
Orientation="Horizontal">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
Text="{locale:Locale SettingsTabSystemDramSize}"
|
||||
Width="250" />
|
||||
<ComboBox
|
||||
SelectedIndex="{Binding DramSize}"
|
||||
ToolTip.Tip="{locale:Locale DRamTooltip}"
|
||||
HorizontalContentAlignment="Left"
|
||||
Width="350">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemDramSize4GiB}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemDramSize6GiB}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemDramSize8GiB}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemDramSize10GiB}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabSystemDramSize12GiB}" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
Margin="10,0,0,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Orientation="Vertical">
|
||||
<CheckBox
|
||||
IsChecked="{Binding IgnoreMissingServices}"
|
||||
ToolTip.Tip="{locale:Locale IgnoreMissingServicesTooltip}">
|
||||
<TextBlock Text="{locale:Locale SettingsTabSystemIgnoreMissingServices}" />
|
||||
</CheckBox>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</ScrollViewer>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,12 @@
|
||||
using Avalonia.Controls;
|
||||
|
||||
namespace Ryujinx.Ava.UI.Views.Settings
|
||||
{
|
||||
public partial class CustomSettingsSystemView : UserControl
|
||||
{
|
||||
public CustomSettingsSystemView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,7 @@
|
||||
<ComboBox Width="350"
|
||||
HorizontalContentAlignment="Left"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsBackendTooltip}"
|
||||
SelectedIndex="{Binding GraphicsBackendIndex}">
|
||||
SelectedIndex="{Binding GraphicsBackend}">
|
||||
<ComboBoxItem
|
||||
IsVisible="{Binding IsVulkanAvailable}"
|
||||
Content="Vulkan" />
|
||||
@@ -45,7 +45,7 @@
|
||||
Content="OpenGL" />
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" IsVisible="{Binding IsVulkanSelected}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock VerticalAlignment="Center"
|
||||
ToolTip.Tip="{locale:Locale SettingsTabGraphicsPreferredGpuTooltip}"
|
||||
Text="{locale:Locale SettingsTabGraphicsPreferredGpu}"
|
||||
@@ -83,33 +83,23 @@
|
||||
ToolTip.Tip="{locale:Locale ResolutionScaleTooltip}"
|
||||
Text="{locale:Locale SettingsTabGraphicsResolutionScale}"
|
||||
Width="250" />
|
||||
<ComboBox SelectedIndex="{Binding ResolutionScale}"
|
||||
<ComboBox SelectedIndex="{Binding ResScaleIndex}"
|
||||
Width="350"
|
||||
HorizontalContentAlignment="Left"
|
||||
ToolTip.Tip="{locale:Locale ResolutionScaleTooltip}">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScaleNative}" />
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale05x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale2x}" />
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale075x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale3x}" />
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale10x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale4x}" />
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale20x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScaleCustom}" />
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale30x}" />
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale SettingsTabGraphicsResolutionScale40x}" />
|
||||
</ComboBox>
|
||||
<ui:FANumberBox
|
||||
Margin="10,0,0,0"
|
||||
ToolTip.Tip="{locale:Locale ResolutionScaleEntryTooltip}"
|
||||
MinWidth="150"
|
||||
SmallChange="0.1"
|
||||
LargeChange="1"
|
||||
SimpleNumberFormat="F2"
|
||||
SpinButtonPlacementMode="Inline"
|
||||
IsVisible="{Binding IsCustomResolutionScaleActive}"
|
||||
Maximum="10"
|
||||
Minimum="0.1"
|
||||
Value="{Binding CustomResolutionScale}" />
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
HorizontalAlignment="Stretch"
|
||||
@@ -186,7 +176,7 @@
|
||||
ToolTip.Tip="{locale:Locale AnisotropyTooltip}"
|
||||
Text="{locale:Locale SettingsTabGraphicsAnisotropicFiltering}"
|
||||
Width="250" />
|
||||
<ComboBox SelectedIndex="{Binding MaxAnisotropy}"
|
||||
<ComboBox SelectedIndex="{Binding MaxAnisotropyIndex}"
|
||||
Width="350"
|
||||
HorizontalContentAlignment="Left"
|
||||
ToolTip.Tip="{locale:Locale AnisotropyTooltip}">
|
||||
@@ -241,7 +231,7 @@
|
||||
<ComboBox Width="350"
|
||||
HorizontalContentAlignment="Left"
|
||||
ToolTip.Tip="{locale:Locale GalThreadingTooltip}"
|
||||
SelectedIndex="{Binding GraphicsBackendMultithreadingIndex}">
|
||||
SelectedIndex="{Binding BackendThreading}">
|
||||
<ComboBoxItem
|
||||
Content="{locale:Locale CommonAuto}" />
|
||||
<ComboBoxItem
|
||||
|
||||
@@ -34,13 +34,6 @@
|
||||
<StackPanel
|
||||
Orientation="Horizontal"
|
||||
Spacing="10">
|
||||
<CheckBox
|
||||
ToolTip.Tip="{locale:Locale DockModeToggleTooltip}"
|
||||
MinWidth="0"
|
||||
IsChecked="{Binding EnableDockedMode}">
|
||||
<TextBlock
|
||||
Text="{locale:Locale SettingsTabInputEnableDockedMode}" />
|
||||
</CheckBox>
|
||||
<CheckBox
|
||||
ToolTip.Tip="{locale:Locale DirectKeyboardTooltip}"
|
||||
IsChecked="{Binding EnableKeyboard}">
|
||||
@@ -59,4 +52,4 @@
|
||||
</Panel>
|
||||
</Border>
|
||||
</ScrollViewer>
|
||||
</UserControl>
|
||||
</UserControl>
|
||||
|
||||
@@ -158,18 +158,21 @@
|
||||
Width="350"
|
||||
ToolTip.Tip="{locale:Locale TimeTooltip}" />
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<CheckBox IsChecked="{Binding MatchSystemTime}">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
Text="{locale:Locale SettingsTabSystemSystemTimeMatch}"
|
||||
ToolTip.Tip="{locale:Locale MatchTimeTooltip}"
|
||||
Width="250"/>
|
||||
<CheckBox
|
||||
VerticalAlignment="Center"
|
||||
IsChecked="{Binding MatchSystemTime}"
|
||||
ToolTip.Tip="{locale:Locale MatchTimeTooltip}"/>
|
||||
</StackPanel>
|
||||
<Separator />
|
||||
ToolTip.Tip="{locale:Locale MatchTimeTooltip}" />
|
||||
</CheckBox>
|
||||
<CheckBox IsChecked="{Binding EnableFsIntegrityChecks}">
|
||||
<TextBlock
|
||||
Text="{locale:Locale SettingsTabSystemEnableFsIntegrityChecks}"
|
||||
ToolTip.Tip="{locale:Locale FsIntegrityToggleTooltip}" />
|
||||
</CheckBox>
|
||||
<CheckBox IsChecked="{Binding EnableDockedMode}">
|
||||
<TextBlock
|
||||
Text="{locale:Locale SettingsTabSystemEnableDockedMode}"
|
||||
ToolTip.Tip="{locale:Locale DockModeToggleTooltip}" />
|
||||
</CheckBox>
|
||||
<StackPanel Margin="0,10,0,10"
|
||||
Orientation="Horizontal">
|
||||
<TextBlock
|
||||
@@ -227,11 +230,6 @@
|
||||
Width="40"
|
||||
Text="{Binding CustomVSyncIntervalPercentageText}"/>
|
||||
</StackPanel>
|
||||
<CheckBox IsChecked="{Binding EnableFsIntegrityChecks}">
|
||||
<TextBlock
|
||||
Text="{locale:Locale SettingsTabSystemEnableFsIntegrityChecks}"
|
||||
ToolTip.Tip="{locale:Locale FsIntegrityToggleTooltip}" />
|
||||
</CheckBox>
|
||||
</StackPanel>
|
||||
<Separator Height="1" />
|
||||
<StackPanel
|
||||
|
||||
@@ -6,15 +6,19 @@ using Ryujinx.HLE.FileSystem;
|
||||
using Ryujinx.HLE.HOS;
|
||||
using Ryujinx.UI.App.Common;
|
||||
using Ryujinx.UI.Common.Configuration;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Ryujinx.Ava.UI.Windows
|
||||
{
|
||||
public partial class CheatWindow : StyleableWindow
|
||||
{
|
||||
[DllImport("dwmapi.dll")]
|
||||
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int value, int size);
|
||||
|
||||
private readonly string _enabledCheatsPath;
|
||||
public bool NoCheatsFound { get; }
|
||||
|
||||
@@ -28,6 +32,7 @@ namespace Ryujinx.Ava.UI.Windows
|
||||
DataContext = this;
|
||||
|
||||
InitializeComponent();
|
||||
ApplyDarkTitleBar();
|
||||
|
||||
Title = $"Ryujinx {Program.Version} - " + LocaleManager.Instance[LocaleKeys.CheatWindowTitle];
|
||||
}
|
||||
@@ -46,6 +51,7 @@ namespace Ryujinx.Ava.UI.Windows
|
||||
BuildId = ApplicationData.GetBuildId(virtualFileSystem, checkLevel, titlePath);
|
||||
|
||||
InitializeComponent();
|
||||
ApplyDarkTitleBar();
|
||||
|
||||
string modsBasePath = ModLoader.GetModsBasePath();
|
||||
string titleModsPath = ModLoader.GetApplicationDir(modsBasePath, titleId);
|
||||
@@ -100,6 +106,50 @@ namespace Ryujinx.Ava.UI.Windows
|
||||
Title = $"Ryujinx {Program.Version} - " + LocaleManager.Instance[LocaleKeys.CheatWindowTitle];
|
||||
}
|
||||
|
||||
private void ApplyDarkTitleBar()
|
||||
{
|
||||
if (!OperatingSystem.IsWindows())
|
||||
return;
|
||||
|
||||
// Apply immediately if possible
|
||||
if (PlatformImpl != null)
|
||||
{
|
||||
ForceDarkTitleBar();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Wait until PlatformImpl is available
|
||||
this.PropertyChanged += (_, e) =>
|
||||
{
|
||||
if (e.Property.Name == nameof(PlatformImpl) && PlatformImpl != null)
|
||||
{
|
||||
ForceDarkTitleBar();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Backup: Try it even when the window is active
|
||||
this.Activated += (_, _) => ForceDarkTitleBar();
|
||||
}
|
||||
|
||||
private void ForceDarkTitleBar()
|
||||
{
|
||||
try
|
||||
{
|
||||
var handleField = PlatformImpl?.GetType().GetProperty("Handle")?.GetValue(PlatformImpl);
|
||||
if (handleField?.GetType().GetProperty("Handle")?.GetValue(handleField) is IntPtr hwnd && hwnd != IntPtr.Zero)
|
||||
{
|
||||
int dark = 1;
|
||||
DwmSetWindowAttribute(hwnd, 20, ref dark, sizeof(int)); // Modern Windows
|
||||
DwmSetWindowAttribute(hwnd, 19, ref dark, sizeof(int)); // Older Windows 10
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Silent fail
|
||||
}
|
||||
}
|
||||
|
||||
public void Save()
|
||||
{
|
||||
if (NoCheatsFound)
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
<window:StyleableWindow
|
||||
x:Class="Ryujinx.Ava.UI.Windows.CustomSettingsWindow"
|
||||
xmlns="https://github.com/avaloniaui"
|
||||
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows"
|
||||
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||
xmlns:settings="clr-namespace:Ryujinx.Ava.UI.Views.Settings"
|
||||
xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
|
||||
Width="1100"
|
||||
Height="927"
|
||||
MinWidth="800"
|
||||
MinHeight="480"
|
||||
WindowStartupLocation="CenterOwner"
|
||||
x:DataType="viewModels:CustomSettingsViewModel"
|
||||
mc:Ignorable="d"
|
||||
Focusable="True">
|
||||
<Design.DataContext>
|
||||
<viewModels:CustomSettingsViewModel />
|
||||
</Design.DataContext>
|
||||
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="600"
|
||||
RowDefinitions="Auto,*,Auto">
|
||||
<ContentPresenter
|
||||
x:Name="ContentPresenter"
|
||||
Grid.Row="1"
|
||||
IsVisible="False"
|
||||
KeyboardNavigation.IsTabStop="False"/>
|
||||
<Grid Name="Pages" IsVisible="False" Grid.Row="2">
|
||||
<settings:CustomSettingsSystemView Name="SystemPage" />
|
||||
<settings:CustomSettingsCPUView Name="CpuPage" />
|
||||
<settings:CustomSettingsGraphicsView Name="GraphicsPage" />
|
||||
<settings:CustomSettingsAudioView Name="AudioPage" />
|
||||
</Grid>
|
||||
<ui:FANavigationView
|
||||
Grid.Row="1"
|
||||
IsSettingsVisible="False"
|
||||
Name="NavPanel"
|
||||
IsBackEnabled="False"
|
||||
PaneDisplayMode="Left"
|
||||
Margin="2,10,10,0"
|
||||
VerticalAlignment="Stretch"
|
||||
HorizontalAlignment="Stretch"
|
||||
OpenPaneLength="200">
|
||||
<ui:FANavigationView.PaneHeader>
|
||||
<Border
|
||||
Margin="10"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch"
|
||||
ClipToBounds="True"
|
||||
CornerRadius="4">
|
||||
<Grid RowDefinitions="Auto,Auto">
|
||||
<Grid Grid.Column="0">
|
||||
<Image
|
||||
Grid.Row="0"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Top"
|
||||
Source="{Binding GameIcon}"
|
||||
Width="140"
|
||||
Height="140">
|
||||
</Image>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Border>
|
||||
</ui:FANavigationView.PaneHeader>
|
||||
<ui:FANavigationView.MenuItems>
|
||||
<ui:FANavigationViewItem
|
||||
Content="{locale:Locale SettingsTabSystem}"
|
||||
Tag="SystemPage"
|
||||
IconSource="Settings" />
|
||||
<ui:FANavigationViewItem
|
||||
Content="{locale:Locale SettingsTabCpu}"
|
||||
Tag="CpuPage">
|
||||
<ui:FANavigationViewItem.IconSource>
|
||||
<ui:FAFontIconSource
|
||||
FontFamily="avares://Ryujinx/Assets/Fonts#Segoe Fluent Icons"
|
||||
Glyph="{helpers:GlyphValueConverter Chip}" />
|
||||
</ui:FANavigationViewItem.IconSource>
|
||||
</ui:FANavigationViewItem>
|
||||
<ui:FANavigationViewItem
|
||||
Content="{locale:Locale SettingsTabGraphics}"
|
||||
Tag="GraphicsPage"
|
||||
IconSource="Image" />
|
||||
<ui:FANavigationViewItem
|
||||
Content="{locale:Locale SettingsTabAudio}"
|
||||
IconSource="Audio"
|
||||
Tag="AudioPage" />
|
||||
</ui:FANavigationView.MenuItems>
|
||||
<ui:FANavigationView.Styles>
|
||||
<Style Selector="Grid#PlaceholderGrid">
|
||||
<Setter Property="Height" Value="160" />
|
||||
</Style>
|
||||
<Style Selector="ui|FANavigationViewItem ui|FASymbolIcon">
|
||||
<Setter Property="FlowDirection" Value="LeftToRight" />
|
||||
</Style>
|
||||
</ui:FANavigationView.Styles>
|
||||
</ui:FANavigationView>
|
||||
<ReversibleStackPanel
|
||||
Grid.Row="2"
|
||||
Margin="10"
|
||||
Spacing="10"
|
||||
Orientation="Horizontal"
|
||||
HorizontalAlignment="Right"
|
||||
ReverseOrder="{Binding IsMacOS}">
|
||||
<Button
|
||||
Content="{locale:Locale SettingsButtonDelete}"
|
||||
Command="{Binding DeleteButton}" />
|
||||
<Button
|
||||
Content="{locale:Locale SettingsButtonSave}"
|
||||
Command="{Binding SaveButton}" />
|
||||
<Button
|
||||
HotKey="Escape"
|
||||
Content="{locale:Locale SettingsButtonCancel}"
|
||||
Command="{Binding CancelButton}" />
|
||||
</ReversibleStackPanel>
|
||||
</Grid>
|
||||
</window:StyleableWindow>
|
||||
@@ -0,0 +1,109 @@
|
||||
using Avalonia.Controls;
|
||||
using FluentAvalonia.UI.Controls;
|
||||
using Ryujinx.Ava.Common.Locale;
|
||||
using Ryujinx.Ava.UI.ViewModels;
|
||||
using Ryujinx.HLE.FileSystem;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Ryujinx.Ava.UI.Windows
|
||||
{
|
||||
public partial class CustomSettingsWindow : StyleableWindow
|
||||
{
|
||||
[DllImport("dwmapi.dll")]
|
||||
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int value, int size);
|
||||
|
||||
internal readonly CustomSettingsViewModel ViewModel;
|
||||
|
||||
public CustomSettingsWindow(VirtualFileSystem virtualFileSystem, string titleId, string titleName, byte[] icon, string titlePath)
|
||||
{
|
||||
Title = $"Ryujinx {Program.Version} - {LocaleManager.Instance[LocaleKeys.Settings]} - {titleName} ";
|
||||
DataContext = ViewModel = new CustomSettingsViewModel(titleId,icon,titleName);
|
||||
ViewModel.CloseWindow += Close;
|
||||
InitializeComponent();
|
||||
ApplyDarkTitleBar();
|
||||
Load();
|
||||
}
|
||||
|
||||
private void ApplyDarkTitleBar()
|
||||
{
|
||||
if (!OperatingSystem.IsWindows())
|
||||
return;
|
||||
|
||||
// Apply immediately if possible
|
||||
if (PlatformImpl != null)
|
||||
{
|
||||
ForceDarkTitleBar();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Wait until PlatformImpl is available
|
||||
this.PropertyChanged += (_, e) =>
|
||||
{
|
||||
if (e.Property.Name == nameof(PlatformImpl) && PlatformImpl != null)
|
||||
{
|
||||
ForceDarkTitleBar();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Backup: Try it even when the window is active
|
||||
this.Activated += (_, _) => ForceDarkTitleBar();
|
||||
}
|
||||
|
||||
private void ForceDarkTitleBar()
|
||||
{
|
||||
try
|
||||
{
|
||||
var handleField = PlatformImpl?.GetType().GetProperty("Handle")?.GetValue(PlatformImpl);
|
||||
if (handleField?.GetType().GetProperty("Handle")?.GetValue(handleField) is IntPtr hwnd && hwnd != IntPtr.Zero)
|
||||
{
|
||||
int dark = 1;
|
||||
DwmSetWindowAttribute(hwnd, 20, ref dark, sizeof(int)); // Modern Windows
|
||||
DwmSetWindowAttribute(hwnd, 19, ref dark, sizeof(int)); // Older Windows 10
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Silent fail
|
||||
}
|
||||
}
|
||||
|
||||
private void Load()
|
||||
{
|
||||
Pages.Children.Clear();
|
||||
NavPanel.SelectionChanged += NavPanelOnSelectionChanged;
|
||||
NavPanel.SelectedItem = NavPanel.MenuItems.ElementAt(0);
|
||||
}
|
||||
|
||||
private void NavPanelOnSelectionChanged(object sender, FANavigationViewSelectionChangedEventArgs e)
|
||||
{
|
||||
if (e.SelectedItem is FANavigationViewItem navItem && navItem.Tag is not null)
|
||||
{
|
||||
switch (navItem.Tag.ToString())
|
||||
{
|
||||
case "SystemPage":
|
||||
NavPanel.Content = SystemPage;
|
||||
break;
|
||||
case "CpuPage":
|
||||
NavPanel.Content = CpuPage;
|
||||
break;
|
||||
case "GraphicsPage":
|
||||
NavPanel.Content = GraphicsPage;
|
||||
break;
|
||||
case "AudioPage":
|
||||
NavPanel.Content = AudioPage;
|
||||
break;
|
||||
default:
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnClosing(WindowClosingEventArgs e)
|
||||
{
|
||||
base.OnClosing(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,6 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.Versioning;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -571,7 +570,7 @@ namespace Ryujinx.Ava.UI.Windows
|
||||
public static void UpdateGraphicsConfig()
|
||||
{
|
||||
#pragma warning disable IDE0055 // Disable formatting
|
||||
GraphicsConfig.ResScale = ConfigurationState.Instance.Graphics.ResScale == -1 ? ConfigurationState.Instance.Graphics.ResScaleCustom : ConfigurationState.Instance.Graphics.ResScale;
|
||||
GraphicsConfig.ResScale = ConfigurationState.Instance.Graphics.ResScale;
|
||||
GraphicsConfig.MaxAnisotropy = ConfigurationState.Instance.Graphics.MaxAnisotropy;
|
||||
GraphicsConfig.ShadersDumpPath = ConfigurationState.Instance.Graphics.ShadersDumpPath;
|
||||
GraphicsConfig.EnableShaderCache = ConfigurationState.Instance.Graphics.EnableShaderCache;
|
||||
@@ -582,7 +581,6 @@ namespace Ryujinx.Ava.UI.Windows
|
||||
GraphicsConfig.TextureDumpFormatPng = ConfigurationState.Instance.Graphics.TexturesDumpFileFormat == TextureFileFormat.Png;
|
||||
GraphicsConfig.EnableTextureDump = ConfigurationState.Instance.Graphics.EnableTextureDump;
|
||||
GraphicsConfig.EnableTextureRealTimeEdit = ConfigurationState.Instance.Graphics.EnableTextureRealTimeEdit;
|
||||
GraphicsConfig.EnableMacroJit = RuntimeFeature.IsDynamicCodeSupported ? ConfigurationState.Instance.Graphics.EnableMacroHLE : false;
|
||||
#pragma warning restore IDE0055
|
||||
}
|
||||
|
||||
@@ -678,18 +676,18 @@ namespace Ryujinx.Ava.UI.Windows
|
||||
ReloadGameList();
|
||||
}
|
||||
|
||||
public void ToggleFileType(FileTypes fileType)
|
||||
public void ToggleFileType(string fileType)
|
||||
{
|
||||
_ = fileType switch
|
||||
{
|
||||
#pragma warning disable IDE0055 // Disable formatting
|
||||
FileTypes.NSP => ConfigurationState.Instance.UI.ShownFileTypes.NSP.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSP,
|
||||
FileTypes.PFS0 => ConfigurationState.Instance.UI.ShownFileTypes.PFS0.Value = !ConfigurationState.Instance.UI.ShownFileTypes.PFS0,
|
||||
FileTypes.XCI => ConfigurationState.Instance.UI.ShownFileTypes.XCI.Value = !ConfigurationState.Instance.UI.ShownFileTypes.XCI,
|
||||
FileTypes.NCA => ConfigurationState.Instance.UI.ShownFileTypes.NCA.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NCA,
|
||||
FileTypes.NRO => ConfigurationState.Instance.UI.ShownFileTypes.NRO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NRO,
|
||||
FileTypes.NSO => ConfigurationState.Instance.UI.ShownFileTypes.NSO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSO,
|
||||
_ => throw new ArgumentOutOfRangeException(fileType.ToString()),
|
||||
"NSP" => ConfigurationState.Instance.UI.ShownFileTypes.NSP.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSP,
|
||||
"PFS0" => ConfigurationState.Instance.UI.ShownFileTypes.PFS0.Value = !ConfigurationState.Instance.UI.ShownFileTypes.PFS0,
|
||||
"XCI" => ConfigurationState.Instance.UI.ShownFileTypes.XCI.Value = !ConfigurationState.Instance.UI.ShownFileTypes.XCI,
|
||||
"NCA" => ConfigurationState.Instance.UI.ShownFileTypes.NCA.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NCA,
|
||||
"NRO" => ConfigurationState.Instance.UI.ShownFileTypes.NRO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NRO,
|
||||
"NSO" => ConfigurationState.Instance.UI.ShownFileTypes.NSO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSO,
|
||||
_ => throw new ArgumentOutOfRangeException(fileType),
|
||||
#pragma warning restore IDE0055
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user