Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
8d9d508dc7 | ||
|
e27f5522e2 | ||
|
add2a9d151 | ||
|
9e50dd99d7 | ||
|
0dec91bb42 | ||
|
d9b63353b0 | ||
|
eabd0ec93f | ||
|
138d5dc64a | ||
|
3e68a87d63 | ||
|
69b6ef7a4a | ||
|
40e87c634e | ||
|
79d1c190db | ||
|
2bc88467eb | ||
|
baf8752e74 | ||
|
d5e4378aea | ||
|
6dbcdfea47 | ||
|
c5258cf082 | ||
|
5c89e22bb9 | ||
|
11ecff2ff0 | ||
|
4c3f09644a | ||
|
e187a8870a | ||
|
a64fee29dc | ||
|
9ef94c8292 | ||
|
915d6d044c | ||
|
a4780ab33b |
@@ -33,8 +33,8 @@ namespace ARMeilleure.Instructions
|
|||||||
case 0b11_011_0100_0010_000: EmitGetNzcv(context); return;
|
case 0b11_011_0100_0010_000: EmitGetNzcv(context); return;
|
||||||
case 0b11_011_0100_0100_000: EmitGetFpcr(context); return;
|
case 0b11_011_0100_0100_000: EmitGetFpcr(context); return;
|
||||||
case 0b11_011_0100_0100_001: EmitGetFpsr(context); return;
|
case 0b11_011_0100_0100_001: EmitGetFpsr(context); return;
|
||||||
case 0b11_011_1101_0000_010: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetTpidrEl0)); break;
|
case 0b11_011_1101_0000_010: EmitGetTpidrEl0(context); return;
|
||||||
case 0b11_011_1101_0000_011: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetTpidrroEl0)); break;
|
case 0b11_011_1101_0000_011: EmitGetTpidrroEl0(context); return;
|
||||||
case 0b11_011_1110_0000_000: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntfrqEl0)); break;
|
case 0b11_011_1110_0000_000: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntfrqEl0)); break;
|
||||||
case 0b11_011_1110_0000_001: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntpctEl0)); break;
|
case 0b11_011_1110_0000_001: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntpctEl0)); break;
|
||||||
case 0b11_011_1110_0000_010: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntvctEl0)); break;
|
case 0b11_011_1110_0000_010: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntvctEl0)); break;
|
||||||
@@ -49,19 +49,15 @@ namespace ARMeilleure.Instructions
|
|||||||
{
|
{
|
||||||
OpCodeSystem op = (OpCodeSystem)context.CurrOp;
|
OpCodeSystem op = (OpCodeSystem)context.CurrOp;
|
||||||
|
|
||||||
MethodInfo info;
|
|
||||||
|
|
||||||
switch (GetPackedId(op))
|
switch (GetPackedId(op))
|
||||||
{
|
{
|
||||||
case 0b11_011_0100_0010_000: EmitSetNzcv(context); return;
|
case 0b11_011_0100_0010_000: EmitSetNzcv(context); return;
|
||||||
case 0b11_011_0100_0100_000: EmitSetFpcr(context); return;
|
case 0b11_011_0100_0100_000: EmitSetFpcr(context); return;
|
||||||
case 0b11_011_0100_0100_001: EmitSetFpsr(context); return;
|
case 0b11_011_0100_0100_001: EmitSetFpsr(context); return;
|
||||||
case 0b11_011_1101_0000_010: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.SetTpidrEl0)); break;
|
case 0b11_011_1101_0000_010: EmitSetTpidrEl0(context); return;
|
||||||
|
|
||||||
default: throw new NotImplementedException($"Unknown MSR 0x{op.RawOpCode:X8} at 0x{op.Address:X16}.");
|
default: throw new NotImplementedException($"Unknown MSR 0x{op.RawOpCode:X8} at 0x{op.Address:X16}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
context.Call(info, GetIntOrZR(context, op.Rt));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Nop(ArmEmitterContext context)
|
public static void Nop(ArmEmitterContext context)
|
||||||
@@ -165,6 +161,28 @@ namespace ARMeilleure.Instructions
|
|||||||
SetIntOrZR(context, op.Rt, fpsr);
|
SetIntOrZR(context, op.Rt, fpsr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void EmitGetTpidrEl0(ArmEmitterContext context)
|
||||||
|
{
|
||||||
|
OpCodeSystem op = (OpCodeSystem)context.CurrOp;
|
||||||
|
|
||||||
|
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
|
||||||
|
|
||||||
|
Operand result = context.Load(OperandType.I64, context.Add(nativeContext, Const((ulong)NativeContext.GetTpidrEl0Offset())));
|
||||||
|
|
||||||
|
SetIntOrZR(context, op.Rt, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void EmitGetTpidrroEl0(ArmEmitterContext context)
|
||||||
|
{
|
||||||
|
OpCodeSystem op = (OpCodeSystem)context.CurrOp;
|
||||||
|
|
||||||
|
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
|
||||||
|
|
||||||
|
Operand result = context.Load(OperandType.I64, context.Add(nativeContext, Const((ulong)NativeContext.GetTpidrroEl0Offset())));
|
||||||
|
|
||||||
|
SetIntOrZR(context, op.Rt, result);
|
||||||
|
}
|
||||||
|
|
||||||
private static void EmitSetNzcv(ArmEmitterContext context)
|
private static void EmitSetNzcv(ArmEmitterContext context)
|
||||||
{
|
{
|
||||||
OpCodeSystem op = (OpCodeSystem)context.CurrOp;
|
OpCodeSystem op = (OpCodeSystem)context.CurrOp;
|
||||||
@@ -215,5 +233,16 @@ namespace ARMeilleure.Instructions
|
|||||||
|
|
||||||
context.UpdateArmFpMode();
|
context.UpdateArmFpMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void EmitSetTpidrEl0(ArmEmitterContext context)
|
||||||
|
{
|
||||||
|
OpCodeSystem op = (OpCodeSystem)context.CurrOp;
|
||||||
|
|
||||||
|
Operand value = GetIntOrZR(context, op.Rt);
|
||||||
|
|
||||||
|
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
|
||||||
|
|
||||||
|
context.Store(context.Add(nativeContext, Const((ulong)NativeContext.GetTpidrEl0Offset())), value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,8 +23,6 @@ namespace ARMeilleure.Instructions
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MethodInfo info;
|
|
||||||
|
|
||||||
switch (op.CRn)
|
switch (op.CRn)
|
||||||
{
|
{
|
||||||
case 13: // Process and Thread Info.
|
case 13: // Process and Thread Info.
|
||||||
@@ -36,14 +34,12 @@ namespace ARMeilleure.Instructions
|
|||||||
switch (op.Opc2)
|
switch (op.Opc2)
|
||||||
{
|
{
|
||||||
case 2:
|
case 2:
|
||||||
info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.SetTpidrEl032)); break;
|
EmitSetTpidrEl0(context); return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new NotImplementedException($"Unknown MRC Opc2 0x{op.Opc2:X} at 0x{op.Address:X} (0x{op.RawOpCode:X}).");
|
throw new NotImplementedException($"Unknown MRC Opc2 0x{op.Opc2:X} at 0x{op.Address:X} (0x{op.RawOpCode:X}).");
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
switch (op.CRm) // Cache and Memory barrier.
|
switch (op.CRm) // Cache and Memory barrier.
|
||||||
{
|
{
|
||||||
@@ -64,8 +60,6 @@ namespace ARMeilleure.Instructions
|
|||||||
default:
|
default:
|
||||||
throw new NotImplementedException($"Unknown MRC 0x{op.RawOpCode:X8} at 0x{op.Address:X16}.");
|
throw new NotImplementedException($"Unknown MRC 0x{op.RawOpCode:X8} at 0x{op.Address:X16}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
context.Call(info, GetIntA32(context, op.Rt));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Mrc(ArmEmitterContext context)
|
public static void Mrc(ArmEmitterContext context)
|
||||||
@@ -79,7 +73,7 @@ namespace ARMeilleure.Instructions
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MethodInfo info;
|
Operand result;
|
||||||
|
|
||||||
switch (op.CRn)
|
switch (op.CRn)
|
||||||
{
|
{
|
||||||
@@ -92,10 +86,10 @@ namespace ARMeilleure.Instructions
|
|||||||
switch (op.Opc2)
|
switch (op.Opc2)
|
||||||
{
|
{
|
||||||
case 2:
|
case 2:
|
||||||
info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetTpidrEl032)); break;
|
result = EmitGetTpidrEl0(context); break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetTpidr32)); break;
|
result = EmitGetTpidrroEl0(context); break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new NotImplementedException($"Unknown MRC Opc2 0x{op.Opc2:X} at 0x{op.Address:X} (0x{op.RawOpCode:X}).");
|
throw new NotImplementedException($"Unknown MRC Opc2 0x{op.Opc2:X} at 0x{op.Address:X} (0x{op.RawOpCode:X}).");
|
||||||
@@ -110,13 +104,13 @@ namespace ARMeilleure.Instructions
|
|||||||
if (op.Rt == RegisterAlias.Aarch32Pc)
|
if (op.Rt == RegisterAlias.Aarch32Pc)
|
||||||
{
|
{
|
||||||
// Special behavior: copy NZCV flags into APSR.
|
// Special behavior: copy NZCV flags into APSR.
|
||||||
EmitSetNzcv(context, context.Call(info));
|
EmitSetNzcv(context, result);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetIntA32(context, op.Rt, context.Call(info));
|
SetIntA32(context, op.Rt, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,5 +318,34 @@ namespace ARMeilleure.Instructions
|
|||||||
|
|
||||||
context.UpdateArmFpMode();
|
context.UpdateArmFpMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Operand EmitGetTpidrEl0(ArmEmitterContext context)
|
||||||
|
{
|
||||||
|
OpCode32System op = (OpCode32System)context.CurrOp;
|
||||||
|
|
||||||
|
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
|
||||||
|
|
||||||
|
return context.Load(OperandType.I64, context.Add(nativeContext, Const((ulong)NativeContext.GetTpidrEl0Offset())));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Operand EmitGetTpidrroEl0(ArmEmitterContext context)
|
||||||
|
{
|
||||||
|
OpCode32System op = (OpCode32System)context.CurrOp;
|
||||||
|
|
||||||
|
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
|
||||||
|
|
||||||
|
return context.Load(OperandType.I64, context.Add(nativeContext, Const((ulong)NativeContext.GetTpidrroEl0Offset())));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void EmitSetTpidrEl0(ArmEmitterContext context)
|
||||||
|
{
|
||||||
|
OpCode32System op = (OpCode32System)context.CurrOp;
|
||||||
|
|
||||||
|
Operand value = GetIntA32(context, op.Rt);
|
||||||
|
|
||||||
|
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
|
||||||
|
|
||||||
|
context.Store(context.Add(nativeContext, Const((ulong)NativeContext.GetTpidrEl0Offset())), context.ZeroExtend32(OperandType.I64, value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -72,26 +72,6 @@ namespace ARMeilleure.Instructions
|
|||||||
return (ulong)GetContext().DczidEl0;
|
return (ulong)GetContext().DczidEl0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ulong GetTpidrEl0()
|
|
||||||
{
|
|
||||||
return (ulong)GetContext().TpidrEl0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static uint GetTpidrEl032()
|
|
||||||
{
|
|
||||||
return (uint)GetContext().TpidrEl0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ulong GetTpidrroEl0()
|
|
||||||
{
|
|
||||||
return (ulong)GetContext().TpidrroEl0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static uint GetTpidr32()
|
|
||||||
{
|
|
||||||
return (uint)GetContext().TpidrroEl0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ulong GetCntfrqEl0()
|
public static ulong GetCntfrqEl0()
|
||||||
{
|
{
|
||||||
return GetContext().CntfrqEl0;
|
return GetContext().CntfrqEl0;
|
||||||
@@ -106,16 +86,6 @@ namespace ARMeilleure.Instructions
|
|||||||
{
|
{
|
||||||
return GetContext().CntvctEl0;
|
return GetContext().CntvctEl0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SetTpidrEl0(ulong value)
|
|
||||||
{
|
|
||||||
GetContext().TpidrEl0 = (long)value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void SetTpidrEl032(uint value)
|
|
||||||
{
|
|
||||||
GetContext().TpidrEl0 = (long)value;
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region "Read"
|
#region "Read"
|
||||||
|
@@ -27,8 +27,17 @@ namespace ARMeilleure.State
|
|||||||
// Since EL2 isn't implemented, CNTVOFF_EL2 = 0
|
// Since EL2 isn't implemented, CNTVOFF_EL2 = 0
|
||||||
public ulong CntvctEl0 => CntpctEl0;
|
public ulong CntvctEl0 => CntpctEl0;
|
||||||
|
|
||||||
public long TpidrEl0 { get; set; }
|
public long TpidrEl0
|
||||||
public long TpidrroEl0 { get; set; }
|
{
|
||||||
|
get => _nativeContext.GetTpidrEl0();
|
||||||
|
set => _nativeContext.SetTpidrEl0(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long TpidrroEl0
|
||||||
|
{
|
||||||
|
get => _nativeContext.GetTpidrroEl0();
|
||||||
|
set => _nativeContext.SetTpidrroEl0(value);
|
||||||
|
}
|
||||||
|
|
||||||
public uint Pstate
|
public uint Pstate
|
||||||
{
|
{
|
||||||
|
@@ -13,6 +13,8 @@ namespace ARMeilleure.State
|
|||||||
public fixed ulong V[RegisterConsts.VecRegsCount * 2];
|
public fixed ulong V[RegisterConsts.VecRegsCount * 2];
|
||||||
public fixed uint Flags[RegisterConsts.FlagsCount];
|
public fixed uint Flags[RegisterConsts.FlagsCount];
|
||||||
public fixed uint FpFlags[RegisterConsts.FpFlagsCount];
|
public fixed uint FpFlags[RegisterConsts.FpFlagsCount];
|
||||||
|
public long TpidrEl0;
|
||||||
|
public long TpidrroEl0;
|
||||||
public int Counter;
|
public int Counter;
|
||||||
public ulong DispatchAddress;
|
public ulong DispatchAddress;
|
||||||
public ulong ExclusiveAddress;
|
public ulong ExclusiveAddress;
|
||||||
@@ -168,6 +170,12 @@ namespace ARMeilleure.State
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long GetTpidrEl0() => GetStorage().TpidrEl0;
|
||||||
|
public void SetTpidrEl0(long value) => GetStorage().TpidrEl0 = value;
|
||||||
|
|
||||||
|
public long GetTpidrroEl0() => GetStorage().TpidrroEl0;
|
||||||
|
public void SetTpidrroEl0(long value) => GetStorage().TpidrroEl0 = value;
|
||||||
|
|
||||||
public int GetCounter() => GetStorage().Counter;
|
public int GetCounter() => GetStorage().Counter;
|
||||||
public void SetCounter(int value) => GetStorage().Counter = value;
|
public void SetCounter(int value) => GetStorage().Counter = value;
|
||||||
|
|
||||||
@@ -214,6 +222,16 @@ namespace ARMeilleure.State
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int GetTpidrEl0Offset()
|
||||||
|
{
|
||||||
|
return StorageOffset(ref _dummyStorage, ref _dummyStorage.TpidrEl0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int GetTpidrroEl0Offset()
|
||||||
|
{
|
||||||
|
return StorageOffset(ref _dummyStorage, ref _dummyStorage.TpidrroEl0);
|
||||||
|
}
|
||||||
|
|
||||||
public static int GetCounterOffset()
|
public static int GetCounterOffset()
|
||||||
{
|
{
|
||||||
return StorageOffset(ref _dummyStorage, ref _dummyStorage.Counter);
|
return StorageOffset(ref _dummyStorage, ref _dummyStorage.Counter);
|
||||||
|
@@ -105,17 +105,11 @@ namespace ARMeilleure.Translation
|
|||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetDczidEl0)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetDczidEl0)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetFunctionAddress)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetFunctionAddress)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.InvalidateCacheLine)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.InvalidateCacheLine)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetTpidrroEl0)));
|
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetTpidr32))); // A32 only.
|
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetTpidrEl0)));
|
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetTpidrEl032))); // A32 only.
|
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadByte)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadByte)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt16)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt16)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt32)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt32)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt64)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt64)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadVector128)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadVector128)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SetTpidrEl0)));
|
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SetTpidrEl032))); // A32 only.
|
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SignalMemoryTracking)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SignalMemoryTracking)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SupervisorCall)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SupervisorCall)));
|
||||||
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ThrowInvalidMemoryAccess)));
|
SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ThrowInvalidMemoryAccess)));
|
||||||
|
@@ -30,7 +30,7 @@ namespace ARMeilleure.Translation.PTC
|
|||||||
private const string OuterHeaderMagicString = "PTCohd\0\0";
|
private const string OuterHeaderMagicString = "PTCohd\0\0";
|
||||||
private const string InnerHeaderMagicString = "PTCihd\0\0";
|
private const string InnerHeaderMagicString = "PTCihd\0\0";
|
||||||
|
|
||||||
private const uint InternalVersion = 4626; //! To be incremented manually for each change to the ARMeilleure project.
|
private const uint InternalVersion = 4661; //! To be incremented manually for each change to the ARMeilleure project.
|
||||||
|
|
||||||
private const string ActualDir = "0";
|
private const string ActualDir = "0";
|
||||||
private const string BackupDir = "1";
|
private const string BackupDir = "1";
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
<PackageVersion Include="CommandLineParser" Version="2.9.1" />
|
<PackageVersion Include="CommandLineParser" Version="2.9.1" />
|
||||||
<PackageVersion Include="Concentus" Version="1.1.7" />
|
<PackageVersion Include="Concentus" Version="1.1.7" />
|
||||||
<PackageVersion Include="DiscordRichPresence" Version="1.1.3.18" />
|
<PackageVersion Include="DiscordRichPresence" Version="1.1.3.18" />
|
||||||
<PackageVersion Include="DynamicData" Version="7.13.1" />
|
<PackageVersion Include="DynamicData" Version="7.13.5" />
|
||||||
<PackageVersion Include="FluentAvaloniaUI" Version="1.4.5" />
|
<PackageVersion Include="FluentAvaloniaUI" Version="1.4.5" />
|
||||||
<PackageVersion Include="GtkSharp.Dependencies" Version="1.1.1" />
|
<PackageVersion Include="GtkSharp.Dependencies" Version="1.1.1" />
|
||||||
<PackageVersion Include="GtkSharp.Dependencies.osx" Version="0.0.5" />
|
<PackageVersion Include="GtkSharp.Dependencies.osx" Version="0.0.5" />
|
||||||
@@ -44,9 +44,9 @@
|
|||||||
<PackageVersion Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta11" />
|
<PackageVersion Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta11" />
|
||||||
<PackageVersion Include="SPB" Version="0.0.4-build28" />
|
<PackageVersion Include="SPB" Version="0.0.4-build28" />
|
||||||
<PackageVersion Include="System.Drawing.Common" Version="7.0.0" />
|
<PackageVersion Include="System.Drawing.Common" Version="7.0.0" />
|
||||||
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="6.28.1" />
|
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="6.29.0" />
|
||||||
<PackageVersion Include="System.IO.Hashing" Version="7.0.0" />
|
<PackageVersion Include="System.IO.Hashing" Version="7.0.0" />
|
||||||
<PackageVersion Include="System.Management" Version="7.0.0" />
|
<PackageVersion Include="System.Management" Version="7.0.1" />
|
||||||
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" />
|
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" />
|
||||||
<PackageVersion Include="XamlNameReferenceGenerator" Version="1.6.1" />
|
<PackageVersion Include="XamlNameReferenceGenerator" Version="1.6.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
## Compatibility
|
## Compatibility
|
||||||
|
|
||||||
As of November 2022, Ryujinx has been tested on approximately 3,800 titles; over 3,600 boot past menus and into gameplay, with roughly 3,200 of those being considered playable.
|
As of April 2023, Ryujinx has been tested on approximately 4,050 titles; over 4,000 boot past menus and into gameplay, with roughly 3,400 of those being considered playable.
|
||||||
You can check out the compatibility list [here](https://github.com/Ryujinx/Ryujinx-Games-List/issues). Anyone is free to submit a new game test or update an existing game test entry; simply follow the new issue template and testing guidelines, or post as a reply to the applicable game issue. Use the search function to see if a game has been tested already!
|
You can check out the compatibility list [here](https://github.com/Ryujinx/Ryujinx-Games-List/issues). Anyone is free to submit a new game test or update an existing game test entry; simply follow the new issue template and testing guidelines, or post as a reply to the applicable game issue. Use the search function to see if a game has been tested already!
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
@@ -177,6 +177,8 @@ namespace Ryujinx.Ava
|
|||||||
ConfigurationState.Instance.Graphics.ScalingFilter.Event += UpdateScalingFilter;
|
ConfigurationState.Instance.Graphics.ScalingFilter.Event += UpdateScalingFilter;
|
||||||
ConfigurationState.Instance.Graphics.ScalingFilterLevel.Event += UpdateScalingFilterLevel;
|
ConfigurationState.Instance.Graphics.ScalingFilterLevel.Event += UpdateScalingFilterLevel;
|
||||||
|
|
||||||
|
ConfigurationState.Instance.Multiplayer.LanInterfaceId.Event += UpdateLanInterfaceIdState;
|
||||||
|
|
||||||
_gpuCancellationTokenSource = new CancellationTokenSource();
|
_gpuCancellationTokenSource = new CancellationTokenSource();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,17 +323,15 @@ namespace Ryujinx.Ava
|
|||||||
_viewModel.IsGameRunning = true;
|
_viewModel.IsGameRunning = true;
|
||||||
|
|
||||||
var activeProcess = Device.Processes.ActiveApplication;
|
var activeProcess = Device.Processes.ActiveApplication;
|
||||||
var nacp = activeProcess.ApplicationControlProperties;
|
|
||||||
int desiredLanguage = (int)Device.System.State.DesiredTitleLanguage;
|
|
||||||
|
|
||||||
string titleNameSection = string.IsNullOrWhiteSpace(nacp.Title[desiredLanguage].NameString.ToString()) ? string.Empty : $" - {nacp.Title[desiredLanguage].NameString.ToString()}";
|
string titleNameSection = string.IsNullOrWhiteSpace(activeProcess.Name) ? string.Empty : $" {activeProcess.Name}";
|
||||||
string titleVersionSection = string.IsNullOrWhiteSpace(nacp.DisplayVersionString.ToString()) ? string.Empty : $" v{nacp.DisplayVersionString.ToString()}";
|
string titleVersionSection = string.IsNullOrWhiteSpace(activeProcess.DisplayVersion) ? string.Empty : $" v{activeProcess.DisplayVersion}";
|
||||||
string titleIdSection = string.IsNullOrWhiteSpace(activeProcess.ProgramIdText) ? string.Empty : $" ({activeProcess.ProgramIdText.ToUpper()})";
|
string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})";
|
||||||
string titleArchSection = activeProcess.Is64Bit ? " (64-bit)" : " (32-bit)";
|
string titleArchSection = activeProcess.Is64Bit ? " (64-bit)" : " (32-bit)";
|
||||||
|
|
||||||
Dispatcher.UIThread.InvokeAsync(() =>
|
Dispatcher.UIThread.InvokeAsync(() =>
|
||||||
{
|
{
|
||||||
_viewModel.Title = $"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}";
|
_viewModel.Title = $"Ryujinx {Program.Version} -{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}";
|
||||||
});
|
});
|
||||||
|
|
||||||
_viewModel.SetUIProgressHandlers(Device);
|
_viewModel.SetUIProgressHandlers(Device);
|
||||||
@@ -385,6 +385,11 @@ namespace Ryujinx.Ava
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateLanInterfaceIdState(object sender, ReactiveEventArgs<string> e)
|
||||||
|
{
|
||||||
|
Device.Configuration.MultiplayerLanInterfaceId = e.NewValue;
|
||||||
|
}
|
||||||
|
|
||||||
public void Stop()
|
public void Stop()
|
||||||
{
|
{
|
||||||
_isActive = false;
|
_isActive = false;
|
||||||
@@ -741,7 +746,8 @@ namespace Ryujinx.Ava
|
|||||||
ConfigurationState.Instance.System.IgnoreMissingServices,
|
ConfigurationState.Instance.System.IgnoreMissingServices,
|
||||||
ConfigurationState.Instance.Graphics.AspectRatio,
|
ConfigurationState.Instance.Graphics.AspectRatio,
|
||||||
ConfigurationState.Instance.System.AudioVolume,
|
ConfigurationState.Instance.System.AudioVolume,
|
||||||
ConfigurationState.Instance.System.UseHypervisor);
|
ConfigurationState.Instance.System.UseHypervisor,
|
||||||
|
ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value);
|
||||||
|
|
||||||
Device = new Switch(configuration);
|
Device = new Switch(configuration);
|
||||||
}
|
}
|
||||||
|
@@ -429,6 +429,7 @@
|
|||||||
"DlcManagerEnableAllButton": "Enable All",
|
"DlcManagerEnableAllButton": "Enable All",
|
||||||
"DlcManagerDisableAllButton": "Disable All",
|
"DlcManagerDisableAllButton": "Disable All",
|
||||||
"MenuBarOptionsChangeLanguage": "Change Language",
|
"MenuBarOptionsChangeLanguage": "Change Language",
|
||||||
|
"MenuBarShowFileTypes": "Show File Types",
|
||||||
"CommonSort": "Sort",
|
"CommonSort": "Sort",
|
||||||
"CommonShowNames": "Show Names",
|
"CommonShowNames": "Show Names",
|
||||||
"CommonFavorite": "Favorite",
|
"CommonFavorite": "Favorite",
|
||||||
@@ -637,5 +638,8 @@
|
|||||||
"SmaaHigh": "SMAA High",
|
"SmaaHigh": "SMAA High",
|
||||||
"SmaaUltra": "SMAA Ultra",
|
"SmaaUltra": "SMAA Ultra",
|
||||||
"UserEditorTitle" : "Edit User",
|
"UserEditorTitle" : "Edit User",
|
||||||
"UserEditorTitleCreate" : "Create User"
|
"UserEditorTitleCreate" : "Create User",
|
||||||
|
"SettingsTabNetworkInterface": "Network Interface:",
|
||||||
|
"NetworkInterfaceTooltip": "The network interface used for LAN features",
|
||||||
|
"NetworkInterfaceDefault": "Default"
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,7 @@ using LibHac.Tools.Fs;
|
|||||||
using LibHac.Tools.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
using LibHac.Tools.FsSystem.NcaUtils;
|
using LibHac.Tools.FsSystem.NcaUtils;
|
||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
|
using Ryujinx.Ava.UI.Controls;
|
||||||
using Ryujinx.Ava.UI.Helpers;
|
using Ryujinx.Ava.UI.Helpers;
|
||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
@@ -152,25 +153,17 @@ namespace Ryujinx.Ava.Common
|
|||||||
string destination = await folderDialog.ShowAsync(_owner);
|
string destination = await folderDialog.ShowAsync(_owner);
|
||||||
var cancellationToken = new CancellationTokenSource();
|
var cancellationToken = new CancellationTokenSource();
|
||||||
|
|
||||||
|
UpdateWaitWindow waitingDialog = new(
|
||||||
|
LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle],
|
||||||
|
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogNcaExtractionMessage, ncaSectionType, Path.GetFileName(titleFilePath)),
|
||||||
|
cancellationToken);
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(destination))
|
if (!string.IsNullOrWhiteSpace(destination))
|
||||||
{
|
{
|
||||||
Thread extractorThread = new(() =>
|
Thread extractorThread = new(() =>
|
||||||
{
|
{
|
||||||
Dispatcher.UIThread.Post(async () =>
|
Dispatcher.UIThread.Post(waitingDialog.Show);
|
||||||
{
|
|
||||||
UserResult result = await ContentDialogHelper.CreateConfirmationDialog(
|
|
||||||
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogNcaExtractionMessage, ncaSectionType, Path.GetFileName(titleFilePath)),
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
LocaleManager.Instance[LocaleKeys.InputDialogCancel],
|
|
||||||
LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle]);
|
|
||||||
|
|
||||||
if (result == UserResult.Cancel)
|
|
||||||
{
|
|
||||||
cancellationToken.Cancel();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
using FileStream file = new(titleFilePath, FileMode.Open, FileAccess.Read);
|
using FileStream file = new(titleFilePath, FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
Nca mainNca = null;
|
Nca mainNca = null;
|
||||||
@@ -222,6 +215,8 @@ namespace Ryujinx.Ava.Common
|
|||||||
|
|
||||||
Dispatcher.UIThread.InvokeAsync(async () =>
|
Dispatcher.UIThread.InvokeAsync(async () =>
|
||||||
{
|
{
|
||||||
|
waitingDialog.Close();
|
||||||
|
|
||||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogNcaExtractionMainNcaNotFoundErrorMessage]);
|
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogNcaExtractionMainNcaNotFoundErrorMessage]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -263,11 +258,15 @@ namespace Ryujinx.Ava.Common
|
|||||||
|
|
||||||
Dispatcher.UIThread.InvokeAsync(async () =>
|
Dispatcher.UIThread.InvokeAsync(async () =>
|
||||||
{
|
{
|
||||||
|
waitingDialog.Close();
|
||||||
|
|
||||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogNcaExtractionCheckLogErrorMessage]);
|
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogNcaExtractionCheckLogErrorMessage]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else if (resultCode.Value.IsSuccess())
|
else if (resultCode.Value.IsSuccess())
|
||||||
{
|
{
|
||||||
|
Dispatcher.UIThread.Post(waitingDialog.Close);
|
||||||
|
|
||||||
NotificationHelper.Show(
|
NotificationHelper.Show(
|
||||||
LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle],
|
LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle],
|
||||||
$"{titleName}\n\n{LocaleManager.Instance[LocaleKeys.DialogNcaExtractionSuccessMessage]}",
|
$"{titleName}\n\n{LocaleManager.Instance[LocaleKeys.DialogNcaExtractionSuccessMessage]}",
|
||||||
@@ -284,6 +283,8 @@ namespace Ryujinx.Ava.Common
|
|||||||
|
|
||||||
Dispatcher.UIThread.InvokeAsync(async () =>
|
Dispatcher.UIThread.InvokeAsync(async () =>
|
||||||
{
|
{
|
||||||
|
waitingDialog.Close();
|
||||||
|
|
||||||
await ContentDialogHelper.CreateErrorDialog(ex.Message);
|
await ContentDialogHelper.CreateErrorDialog(ex.Message);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -730,7 +730,7 @@ namespace Ryujinx.Modules
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return files;
|
return files.Where(f => !new FileInfo(f).Attributes.HasFlag(FileAttributes.Hidden | FileAttributes.System));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void MoveAllFilesOver(string root, string dest, TaskDialog taskDialog)
|
private static void MoveAllFilesOver(string root, string dest, TaskDialog taskDialog)
|
||||||
|
@@ -53,6 +53,8 @@ namespace Ryujinx.Ava.UI.Applet
|
|||||||
|
|
||||||
bool opened = false;
|
bool opened = false;
|
||||||
|
|
||||||
|
_parent.Activate();
|
||||||
|
|
||||||
UserResult response = await ContentDialogHelper.ShowDeferredContentDialog(_parent,
|
UserResult response = await ContentDialogHelper.ShowDeferredContentDialog(_parent,
|
||||||
title,
|
title,
|
||||||
message,
|
message,
|
||||||
|
@@ -48,6 +48,7 @@
|
|||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
Focusable="True"
|
||||||
KeyUp="Message_KeyUp"
|
KeyUp="Message_KeyUp"
|
||||||
Text="{Binding Message}"
|
Text="{Binding Message}"
|
||||||
TextInput="Message_TextInput"
|
TextInput="Message_TextInput"
|
||||||
@@ -61,4 +62,4 @@
|
|||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
@@ -23,10 +23,11 @@ namespace Ryujinx.Ava.UI.Controls
|
|||||||
|
|
||||||
private ContentDialog _host;
|
private ContentDialog _host;
|
||||||
|
|
||||||
public SwkbdAppletDialog(string mainText, string secondaryText, string placeholder)
|
public SwkbdAppletDialog(string mainText, string secondaryText, string placeholder, string message)
|
||||||
{
|
{
|
||||||
MainText = mainText;
|
MainText = mainText;
|
||||||
SecondaryText = secondaryText;
|
SecondaryText = secondaryText;
|
||||||
|
Message = message ?? "";
|
||||||
DataContext = this;
|
DataContext = this;
|
||||||
_placeholder = placeholder;
|
_placeholder = placeholder;
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@@ -44,6 +45,13 @@ namespace Ryujinx.Ava.UI.Controls
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnGotFocus(GotFocusEventArgs e)
|
||||||
|
{
|
||||||
|
// FIXME: This does not work. Might be a bug in Avalonia with DialogHost
|
||||||
|
// Currently focus will be redirected to the overlay window instead.
|
||||||
|
Input.Focus();
|
||||||
|
}
|
||||||
|
|
||||||
public string Message { get; set; } = "";
|
public string Message { get; set; } = "";
|
||||||
public string MainText { get; set; } = "";
|
public string MainText { get; set; } = "";
|
||||||
public string SecondaryText { get; set; } = "";
|
public string SecondaryText { get; set; } = "";
|
||||||
@@ -54,31 +62,10 @@ namespace Ryujinx.Ava.UI.Controls
|
|||||||
|
|
||||||
UserResult result = UserResult.Cancel;
|
UserResult result = UserResult.Cancel;
|
||||||
|
|
||||||
SwkbdAppletDialog content = new SwkbdAppletDialog(args.HeaderText, args.SubtitleText, args.GuideText)
|
SwkbdAppletDialog content = new SwkbdAppletDialog(args.HeaderText, args.SubtitleText, args.GuideText, args.InitialText);
|
||||||
{
|
|
||||||
Message = args.InitialText ?? ""
|
|
||||||
};
|
|
||||||
|
|
||||||
string input = string.Empty;
|
string input = string.Empty;
|
||||||
|
|
||||||
var overlay = new ContentDialogOverlayWindow()
|
|
||||||
{
|
|
||||||
Height = window.Bounds.Height,
|
|
||||||
Width = window.Bounds.Width,
|
|
||||||
Position = window.PointToScreen(new Point())
|
|
||||||
};
|
|
||||||
|
|
||||||
window.PositionChanged += OverlayOnPositionChanged;
|
|
||||||
|
|
||||||
void OverlayOnPositionChanged(object sender, PixelPointEventArgs e)
|
|
||||||
{
|
|
||||||
overlay.Position = window.PointToScreen(new Point());
|
|
||||||
}
|
|
||||||
|
|
||||||
contentDialog = overlay.ContentDialog;
|
|
||||||
|
|
||||||
bool opened = false;
|
|
||||||
|
|
||||||
content.SetInputLengthValidation(args.StringLengthMin, args.StringLengthMax);
|
content.SetInputLengthValidation(args.StringLengthMin, args.StringLengthMax);
|
||||||
|
|
||||||
content._host = contentDialog;
|
content._host = contentDialog;
|
||||||
@@ -99,25 +86,7 @@ namespace Ryujinx.Ava.UI.Controls
|
|||||||
};
|
};
|
||||||
contentDialog.Closed += handler;
|
contentDialog.Closed += handler;
|
||||||
|
|
||||||
overlay.Opened += OverlayOnActivated;
|
await ContentDialogHelper.ShowAsync(contentDialog);
|
||||||
|
|
||||||
async void OverlayOnActivated(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (opened)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
opened = true;
|
|
||||||
|
|
||||||
overlay.Position = window.PointToScreen(new Point());
|
|
||||||
|
|
||||||
await contentDialog.ShowAsync(overlay);
|
|
||||||
contentDialog.Closed -= handler;
|
|
||||||
overlay.Close();
|
|
||||||
};
|
|
||||||
|
|
||||||
await overlay.ShowDialog(window);
|
|
||||||
|
|
||||||
return (result, input);
|
return (result, input);
|
||||||
}
|
}
|
||||||
|
@@ -1,32 +0,0 @@
|
|||||||
<UserControl
|
|
||||||
x:Class="Ryujinx.Ava.UI.Controls.InputDialog"
|
|
||||||
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"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
Focusable="True">
|
|
||||||
<Grid
|
|
||||||
Margin="5,10,5,5"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Center">
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="Auto" />
|
|
||||||
<RowDefinition Height="Auto" />
|
|
||||||
<RowDefinition Height="Auto" />
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<TextBlock HorizontalAlignment="Center" Text="{Binding Message}" />
|
|
||||||
<TextBox
|
|
||||||
Grid.Row="1"
|
|
||||||
Width="300"
|
|
||||||
Margin="10"
|
|
||||||
HorizontalAlignment="Center"
|
|
||||||
MaxLength="{Binding MaxLength}"
|
|
||||||
Text="{Binding Input, Mode=TwoWay}" />
|
|
||||||
<TextBlock
|
|
||||||
Grid.Row="2"
|
|
||||||
Margin="5,5,5,10"
|
|
||||||
HorizontalAlignment="Center"
|
|
||||||
Text="{Binding SubMessage}" />
|
|
||||||
</Grid>
|
|
||||||
</UserControl>
|
|
@@ -1,57 +0,0 @@
|
|||||||
using Avalonia.Controls;
|
|
||||||
using FluentAvalonia.UI.Controls;
|
|
||||||
using Ryujinx.Ava.Common.Locale;
|
|
||||||
using Ryujinx.Ava.UI.Helpers;
|
|
||||||
using Ryujinx.Ava.UI.Models;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Controls
|
|
||||||
{
|
|
||||||
public partial class InputDialog : UserControl
|
|
||||||
{
|
|
||||||
public string Message { get; set; }
|
|
||||||
public string Input { get; set; }
|
|
||||||
public string SubMessage { get; set; }
|
|
||||||
|
|
||||||
public uint MaxLength { get; }
|
|
||||||
|
|
||||||
public InputDialog(string message, string input = "", string subMessage = "", uint maxLength = int.MaxValue)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
Input = input;
|
|
||||||
SubMessage = subMessage;
|
|
||||||
MaxLength = maxLength;
|
|
||||||
|
|
||||||
DataContext = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public InputDialog()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task<(UserResult Result, string Input)> ShowInputDialog(string title, string message,
|
|
||||||
string input = "", string subMessage = "", uint maxLength = int.MaxValue)
|
|
||||||
{
|
|
||||||
UserResult result = UserResult.Cancel;
|
|
||||||
|
|
||||||
InputDialog content = new InputDialog(message, input, subMessage, maxLength);
|
|
||||||
ContentDialog contentDialog = new ContentDialog
|
|
||||||
{
|
|
||||||
Title = title,
|
|
||||||
PrimaryButtonText = LocaleManager.Instance[LocaleKeys.InputDialogOk],
|
|
||||||
SecondaryButtonText = "",
|
|
||||||
CloseButtonText = LocaleManager.Instance[LocaleKeys.InputDialogCancel],
|
|
||||||
Content = content,
|
|
||||||
PrimaryButtonCommand = MiniCommand.Create(() =>
|
|
||||||
{
|
|
||||||
result = UserResult.Ok;
|
|
||||||
input = content.Input;
|
|
||||||
})
|
|
||||||
};
|
|
||||||
await contentDialog.ShowAsync();
|
|
||||||
|
|
||||||
return (result, input);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,15 +1,26 @@
|
|||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Controls
|
namespace Ryujinx.Ava.UI.Controls
|
||||||
{
|
{
|
||||||
public partial class UpdateWaitWindow : StyleableWindow
|
public partial class UpdateWaitWindow : StyleableWindow
|
||||||
{
|
{
|
||||||
|
public UpdateWaitWindow(string primaryText, string secondaryText, CancellationTokenSource cancellationToken) : this(primaryText, secondaryText)
|
||||||
|
{
|
||||||
|
SystemDecorations = SystemDecorations.Full;
|
||||||
|
ShowInTaskbar = true;
|
||||||
|
|
||||||
|
Closing += (_, _) => cancellationToken.Cancel();
|
||||||
|
}
|
||||||
|
|
||||||
public UpdateWaitWindow(string primaryText, string secondaryText) : this()
|
public UpdateWaitWindow(string primaryText, string secondaryText) : this()
|
||||||
{
|
{
|
||||||
PrimaryText.Text = primaryText;
|
PrimaryText.Text = primaryText;
|
||||||
SecondaryText.Text = secondaryText;
|
SecondaryText.Text = secondaryText;
|
||||||
WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
||||||
|
SystemDecorations = SystemDecorations.BorderOnly;
|
||||||
|
ShowInTaskbar = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UpdateWaitWindow()
|
public UpdateWaitWindow()
|
||||||
|
@@ -27,7 +27,6 @@ namespace Ryujinx.Ava.UI.Helpers
|
|||||||
string closeButton,
|
string closeButton,
|
||||||
UserResult primaryButtonResult = UserResult.Ok,
|
UserResult primaryButtonResult = UserResult.Ok,
|
||||||
ManualResetEvent deferResetEvent = null,
|
ManualResetEvent deferResetEvent = null,
|
||||||
Func<Window, Task> doWhileDeferred = null,
|
|
||||||
TypedEventHandler<ContentDialog, ContentDialogButtonClickEventArgs> deferCloseAction = null)
|
TypedEventHandler<ContentDialog, ContentDialogButtonClickEventArgs> deferCloseAction = null)
|
||||||
{
|
{
|
||||||
UserResult result = UserResult.None;
|
UserResult result = UserResult.None;
|
||||||
@@ -78,12 +77,11 @@ namespace Ryujinx.Ava.UI.Helpers
|
|||||||
int iconSymbol,
|
int iconSymbol,
|
||||||
UserResult primaryButtonResult = UserResult.Ok,
|
UserResult primaryButtonResult = UserResult.Ok,
|
||||||
ManualResetEvent deferResetEvent = null,
|
ManualResetEvent deferResetEvent = null,
|
||||||
Func<Window, Task> doWhileDeferred = null,
|
|
||||||
TypedEventHandler<ContentDialog, ContentDialogButtonClickEventArgs> deferCloseAction = null)
|
TypedEventHandler<ContentDialog, ContentDialogButtonClickEventArgs> deferCloseAction = null)
|
||||||
{
|
{
|
||||||
Grid content = CreateTextDialogContent(primaryText, secondaryText, iconSymbol);
|
Grid content = CreateTextDialogContent(primaryText, secondaryText, iconSymbol);
|
||||||
|
|
||||||
return await ShowContentDialog(title, content, primaryButton, secondaryButton, closeButton, primaryButtonResult, deferResetEvent, doWhileDeferred, deferCloseAction);
|
return await ShowContentDialog(title, content, primaryButton, secondaryButton, closeButton, primaryButtonResult, deferResetEvent, deferCloseAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async static Task<UserResult> ShowDeferredContentDialog(
|
public async static Task<UserResult> ShowDeferredContentDialog(
|
||||||
@@ -111,7 +109,6 @@ namespace Ryujinx.Ava.UI.Helpers
|
|||||||
iconSymbol,
|
iconSymbol,
|
||||||
primaryButton == LocaleManager.Instance[LocaleKeys.InputDialogYes] ? UserResult.Yes : UserResult.Ok,
|
primaryButton == LocaleManager.Instance[LocaleKeys.InputDialogYes] ? UserResult.Yes : UserResult.Ok,
|
||||||
deferResetEvent,
|
deferResetEvent,
|
||||||
doWhileDeferred,
|
|
||||||
DeferClose);
|
DeferClose);
|
||||||
|
|
||||||
async void DeferClose(ContentDialog sender, ContentDialogButtonClickEventArgs args)
|
async void DeferClose(ContentDialog sender, ContentDialogButtonClickEventArgs args)
|
||||||
@@ -236,11 +233,6 @@ namespace Ryujinx.Ava.UI.Helpers
|
|||||||
primaryButtonResult);
|
primaryButtonResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static UpdateWaitWindow CreateWaitingDialog(string mainText, string secondaryText)
|
|
||||||
{
|
|
||||||
return new(mainText, secondaryText);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static async Task CreateUpdaterInfoDialog(string primary, string secondaryText)
|
internal static async Task CreateUpdaterInfoDialog(string primary, string secondaryText)
|
||||||
{
|
{
|
||||||
await ShowTextDialog(
|
await ShowTextDialog(
|
||||||
@@ -319,28 +311,6 @@ namespace Ryujinx.Ava.UI.Helpers
|
|||||||
LocaleManager.Instance[LocaleKeys.DialogExitSubMessage]);
|
LocaleManager.Instance[LocaleKeys.DialogExitSubMessage]);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task<string> CreateInputDialog(
|
|
||||||
string title,
|
|
||||||
string mainText,
|
|
||||||
string subText,
|
|
||||||
uint maxLength = int.MaxValue,
|
|
||||||
string input = "")
|
|
||||||
{
|
|
||||||
var result = await InputDialog.ShowInputDialog(
|
|
||||||
title,
|
|
||||||
mainText,
|
|
||||||
input,
|
|
||||||
subText,
|
|
||||||
maxLength);
|
|
||||||
|
|
||||||
if (result.Result == UserResult.Ok)
|
|
||||||
{
|
|
||||||
return result.Input;
|
|
||||||
}
|
|
||||||
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task<ContentDialogResult> ShowAsync(ContentDialog contentDialog)
|
public static async Task<ContentDialogResult> ShowAsync(ContentDialog contentDialog)
|
||||||
{
|
{
|
||||||
ContentDialogResult result;
|
ContentDialogResult result;
|
||||||
|
@@ -972,7 +972,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
LocaleManager.Instance[LocaleKeys.InputDialogNo],
|
LocaleManager.Instance[LocaleKeys.InputDialogNo],
|
||||||
LocaleManager.Instance[LocaleKeys.RyujinxConfirm]);
|
LocaleManager.Instance[LocaleKeys.RyujinxConfirm]);
|
||||||
|
|
||||||
UpdateWaitWindow waitingDialog = ContentDialogHelper.CreateWaitingDialog(dialogTitle, LocaleManager.Instance[LocaleKeys.DialogFirmwareInstallerFirmwareInstallWaitMessage]);
|
UpdateWaitWindow waitingDialog = new(dialogTitle, LocaleManager.Instance[LocaleKeys.DialogFirmwareInstallerFirmwareInstallWaitMessage]);
|
||||||
|
|
||||||
if (result == UserResult.Yes)
|
if (result == UserResult.Yes)
|
||||||
{
|
{
|
||||||
@@ -1336,6 +1336,23 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ToggleFileType(string fileType)
|
||||||
|
{
|
||||||
|
_ = fileType switch
|
||||||
|
{
|
||||||
|
"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),
|
||||||
|
};
|
||||||
|
|
||||||
|
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
||||||
|
LoadApplications();
|
||||||
|
}
|
||||||
|
|
||||||
public async void ManageProfiles()
|
public async void ManageProfiles()
|
||||||
{
|
{
|
||||||
await NavigationDialogHost.Show(AccountManager, ContentManager, VirtualFileSystem, LibHacHorizonManager.RyujinxClient);
|
await NavigationDialogHost.Show(AccountManager, ContentManager, VirtualFileSystem, LibHacHorizonManager.RyujinxClient);
|
||||||
|
@@ -23,6 +23,7 @@ using System.Collections.Generic;
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Net.NetworkInformation;
|
||||||
using TimeZone = Ryujinx.Ava.UI.Models.TimeZone;
|
using TimeZone = Ryujinx.Ava.UI.Models.TimeZone;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.ViewModels
|
namespace Ryujinx.Ava.UI.ViewModels
|
||||||
@@ -35,6 +36,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
private readonly List<string> _validTzRegions;
|
private readonly List<string> _validTzRegions;
|
||||||
|
|
||||||
|
private readonly Dictionary<string, string> _networkInterfaces;
|
||||||
|
|
||||||
private float _customResolutionScale;
|
private float _customResolutionScale;
|
||||||
private int _resolutionScale;
|
private int _resolutionScale;
|
||||||
private int _graphicsBackendMultithreadingIndex;
|
private int _graphicsBackendMultithreadingIndex;
|
||||||
@@ -50,6 +53,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public event Action CloseWindow;
|
public event Action CloseWindow;
|
||||||
public event Action SaveSettingsEvent;
|
public event Action SaveSettingsEvent;
|
||||||
|
private int _networkInterfaceIndex;
|
||||||
|
|
||||||
public int ResolutionScale
|
public int ResolutionScale
|
||||||
{
|
{
|
||||||
@@ -240,6 +244,11 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
public AvaloniaList<string> GameDirectories { get; set; }
|
public AvaloniaList<string> GameDirectories { get; set; }
|
||||||
public ObservableCollection<ComboBoxItem> AvailableGpus { get; set; }
|
public ObservableCollection<ComboBoxItem> AvailableGpus { get; set; }
|
||||||
|
|
||||||
|
public AvaloniaList<string> NetworkInterfaceList
|
||||||
|
{
|
||||||
|
get => new AvaloniaList<string>(_networkInterfaces.Keys);
|
||||||
|
}
|
||||||
|
|
||||||
public KeyboardHotkeys KeyboardHotkeys
|
public KeyboardHotkeys KeyboardHotkeys
|
||||||
{
|
{
|
||||||
get => _keyboardHotkeys;
|
get => _keyboardHotkeys;
|
||||||
@@ -251,6 +260,16 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int NetworkInterfaceIndex
|
||||||
|
{
|
||||||
|
get => _networkInterfaceIndex;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_networkInterfaceIndex = value != -1 ? value : 0;
|
||||||
|
ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value = _networkInterfaces[NetworkInterfaceList[_networkInterfaceIndex]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public SettingsViewModel(VirtualFileSystem virtualFileSystem, ContentManager contentManager) : this()
|
public SettingsViewModel(VirtualFileSystem virtualFileSystem, ContentManager contentManager) : this()
|
||||||
{
|
{
|
||||||
_virtualFileSystem = virtualFileSystem;
|
_virtualFileSystem = virtualFileSystem;
|
||||||
@@ -267,8 +286,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
TimeZones = new AvaloniaList<TimeZone>();
|
TimeZones = new AvaloniaList<TimeZone>();
|
||||||
AvailableGpus = new ObservableCollection<ComboBoxItem>();
|
AvailableGpus = new ObservableCollection<ComboBoxItem>();
|
||||||
_validTzRegions = new List<string>();
|
_validTzRegions = new List<string>();
|
||||||
|
_networkInterfaces = new Dictionary<string, string>();
|
||||||
|
|
||||||
CheckSoundBackends();
|
CheckSoundBackends();
|
||||||
|
PopulateNetworkInterfaces();
|
||||||
|
|
||||||
if (Program.PreviewerDetached)
|
if (Program.PreviewerDetached)
|
||||||
{
|
{
|
||||||
@@ -327,6 +348,17 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void PopulateNetworkInterfaces()
|
||||||
|
{
|
||||||
|
_networkInterfaces.Clear();
|
||||||
|
_networkInterfaces.Add(LocaleManager.Instance[LocaleKeys.NetworkInterfaceDefault], "0");
|
||||||
|
|
||||||
|
foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces())
|
||||||
|
{
|
||||||
|
_networkInterfaces.Add(networkInterface.Name, networkInterface.Id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void ValidateAndSetTimeZone(string location)
|
public void ValidateAndSetTimeZone(string location)
|
||||||
{
|
{
|
||||||
if (_validTzRegions.Contains(location))
|
if (_validTzRegions.Contains(location))
|
||||||
@@ -414,6 +446,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
EnableFsAccessLog = config.Logger.EnableFsAccessLog;
|
EnableFsAccessLog = config.Logger.EnableFsAccessLog;
|
||||||
FsGlobalAccessLogMode = config.System.FsGlobalAccessLogMode;
|
FsGlobalAccessLogMode = config.System.FsGlobalAccessLogMode;
|
||||||
OpenglDebugLevel = (int)config.Logger.GraphicsDebugLevel.Value;
|
OpenglDebugLevel = (int)config.Logger.GraphicsDebugLevel.Value;
|
||||||
|
|
||||||
|
NetworkInterfaceIndex = _networkInterfaces.Values.ToList().IndexOf(config.Multiplayer.LanInterfaceId.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveSettings()
|
public void SaveSettings()
|
||||||
@@ -515,6 +549,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
config.System.FsGlobalAccessLogMode.Value = FsGlobalAccessLogMode;
|
config.System.FsGlobalAccessLogMode.Value = FsGlobalAccessLogMode;
|
||||||
config.Logger.GraphicsDebugLevel.Value = (GraphicsDebugLevel)OpenglDebugLevel;
|
config.Logger.GraphicsDebugLevel.Value = (GraphicsDebugLevel)OpenglDebugLevel;
|
||||||
|
|
||||||
|
config.Multiplayer.LanInterfaceId.Value = _networkInterfaces[NetworkInterfaceList[NetworkInterfaceIndex]];
|
||||||
|
|
||||||
config.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
config.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
||||||
|
|
||||||
MainWindow.UpdateGraphicsConfig();
|
MainWindow.UpdateGraphicsConfig();
|
||||||
|
@@ -78,6 +78,7 @@
|
|||||||
</MenuItem>
|
</MenuItem>
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem Name="ChangeLanguageMenuItem" Header="{locale:Locale MenuBarOptionsChangeLanguage}" />
|
<MenuItem Name="ChangeLanguageMenuItem" Header="{locale:Locale MenuBarOptionsChangeLanguage}" />
|
||||||
|
<MenuItem Name="ToggleFileTypesMenuItem" Header="{locale:Locale MenuBarShowFileTypes}" />
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Click="OpenSettings"
|
Click="OpenSettings"
|
||||||
|
@@ -11,6 +11,8 @@ using Ryujinx.Common;
|
|||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using Ryujinx.HLE.HOS;
|
using Ryujinx.HLE.HOS;
|
||||||
using Ryujinx.Modules;
|
using Ryujinx.Modules;
|
||||||
|
using Ryujinx.Ui.Common;
|
||||||
|
using Ryujinx.Ui.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.Ui.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -29,6 +31,30 @@ namespace Ryujinx.Ava.UI.Views.Main
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
|
ToggleFileTypesMenuItem.Items = GenerateToggleFileTypeItems();
|
||||||
|
ChangeLanguageMenuItem.Items = GenerateLanguageMenuItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
private CheckBox[] GenerateToggleFileTypeItems()
|
||||||
|
{
|
||||||
|
List<CheckBox> checkBoxes = new();
|
||||||
|
|
||||||
|
foreach (var item in Enum.GetValues(typeof (FileTypes)))
|
||||||
|
{
|
||||||
|
string fileName = Enum.GetName(typeof (FileTypes), item);
|
||||||
|
checkBoxes.Add(new CheckBox()
|
||||||
|
{
|
||||||
|
Content = $".{fileName}",
|
||||||
|
IsChecked = ((FileTypes)item).GetConfigValue(ConfigurationState.Instance.Ui.ShownFileTypes),
|
||||||
|
Command = MiniCommand.Create(() => ViewModel.ToggleFileType(fileName))
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return checkBoxes.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private MenuItem[] GenerateLanguageMenuItems()
|
||||||
|
{
|
||||||
List<MenuItem> menuItems = new();
|
List<MenuItem> menuItems = new();
|
||||||
|
|
||||||
string localePath = "Ryujinx.Ava/Assets/Locales";
|
string localePath = "Ryujinx.Ava/Assets/Locales";
|
||||||
@@ -61,7 +87,7 @@ namespace Ryujinx.Ava.UI.Views.Main
|
|||||||
menuItems.Add(menuItem);
|
menuItems.Add(menuItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
ChangeLanguageMenuItem.Items = menuItems.ToArray();
|
return menuItems.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
|
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
<UserControl
|
<UserControl
|
||||||
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsNetworkView"
|
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsNetworkView"
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
@@ -29,7 +29,18 @@
|
|||||||
<TextBlock Text="{locale:Locale SettingsTabSystemEnableInternetAccess}"
|
<TextBlock Text="{locale:Locale SettingsTabSystemEnableInternetAccess}"
|
||||||
ToolTip.Tip="{locale:Locale EnableInternetAccessTooltip}" />
|
ToolTip.Tip="{locale:Locale EnableInternetAccessTooltip}" />
|
||||||
</CheckBox>
|
</CheckBox>
|
||||||
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
<TextBlock VerticalAlignment="Center"
|
||||||
|
Text="{locale:Locale SettingsTabNetworkInterface}"
|
||||||
|
ToolTip.Tip="{locale:Locale NetworkInterfaceTooltip}"
|
||||||
|
Width="200" />
|
||||||
|
<ComboBox SelectedIndex="{Binding NetworkInterfaceIndex}"
|
||||||
|
ToolTip.Tip="{locale:Locale NetworkInterfaceTooltip}"
|
||||||
|
HorizontalContentAlignment="Left"
|
||||||
|
Items="{Binding NetworkInterfaceList}"
|
||||||
|
Width="250" />
|
||||||
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
<window:StyleableWindow
|
<window:StyleableWindow
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
@@ -10,20 +10,16 @@
|
|||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
x:Class="Ryujinx.Ava.UI.Windows.ContentDialogOverlayWindow"
|
x:Class="Ryujinx.Ava.UI.Windows.ContentDialogOverlayWindow"
|
||||||
Title="ContentDialogOverlayWindow"
|
Title="ContentDialogOverlayWindow"
|
||||||
Focusable="True">
|
Focusable="False">
|
||||||
<window:StyleableWindow.Styles>
|
<window:StyleableWindow.Styles>
|
||||||
<Style Selector="ui|ContentDialog /template/ Panel#LayoutRoot">
|
<Style Selector="ui|ContentDialog /template/ Panel#LayoutRoot">
|
||||||
<Setter Property="Background"
|
<Setter Property="Background"
|
||||||
Value="Transparent" />
|
Value="Transparent" />
|
||||||
</Style>
|
</Style>
|
||||||
</window:StyleableWindow.Styles>
|
</window:StyleableWindow.Styles>
|
||||||
<ContentControl
|
<ui:ContentDialog Name="ContentDialog"
|
||||||
Focusable="False"
|
IsPrimaryButtonEnabled="True"
|
||||||
IsVisible="False"
|
IsSecondaryButtonEnabled="True"
|
||||||
KeyboardNavigation.IsTabStop="False">
|
IsVisible="False"
|
||||||
<ui:ContentDialog Name="ContentDialog"
|
Focusable="True"/>
|
||||||
IsPrimaryButtonEnabled="True"
|
|
||||||
IsSecondaryButtonEnabled="True"
|
|
||||||
IsVisible="False" />
|
|
||||||
</ContentControl>
|
|
||||||
</window:StyleableWindow>
|
</window:StyleableWindow>
|
||||||
|
@@ -33,6 +33,11 @@ namespace Ryujinx.Common.Memory
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ReadOnlySpan<byte> GetSpanSafe(int size)
|
||||||
|
{
|
||||||
|
return GetSpan((int)Math.Min((uint)_input.Length, (uint)size));
|
||||||
|
}
|
||||||
|
|
||||||
public T ReadAt<T>(int offset) where T : unmanaged
|
public T ReadAt<T>(int offset) where T : unmanaged
|
||||||
{
|
{
|
||||||
return MemoryMarshal.Cast<byte, T>(_input.Slice(offset))[0];
|
return MemoryMarshal.Cast<byte, T>(_input.Slice(offset))[0];
|
||||||
|
66
Ryujinx.Common/Utilities/NetworkHelpers.cs
Normal file
66
Ryujinx.Common/Utilities/NetworkHelpers.cs
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
using System.Net.NetworkInformation;
|
||||||
|
|
||||||
|
namespace Ryujinx.Common.Utilities
|
||||||
|
{
|
||||||
|
public static class NetworkHelpers
|
||||||
|
{
|
||||||
|
private static (IPInterfaceProperties, UnicastIPAddressInformation) GetLocalInterface(NetworkInterface adapter, bool isPreferred)
|
||||||
|
{
|
||||||
|
IPInterfaceProperties properties = adapter.GetIPProperties();
|
||||||
|
|
||||||
|
if (isPreferred || (properties.GatewayAddresses.Count > 0 && properties.DnsAddresses.Count > 0))
|
||||||
|
{
|
||||||
|
foreach (UnicastIPAddressInformation info in properties.UnicastAddresses)
|
||||||
|
{
|
||||||
|
// Only accept an IPv4 address
|
||||||
|
if (info.Address.GetAddressBytes().Length == 4)
|
||||||
|
{
|
||||||
|
return (properties, info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static (IPInterfaceProperties, UnicastIPAddressInformation) GetLocalInterface(string lanInterfaceId = "0")
|
||||||
|
{
|
||||||
|
if (!NetworkInterface.GetIsNetworkAvailable())
|
||||||
|
{
|
||||||
|
return (null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
IPInterfaceProperties targetProperties = null;
|
||||||
|
UnicastIPAddressInformation targetAddressInfo = null;
|
||||||
|
|
||||||
|
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
|
||||||
|
|
||||||
|
string guid = lanInterfaceId;
|
||||||
|
bool hasPreference = guid != "0";
|
||||||
|
|
||||||
|
foreach (NetworkInterface adapter in interfaces)
|
||||||
|
{
|
||||||
|
bool isPreferred = adapter.Id == guid;
|
||||||
|
|
||||||
|
// Ignore loopback and non IPv4 capable interface.
|
||||||
|
if (isPreferred || (targetProperties == null && adapter.NetworkInterfaceType != NetworkInterfaceType.Loopback && adapter.Supports(NetworkInterfaceComponent.IPv4)))
|
||||||
|
{
|
||||||
|
(IPInterfaceProperties properties, UnicastIPAddressInformation info) = GetLocalInterface(adapter, isPreferred);
|
||||||
|
|
||||||
|
if (properties != null)
|
||||||
|
{
|
||||||
|
targetProperties = properties;
|
||||||
|
targetAddressInfo = info;
|
||||||
|
|
||||||
|
if (isPreferred || !hasPreference)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (targetProperties, targetAddressInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -48,6 +48,8 @@ namespace Ryujinx.Graphics.GAL
|
|||||||
public readonly float MaximumSupportedAnisotropy;
|
public readonly float MaximumSupportedAnisotropy;
|
||||||
public readonly int StorageBufferOffsetAlignment;
|
public readonly int StorageBufferOffsetAlignment;
|
||||||
|
|
||||||
|
public readonly int GatherBiasPrecision;
|
||||||
|
|
||||||
public Capabilities(
|
public Capabilities(
|
||||||
TargetApi api,
|
TargetApi api,
|
||||||
string vendorName,
|
string vendorName,
|
||||||
@@ -87,7 +89,8 @@ namespace Ryujinx.Graphics.GAL
|
|||||||
uint maximumImagesPerStage,
|
uint maximumImagesPerStage,
|
||||||
int maximumComputeSharedMemorySize,
|
int maximumComputeSharedMemorySize,
|
||||||
float maximumSupportedAnisotropy,
|
float maximumSupportedAnisotropy,
|
||||||
int storageBufferOffsetAlignment)
|
int storageBufferOffsetAlignment,
|
||||||
|
int gatherBiasPrecision)
|
||||||
{
|
{
|
||||||
Api = api;
|
Api = api;
|
||||||
VendorName = vendorName;
|
VendorName = vendorName;
|
||||||
@@ -128,6 +131,7 @@ namespace Ryujinx.Graphics.GAL
|
|||||||
MaximumComputeSharedMemorySize = maximumComputeSharedMemorySize;
|
MaximumComputeSharedMemorySize = maximumComputeSharedMemorySize;
|
||||||
MaximumSupportedAnisotropy = maximumSupportedAnisotropy;
|
MaximumSupportedAnisotropy = maximumSupportedAnisotropy;
|
||||||
StorageBufferOffsetAlignment = storageBufferOffsetAlignment;
|
StorageBufferOffsetAlignment = storageBufferOffsetAlignment;
|
||||||
|
GatherBiasPrecision = gatherBiasPrecision;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -732,12 +732,7 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||||||
break;
|
break;
|
||||||
case Target.Texture2DMultisample:
|
case Target.Texture2DMultisample:
|
||||||
case Target.Texture2DMultisampleArray:
|
case Target.Texture2DMultisampleArray:
|
||||||
// We don't support copy between multisample and non-multisample depth-stencil textures
|
if (rhs.Target == Target.Texture2D || rhs.Target == Target.Texture2DArray)
|
||||||
// because there's no way to emulate that since most GPUs don't support writing a
|
|
||||||
// custom stencil value into the texture, among several other API limitations.
|
|
||||||
|
|
||||||
if ((rhs.Target == Target.Texture2D || rhs.Target == Target.Texture2DArray) &&
|
|
||||||
!rhs.FormatInfo.Format.IsDepthOrStencil())
|
|
||||||
{
|
{
|
||||||
return TextureViewCompatibility.CopyOnly;
|
return TextureViewCompatibility.CopyOnly;
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
|
|||||||
private const ushort FileFormatVersionMajor = 1;
|
private const ushort FileFormatVersionMajor = 1;
|
||||||
private const ushort FileFormatVersionMinor = 2;
|
private const ushort FileFormatVersionMinor = 2;
|
||||||
private const uint FileFormatVersionPacked = ((uint)FileFormatVersionMajor << 16) | FileFormatVersionMinor;
|
private const uint FileFormatVersionPacked = ((uint)FileFormatVersionMajor << 16) | FileFormatVersionMinor;
|
||||||
private const uint CodeGenVersion = 4404;
|
private const uint CodeGenVersion = 4703;
|
||||||
|
|
||||||
private const string SharedTocFileName = "shared.toc";
|
private const string SharedTocFileName = "shared.toc";
|
||||||
private const string SharedDataFileName = "shared.data";
|
private const string SharedDataFileName = "shared.data";
|
||||||
|
@@ -112,6 +112,8 @@ namespace Ryujinx.Graphics.Gpu.Shader
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int QueryHostGatherBiasPrecision() => _context.Capabilities.GatherBiasPrecision;
|
||||||
|
|
||||||
public bool QueryHostReducedPrecision() => _context.Capabilities.ReduceShaderPrecision;
|
public bool QueryHostReducedPrecision() => _context.Capabilities.ReduceShaderPrecision;
|
||||||
|
|
||||||
public bool QueryHostHasFrontFacingBug() => _context.Capabilities.HasFrontFacingBug;
|
public bool QueryHostHasFrontFacingBug() => _context.Capabilities.HasFrontFacingBug;
|
||||||
|
103
Ryujinx.Graphics.OpenGL/Image/IntermmediatePool.cs
Normal file
103
Ryujinx.Graphics.OpenGL/Image/IntermmediatePool.cs
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
using Ryujinx.Graphics.GAL;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Ryujinx.Graphics.OpenGL.Image
|
||||||
|
{
|
||||||
|
class IntermediatePool : IDisposable
|
||||||
|
{
|
||||||
|
private readonly OpenGLRenderer _renderer;
|
||||||
|
private readonly List<TextureView> _entries;
|
||||||
|
|
||||||
|
public IntermediatePool(OpenGLRenderer renderer)
|
||||||
|
{
|
||||||
|
_renderer = renderer;
|
||||||
|
_entries = new List<TextureView>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextureView GetOrCreateWithAtLeast(
|
||||||
|
Target target,
|
||||||
|
int blockWidth,
|
||||||
|
int blockHeight,
|
||||||
|
int bytesPerPixel,
|
||||||
|
Format format,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
int depth,
|
||||||
|
int levels,
|
||||||
|
int samples)
|
||||||
|
{
|
||||||
|
TextureView entry;
|
||||||
|
|
||||||
|
for (int i = 0; i < _entries.Count; i++)
|
||||||
|
{
|
||||||
|
entry = _entries[i];
|
||||||
|
|
||||||
|
if (entry.Target == target && entry.Format == format && entry.Info.Samples == samples)
|
||||||
|
{
|
||||||
|
if (entry.Width < width ||
|
||||||
|
entry.Height < height ||
|
||||||
|
entry.Info.Depth < depth ||
|
||||||
|
entry.Info.Levels < levels)
|
||||||
|
{
|
||||||
|
width = Math.Max(width, entry.Width);
|
||||||
|
height = Math.Max(height, entry.Height);
|
||||||
|
depth = Math.Max(depth, entry.Info.Depth);
|
||||||
|
levels = Math.Max(levels, entry.Info.Levels);
|
||||||
|
|
||||||
|
entry.Dispose();
|
||||||
|
entry = CreateNew(target, blockWidth, blockHeight, bytesPerPixel, format, width, height, depth, levels, samples);
|
||||||
|
_entries[i] = entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entry = CreateNew(target, blockWidth, blockHeight, bytesPerPixel, format, width, height, depth, levels, samples);
|
||||||
|
_entries.Add(entry);
|
||||||
|
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TextureView CreateNew(
|
||||||
|
Target target,
|
||||||
|
int blockWidth,
|
||||||
|
int blockHeight,
|
||||||
|
int bytesPerPixel,
|
||||||
|
Format format,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
int depth,
|
||||||
|
int levels,
|
||||||
|
int samples)
|
||||||
|
{
|
||||||
|
return (TextureView)_renderer.CreateTexture(new TextureCreateInfo(
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
depth,
|
||||||
|
levels,
|
||||||
|
samples,
|
||||||
|
blockWidth,
|
||||||
|
blockHeight,
|
||||||
|
bytesPerPixel,
|
||||||
|
format,
|
||||||
|
DepthStencilMode.Depth,
|
||||||
|
target,
|
||||||
|
SwizzleComponent.Red,
|
||||||
|
SwizzleComponent.Green,
|
||||||
|
SwizzleComponent.Blue,
|
||||||
|
SwizzleComponent.Alpha), 1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
foreach (TextureView entry in _entries)
|
||||||
|
{
|
||||||
|
entry.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
_entries.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -15,9 +15,12 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||||||
private int _copyPboHandle;
|
private int _copyPboHandle;
|
||||||
private int _copyPboSize;
|
private int _copyPboSize;
|
||||||
|
|
||||||
|
public IntermediatePool IntermediatePool { get; }
|
||||||
|
|
||||||
public TextureCopy(OpenGLRenderer renderer)
|
public TextureCopy(OpenGLRenderer renderer)
|
||||||
{
|
{
|
||||||
_renderer = renderer;
|
_renderer = renderer;
|
||||||
|
IntermediatePool = new IntermediatePool(renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Copy(
|
public void Copy(
|
||||||
@@ -514,6 +517,8 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||||||
|
|
||||||
_copyPboHandle = 0;
|
_copyPboHandle = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IntermediatePool.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -117,12 +117,20 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||||||
{
|
{
|
||||||
TextureView destinationView = (TextureView)destination;
|
TextureView destinationView = (TextureView)destination;
|
||||||
|
|
||||||
if (!destinationView.Target.IsMultisample() && Target.IsMultisample())
|
bool srcIsMultisample = Target.IsMultisample();
|
||||||
|
bool dstIsMultisample = destinationView.Target.IsMultisample();
|
||||||
|
|
||||||
|
if (dstIsMultisample != srcIsMultisample && Info.Format.IsDepthOrStencil())
|
||||||
|
{
|
||||||
|
int layers = Math.Min(Info.GetLayers(), destinationView.Info.GetLayers() - firstLayer);
|
||||||
|
CopyWithBlitForDepthMS(destinationView, 0, firstLayer, layers);
|
||||||
|
}
|
||||||
|
else if (!dstIsMultisample && srcIsMultisample)
|
||||||
{
|
{
|
||||||
int layers = Math.Min(Info.GetLayers(), destinationView.Info.GetLayers() - firstLayer);
|
int layers = Math.Min(Info.GetLayers(), destinationView.Info.GetLayers() - firstLayer);
|
||||||
_renderer.TextureCopyMS.CopyMSToNonMS(this, destinationView, 0, firstLayer, layers);
|
_renderer.TextureCopyMS.CopyMSToNonMS(this, destinationView, 0, firstLayer, layers);
|
||||||
}
|
}
|
||||||
else if (destinationView.Target.IsMultisample() && !Target.IsMultisample())
|
else if (dstIsMultisample && !srcIsMultisample)
|
||||||
{
|
{
|
||||||
int layers = Math.Min(Info.GetLayers(), destinationView.Info.GetLayers() - firstLayer);
|
int layers = Math.Min(Info.GetLayers(), destinationView.Info.GetLayers() - firstLayer);
|
||||||
_renderer.TextureCopyMS.CopyNonMSToMS(this, destinationView, 0, firstLayer, layers);
|
_renderer.TextureCopyMS.CopyNonMSToMS(this, destinationView, 0, firstLayer, layers);
|
||||||
@@ -143,11 +151,18 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||||||
{
|
{
|
||||||
TextureView destinationView = (TextureView)destination;
|
TextureView destinationView = (TextureView)destination;
|
||||||
|
|
||||||
if (!destinationView.Target.IsMultisample() && Target.IsMultisample())
|
bool srcIsMultisample = Target.IsMultisample();
|
||||||
|
bool dstIsMultisample = destinationView.Target.IsMultisample();
|
||||||
|
|
||||||
|
if (dstIsMultisample != srcIsMultisample && Info.Format.IsDepthOrStencil())
|
||||||
|
{
|
||||||
|
CopyWithBlitForDepthMS(destinationView, srcLayer, dstLayer, 1);
|
||||||
|
}
|
||||||
|
else if (!dstIsMultisample && srcIsMultisample)
|
||||||
{
|
{
|
||||||
_renderer.TextureCopyMS.CopyMSToNonMS(this, destinationView, srcLayer, dstLayer, 1);
|
_renderer.TextureCopyMS.CopyMSToNonMS(this, destinationView, srcLayer, dstLayer, 1);
|
||||||
}
|
}
|
||||||
else if (destinationView.Target.IsMultisample() && !Target.IsMultisample())
|
else if (dstIsMultisample && !srcIsMultisample)
|
||||||
{
|
{
|
||||||
_renderer.TextureCopyMS.CopyNonMSToMS(this, destinationView, srcLayer, dstLayer, 1);
|
_renderer.TextureCopyMS.CopyNonMSToMS(this, destinationView, srcLayer, dstLayer, 1);
|
||||||
}
|
}
|
||||||
@@ -161,6 +176,61 @@ namespace Ryujinx.Graphics.OpenGL.Image
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CopyWithBlitForDepthMS(TextureView destinationView, int srcLayer, int dstLayer, int layers)
|
||||||
|
{
|
||||||
|
// This is currently used for multisample <-> non-multisample copies.
|
||||||
|
// We can't do that with compute because it's not possible to write depth textures on compute.
|
||||||
|
// It can be done with draws, but we don't have support for saving and restoring the OpenGL state
|
||||||
|
// for a draw with different state right now.
|
||||||
|
// This approach uses blit, which causes a resolution loss since some samples will be lost
|
||||||
|
// in the process.
|
||||||
|
|
||||||
|
Extents2D srcRegion = new Extents2D(0, 0, Width, Height);
|
||||||
|
Extents2D dstRegion = new Extents2D(0, 0, destinationView.Width, destinationView.Height);
|
||||||
|
|
||||||
|
if (destinationView.Target.IsMultisample())
|
||||||
|
{
|
||||||
|
TextureView intermmediate = _renderer.TextureCopy.IntermediatePool.GetOrCreateWithAtLeast(
|
||||||
|
Info.Target,
|
||||||
|
Info.BlockWidth,
|
||||||
|
Info.BlockHeight,
|
||||||
|
Info.BytesPerPixel,
|
||||||
|
Format,
|
||||||
|
destinationView.Width,
|
||||||
|
destinationView.Height,
|
||||||
|
Info.Depth,
|
||||||
|
1,
|
||||||
|
1);
|
||||||
|
|
||||||
|
_renderer.TextureCopy.Copy(this, intermmediate, srcRegion, dstRegion, false);
|
||||||
|
_renderer.TextureCopy.Copy(intermmediate, destinationView, dstRegion, dstRegion, false, srcLayer, dstLayer, 0, 0, layers, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Target target = Target switch
|
||||||
|
{
|
||||||
|
Target.Texture2DMultisample => Target.Texture2D,
|
||||||
|
Target.Texture2DMultisampleArray => Target.Texture2DArray,
|
||||||
|
_ => Target
|
||||||
|
};
|
||||||
|
|
||||||
|
TextureView intermmediate = _renderer.TextureCopy.IntermediatePool.GetOrCreateWithAtLeast(
|
||||||
|
target,
|
||||||
|
Info.BlockWidth,
|
||||||
|
Info.BlockHeight,
|
||||||
|
Info.BytesPerPixel,
|
||||||
|
Format,
|
||||||
|
Width,
|
||||||
|
Height,
|
||||||
|
Info.Depth,
|
||||||
|
1,
|
||||||
|
1);
|
||||||
|
|
||||||
|
_renderer.TextureCopy.Copy(this, intermmediate, srcRegion, srcRegion, false);
|
||||||
|
_renderer.TextureCopy.Copy(intermmediate, destinationView, srcRegion, dstRegion, false, srcLayer, dstLayer, 0, 0, layers, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void CopyTo(ITexture destination, Extents2D srcRegion, Extents2D dstRegion, bool linearFilter)
|
public void CopyTo(ITexture destination, Extents2D srcRegion, Extents2D dstRegion, bool linearFilter)
|
||||||
{
|
{
|
||||||
_renderer.TextureCopy.Copy(this, (TextureView)destination, srcRegion, dstRegion, linearFilter);
|
_renderer.TextureCopy.Copy(this, (TextureView)destination, srcRegion, dstRegion, linearFilter);
|
||||||
|
@@ -103,11 +103,14 @@ namespace Ryujinx.Graphics.OpenGL
|
|||||||
|
|
||||||
public Capabilities GetCapabilities()
|
public Capabilities GetCapabilities()
|
||||||
{
|
{
|
||||||
|
bool intelWindows = HwCapabilities.Vendor == HwCapabilities.GpuVendor.IntelWindows;
|
||||||
|
bool amdWindows = HwCapabilities.Vendor == HwCapabilities.GpuVendor.AmdWindows;
|
||||||
|
|
||||||
return new Capabilities(
|
return new Capabilities(
|
||||||
api: TargetApi.OpenGL,
|
api: TargetApi.OpenGL,
|
||||||
vendorName: GpuVendor,
|
vendorName: GpuVendor,
|
||||||
hasFrontFacingBug: HwCapabilities.Vendor == HwCapabilities.GpuVendor.IntelWindows,
|
hasFrontFacingBug: intelWindows,
|
||||||
hasVectorIndexingBug: HwCapabilities.Vendor == HwCapabilities.GpuVendor.AmdWindows,
|
hasVectorIndexingBug: amdWindows,
|
||||||
needsFragmentOutputSpecialization: false,
|
needsFragmentOutputSpecialization: false,
|
||||||
reduceShaderPrecision: false,
|
reduceShaderPrecision: false,
|
||||||
supportsAstcCompression: HwCapabilities.SupportsAstcCompression,
|
supportsAstcCompression: HwCapabilities.SupportsAstcCompression,
|
||||||
@@ -142,7 +145,8 @@ namespace Ryujinx.Graphics.OpenGL
|
|||||||
maximumImagesPerStage: 8,
|
maximumImagesPerStage: 8,
|
||||||
maximumComputeSharedMemorySize: HwCapabilities.MaximumComputeSharedMemorySize,
|
maximumComputeSharedMemorySize: HwCapabilities.MaximumComputeSharedMemorySize,
|
||||||
maximumSupportedAnisotropy: HwCapabilities.MaximumSupportedAnisotropy,
|
maximumSupportedAnisotropy: HwCapabilities.MaximumSupportedAnisotropy,
|
||||||
storageBufferOffsetAlignment: HwCapabilities.StorageBufferOffsetAlignment);
|
storageBufferOffsetAlignment: HwCapabilities.StorageBufferOffsetAlignment,
|
||||||
|
gatherBiasPrecision: intelWindows || amdWindows ? 8 : 0); // Precision is 8 for these vendors on Vulkan.
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetBufferData(BufferHandle buffer, int offset, ReadOnlySpan<byte> data)
|
public void SetBufferData(BufferHandle buffer, int offset, ReadOnlySpan<byte> data)
|
||||||
|
@@ -226,6 +226,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||||||
// Set clip control, viewport and the framebuffer to the output to placate overlays and OBS capture.
|
// Set clip control, viewport and the framebuffer to the output to placate overlays and OBS capture.
|
||||||
GL.ClipControl(ClipOrigin.LowerLeft, ClipDepthMode.NegativeOneToOne);
|
GL.ClipControl(ClipOrigin.LowerLeft, ClipDepthMode.NegativeOneToOne);
|
||||||
GL.Viewport(0, 0, _width, _height);
|
GL.Viewport(0, 0, _width, _height);
|
||||||
|
GL.BindFramebuffer(FramebufferTarget.Framebuffer, drawFramebuffer);
|
||||||
|
|
||||||
swapBuffersCallback();
|
swapBuffersCallback();
|
||||||
|
|
||||||
|
@@ -677,7 +677,28 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
|
|||||||
return vector;
|
return vector;
|
||||||
}
|
}
|
||||||
|
|
||||||
Append(ApplyScaling(AssemblePVector(pCount)));
|
string ApplyBias(string vector)
|
||||||
|
{
|
||||||
|
int gatherBiasPrecision = context.Config.GpuAccessor.QueryHostGatherBiasPrecision();
|
||||||
|
if (isGather && gatherBiasPrecision != 0)
|
||||||
|
{
|
||||||
|
// GPU requires texture gather to be slightly offset to match NVIDIA behaviour when point is exactly between two texels.
|
||||||
|
// Offset by the gather precision divided by 2 to correct for rounding.
|
||||||
|
|
||||||
|
if (pCount == 1)
|
||||||
|
{
|
||||||
|
vector = $"{vector} + (1.0 / (float(textureSize({samplerName}, 0)) * float({1 << (gatherBiasPrecision + 1)})))";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vector = $"{vector} + (1.0 / (vec{pCount}(textureSize({samplerName}, 0).{"xyz".Substring(0, pCount)}) * float({1 << (gatherBiasPrecision + 1)})))";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
Append(ApplyBias(ApplyScaling(AssemblePVector(pCount))));
|
||||||
|
|
||||||
string AssembleDerivativesVector(int count)
|
string AssembleDerivativesVector(int count)
|
||||||
{
|
{
|
||||||
|
@@ -4,6 +4,7 @@ using Ryujinx.Graphics.Shader.Translation;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using static Spv.Specification;
|
using static Spv.Specification;
|
||||||
|
|
||||||
@@ -1556,6 +1557,33 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SpvInstruction ApplyBias(SpvInstruction vector, SpvInstruction image)
|
||||||
|
{
|
||||||
|
int gatherBiasPrecision = context.Config.GpuAccessor.QueryHostGatherBiasPrecision();
|
||||||
|
if (isGather && gatherBiasPrecision != 0)
|
||||||
|
{
|
||||||
|
// GPU requires texture gather to be slightly offset to match NVIDIA behaviour when point is exactly between two texels.
|
||||||
|
// Offset by the gather precision divided by 2 to correct for rounding.
|
||||||
|
var sizeType = pCount == 1 ? context.TypeS32() : context.TypeVector(context.TypeS32(), pCount);
|
||||||
|
var pVectorType = pCount == 1 ? context.TypeFP32() : context.TypeVector(context.TypeFP32(), pCount);
|
||||||
|
|
||||||
|
var bias = context.Constant(context.TypeFP32(), (float)(1 << (gatherBiasPrecision + 1)));
|
||||||
|
var biasVector = context.CompositeConstruct(pVectorType, Enumerable.Repeat(bias, pCount).ToArray());
|
||||||
|
|
||||||
|
var one = context.Constant(context.TypeFP32(), 1f);
|
||||||
|
var oneVector = context.CompositeConstruct(pVectorType, Enumerable.Repeat(one, pCount).ToArray());
|
||||||
|
|
||||||
|
var divisor = context.FMul(
|
||||||
|
pVectorType,
|
||||||
|
context.ConvertSToF(pVectorType, context.ImageQuerySize(sizeType, image)),
|
||||||
|
biasVector);
|
||||||
|
|
||||||
|
vector = context.FAdd(pVectorType, vector, context.FDiv(pVectorType, oneVector, divisor));
|
||||||
|
}
|
||||||
|
|
||||||
|
return vector;
|
||||||
|
}
|
||||||
|
|
||||||
SpvInstruction pCoords = AssemblePVector(pCount);
|
SpvInstruction pCoords = AssemblePVector(pCount);
|
||||||
pCoords = ScalingHelpers.ApplyScaling(context, texOp, pCoords, intCoords, isBindless, isIndexed, isArray, pCount);
|
pCoords = ScalingHelpers.ApplyScaling(context, texOp, pCoords, intCoords, isBindless, isIndexed, isArray, pCount);
|
||||||
|
|
||||||
@@ -1716,6 +1744,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
|
|||||||
image = context.Image(imageType, image);
|
image = context.Image(imageType, image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pCoords = ApplyBias(pCoords, image);
|
||||||
|
|
||||||
var operands = operandsList.ToArray();
|
var operands = operandsList.ToArray();
|
||||||
|
|
||||||
SpvInstruction result;
|
SpvInstruction result;
|
||||||
|
@@ -196,6 +196,15 @@ namespace Ryujinx.Graphics.Shader
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Queries host's gather operation precision bits for biasing their coordinates. Zero means no bias.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Bits of gather operation precision to use for coordinate bias</returns>
|
||||||
|
int QueryHostGatherBiasPrecision()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Queries host about whether to reduce precision to improve performance.
|
/// Queries host about whether to reduce precision to improve performance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using Ryujinx.Common.Logging;
|
||||||
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
@@ -7,12 +8,26 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
internal class AutoFlushCounter
|
internal class AutoFlushCounter
|
||||||
{
|
{
|
||||||
// How often to flush on framebuffer change.
|
// How often to flush on framebuffer change.
|
||||||
private readonly static long FramebufferFlushTimer = Stopwatch.Frequency / 1000;
|
private readonly static long FramebufferFlushTimer = Stopwatch.Frequency / 1000; // (1ms)
|
||||||
|
|
||||||
|
// How often to flush on draw when fast flush mode is enabled.
|
||||||
|
private readonly static long DrawFlushTimer = Stopwatch.Frequency / 666; // (1.5ms)
|
||||||
|
|
||||||
|
// Average wait time that triggers fast flush mode to be entered.
|
||||||
|
private readonly static long FastFlushEnterThreshold = Stopwatch.Frequency / 666; // (1.5ms)
|
||||||
|
|
||||||
|
// Average wait time that triggers fast flush mode to be exited.
|
||||||
|
private readonly static long FastFlushExitThreshold = Stopwatch.Frequency / 10000; // (0.1ms)
|
||||||
|
|
||||||
|
// Number of frames to average waiting times over.
|
||||||
|
private const int SyncWaitAverageCount = 20;
|
||||||
|
|
||||||
private const int MinDrawCountForFlush = 10;
|
private const int MinDrawCountForFlush = 10;
|
||||||
private const int MinConsecutiveQueryForFlush = 10;
|
private const int MinConsecutiveQueryForFlush = 10;
|
||||||
private const int InitialQueryCountForFlush = 32;
|
private const int InitialQueryCountForFlush = 32;
|
||||||
|
|
||||||
|
private readonly VulkanRenderer _gd;
|
||||||
|
|
||||||
private long _lastFlush;
|
private long _lastFlush;
|
||||||
private ulong _lastDrawCount;
|
private ulong _lastDrawCount;
|
||||||
private bool _hasPendingQuery;
|
private bool _hasPendingQuery;
|
||||||
@@ -23,6 +38,16 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
private int _queryCountHistoryIndex;
|
private int _queryCountHistoryIndex;
|
||||||
private int _remainingQueries;
|
private int _remainingQueries;
|
||||||
|
|
||||||
|
private long[] _syncWaitHistory = new long[SyncWaitAverageCount];
|
||||||
|
private int _syncWaitHistoryIndex;
|
||||||
|
|
||||||
|
private bool _fastFlushMode;
|
||||||
|
|
||||||
|
public AutoFlushCounter(VulkanRenderer gd)
|
||||||
|
{
|
||||||
|
_gd = gd;
|
||||||
|
}
|
||||||
|
|
||||||
public void RegisterFlush(ulong drawCount)
|
public void RegisterFlush(ulong drawCount)
|
||||||
{
|
{
|
||||||
_lastFlush = Stopwatch.GetTimestamp();
|
_lastFlush = Stopwatch.GetTimestamp();
|
||||||
@@ -69,6 +94,32 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
return _hasPendingQuery;
|
return _hasPendingQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool ShouldFlushDraw(ulong drawCount)
|
||||||
|
{
|
||||||
|
if (_fastFlushMode)
|
||||||
|
{
|
||||||
|
long draws = (long)(drawCount - _lastDrawCount);
|
||||||
|
|
||||||
|
if (draws < MinDrawCountForFlush)
|
||||||
|
{
|
||||||
|
if (draws == 0)
|
||||||
|
{
|
||||||
|
_lastFlush = Stopwatch.GetTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
long flushTimeout = DrawFlushTimer;
|
||||||
|
|
||||||
|
long now = Stopwatch.GetTimestamp();
|
||||||
|
|
||||||
|
return now > _lastFlush + flushTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public bool ShouldFlushAttachmentChange(ulong drawCount)
|
public bool ShouldFlushAttachmentChange(ulong drawCount)
|
||||||
{
|
{
|
||||||
_queryCount = 0;
|
_queryCount = 0;
|
||||||
@@ -102,11 +153,27 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
public void Present()
|
public void Present()
|
||||||
{
|
{
|
||||||
|
// Query flush prediction.
|
||||||
|
|
||||||
_queryCountHistoryIndex = (_queryCountHistoryIndex + 1) % 3;
|
_queryCountHistoryIndex = (_queryCountHistoryIndex + 1) % 3;
|
||||||
|
|
||||||
_remainingQueries = _queryCountHistory.Max() + 10;
|
_remainingQueries = _queryCountHistory.Max() + 10;
|
||||||
|
|
||||||
_queryCountHistory[_queryCountHistoryIndex] = 0;
|
_queryCountHistory[_queryCountHistoryIndex] = 0;
|
||||||
|
|
||||||
|
// Fast flush mode toggle.
|
||||||
|
|
||||||
|
_syncWaitHistory[_syncWaitHistoryIndex] = _gd.SyncManager.GetAndResetWaitTicks();
|
||||||
|
|
||||||
|
_syncWaitHistoryIndex = (_syncWaitHistoryIndex + 1) % SyncWaitAverageCount;
|
||||||
|
|
||||||
|
long averageWait = (long)_syncWaitHistory.Average();
|
||||||
|
|
||||||
|
if (_fastFlushMode ? averageWait < FastFlushExitThreshold : averageWait > FastFlushEnterThreshold)
|
||||||
|
{
|
||||||
|
_fastFlushMode = !_fastFlushMode;
|
||||||
|
Logger.Debug?.PrintMsg(LogClass.Gpu, $"Switched fast flush mode: ({_fastFlushMode})");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -118,20 +118,6 @@ namespace Ryujinx.Graphics.Vulkan.Effects
|
|||||||
_intermediaryTexture = _renderer.CreateTexture(info, view.ScaleFactor) as TextureView;
|
_intermediaryTexture = _renderer.CreateTexture(info, view.ScaleFactor) as TextureView;
|
||||||
}
|
}
|
||||||
|
|
||||||
Span<GAL.Viewport> viewports = stackalloc GAL.Viewport[1];
|
|
||||||
Span<Rectangle<int>> scissors = stackalloc Rectangle<int>[1];
|
|
||||||
|
|
||||||
viewports[0] = new GAL.Viewport(
|
|
||||||
new Rectangle<float>(0, 0, view.Width, view.Height),
|
|
||||||
ViewportSwizzle.PositiveX,
|
|
||||||
ViewportSwizzle.PositiveY,
|
|
||||||
ViewportSwizzle.PositiveZ,
|
|
||||||
ViewportSwizzle.PositiveW,
|
|
||||||
0f,
|
|
||||||
1f);
|
|
||||||
|
|
||||||
scissors[0] = new Rectangle<int>(0, 0, view.Width, view.Height);
|
|
||||||
|
|
||||||
_pipeline.SetCommandBuffer(cbs);
|
_pipeline.SetCommandBuffer(cbs);
|
||||||
_pipeline.SetProgram(_scalingProgram);
|
_pipeline.SetProgram(_scalingProgram);
|
||||||
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _sampler);
|
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _sampler);
|
||||||
@@ -169,23 +155,10 @@ namespace Ryujinx.Graphics.Vulkan.Effects
|
|||||||
|
|
||||||
var bufferRanges = new BufferRange(bufferHandle, 0, rangeSize);
|
var bufferRanges = new BufferRange(bufferHandle, 0, rangeSize);
|
||||||
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
||||||
_pipeline.SetScissors(scissors);
|
|
||||||
_pipeline.SetViewports(viewports, false);
|
|
||||||
_pipeline.SetImage(0, _intermediaryTexture, GAL.Format.R8G8B8A8Unorm);
|
_pipeline.SetImage(0, _intermediaryTexture, GAL.Format.R8G8B8A8Unorm);
|
||||||
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
||||||
_pipeline.ComputeBarrier();
|
_pipeline.ComputeBarrier();
|
||||||
|
|
||||||
viewports[0] = new GAL.Viewport(
|
|
||||||
new Rectangle<float>(0, 0, width, height),
|
|
||||||
ViewportSwizzle.PositiveX,
|
|
||||||
ViewportSwizzle.PositiveY,
|
|
||||||
ViewportSwizzle.PositiveZ,
|
|
||||||
ViewportSwizzle.PositiveW,
|
|
||||||
0f,
|
|
||||||
1f);
|
|
||||||
|
|
||||||
scissors[0] = new Rectangle<int>(0, 0, width, height);
|
|
||||||
|
|
||||||
// Sharpening pass
|
// Sharpening pass
|
||||||
_pipeline.SetCommandBuffer(cbs);
|
_pipeline.SetCommandBuffer(cbs);
|
||||||
_pipeline.SetProgram(_sharpeningProgram);
|
_pipeline.SetProgram(_sharpeningProgram);
|
||||||
@@ -193,8 +166,6 @@ namespace Ryujinx.Graphics.Vulkan.Effects
|
|||||||
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
||||||
var sharpeningRange = new BufferRange(sharpeningBufferHandle, 0, sizeof(float));
|
var sharpeningRange = new BufferRange(sharpeningBufferHandle, 0, sizeof(float));
|
||||||
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(4, sharpeningRange) });
|
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(4, sharpeningRange) });
|
||||||
_pipeline.SetScissors(scissors);
|
|
||||||
_pipeline.SetViewports(viewports, false);
|
|
||||||
_pipeline.SetImage(0, destinationTexture);
|
_pipeline.SetImage(0, destinationTexture);
|
||||||
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
||||||
_pipeline.ComputeBarrier();
|
_pipeline.ComputeBarrier();
|
||||||
|
@@ -94,25 +94,9 @@ namespace Ryujinx.Graphics.Vulkan.Effects
|
|||||||
var bufferRanges = new BufferRange(bufferHandle, 0, rangeSize);
|
var bufferRanges = new BufferRange(bufferHandle, 0, rangeSize);
|
||||||
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
||||||
|
|
||||||
Span<GAL.Viewport> viewports = stackalloc GAL.Viewport[1];
|
|
||||||
|
|
||||||
viewports[0] = new GAL.Viewport(
|
|
||||||
new Rectangle<float>(0, 0, view.Width, view.Height),
|
|
||||||
ViewportSwizzle.PositiveX,
|
|
||||||
ViewportSwizzle.PositiveY,
|
|
||||||
ViewportSwizzle.PositiveZ,
|
|
||||||
ViewportSwizzle.PositiveW,
|
|
||||||
0f,
|
|
||||||
1f);
|
|
||||||
|
|
||||||
Span<Rectangle<int>> scissors = stackalloc Rectangle<int>[1];
|
|
||||||
|
|
||||||
var dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize);
|
var dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize);
|
||||||
var dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize);
|
var dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize);
|
||||||
|
|
||||||
_pipeline.SetScissors(stackalloc[] { new Rectangle<int>(0, 0, view.Width, view.Height) });
|
|
||||||
_pipeline.SetViewports(viewports, false);
|
|
||||||
|
|
||||||
_pipeline.SetImage(0, _texture, GAL.Format.R8G8B8A8Unorm);
|
_pipeline.SetImage(0, _texture, GAL.Format.R8G8B8A8Unorm);
|
||||||
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
||||||
|
|
||||||
|
@@ -218,40 +218,10 @@ namespace Ryujinx.Graphics.Vulkan.Effects
|
|||||||
_blendOutputTexture = _renderer.CreateTexture(info, view.ScaleFactor) as TextureView;
|
_blendOutputTexture = _renderer.CreateTexture(info, view.ScaleFactor) as TextureView;
|
||||||
}
|
}
|
||||||
|
|
||||||
Span<GAL.Viewport> viewports = stackalloc GAL.Viewport[1];
|
_pipeline.SetCommandBuffer(cbs);
|
||||||
|
|
||||||
viewports[0] = new GAL.Viewport(
|
Clear(_edgeOutputTexture);
|
||||||
new Rectangle<float>(0, 0, view.Width, view.Height),
|
Clear(_blendOutputTexture);
|
||||||
ViewportSwizzle.PositiveX,
|
|
||||||
ViewportSwizzle.PositiveY,
|
|
||||||
ViewportSwizzle.PositiveZ,
|
|
||||||
ViewportSwizzle.PositiveW,
|
|
||||||
0f,
|
|
||||||
1f);
|
|
||||||
|
|
||||||
Span<Rectangle<int>> scissors = stackalloc Rectangle<int>[1];
|
|
||||||
|
|
||||||
scissors[0] = new Rectangle<int>(0, 0, view.Width, view.Height);
|
|
||||||
|
|
||||||
_renderer.HelperShader.Clear(_renderer,
|
|
||||||
_edgeOutputTexture.GetImageView(),
|
|
||||||
new float[] { 0, 0, 0, 1 },
|
|
||||||
(uint)(ColorComponentFlags.RBit | ColorComponentFlags.GBit | ColorComponentFlags.BBit | ColorComponentFlags.ABit),
|
|
||||||
view.Width,
|
|
||||||
view.Height,
|
|
||||||
_edgeOutputTexture.VkFormat,
|
|
||||||
ComponentType.UnsignedInteger,
|
|
||||||
scissors[0]);
|
|
||||||
|
|
||||||
_renderer.HelperShader.Clear(_renderer,
|
|
||||||
_blendOutputTexture.GetImageView(),
|
|
||||||
new float[] { 0, 0, 0, 1 },
|
|
||||||
(uint)(ColorComponentFlags.RBit | ColorComponentFlags.GBit | ColorComponentFlags.BBit | ColorComponentFlags.ABit),
|
|
||||||
view.Width,
|
|
||||||
view.Height,
|
|
||||||
_blendOutputTexture.VkFormat,
|
|
||||||
ComponentType.UnsignedInteger,
|
|
||||||
scissors[0]);
|
|
||||||
|
|
||||||
_renderer.Pipeline.TextureBarrier();
|
_renderer.Pipeline.TextureBarrier();
|
||||||
|
|
||||||
@@ -259,7 +229,6 @@ namespace Ryujinx.Graphics.Vulkan.Effects
|
|||||||
var dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize);
|
var dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize);
|
||||||
|
|
||||||
// Edge pass
|
// Edge pass
|
||||||
_pipeline.SetCommandBuffer(cbs);
|
|
||||||
_pipeline.SetProgram(_edgeProgram);
|
_pipeline.SetProgram(_edgeProgram);
|
||||||
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _samplerLinear);
|
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _samplerLinear);
|
||||||
_pipeline.Specialize(_specConstants);
|
_pipeline.Specialize(_specConstants);
|
||||||
@@ -271,35 +240,25 @@ namespace Ryujinx.Graphics.Vulkan.Effects
|
|||||||
_renderer.BufferManager.SetData(bufferHandle, 0, resolutionBuffer);
|
_renderer.BufferManager.SetData(bufferHandle, 0, resolutionBuffer);
|
||||||
var bufferRanges = new BufferRange(bufferHandle, 0, rangeSize);
|
var bufferRanges = new BufferRange(bufferHandle, 0, rangeSize);
|
||||||
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
||||||
_pipeline.SetScissors(scissors);
|
|
||||||
_pipeline.SetViewports(viewports, false);
|
|
||||||
_pipeline.SetImage(0, _edgeOutputTexture, GAL.Format.R8G8B8A8Unorm);
|
_pipeline.SetImage(0, _edgeOutputTexture, GAL.Format.R8G8B8A8Unorm);
|
||||||
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
||||||
_pipeline.ComputeBarrier();
|
_pipeline.ComputeBarrier();
|
||||||
|
|
||||||
// Blend pass
|
// Blend pass
|
||||||
_pipeline.SetCommandBuffer(cbs);
|
|
||||||
_pipeline.SetProgram(_blendProgram);
|
_pipeline.SetProgram(_blendProgram);
|
||||||
_pipeline.Specialize(_specConstants);
|
_pipeline.Specialize(_specConstants);
|
||||||
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, _edgeOutputTexture, _samplerLinear);
|
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, _edgeOutputTexture, _samplerLinear);
|
||||||
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 3, _areaTexture, _samplerLinear);
|
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 3, _areaTexture, _samplerLinear);
|
||||||
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 4, _searchTexture, _samplerLinear);
|
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 4, _searchTexture, _samplerLinear);
|
||||||
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
|
||||||
_pipeline.SetScissors(scissors);
|
|
||||||
_pipeline.SetViewports(viewports, false);
|
|
||||||
_pipeline.SetImage(0, _blendOutputTexture, GAL.Format.R8G8B8A8Unorm);
|
_pipeline.SetImage(0, _blendOutputTexture, GAL.Format.R8G8B8A8Unorm);
|
||||||
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
||||||
_pipeline.ComputeBarrier();
|
_pipeline.ComputeBarrier();
|
||||||
|
|
||||||
// Neighbour pass
|
// Neighbour pass
|
||||||
_pipeline.SetCommandBuffer(cbs);
|
|
||||||
_pipeline.SetProgram(_neighbourProgram);
|
_pipeline.SetProgram(_neighbourProgram);
|
||||||
_pipeline.Specialize(_specConstants);
|
_pipeline.Specialize(_specConstants);
|
||||||
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 3, _blendOutputTexture, _samplerLinear);
|
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 3, _blendOutputTexture, _samplerLinear);
|
||||||
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _samplerLinear);
|
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _samplerLinear);
|
||||||
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, bufferRanges) });
|
|
||||||
_pipeline.SetScissors(scissors);
|
|
||||||
_pipeline.SetViewports(viewports, false);
|
|
||||||
_pipeline.SetImage(0, _outputTexture, GAL.Format.R8G8B8A8Unorm);
|
_pipeline.SetImage(0, _outputTexture, GAL.Format.R8G8B8A8Unorm);
|
||||||
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
||||||
_pipeline.ComputeBarrier();
|
_pipeline.ComputeBarrier();
|
||||||
@@ -310,5 +269,21 @@ namespace Ryujinx.Graphics.Vulkan.Effects
|
|||||||
|
|
||||||
return _outputTexture;
|
return _outputTexture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Clear(TextureView texture)
|
||||||
|
{
|
||||||
|
Span<uint> colorMasks = stackalloc uint[1];
|
||||||
|
|
||||||
|
colorMasks[0] = 0xf;
|
||||||
|
|
||||||
|
Span<Rectangle<int>> scissors = stackalloc Rectangle<int>[1];
|
||||||
|
|
||||||
|
scissors[0] = new Rectangle<int>(0, 0, texture.Width, texture.Height);
|
||||||
|
|
||||||
|
_pipeline.SetRenderTarget(texture.GetImageViewForAttachment(), (uint)texture.Width, (uint)texture.Height, false, texture.VkFormat);
|
||||||
|
_pipeline.SetRenderTargetColorMasks(colorMasks);
|
||||||
|
_pipeline.SetScissors(scissors);
|
||||||
|
_pipeline.ClearRenderTargetColor(0, 0, 1, new ColorF(0f, 0f, 0f, 1f));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -234,7 +234,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
public void InsertClearBarrierDS(CommandBufferScoped cbs)
|
public void InsertClearBarrierDS(CommandBufferScoped cbs)
|
||||||
{
|
{
|
||||||
_depthStencil?.Storage?.InsertReadToWriteBarrier(cbs, AccessFlags.DepthStencilAttachmentWriteBit, PipelineStageFlags.EarlyFragmentTestsBit);
|
_depthStencil?.Storage?.InsertReadToWriteBarrier(cbs, AccessFlags.DepthStencilAttachmentWriteBit, PipelineStageFlags.LateFragmentTestsBit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -46,6 +46,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
public readonly SampleCountFlags SupportedSampleCounts;
|
public readonly SampleCountFlags SupportedSampleCounts;
|
||||||
public readonly PortabilitySubsetFlags PortabilitySubset;
|
public readonly PortabilitySubsetFlags PortabilitySubset;
|
||||||
public readonly uint VertexBufferAlignment;
|
public readonly uint VertexBufferAlignment;
|
||||||
|
public readonly uint SubTexelPrecisionBits;
|
||||||
|
|
||||||
public HardwareCapabilities(
|
public HardwareCapabilities(
|
||||||
bool supportsIndexTypeUint8,
|
bool supportsIndexTypeUint8,
|
||||||
@@ -77,7 +78,8 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
ShaderStageFlags requiredSubgroupSizeStages,
|
ShaderStageFlags requiredSubgroupSizeStages,
|
||||||
SampleCountFlags supportedSampleCounts,
|
SampleCountFlags supportedSampleCounts,
|
||||||
PortabilitySubsetFlags portabilitySubset,
|
PortabilitySubsetFlags portabilitySubset,
|
||||||
uint vertexBufferAlignment)
|
uint vertexBufferAlignment,
|
||||||
|
uint subTexelPrecisionBits)
|
||||||
{
|
{
|
||||||
SupportsIndexTypeUint8 = supportsIndexTypeUint8;
|
SupportsIndexTypeUint8 = supportsIndexTypeUint8;
|
||||||
SupportsCustomBorderColor = supportsCustomBorderColor;
|
SupportsCustomBorderColor = supportsCustomBorderColor;
|
||||||
@@ -109,6 +111,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
SupportedSampleCounts = supportedSampleCounts;
|
SupportedSampleCounts = supportedSampleCounts;
|
||||||
PortabilitySubset = portabilitySubset;
|
PortabilitySubset = portabilitySubset;
|
||||||
VertexBufferAlignment = vertexBufferAlignment;
|
VertexBufferAlignment = vertexBufferAlignment;
|
||||||
|
SubTexelPrecisionBits = subTexelPrecisionBits;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,6 +15,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
private struct Entry
|
private struct Entry
|
||||||
{
|
{
|
||||||
|
public int Hash;
|
||||||
public K Key;
|
public K Key;
|
||||||
public V Value;
|
public V Value;
|
||||||
}
|
}
|
||||||
@@ -59,6 +60,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
{
|
{
|
||||||
var entry = new Entry()
|
var entry = new Entry()
|
||||||
{
|
{
|
||||||
|
Hash = key.GetHashCode(),
|
||||||
Key = key,
|
Key = key,
|
||||||
Value = value
|
Value = value
|
||||||
};
|
};
|
||||||
@@ -91,12 +93,11 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
var bucket = _hashTable[hashCode & TotalBucketsMask];
|
var bucket = _hashTable[hashCode & TotalBucketsMask];
|
||||||
if (bucket != null)
|
if (bucket != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
for (int i = 0; i < bucket.Length; i++)
|
for (int i = 0; i < bucket.Length; i++)
|
||||||
{
|
{
|
||||||
ref var entry = ref bucket[i];
|
ref var entry = ref bucket[i];
|
||||||
|
|
||||||
if (entry.Key.Equals(ref key))
|
if (entry.Hash == hashCode && entry.Key.Equals(ref key))
|
||||||
{
|
{
|
||||||
value = entry.Value;
|
value = entry.Value;
|
||||||
return true;
|
return true;
|
||||||
|
@@ -39,8 +39,12 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
private readonly IProgram _programColorDrawToMs;
|
private readonly IProgram _programColorDrawToMs;
|
||||||
private readonly IProgram _programDepthBlit;
|
private readonly IProgram _programDepthBlit;
|
||||||
private readonly IProgram _programDepthBlitMs;
|
private readonly IProgram _programDepthBlitMs;
|
||||||
|
private readonly IProgram _programDepthDrawToMs;
|
||||||
|
private readonly IProgram _programDepthDrawToNonMs;
|
||||||
private readonly IProgram _programStencilBlit;
|
private readonly IProgram _programStencilBlit;
|
||||||
private readonly IProgram _programStencilBlitMs;
|
private readonly IProgram _programStencilBlitMs;
|
||||||
|
private readonly IProgram _programStencilDrawToMs;
|
||||||
|
private readonly IProgram _programStencilDrawToNonMs;
|
||||||
|
|
||||||
public HelperShader(VulkanRenderer gd, Device device)
|
public HelperShader(VulkanRenderer gd, Device device)
|
||||||
{
|
{
|
||||||
@@ -188,6 +192,18 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
new ShaderSource(ShaderBinaries.DepthBlitMsFragmentShaderSource, blitFragmentBindings, ShaderStage.Fragment, TargetLanguage.Spirv),
|
new ShaderSource(ShaderBinaries.DepthBlitMsFragmentShaderSource, blitFragmentBindings, ShaderStage.Fragment, TargetLanguage.Spirv),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_programDepthDrawToMs = gd.CreateProgramWithMinimalLayout(new[]
|
||||||
|
{
|
||||||
|
new ShaderSource(ShaderBinaries.ColorDrawToMsVertexShaderSource, colorDrawToMsVertexBindings, ShaderStage.Vertex, TargetLanguage.Spirv),
|
||||||
|
new ShaderSource(ShaderBinaries.DepthDrawToMsFragmentShaderSource, colorDrawToMsFragmentBindings, ShaderStage.Fragment, TargetLanguage.Spirv),
|
||||||
|
});
|
||||||
|
|
||||||
|
_programDepthDrawToNonMs = gd.CreateProgramWithMinimalLayout(new[]
|
||||||
|
{
|
||||||
|
new ShaderSource(ShaderBinaries.ColorDrawToMsVertexShaderSource, colorDrawToMsVertexBindings, ShaderStage.Vertex, TargetLanguage.Spirv),
|
||||||
|
new ShaderSource(ShaderBinaries.DepthDrawToNonMsFragmentShaderSource, colorDrawToMsFragmentBindings, ShaderStage.Fragment, TargetLanguage.Spirv),
|
||||||
|
});
|
||||||
|
|
||||||
if (gd.Capabilities.SupportsShaderStencilExport)
|
if (gd.Capabilities.SupportsShaderStencilExport)
|
||||||
{
|
{
|
||||||
_programStencilBlit = gd.CreateProgramWithMinimalLayout(new[]
|
_programStencilBlit = gd.CreateProgramWithMinimalLayout(new[]
|
||||||
@@ -201,6 +217,18 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
new ShaderSource(ShaderBinaries.ColorBlitVertexShaderSource, blitVertexBindings, ShaderStage.Vertex, TargetLanguage.Spirv),
|
new ShaderSource(ShaderBinaries.ColorBlitVertexShaderSource, blitVertexBindings, ShaderStage.Vertex, TargetLanguage.Spirv),
|
||||||
new ShaderSource(ShaderBinaries.StencilBlitMsFragmentShaderSource, blitFragmentBindings, ShaderStage.Fragment, TargetLanguage.Spirv),
|
new ShaderSource(ShaderBinaries.StencilBlitMsFragmentShaderSource, blitFragmentBindings, ShaderStage.Fragment, TargetLanguage.Spirv),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_programStencilDrawToMs = gd.CreateProgramWithMinimalLayout(new[]
|
||||||
|
{
|
||||||
|
new ShaderSource(ShaderBinaries.ColorDrawToMsVertexShaderSource, colorDrawToMsVertexBindings, ShaderStage.Vertex, TargetLanguage.Spirv),
|
||||||
|
new ShaderSource(ShaderBinaries.StencilDrawToMsFragmentShaderSource, colorDrawToMsFragmentBindings, ShaderStage.Fragment, TargetLanguage.Spirv),
|
||||||
|
});
|
||||||
|
|
||||||
|
_programStencilDrawToNonMs = gd.CreateProgramWithMinimalLayout(new[]
|
||||||
|
{
|
||||||
|
new ShaderSource(ShaderBinaries.ColorDrawToMsVertexShaderSource, colorDrawToMsVertexBindings, ShaderStage.Vertex, TargetLanguage.Spirv),
|
||||||
|
new ShaderSource(ShaderBinaries.StencilDrawToNonMsFragmentShaderSource, colorDrawToMsFragmentBindings, ShaderStage.Fragment, TargetLanguage.Spirv),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1043,6 +1071,8 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
Span<int> shaderParams = stackalloc int[ParamsBufferSize / sizeof(int)];
|
Span<int> shaderParams = stackalloc int[ParamsBufferSize / sizeof(int)];
|
||||||
|
|
||||||
int samples = src.Info.Samples;
|
int samples = src.Info.Samples;
|
||||||
|
bool isDepthOrStencil = src.Info.Format.IsDepthOrStencil();
|
||||||
|
var aspectFlags = src.Info.Format.ConvertAspectFlags();
|
||||||
|
|
||||||
// X and Y are the expected texture samples.
|
// X and Y are the expected texture samples.
|
||||||
// Z and W are the actual texture samples used.
|
// Z and W are the actual texture samples used.
|
||||||
@@ -1061,42 +1091,94 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
TextureStorage.DefaultAccessMask,
|
TextureStorage.DefaultAccessMask,
|
||||||
AccessFlags.ShaderReadBit,
|
AccessFlags.ShaderReadBit,
|
||||||
PipelineStageFlags.AllCommandsBit,
|
PipelineStageFlags.AllCommandsBit,
|
||||||
PipelineStageFlags.ComputeShaderBit,
|
isDepthOrStencil ? PipelineStageFlags.FragmentShaderBit : PipelineStageFlags.ComputeShaderBit,
|
||||||
ImageAspectFlags.ColorBit,
|
aspectFlags,
|
||||||
src.FirstLayer + srcLayer,
|
src.FirstLayer + srcLayer,
|
||||||
src.FirstLevel,
|
src.FirstLevel,
|
||||||
depth,
|
depth,
|
||||||
1);
|
1);
|
||||||
|
|
||||||
_pipeline.SetCommandBuffer(cbs);
|
_pipeline.SetCommandBuffer(cbs);
|
||||||
|
|
||||||
_pipeline.SetProgram(_programColorCopyToNonMs);
|
|
||||||
|
|
||||||
var format = GetFormat(src.Info.BytesPerPixel);
|
|
||||||
|
|
||||||
int dispatchX = (dst.Info.Width + 31) / 32;
|
|
||||||
int dispatchY = (dst.Info.Height + 31) / 32;
|
|
||||||
|
|
||||||
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, new BufferRange(bufferHandle, 0, ParamsBufferSize)) });
|
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, new BufferRange(bufferHandle, 0, ParamsBufferSize)) });
|
||||||
|
|
||||||
for (int z = 0; z < depth; z++)
|
if (isDepthOrStencil)
|
||||||
{
|
{
|
||||||
var srcView = Create2DLayerView(src, srcLayer + z, 0, format);
|
// We can't use compute for this case because compute can't modify depth textures.
|
||||||
var dstView = Create2DLayerView(dst, dstLayer + z, 0);
|
|
||||||
|
|
||||||
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 0, srcView, null);
|
Span<GAL.Viewport> viewports = stackalloc GAL.Viewport[1];
|
||||||
_pipeline.SetImage(0, dstView, format);
|
|
||||||
|
|
||||||
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
var rect = new Rectangle<float>(0, 0, dst.Width, dst.Height);
|
||||||
|
|
||||||
if (srcView != src)
|
viewports[0] = new GAL.Viewport(
|
||||||
|
rect,
|
||||||
|
ViewportSwizzle.PositiveX,
|
||||||
|
ViewportSwizzle.PositiveY,
|
||||||
|
ViewportSwizzle.PositiveZ,
|
||||||
|
ViewportSwizzle.PositiveW,
|
||||||
|
0f,
|
||||||
|
1f);
|
||||||
|
|
||||||
|
Span<Rectangle<int>> scissors = stackalloc Rectangle<int>[1];
|
||||||
|
|
||||||
|
scissors[0] = new Rectangle<int>(0, 0, dst.Width, dst.Height);
|
||||||
|
|
||||||
|
_pipeline.SetScissors(scissors);
|
||||||
|
_pipeline.SetViewports(viewports, false);
|
||||||
|
_pipeline.SetPrimitiveTopology(GAL.PrimitiveTopology.TriangleStrip);
|
||||||
|
|
||||||
|
for (int z = 0; z < depth; z++)
|
||||||
{
|
{
|
||||||
srcView.Release();
|
var srcView = Create2DLayerView(src, srcLayer + z, 0);
|
||||||
|
var dstView = Create2DLayerView(dst, dstLayer + z, 0);
|
||||||
|
|
||||||
|
_pipeline.SetRenderTarget(
|
||||||
|
((TextureView)dstView).GetImageViewForAttachment(),
|
||||||
|
(uint)dst.Width,
|
||||||
|
(uint)dst.Height,
|
||||||
|
true,
|
||||||
|
dst.VkFormat);
|
||||||
|
|
||||||
|
CopyMSDraw(srcView, aspectFlags, fromMS: true);
|
||||||
|
|
||||||
|
if (srcView != src)
|
||||||
|
{
|
||||||
|
srcView.Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dstView != dst)
|
||||||
|
{
|
||||||
|
dstView.Release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var format = GetFormat(src.Info.BytesPerPixel);
|
||||||
|
|
||||||
if (dstView != dst)
|
int dispatchX = (dst.Info.Width + 31) / 32;
|
||||||
|
int dispatchY = (dst.Info.Height + 31) / 32;
|
||||||
|
|
||||||
|
_pipeline.SetProgram(_programColorCopyToNonMs);
|
||||||
|
|
||||||
|
for (int z = 0; z < depth; z++)
|
||||||
{
|
{
|
||||||
dstView.Release();
|
var srcView = Create2DLayerView(src, srcLayer + z, 0, format);
|
||||||
|
var dstView = Create2DLayerView(dst, dstLayer + z, 0);
|
||||||
|
|
||||||
|
_pipeline.SetTextureAndSampler(ShaderStage.Compute, 0, srcView, null);
|
||||||
|
_pipeline.SetImage(0, dstView, format);
|
||||||
|
|
||||||
|
_pipeline.DispatchCompute(dispatchX, dispatchY, 1);
|
||||||
|
|
||||||
|
if (srcView != src)
|
||||||
|
{
|
||||||
|
srcView.Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dstView != dst)
|
||||||
|
{
|
||||||
|
dstView.Release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1108,11 +1190,11 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
gd.Api,
|
gd.Api,
|
||||||
cbs.CommandBuffer,
|
cbs.CommandBuffer,
|
||||||
dst.GetImage().Get(cbs).Value,
|
dst.GetImage().Get(cbs).Value,
|
||||||
AccessFlags.ShaderWriteBit,
|
isDepthOrStencil ? AccessFlags.DepthStencilAttachmentWriteBit : AccessFlags.ShaderWriteBit,
|
||||||
TextureStorage.DefaultAccessMask,
|
TextureStorage.DefaultAccessMask,
|
||||||
PipelineStageFlags.ComputeShaderBit,
|
isDepthOrStencil ? PipelineStageFlags.LateFragmentTestsBit : PipelineStageFlags.ComputeShaderBit,
|
||||||
PipelineStageFlags.AllCommandsBit,
|
PipelineStageFlags.AllCommandsBit,
|
||||||
ImageAspectFlags.ColorBit,
|
aspectFlags,
|
||||||
dst.FirstLayer + dstLayer,
|
dst.FirstLayer + dstLayer,
|
||||||
dst.FirstLevel,
|
dst.FirstLevel,
|
||||||
depth,
|
depth,
|
||||||
@@ -1126,6 +1208,8 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
Span<int> shaderParams = stackalloc int[ParamsBufferSize / sizeof(int)];
|
Span<int> shaderParams = stackalloc int[ParamsBufferSize / sizeof(int)];
|
||||||
|
|
||||||
int samples = dst.Info.Samples;
|
int samples = dst.Info.Samples;
|
||||||
|
bool isDepthOrStencil = src.Info.Format.IsDepthOrStencil();
|
||||||
|
var aspectFlags = src.Info.Format.ConvertAspectFlags();
|
||||||
|
|
||||||
// X and Y are the expected texture samples.
|
// X and Y are the expected texture samples.
|
||||||
// Z and W are the actual texture samples used.
|
// Z and W are the actual texture samples used.
|
||||||
@@ -1145,7 +1229,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
AccessFlags.ShaderReadBit,
|
AccessFlags.ShaderReadBit,
|
||||||
PipelineStageFlags.AllCommandsBit,
|
PipelineStageFlags.AllCommandsBit,
|
||||||
PipelineStageFlags.FragmentShaderBit,
|
PipelineStageFlags.FragmentShaderBit,
|
||||||
ImageAspectFlags.ColorBit,
|
aspectFlags,
|
||||||
src.FirstLayer + srcLayer,
|
src.FirstLayer + srcLayer,
|
||||||
src.FirstLevel,
|
src.FirstLevel,
|
||||||
depth,
|
depth,
|
||||||
@@ -1153,8 +1237,6 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
_pipeline.SetCommandBuffer(cbs);
|
_pipeline.SetCommandBuffer(cbs);
|
||||||
|
|
||||||
_pipeline.SetProgram(_programColorDrawToMs);
|
|
||||||
|
|
||||||
Span<GAL.Viewport> viewports = stackalloc GAL.Viewport[1];
|
Span<GAL.Viewport> viewports = stackalloc GAL.Viewport[1];
|
||||||
|
|
||||||
var rect = new Rectangle<float>(0, 0, dst.Width, dst.Height);
|
var rect = new Rectangle<float>(0, 0, dst.Width, dst.Height);
|
||||||
@@ -1179,33 +1261,66 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, new BufferRange(bufferHandle, 0, ParamsBufferSize)) });
|
_pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, new BufferRange(bufferHandle, 0, ParamsBufferSize)) });
|
||||||
|
|
||||||
var format = GetFormat(src.Info.BytesPerPixel);
|
if (isDepthOrStencil)
|
||||||
var vkFormat = FormatTable.GetFormat(format);
|
|
||||||
|
|
||||||
for (int z = 0; z < depth; z++)
|
|
||||||
{
|
{
|
||||||
var srcView = Create2DLayerView(src, srcLayer + z, 0, format);
|
for (int z = 0; z < depth; z++)
|
||||||
var dstView = Create2DLayerView(dst, dstLayer + z, 0);
|
|
||||||
|
|
||||||
_pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, srcView, null);
|
|
||||||
_pipeline.SetRenderTarget(
|
|
||||||
((TextureView)dstView).GetView(format).GetImageViewForAttachment(),
|
|
||||||
(uint)dst.Width,
|
|
||||||
(uint)dst.Height,
|
|
||||||
(uint)samples,
|
|
||||||
false,
|
|
||||||
vkFormat);
|
|
||||||
|
|
||||||
_pipeline.Draw(4, 1, 0, 0);
|
|
||||||
|
|
||||||
if (srcView != src)
|
|
||||||
{
|
{
|
||||||
srcView.Release();
|
var srcView = Create2DLayerView(src, srcLayer + z, 0);
|
||||||
|
var dstView = Create2DLayerView(dst, dstLayer + z, 0);
|
||||||
|
|
||||||
|
_pipeline.SetRenderTarget(
|
||||||
|
((TextureView)dstView).GetImageViewForAttachment(),
|
||||||
|
(uint)dst.Width,
|
||||||
|
(uint)dst.Height,
|
||||||
|
(uint)samples,
|
||||||
|
true,
|
||||||
|
dst.VkFormat);
|
||||||
|
|
||||||
|
CopyMSDraw(srcView, aspectFlags, fromMS: false);
|
||||||
|
|
||||||
|
if (srcView != src)
|
||||||
|
{
|
||||||
|
srcView.Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dstView != dst)
|
||||||
|
{
|
||||||
|
dstView.Release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_pipeline.SetProgram(_programColorDrawToMs);
|
||||||
|
|
||||||
if (dstView != dst)
|
var format = GetFormat(src.Info.BytesPerPixel);
|
||||||
|
var vkFormat = FormatTable.GetFormat(format);
|
||||||
|
|
||||||
|
for (int z = 0; z < depth; z++)
|
||||||
{
|
{
|
||||||
dstView.Release();
|
var srcView = Create2DLayerView(src, srcLayer + z, 0, format);
|
||||||
|
var dstView = Create2DLayerView(dst, dstLayer + z, 0);
|
||||||
|
|
||||||
|
_pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, srcView, null);
|
||||||
|
_pipeline.SetRenderTarget(
|
||||||
|
((TextureView)dstView).GetView(format).GetImageViewForAttachment(),
|
||||||
|
(uint)dst.Width,
|
||||||
|
(uint)dst.Height,
|
||||||
|
(uint)samples,
|
||||||
|
false,
|
||||||
|
vkFormat);
|
||||||
|
|
||||||
|
_pipeline.Draw(4, 1, 0, 0);
|
||||||
|
|
||||||
|
if (srcView != src)
|
||||||
|
{
|
||||||
|
srcView.Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dstView != dst)
|
||||||
|
{
|
||||||
|
dstView.Release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1217,17 +1332,71 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
gd.Api,
|
gd.Api,
|
||||||
cbs.CommandBuffer,
|
cbs.CommandBuffer,
|
||||||
dst.GetImage().Get(cbs).Value,
|
dst.GetImage().Get(cbs).Value,
|
||||||
AccessFlags.ColorAttachmentWriteBit,
|
isDepthOrStencil ? AccessFlags.DepthStencilAttachmentWriteBit : AccessFlags.ColorAttachmentWriteBit,
|
||||||
TextureStorage.DefaultAccessMask,
|
TextureStorage.DefaultAccessMask,
|
||||||
PipelineStageFlags.FragmentShaderBit,
|
isDepthOrStencil ? PipelineStageFlags.LateFragmentTestsBit : PipelineStageFlags.ColorAttachmentOutputBit,
|
||||||
PipelineStageFlags.AllCommandsBit,
|
PipelineStageFlags.AllCommandsBit,
|
||||||
ImageAspectFlags.ColorBit,
|
aspectFlags,
|
||||||
dst.FirstLayer + dstLayer,
|
dst.FirstLayer + dstLayer,
|
||||||
dst.FirstLevel,
|
dst.FirstLevel,
|
||||||
depth,
|
depth,
|
||||||
1);
|
1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CopyMSDraw(TextureView src, ImageAspectFlags aspectFlags, bool fromMS)
|
||||||
|
{
|
||||||
|
if (aspectFlags.HasFlag(ImageAspectFlags.DepthBit))
|
||||||
|
{
|
||||||
|
var depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth);
|
||||||
|
|
||||||
|
CopyMSAspectDraw(depthTexture, fromMS, isDepth: true);
|
||||||
|
|
||||||
|
if (depthTexture != src)
|
||||||
|
{
|
||||||
|
depthTexture.Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aspectFlags.HasFlag(ImageAspectFlags.StencilBit) && _programStencilDrawToMs != null)
|
||||||
|
{
|
||||||
|
var stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil);
|
||||||
|
|
||||||
|
CopyMSAspectDraw(stencilTexture, fromMS, isDepth: false);
|
||||||
|
|
||||||
|
if (stencilTexture != src)
|
||||||
|
{
|
||||||
|
stencilTexture.Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CopyMSAspectDraw(TextureView src, bool fromMS, bool isDepth)
|
||||||
|
{
|
||||||
|
_pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, src, _samplerNearest);
|
||||||
|
|
||||||
|
if (isDepth)
|
||||||
|
{
|
||||||
|
_pipeline.SetProgram(fromMS ? _programDepthDrawToNonMs : _programDepthDrawToMs);
|
||||||
|
_pipeline.SetDepthTest(new DepthTestDescriptor(true, true, GAL.CompareOp.Always));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_pipeline.SetProgram(fromMS ? _programStencilDrawToNonMs : _programStencilDrawToMs);
|
||||||
|
_pipeline.SetStencilTest(CreateStencilTestDescriptor(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
_pipeline.Draw(4, 1, 0, 0);
|
||||||
|
|
||||||
|
if (isDepth)
|
||||||
|
{
|
||||||
|
_pipeline.SetDepthTest(new DepthTestDescriptor(false, false, GAL.CompareOp.Always));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_pipeline.SetStencilTest(CreateStencilTestDescriptor(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static (int, int) GetSampleCountXYLog2(int samples)
|
private static (int, int) GetSampleCountXYLog2(int samples)
|
||||||
{
|
{
|
||||||
int samplesInXLog2 = 0;
|
int samplesInXLog2 = 0;
|
||||||
@@ -1494,8 +1663,12 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
_programColorDrawToMs.Dispose();
|
_programColorDrawToMs.Dispose();
|
||||||
_programDepthBlit.Dispose();
|
_programDepthBlit.Dispose();
|
||||||
_programDepthBlitMs.Dispose();
|
_programDepthBlitMs.Dispose();
|
||||||
|
_programDepthDrawToMs.Dispose();
|
||||||
|
_programDepthDrawToNonMs.Dispose();
|
||||||
_programStencilBlit?.Dispose();
|
_programStencilBlit?.Dispose();
|
||||||
_programStencilBlitMs?.Dispose();
|
_programStencilBlitMs?.Dispose();
|
||||||
|
_programStencilDrawToMs?.Dispose();
|
||||||
|
_programStencilDrawToNonMs?.Dispose();
|
||||||
_samplerNearest.Dispose();
|
_samplerNearest.Dispose();
|
||||||
_samplerLinear.Dispose();
|
_samplerLinear.Dispose();
|
||||||
_pipeline.Dispose();
|
_pipeline.Dispose();
|
||||||
|
@@ -86,7 +86,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
Gd = gd;
|
Gd = gd;
|
||||||
Device = device;
|
Device = device;
|
||||||
|
|
||||||
AutoFlush = new AutoFlushCounter();
|
AutoFlush = new AutoFlushCounter(gd);
|
||||||
|
|
||||||
var pipelineCacheCreateInfo = new PipelineCacheCreateInfo()
|
var pipelineCacheCreateInfo = new PipelineCacheCreateInfo()
|
||||||
{
|
{
|
||||||
@@ -1562,6 +1562,11 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
private void RecreatePipelineIfNeeded(PipelineBindPoint pbp)
|
private void RecreatePipelineIfNeeded(PipelineBindPoint pbp)
|
||||||
{
|
{
|
||||||
|
if (AutoFlush.ShouldFlushDraw(DrawCount))
|
||||||
|
{
|
||||||
|
Gd.FlushAllCommands();
|
||||||
|
}
|
||||||
|
|
||||||
DynamicState.ReplayIfDirty(Gd.Api, CommandBuffer);
|
DynamicState.ReplayIfDirty(Gd.Api, CommandBuffer);
|
||||||
|
|
||||||
// Commit changes to the support buffer before drawing.
|
// Commit changes to the support buffer before drawing.
|
||||||
|
@@ -0,0 +1,25 @@
|
|||||||
|
#version 450 core
|
||||||
|
|
||||||
|
layout (std140, binding = 0) uniform sample_counts_log2_in
|
||||||
|
{
|
||||||
|
ivec4 sample_counts_log2;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (set = 2, binding = 0) uniform sampler2D src;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
int deltaX = sample_counts_log2.x - sample_counts_log2.z;
|
||||||
|
int deltaY = sample_counts_log2.y - sample_counts_log2.w;
|
||||||
|
int samplesInXLog2 = sample_counts_log2.z;
|
||||||
|
int samplesInYLog2 = sample_counts_log2.w;
|
||||||
|
int samplesInX = 1 << samplesInXLog2;
|
||||||
|
int samplesInY = 1 << samplesInYLog2;
|
||||||
|
|
||||||
|
int sampleIndex = gl_SampleID;
|
||||||
|
|
||||||
|
int inX = (int(gl_FragCoord.x) << sample_counts_log2.x) | ((sampleIndex & (samplesInX - 1)) << deltaX);
|
||||||
|
int inY = (int(gl_FragCoord.y) << sample_counts_log2.y) | ((sampleIndex >> samplesInXLog2) << deltaY);
|
||||||
|
|
||||||
|
gl_FragDepth = texelFetch(src, ivec2(inX, inY), 0).r;
|
||||||
|
}
|
@@ -0,0 +1,28 @@
|
|||||||
|
#version 450 core
|
||||||
|
|
||||||
|
layout (std140, binding = 0) uniform sample_counts_log2_in
|
||||||
|
{
|
||||||
|
ivec4 sample_counts_log2;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (set = 2, binding = 0) uniform sampler2DMS srcMS;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
uvec2 coords = uvec2(gl_FragCoord.xy);
|
||||||
|
|
||||||
|
int deltaX = sample_counts_log2.x - sample_counts_log2.z;
|
||||||
|
int deltaY = sample_counts_log2.y - sample_counts_log2.w;
|
||||||
|
int samplesInXLog2 = sample_counts_log2.z;
|
||||||
|
int samplesInYLog2 = sample_counts_log2.w;
|
||||||
|
int samplesInX = 1 << samplesInXLog2;
|
||||||
|
int samplesInY = 1 << samplesInYLog2;
|
||||||
|
int sampleIdx = ((int(coords.x) >> deltaX) & (samplesInX - 1)) | (((int(coords.y) >> deltaY) & (samplesInY - 1)) << samplesInXLog2);
|
||||||
|
|
||||||
|
samplesInXLog2 = sample_counts_log2.x;
|
||||||
|
samplesInYLog2 = sample_counts_log2.y;
|
||||||
|
|
||||||
|
ivec2 shiftedCoords = ivec2(int(coords.x) >> samplesInXLog2, int(coords.y) >> samplesInYLog2);
|
||||||
|
|
||||||
|
gl_FragDepth = texelFetch(srcMS, shiftedCoords, sampleIdx).r;
|
||||||
|
}
|
@@ -1874,6 +1874,213 @@ namespace Ryujinx.Graphics.Vulkan.Shaders
|
|||||||
0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
|
0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static readonly byte[] DepthDrawToMsFragmentShaderSource = new byte[]
|
||||||
|
{
|
||||||
|
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x5E, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
|
||||||
|
0x23, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4C, 0x53, 0x4C,
|
||||||
|
0x2E, 0x73, 0x74, 0x64, 0x2E, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x03, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00,
|
||||||
|
0x34, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
|
||||||
|
0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00,
|
||||||
|
0x0A, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x75, 0x6E, 0x74,
|
||||||
|
0x73, 0x5F, 0x6C, 0x6F, 0x67, 0x32, 0x5F, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00,
|
||||||
|
0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x5F, 0x63,
|
||||||
|
0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5F, 0x6C, 0x6F, 0x67, 0x32, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00,
|
||||||
|
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2E, 0x00, 0x00, 0x00,
|
||||||
|
0x67, 0x6C, 0x5F, 0x53, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x49, 0x44, 0x00, 0x05, 0x00, 0x06, 0x00,
|
||||||
|
0x34, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6F, 0x6F, 0x72, 0x64,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x51, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46,
|
||||||
|
0x72, 0x61, 0x67, 0x44, 0x65, 0x70, 0x74, 0x68, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00,
|
||||||
|
0x55, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0A, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
|
||||||
|
0x0A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
|
||||||
|
0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
|
||||||
|
0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x2E, 0x00, 0x00, 0x00,
|
||||||
|
0x0E, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
|
||||||
|
0x0F, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x51, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
|
||||||
|
0x16, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x55, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x55, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0A, 0x00, 0x00, 0x00,
|
||||||
|
0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x0A, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x31, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||||
|
0x17, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
|
||||||
|
0x3B, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x35, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
|
||||||
|
0x3B, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x19, 0x00, 0x09, 0x00, 0x52, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00, 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00,
|
||||||
|
0x3B, 0x00, 0x04, 0x00, 0x54, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x17, 0x00, 0x04, 0x00, 0x59, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
|
||||||
|
0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00,
|
||||||
|
0x0F, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x11, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||||
|
0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
|
||||||
|
0x41, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
|
||||||
|
0x0D, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x1A, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||||
|
0x1C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00,
|
||||||
|
0x3D, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
|
||||||
|
0x82, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00,
|
||||||
|
0x1D, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
|
||||||
|
0x26, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x2F, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00,
|
||||||
|
0x36, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x82, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
|
||||||
|
0x26, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
|
||||||
|
0x2F, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x41, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xC5, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
|
||||||
|
0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
|
||||||
|
0x44, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
|
||||||
|
0x45, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
|
||||||
|
0x46, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x4C, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,
|
||||||
|
0xC5, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
|
||||||
|
0x4E, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x53, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
|
||||||
|
0x55, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x59, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00,
|
||||||
|
0x42, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x52, 0x00, 0x00, 0x00,
|
||||||
|
0x5B, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00,
|
||||||
|
0x5C, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x0D, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00,
|
||||||
|
0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x51, 0x00, 0x00, 0x00,
|
||||||
|
0x5D, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
|
public static readonly byte[] DepthDrawToNonMsFragmentShaderSource = new byte[]
|
||||||
|
{
|
||||||
|
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x6A, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x06, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x47, 0x4C, 0x53, 0x4C, 0x2E, 0x73, 0x74, 0x64, 0x2E, 0x34, 0x35, 0x30,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x0F, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x00,
|
||||||
|
0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x05, 0x00, 0x06, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46, 0x72, 0x61, 0x67, 0x43,
|
||||||
|
0x6F, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x00,
|
||||||
|
0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5F, 0x6C, 0x6F,
|
||||||
|
0x67, 0x32, 0x5F, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x75, 0x6E, 0x74,
|
||||||
|
0x73, 0x5F, 0x6C, 0x6F, 0x67, 0x32, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46,
|
||||||
|
0x72, 0x61, 0x67, 0x44, 0x65, 0x70, 0x74, 0x68, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
|
||||||
|
0x63, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x4D, 0x53, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x0D, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
|
||||||
|
0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x47, 0x00, 0x03, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x18, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x5F, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x63, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x63, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x15, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x16, 0x00, 0x03, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
|
||||||
|
0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
|
||||||
|
0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
|
||||||
|
0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
|
||||||
|
0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
|
||||||
|
0x15, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x03, 0x00,
|
||||||
|
0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1B, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x1E, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x23, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x26, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5E, 0x00, 0x00, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x5E, 0x00, 0x00, 0x00,
|
||||||
|
0x5F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x60, 0x00, 0x00, 0x00,
|
||||||
|
0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00,
|
||||||
|
0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x62, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x62, 0x00, 0x00, 0x00,
|
||||||
|
0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x02, 0x00,
|
||||||
|
0x05, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
|
||||||
|
0x0D, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||||
|
0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x6D, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||||
|
0x41, 0x00, 0x06, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||||
|
0x19, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x1D, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1B, 0x00, 0x00, 0x00,
|
||||||
|
0x1F, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,
|
||||||
|
0x3D, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,
|
||||||
|
0x82, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
|
||||||
|
0x1B, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
|
||||||
|
0x26, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
|
||||||
|
0x27, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
|
||||||
|
0x25, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x33, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
|
||||||
|
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00,
|
||||||
|
0x3A, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00,
|
||||||
|
0x3B, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x3F, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x05, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
|
||||||
|
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
|
||||||
|
0x42, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
|
||||||
|
0x43, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x47, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x05, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
|
||||||
|
0xC4, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0xC5, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00,
|
||||||
|
0x40, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x57, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x05, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
|
||||||
|
0x50, 0x00, 0x05, 0x00, 0x50, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
|
||||||
|
0x5C, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x61, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
|
||||||
|
0x63, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x60, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
|
||||||
|
0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
|
||||||
|
0x67, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00,
|
||||||
|
0x51, 0x00, 0x05, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00,
|
||||||
|
0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
public static readonly byte[] StencilBlitFragmentShaderSource = new byte[]
|
public static readonly byte[] StencilBlitFragmentShaderSource = new byte[]
|
||||||
{
|
{
|
||||||
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00,
|
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||||
@@ -1984,5 +2191,223 @@ namespace Ryujinx.Graphics.Vulkan.Shaders
|
|||||||
0x22, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
|
0x22, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
|
||||||
0x08, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
|
0x08, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static readonly byte[] StencilDrawToMsFragmentShaderSource = new byte[]
|
||||||
|
{
|
||||||
|
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x5E, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
|
||||||
|
0x23, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x95, 0x13, 0x00, 0x00, 0x0A, 0x00, 0x09, 0x00,
|
||||||
|
0x53, 0x50, 0x56, 0x5F, 0x45, 0x58, 0x54, 0x5F, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5F, 0x73,
|
||||||
|
0x74, 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x5F, 0x65, 0x78, 0x70, 0x6F, 0x72, 0x74, 0x00, 0x00, 0x00,
|
||||||
|
0x0B, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4C, 0x53, 0x4C, 0x2E, 0x73, 0x74, 0x64,
|
||||||
|
0x2E, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
|
||||||
|
0x51, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||||
|
0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0xA3, 0x13, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x47, 0x4C, 0x5F, 0x41,
|
||||||
|
0x52, 0x42, 0x5F, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5F, 0x73, 0x74, 0x65, 0x6E, 0x63, 0x69,
|
||||||
|
0x6C, 0x5F, 0x65, 0x78, 0x70, 0x6F, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00,
|
||||||
|
0x0A, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x75, 0x6E, 0x74,
|
||||||
|
0x73, 0x5F, 0x6C, 0x6F, 0x67, 0x32, 0x5F, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00,
|
||||||
|
0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x5F, 0x63,
|
||||||
|
0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5F, 0x6C, 0x6F, 0x67, 0x32, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00,
|
||||||
|
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x2E, 0x00, 0x00, 0x00,
|
||||||
|
0x67, 0x6C, 0x5F, 0x53, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x49, 0x44, 0x00, 0x05, 0x00, 0x06, 0x00,
|
||||||
|
0x34, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6F, 0x6F, 0x72, 0x64,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x51, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46,
|
||||||
|
0x72, 0x61, 0x67, 0x53, 0x74, 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x52, 0x65, 0x66, 0x41, 0x52, 0x42,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x55, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x00,
|
||||||
|
0x48, 0x00, 0x05, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x47, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x47, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x47, 0x00, 0x03, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x2E, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x34, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x51, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x96, 0x13, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x55, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
|
||||||
|
0x55, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x15, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x17, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x1E, 0x00, 0x03, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
|
||||||
|
0x0B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
|
||||||
|
0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
|
||||||
|
0x0E, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
|
||||||
|
0x0E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
|
||||||
|
0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
|
||||||
|
0x0E, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
|
||||||
|
0x0E, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
|
||||||
|
0x0E, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
|
||||||
|
0x2D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
|
||||||
|
0x2D, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x00,
|
||||||
|
0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x35, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00,
|
||||||
|
0x51, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x52, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00,
|
||||||
|
0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x54, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x54, 0x00, 0x00, 0x00,
|
||||||
|
0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x59, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x02, 0x00,
|
||||||
|
0x05, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
|
||||||
|
0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
|
||||||
|
0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00,
|
||||||
|
0x13, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
|
||||||
|
0x14, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||||
|
0x19, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||||
|
0x3D, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
|
||||||
|
0x41, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
|
||||||
|
0x0D, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x1D, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x1E, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
|
||||||
|
0x3D, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00,
|
||||||
|
0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
|
||||||
|
0x0F, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
|
||||||
|
0x36, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
|
||||||
|
0x37, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00,
|
||||||
|
0x38, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x3E, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
|
||||||
|
0xC4, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
|
||||||
|
0x16, 0x00, 0x00, 0x00, 0xC5, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
|
||||||
|
0x3B, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00,
|
||||||
|
0x44, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00,
|
||||||
|
0xC3, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00,
|
||||||
|
0x15, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00,
|
||||||
|
0x4C, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xC5, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x4F, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
|
||||||
|
0x53, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00,
|
||||||
|
0x59, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00,
|
||||||
|
0x64, 0x00, 0x04, 0x00, 0x52, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
|
||||||
|
0x5F, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00,
|
||||||
|
0x5A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x3E, 0x00, 0x03, 0x00, 0x51, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x01, 0x00,
|
||||||
|
0x38, 0x00, 0x01, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
|
public static readonly byte[] StencilDrawToNonMsFragmentShaderSource = new byte[]
|
||||||
|
{
|
||||||
|
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x6A, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
|
||||||
|
0x95, 0x13, 0x00, 0x00, 0x0A, 0x00, 0x09, 0x00, 0x53, 0x50, 0x56, 0x5F, 0x45, 0x58, 0x54, 0x5F,
|
||||||
|
0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5F, 0x73, 0x74, 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x5F, 0x65,
|
||||||
|
0x78, 0x70, 0x6F, 0x72, 0x74, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x47, 0x4C, 0x53, 0x4C, 0x2E, 0x73, 0x74, 0x64, 0x2E, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0E, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x07, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0D, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||||
|
0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0xA3, 0x13, 0x00, 0x00,
|
||||||
|
0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00,
|
||||||
|
0x47, 0x4C, 0x5F, 0x41, 0x52, 0x42, 0x5F, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5F, 0x73, 0x74,
|
||||||
|
0x65, 0x6E, 0x63, 0x69, 0x6C, 0x5F, 0x65, 0x78, 0x70, 0x6F, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x05, 0x00, 0x06, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46, 0x72, 0x61, 0x67, 0x43,
|
||||||
|
0x6F, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x00,
|
||||||
|
0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x73, 0x5F, 0x6C, 0x6F,
|
||||||
|
0x67, 0x32, 0x5F, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x75, 0x6E, 0x74,
|
||||||
|
0x73, 0x5F, 0x6C, 0x6F, 0x67, 0x32, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46,
|
||||||
|
0x72, 0x61, 0x67, 0x53, 0x74, 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x52, 0x65, 0x66, 0x41, 0x52, 0x42,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x63, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x4D,
|
||||||
|
0x53, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
|
||||||
|
0x0F, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x16, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
|
||||||
|
0x96, 0x13, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x63, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x63, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x0A, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x0B, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x03, 0x00, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
|
||||||
|
0x3B, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x2B, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x2B, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x17, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x3B, 0x00, 0x04, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x19, 0x00, 0x09, 0x00, 0x60, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x04, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00,
|
||||||
|
0x3B, 0x00, 0x04, 0x00, 0x62, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
|
||||||
|
0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x07, 0x00,
|
||||||
|
0x0E, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||||
|
0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1B, 0x00, 0x00, 0x00,
|
||||||
|
0x1C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00,
|
||||||
|
0x3D, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
|
||||||
|
0x41, 0x00, 0x06, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||||
|
0x19, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x21, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
|
||||||
|
0x1B, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
|
||||||
|
0x23, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
|
||||||
|
0x24, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00,
|
||||||
|
0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
|
||||||
|
0xC4, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
|
||||||
|
0x20, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x3A, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x05, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
|
||||||
|
0x82, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
|
||||||
|
0x3D, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||||
|
0x42, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x05, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
|
||||||
|
0x82, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
|
||||||
|
0x31, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
|
||||||
|
0x45, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x4A, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xC5, 0x00, 0x05, 0x00,
|
||||||
|
0x12, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00,
|
||||||
|
0xC3, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00,
|
||||||
|
0x1D, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
|
||||||
|
0x43, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x50, 0x00, 0x00, 0x00,
|
||||||
|
0x5D, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
|
||||||
|
0x61, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
|
||||||
|
0x60, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
|
||||||
|
0x15, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00,
|
||||||
|
0x40, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
|
||||||
|
0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
|
||||||
|
0x5F, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -0,0 +1,27 @@
|
|||||||
|
#version 450 core
|
||||||
|
|
||||||
|
#extension GL_ARB_shader_stencil_export : require
|
||||||
|
|
||||||
|
layout (std140, binding = 0) uniform sample_counts_log2_in
|
||||||
|
{
|
||||||
|
ivec4 sample_counts_log2;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (set = 2, binding = 0) uniform isampler2D src;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
int deltaX = sample_counts_log2.x - sample_counts_log2.z;
|
||||||
|
int deltaY = sample_counts_log2.y - sample_counts_log2.w;
|
||||||
|
int samplesInXLog2 = sample_counts_log2.z;
|
||||||
|
int samplesInYLog2 = sample_counts_log2.w;
|
||||||
|
int samplesInX = 1 << samplesInXLog2;
|
||||||
|
int samplesInY = 1 << samplesInYLog2;
|
||||||
|
|
||||||
|
int sampleIndex = gl_SampleID;
|
||||||
|
|
||||||
|
int inX = (int(gl_FragCoord.x) << sample_counts_log2.x) | ((sampleIndex & (samplesInX - 1)) << deltaX);
|
||||||
|
int inY = (int(gl_FragCoord.y) << sample_counts_log2.y) | ((sampleIndex >> samplesInXLog2) << deltaY);
|
||||||
|
|
||||||
|
gl_FragStencilRefARB = texelFetch(src, ivec2(inX, inY), 0).r;
|
||||||
|
}
|
@@ -0,0 +1,30 @@
|
|||||||
|
#version 450 core
|
||||||
|
|
||||||
|
#extension GL_ARB_shader_stencil_export : require
|
||||||
|
|
||||||
|
layout (std140, binding = 0) uniform sample_counts_log2_in
|
||||||
|
{
|
||||||
|
ivec4 sample_counts_log2;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (set = 2, binding = 0) uniform isampler2DMS srcMS;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
uvec2 coords = uvec2(gl_FragCoord.xy);
|
||||||
|
|
||||||
|
int deltaX = sample_counts_log2.x - sample_counts_log2.z;
|
||||||
|
int deltaY = sample_counts_log2.y - sample_counts_log2.w;
|
||||||
|
int samplesInXLog2 = sample_counts_log2.z;
|
||||||
|
int samplesInYLog2 = sample_counts_log2.w;
|
||||||
|
int samplesInX = 1 << samplesInXLog2;
|
||||||
|
int samplesInY = 1 << samplesInYLog2;
|
||||||
|
int sampleIdx = ((int(coords.x) >> deltaX) & (samplesInX - 1)) | (((int(coords.y) >> deltaY) & (samplesInY - 1)) << samplesInXLog2);
|
||||||
|
|
||||||
|
samplesInXLog2 = sample_counts_log2.x;
|
||||||
|
samplesInYLog2 = sample_counts_log2.y;
|
||||||
|
|
||||||
|
ivec2 shiftedCoords = ivec2(int(coords.x) >> samplesInXLog2, int(coords.y) >> samplesInYLog2);
|
||||||
|
|
||||||
|
gl_FragStencilRefARB = texelFetch(srcMS, shiftedCoords, sampleIdx).r;
|
||||||
|
}
|
@@ -1,6 +1,7 @@
|
|||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Silk.NET.Vulkan;
|
using Silk.NET.Vulkan;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace Ryujinx.Graphics.Vulkan
|
namespace Ryujinx.Graphics.Vulkan
|
||||||
@@ -26,6 +27,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
private readonly Device _device;
|
private readonly Device _device;
|
||||||
private List<SyncHandle> _handles;
|
private List<SyncHandle> _handles;
|
||||||
private ulong FlushId;
|
private ulong FlushId;
|
||||||
|
private long WaitTicks;
|
||||||
|
|
||||||
public SyncManager(VulkanRenderer gd, Device device)
|
public SyncManager(VulkanRenderer gd, Device device)
|
||||||
{
|
{
|
||||||
@@ -130,6 +132,8 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long beforeTicks = Stopwatch.GetTimestamp();
|
||||||
|
|
||||||
if (result.NeedsFlush(FlushId))
|
if (result.NeedsFlush(FlushId))
|
||||||
{
|
{
|
||||||
_gd.InterruptAction(() =>
|
_gd.InterruptAction(() =>
|
||||||
@@ -142,12 +146,14 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool signaled = result.Signalled || result.Waitable.WaitForFences(_gd.Api, _device, 1000000000);
|
bool signaled = result.Signalled || result.Waitable.WaitForFences(_gd.Api, _device, 1000000000);
|
||||||
|
|
||||||
if (!signaled)
|
if (!signaled)
|
||||||
{
|
{
|
||||||
Logger.Error?.PrintMsg(LogClass.Gpu, $"VK Sync Object {result.ID} failed to signal within 1000ms. Continuing...");
|
Logger.Error?.PrintMsg(LogClass.Gpu, $"VK Sync Object {result.ID} failed to signal within 1000ms. Continuing...");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
WaitTicks += Stopwatch.GetTimestamp() - beforeTicks;
|
||||||
result.Signalled = true;
|
result.Signalled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,5 +194,13 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long GetAndResetWaitTicks()
|
||||||
|
{
|
||||||
|
long result = WaitTicks;
|
||||||
|
WaitTicks = 0;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -444,7 +444,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
public void InsertReadToWriteBarrier(CommandBufferScoped cbs, AccessFlags dstAccessFlags, PipelineStageFlags dstStageFlags)
|
public void InsertReadToWriteBarrier(CommandBufferScoped cbs, AccessFlags dstAccessFlags, PipelineStageFlags dstStageFlags)
|
||||||
{
|
{
|
||||||
if (_lastReadAccess != AccessFlags.NoneKhr)
|
if (_lastReadAccess != AccessFlags.None)
|
||||||
{
|
{
|
||||||
ImageAspectFlags aspectFlags = Info.Format.ConvertAspectFlags();
|
ImageAspectFlags aspectFlags = Info.Format.ConvertAspectFlags();
|
||||||
|
|
||||||
@@ -462,7 +462,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
_info.GetLayers(),
|
_info.GetLayers(),
|
||||||
_info.Levels);
|
_info.Levels);
|
||||||
|
|
||||||
_lastReadAccess = AccessFlags.NoneKhr;
|
_lastReadAccess = AccessFlags.None;
|
||||||
_lastReadStage = PipelineStageFlags.None;
|
_lastReadStage = PipelineStageFlags.None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -472,7 +472,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
_lastReadAccess |= dstAccessFlags;
|
_lastReadAccess |= dstAccessFlags;
|
||||||
_lastReadStage |= dstStageFlags;
|
_lastReadStage |= dstStageFlags;
|
||||||
|
|
||||||
if (_lastModificationAccess != AccessFlags.NoneKhr)
|
if (_lastModificationAccess != AccessFlags.None)
|
||||||
{
|
{
|
||||||
ImageAspectFlags aspectFlags = Info.Format.ConvertAspectFlags();
|
ImageAspectFlags aspectFlags = Info.Format.ConvertAspectFlags();
|
||||||
|
|
||||||
@@ -490,7 +490,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
_info.GetLayers(),
|
_info.GetLayers(),
|
||||||
_info.Levels);
|
_info.Levels);
|
||||||
|
|
||||||
_lastModificationAccess = AccessFlags.NoneKhr;
|
_lastModificationAccess = AccessFlags.None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -49,6 +49,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
internal PipelineLayoutCache PipelineLayoutCache { get; private set; }
|
internal PipelineLayoutCache PipelineLayoutCache { get; private set; }
|
||||||
internal BackgroundResources BackgroundResources { get; private set; }
|
internal BackgroundResources BackgroundResources { get; private set; }
|
||||||
internal Action<Action> InterruptAction { get; private set; }
|
internal Action<Action> InterruptAction { get; private set; }
|
||||||
|
internal SyncManager SyncManager { get; private set; }
|
||||||
|
|
||||||
internal BufferManager BufferManager { get; private set; }
|
internal BufferManager BufferManager { get; private set; }
|
||||||
|
|
||||||
@@ -58,7 +59,6 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
private VulkanDebugMessenger _debugMessenger;
|
private VulkanDebugMessenger _debugMessenger;
|
||||||
private Counters _counters;
|
private Counters _counters;
|
||||||
private SyncManager _syncManager;
|
|
||||||
|
|
||||||
private PipelineFull _pipeline;
|
private PipelineFull _pipeline;
|
||||||
|
|
||||||
@@ -311,7 +311,8 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
propertiesSubgroupSizeControl.RequiredSubgroupSizeStages,
|
propertiesSubgroupSizeControl.RequiredSubgroupSizeStages,
|
||||||
supportedSampleCounts,
|
supportedSampleCounts,
|
||||||
portabilityFlags,
|
portabilityFlags,
|
||||||
vertexBufferAlignment);
|
vertexBufferAlignment,
|
||||||
|
properties.Limits.SubTexelPrecisionBits);
|
||||||
|
|
||||||
IsSharedMemory = MemoryAllocator.IsDeviceMemoryShared(_physicalDevice);
|
IsSharedMemory = MemoryAllocator.IsDeviceMemoryShared(_physicalDevice);
|
||||||
|
|
||||||
@@ -327,7 +328,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
BufferManager = new BufferManager(this, _device);
|
BufferManager = new BufferManager(this, _device);
|
||||||
|
|
||||||
_syncManager = new SyncManager(this, _device);
|
SyncManager = new SyncManager(this, _device);
|
||||||
_pipeline = new PipelineFull(this, _device);
|
_pipeline = new PipelineFull(this, _device);
|
||||||
_pipeline.Initialize();
|
_pipeline.Initialize();
|
||||||
|
|
||||||
@@ -436,7 +437,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
internal void RegisterFlush()
|
internal void RegisterFlush()
|
||||||
{
|
{
|
||||||
_syncManager.RegisterFlush();
|
SyncManager.RegisterFlush();
|
||||||
}
|
}
|
||||||
|
|
||||||
public PinnedSpan<byte> GetBufferData(BufferHandle buffer, int offset, int size)
|
public PinnedSpan<byte> GetBufferData(BufferHandle buffer, int offset, int size)
|
||||||
@@ -576,7 +577,8 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
maximumImagesPerStage: Constants.MaxImagesPerStage,
|
maximumImagesPerStage: Constants.MaxImagesPerStage,
|
||||||
maximumComputeSharedMemorySize: (int)limits.MaxComputeSharedMemorySize,
|
maximumComputeSharedMemorySize: (int)limits.MaxComputeSharedMemorySize,
|
||||||
maximumSupportedAnisotropy: (int)limits.MaxSamplerAnisotropy,
|
maximumSupportedAnisotropy: (int)limits.MaxSamplerAnisotropy,
|
||||||
storageBufferOffsetAlignment: (int)limits.MinStorageBufferOffsetAlignment);
|
storageBufferOffsetAlignment: (int)limits.MinStorageBufferOffsetAlignment,
|
||||||
|
gatherBiasPrecision: IsIntelWindows || IsAmdWindows ? (int)Capabilities.SubTexelPrecisionBits : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HardwareInfo GetHardwareInfo()
|
public HardwareInfo GetHardwareInfo()
|
||||||
@@ -696,7 +698,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
public void PreFrame()
|
public void PreFrame()
|
||||||
{
|
{
|
||||||
_syncManager.Cleanup();
|
SyncManager.Cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler, bool hostReserved)
|
public ICounterEvent ReportCounter(CounterType type, EventHandler<ulong> resultHandler, bool hostReserved)
|
||||||
@@ -736,7 +738,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
public void CreateSync(ulong id, bool strict)
|
public void CreateSync(ulong id, bool strict)
|
||||||
{
|
{
|
||||||
_syncManager.Create(id, strict);
|
SyncManager.Create(id, strict);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IProgram LoadProgramBinary(byte[] programBinary, bool isFragment, ShaderInfo info)
|
public IProgram LoadProgramBinary(byte[] programBinary, bool isFragment, ShaderInfo info)
|
||||||
@@ -746,12 +748,12 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
|
|
||||||
public void WaitSync(ulong id)
|
public void WaitSync(ulong id)
|
||||||
{
|
{
|
||||||
_syncManager.Wait(id);
|
SyncManager.Wait(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong GetCurrentSync()
|
public ulong GetCurrentSync()
|
||||||
{
|
{
|
||||||
return _syncManager.GetCurrent();
|
return SyncManager.GetCurrent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetInterruptAction(Action<Action> interruptAction)
|
public void SetInterruptAction(Action<Action> interruptAction)
|
||||||
|
@@ -55,7 +55,7 @@ namespace Ryujinx.HLE.Exceptions
|
|||||||
if (callingType != null && callingMethod != null)
|
if (callingType != null && callingMethod != null)
|
||||||
{
|
{
|
||||||
// If the type is past 0xF, we are using TIPC
|
// If the type is past 0xF, we are using TIPC
|
||||||
var ipcCommands = Request.Type > IpcMessageType.TipcCloseSession ? Service.TipcCommands : Service.HipcCommands;
|
var ipcCommands = Request.Type > IpcMessageType.TipcCloseSession ? Service.TipcCommands : Service.CmifCommands;
|
||||||
|
|
||||||
// Find the handler for the method called
|
// Find the handler for the method called
|
||||||
var ipcHandler = ipcCommands.FirstOrDefault(x => x.Value == callingMethod);
|
var ipcHandler = ipcCommands.FirstOrDefault(x => x.Value == callingMethod);
|
||||||
|
@@ -153,6 +153,11 @@ namespace Ryujinx.HLE
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
internal readonly bool UseHypervisor;
|
internal readonly bool UseHypervisor;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Multiplayer LAN Interface ID (device GUID)
|
||||||
|
/// </summary>
|
||||||
|
public string MultiplayerLanInterfaceId { internal get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An action called when HLE force a refresh of output after docked mode changed.
|
/// An action called when HLE force a refresh of output after docked mode changed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -181,32 +186,34 @@ namespace Ryujinx.HLE
|
|||||||
bool ignoreMissingServices,
|
bool ignoreMissingServices,
|
||||||
AspectRatio aspectRatio,
|
AspectRatio aspectRatio,
|
||||||
float audioVolume,
|
float audioVolume,
|
||||||
bool useHypervisor)
|
bool useHypervisor,
|
||||||
|
string multiplayerLanInterfaceId)
|
||||||
{
|
{
|
||||||
VirtualFileSystem = virtualFileSystem;
|
VirtualFileSystem = virtualFileSystem;
|
||||||
LibHacHorizonManager = libHacHorizonManager;
|
LibHacHorizonManager = libHacHorizonManager;
|
||||||
AccountManager = accountManager;
|
AccountManager = accountManager;
|
||||||
ContentManager = contentManager;
|
ContentManager = contentManager;
|
||||||
UserChannelPersistence = userChannelPersistence;
|
UserChannelPersistence = userChannelPersistence;
|
||||||
GpuRenderer = gpuRenderer;
|
GpuRenderer = gpuRenderer;
|
||||||
AudioDeviceDriver = audioDeviceDriver;
|
AudioDeviceDriver = audioDeviceDriver;
|
||||||
MemoryConfiguration = memoryConfiguration;
|
MemoryConfiguration = memoryConfiguration;
|
||||||
HostUiHandler = hostUiHandler;
|
HostUiHandler = hostUiHandler;
|
||||||
SystemLanguage = systemLanguage;
|
SystemLanguage = systemLanguage;
|
||||||
Region = region;
|
Region = region;
|
||||||
EnableVsync = enableVsync;
|
EnableVsync = enableVsync;
|
||||||
EnableDockedMode = enableDockedMode;
|
EnableDockedMode = enableDockedMode;
|
||||||
EnablePtc = enablePtc;
|
EnablePtc = enablePtc;
|
||||||
EnableInternetAccess = enableInternetAccess;
|
EnableInternetAccess = enableInternetAccess;
|
||||||
FsIntegrityCheckLevel = fsIntegrityCheckLevel;
|
FsIntegrityCheckLevel = fsIntegrityCheckLevel;
|
||||||
FsGlobalAccessLogMode = fsGlobalAccessLogMode;
|
FsGlobalAccessLogMode = fsGlobalAccessLogMode;
|
||||||
SystemTimeOffset = systemTimeOffset;
|
SystemTimeOffset = systemTimeOffset;
|
||||||
TimeZone = timeZone;
|
TimeZone = timeZone;
|
||||||
MemoryManagerMode = memoryManagerMode;
|
MemoryManagerMode = memoryManagerMode;
|
||||||
IgnoreMissingServices = ignoreMissingServices;
|
IgnoreMissingServices = ignoreMissingServices;
|
||||||
AspectRatio = aspectRatio;
|
AspectRatio = aspectRatio;
|
||||||
AudioVolume = audioVolume;
|
AudioVolume = audioVolume;
|
||||||
UseHypervisor = useHypervisor;
|
UseHypervisor = useHypervisor;
|
||||||
|
MultiplayerLanInterfaceId = multiplayerLanInterfaceId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -88,7 +88,7 @@ namespace Ryujinx.HLE.HOS.Ipc
|
|||||||
|
|
||||||
long recvListPos = reader.BaseStream.Position + rawDataSize;
|
long recvListPos = reader.BaseStream.Position + rawDataSize;
|
||||||
|
|
||||||
// only HIPC have the padding requirements.
|
// Only CMIF has the padding requirements.
|
||||||
if (Type < IpcMessageType.TipcCloseSession)
|
if (Type < IpcMessageType.TipcCloseSession)
|
||||||
{
|
{
|
||||||
long pad0 = GetPadSize16(reader.BaseStream.Position + cmdPtr);
|
long pad0 = GetPadSize16(reader.BaseStream.Position + cmdPtr);
|
||||||
|
@@ -2,12 +2,12 @@ namespace Ryujinx.HLE.HOS.Ipc
|
|||||||
{
|
{
|
||||||
enum IpcMessageType
|
enum IpcMessageType
|
||||||
{
|
{
|
||||||
HipcResponse = 0,
|
CmifResponse = 0,
|
||||||
HipcCloseSession = 2,
|
CmifCloseSession = 2,
|
||||||
HipcRequest = 4,
|
CmifRequest = 4,
|
||||||
HipcControl = 5,
|
CmifControl = 5,
|
||||||
HipcRequestWithContext = 6,
|
CmifRequestWithContext = 6,
|
||||||
HipcControlWithContext = 7,
|
CmifControlWithContext = 7,
|
||||||
TipcCloseSession = 0xF
|
TipcCloseSession = 0xF
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -9,21 +9,21 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
|||||||
_managerServer = new ManagerServer(userId);
|
_managerServer = new ManagerServer(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// CheckAvailability()
|
// CheckAvailability()
|
||||||
public ResultCode CheckAvailability(ServiceCtx context)
|
public ResultCode CheckAvailability(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _managerServer.CheckAvailability(context);
|
return _managerServer.CheckAvailability(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetAccountId() -> nn::account::NetworkServiceAccountId
|
// GetAccountId() -> nn::account::NetworkServiceAccountId
|
||||||
public ResultCode GetAccountId(ServiceCtx context)
|
public ResultCode GetAccountId(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _managerServer.GetAccountId(context);
|
return _managerServer.GetAccountId(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// EnsureIdTokenCacheAsync() -> object<nn::account::detail::IAsyncContext>
|
// EnsureIdTokenCacheAsync() -> object<nn::account::detail::IAsyncContext>
|
||||||
public ResultCode EnsureIdTokenCacheAsync(ServiceCtx context)
|
public ResultCode EnsureIdTokenCacheAsync(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -37,28 +37,28 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// LoadIdTokenCache() -> (u32 id_token_cache_size, buffer<bytes, 6>)
|
// LoadIdTokenCache() -> (u32 id_token_cache_size, buffer<bytes, 6>)
|
||||||
public ResultCode LoadIdTokenCache(ServiceCtx context)
|
public ResultCode LoadIdTokenCache(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _managerServer.LoadIdTokenCache(context);
|
return _managerServer.LoadIdTokenCache(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(130)]
|
[CommandCmif(130)]
|
||||||
// GetNintendoAccountUserResourceCacheForApplication() -> (nn::account::NintendoAccountId, nn::account::nas::NasUserBaseForApplication, buffer<bytes, 6>)
|
// GetNintendoAccountUserResourceCacheForApplication() -> (nn::account::NintendoAccountId, nn::account::nas::NasUserBaseForApplication, buffer<bytes, 6>)
|
||||||
public ResultCode GetNintendoAccountUserResourceCacheForApplication(ServiceCtx context)
|
public ResultCode GetNintendoAccountUserResourceCacheForApplication(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _managerServer.GetNintendoAccountUserResourceCacheForApplication(context);
|
return _managerServer.GetNintendoAccountUserResourceCacheForApplication(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(160)] // 5.0.0+
|
[CommandCmif(160)] // 5.0.0+
|
||||||
// StoreOpenContext()
|
// StoreOpenContext()
|
||||||
public ResultCode StoreOpenContext(ServiceCtx context)
|
public ResultCode StoreOpenContext(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _managerServer.StoreOpenContext(context);
|
return _managerServer.StoreOpenContext(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(170)] // 6.0.0+
|
[CommandCmif(170)] // 6.0.0+
|
||||||
// LoadNetworkServiceLicenseKindAsync() -> object<nn::account::detail::IAsyncNetworkServiceLicenseKindContext>
|
// LoadNetworkServiceLicenseKindAsync() -> object<nn::account::detail::IAsyncNetworkServiceLicenseKindContext>
|
||||||
public ResultCode LoadNetworkServiceLicenseKindAsync(ServiceCtx context)
|
public ResultCode LoadNetworkServiceLicenseKindAsync(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -9,21 +9,21 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
|||||||
_managerServer = new ManagerServer(userId);
|
_managerServer = new ManagerServer(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// CheckAvailability()
|
// CheckAvailability()
|
||||||
public ResultCode CheckAvailability(ServiceCtx context)
|
public ResultCode CheckAvailability(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _managerServer.CheckAvailability(context);
|
return _managerServer.CheckAvailability(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetAccountId() -> nn::account::NetworkServiceAccountId
|
// GetAccountId() -> nn::account::NetworkServiceAccountId
|
||||||
public ResultCode GetAccountId(ServiceCtx context)
|
public ResultCode GetAccountId(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _managerServer.GetAccountId(context);
|
return _managerServer.GetAccountId(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// EnsureIdTokenCacheAsync() -> object<nn::account::detail::IAsyncContext>
|
// EnsureIdTokenCacheAsync() -> object<nn::account::detail::IAsyncContext>
|
||||||
public ResultCode EnsureIdTokenCacheAsync(ServiceCtx context)
|
public ResultCode EnsureIdTokenCacheAsync(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -37,7 +37,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// LoadIdTokenCache() -> (u32 id_token_cache_size, buffer<bytes, 6>)
|
// LoadIdTokenCache() -> (u32 id_token_cache_size, buffer<bytes, 6>)
|
||||||
public ResultCode LoadIdTokenCache(ServiceCtx context)
|
public ResultCode LoadIdTokenCache(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -9,28 +9,28 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
|||||||
_profileServer = new ProfileServer(profile);
|
_profileServer = new ProfileServer(profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// Get() -> (nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x1a>)
|
// Get() -> (nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x1a>)
|
||||||
public ResultCode Get(ServiceCtx context)
|
public ResultCode Get(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _profileServer.Get(context);
|
return _profileServer.Get(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetBase() -> nn::account::profile::ProfileBase
|
// GetBase() -> nn::account::profile::ProfileBase
|
||||||
public ResultCode GetBase(ServiceCtx context)
|
public ResultCode GetBase(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _profileServer.GetBase(context);
|
return _profileServer.GetBase(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)]
|
[CommandCmif(10)]
|
||||||
// GetImageSize() -> u32
|
// GetImageSize() -> u32
|
||||||
public ResultCode GetImageSize(ServiceCtx context)
|
public ResultCode GetImageSize(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _profileServer.GetImageSize(context);
|
return _profileServer.GetImageSize(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// LoadImage() -> (u32, buffer<bytes, 6>)
|
// LoadImage() -> (u32, buffer<bytes, 6>)
|
||||||
public ResultCode LoadImage(ServiceCtx context)
|
public ResultCode LoadImage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -9,42 +9,42 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService
|
|||||||
_profileServer = new ProfileServer(profile);
|
_profileServer = new ProfileServer(profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// Get() -> (nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x1a>)
|
// Get() -> (nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x1a>)
|
||||||
public ResultCode Get(ServiceCtx context)
|
public ResultCode Get(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _profileServer.Get(context);
|
return _profileServer.Get(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetBase() -> nn::account::profile::ProfileBase
|
// GetBase() -> nn::account::profile::ProfileBase
|
||||||
public ResultCode GetBase(ServiceCtx context)
|
public ResultCode GetBase(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _profileServer.GetBase(context);
|
return _profileServer.GetBase(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)]
|
[CommandCmif(10)]
|
||||||
// GetImageSize() -> u32
|
// GetImageSize() -> u32
|
||||||
public ResultCode GetImageSize(ServiceCtx context)
|
public ResultCode GetImageSize(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _profileServer.GetImageSize(context);
|
return _profileServer.GetImageSize(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// LoadImage() -> (u32, buffer<bytes, 6>)
|
// LoadImage() -> (u32, buffer<bytes, 6>)
|
||||||
public ResultCode LoadImage(ServiceCtx context)
|
public ResultCode LoadImage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _profileServer.LoadImage(context);
|
return _profileServer.LoadImage(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(100)]
|
[CommandCmif(100)]
|
||||||
// Store(nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x19>)
|
// Store(nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x19>)
|
||||||
public ResultCode Store(ServiceCtx context)
|
public ResultCode Store(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _profileServer.Store(context);
|
return _profileServer.Store(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(101)]
|
[CommandCmif(101)]
|
||||||
// StoreWithImage(nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x19>, buffer<bytes, 5>)
|
// StoreWithImage(nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x19>, buffer<bytes, 5>)
|
||||||
public ResultCode StoreWithImage(ServiceCtx context)
|
public ResultCode StoreWithImage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -14,42 +14,42 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
_applicationServiceServer = new ApplicationServiceServer(serviceFlag);
|
_applicationServiceServer = new ApplicationServiceServer(serviceFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetUserCount() -> i32
|
// GetUserCount() -> i32
|
||||||
public ResultCode GetUserCount(ServiceCtx context)
|
public ResultCode GetUserCount(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.GetUserCountImpl(context);
|
return _applicationServiceServer.GetUserCountImpl(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetUserExistence(nn::account::Uid) -> bool
|
// GetUserExistence(nn::account::Uid) -> bool
|
||||||
public ResultCode GetUserExistence(ServiceCtx context)
|
public ResultCode GetUserExistence(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.GetUserExistenceImpl(context);
|
return _applicationServiceServer.GetUserExistenceImpl(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// ListAllUsers() -> array<nn::account::Uid, 0xa>
|
// ListAllUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListAllUsers(ServiceCtx context)
|
public ResultCode ListAllUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ListAllUsers(context);
|
return _applicationServiceServer.ListAllUsers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// ListOpenUsers() -> array<nn::account::Uid, 0xa>
|
// ListOpenUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListOpenUsers(ServiceCtx context)
|
public ResultCode ListOpenUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ListOpenUsers(context);
|
return _applicationServiceServer.ListOpenUsers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// GetLastOpenedUser() -> nn::account::Uid
|
// GetLastOpenedUser() -> nn::account::Uid
|
||||||
public ResultCode GetLastOpenedUser(ServiceCtx context)
|
public ResultCode GetLastOpenedUser(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.GetLastOpenedUser(context);
|
return _applicationServiceServer.GetLastOpenedUser(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)]
|
[CommandCmif(5)]
|
||||||
// GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
|
// GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
|
||||||
public ResultCode GetProfile(ServiceCtx context)
|
public ResultCode GetProfile(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -63,7 +63,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(50)]
|
[CommandCmif(50)]
|
||||||
// IsUserRegistrationRequestPermitted(pid) -> bool
|
// IsUserRegistrationRequestPermitted(pid) -> bool
|
||||||
public ResultCode IsUserRegistrationRequestPermitted(ServiceCtx context)
|
public ResultCode IsUserRegistrationRequestPermitted(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -72,14 +72,14 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return _applicationServiceServer.IsUserRegistrationRequestPermitted(context);
|
return _applicationServiceServer.IsUserRegistrationRequestPermitted(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(51)]
|
[CommandCmif(51)]
|
||||||
// TrySelectUserWithoutInteraction(bool) -> nn::account::Uid
|
// TrySelectUserWithoutInteraction(bool) -> nn::account::Uid
|
||||||
public ResultCode TrySelectUserWithoutInteraction(ServiceCtx context)
|
public ResultCode TrySelectUserWithoutInteraction(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.TrySelectUserWithoutInteraction(context);
|
return _applicationServiceServer.TrySelectUserWithoutInteraction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(102)]
|
[CommandCmif(102)]
|
||||||
// GetBaasAccountManagerForSystemService(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
|
// GetBaasAccountManagerForSystemService(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
|
||||||
public ResultCode GetBaasAccountManagerForSystemService(ServiceCtx context)
|
public ResultCode GetBaasAccountManagerForSystemService(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -98,14 +98,14 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(140)] // 6.0.0+
|
[CommandCmif(140)] // 6.0.0+
|
||||||
// ListQualifiedUsers() -> array<nn::account::Uid, 0xa>
|
// ListQualifiedUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListQualifiedUsers(ServiceCtx context)
|
public ResultCode ListQualifiedUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ListQualifiedUsers(context);
|
return _applicationServiceServer.ListQualifiedUsers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(205)]
|
[CommandCmif(205)]
|
||||||
// GetProfileEditor(nn::account::Uid) -> object<nn::account::profile::IProfileEditor>
|
// GetProfileEditor(nn::account::Uid) -> object<nn::account::profile::IProfileEditor>
|
||||||
public ResultCode GetProfileEditor(ServiceCtx context)
|
public ResultCode GetProfileEditor(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -14,42 +14,42 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
_applicationServiceServer = new ApplicationServiceServer(serviceFlag);
|
_applicationServiceServer = new ApplicationServiceServer(serviceFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetUserCount() -> i32
|
// GetUserCount() -> i32
|
||||||
public ResultCode GetUserCount(ServiceCtx context)
|
public ResultCode GetUserCount(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.GetUserCountImpl(context);
|
return _applicationServiceServer.GetUserCountImpl(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetUserExistence(nn::account::Uid) -> bool
|
// GetUserExistence(nn::account::Uid) -> bool
|
||||||
public ResultCode GetUserExistence(ServiceCtx context)
|
public ResultCode GetUserExistence(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.GetUserExistenceImpl(context);
|
return _applicationServiceServer.GetUserExistenceImpl(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// ListAllUsers() -> array<nn::account::Uid, 0xa>
|
// ListAllUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListAllUsers(ServiceCtx context)
|
public ResultCode ListAllUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ListAllUsers(context);
|
return _applicationServiceServer.ListAllUsers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// ListOpenUsers() -> array<nn::account::Uid, 0xa>
|
// ListOpenUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListOpenUsers(ServiceCtx context)
|
public ResultCode ListOpenUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ListOpenUsers(context);
|
return _applicationServiceServer.ListOpenUsers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// GetLastOpenedUser() -> nn::account::Uid
|
// GetLastOpenedUser() -> nn::account::Uid
|
||||||
public ResultCode GetLastOpenedUser(ServiceCtx context)
|
public ResultCode GetLastOpenedUser(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.GetLastOpenedUser(context);
|
return _applicationServiceServer.GetLastOpenedUser(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)]
|
[CommandCmif(5)]
|
||||||
// GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
|
// GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
|
||||||
public ResultCode GetProfile(ServiceCtx context)
|
public ResultCode GetProfile(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -63,7 +63,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(50)]
|
[CommandCmif(50)]
|
||||||
// IsUserRegistrationRequestPermitted(pid) -> bool
|
// IsUserRegistrationRequestPermitted(pid) -> bool
|
||||||
public ResultCode IsUserRegistrationRequestPermitted(ServiceCtx context)
|
public ResultCode IsUserRegistrationRequestPermitted(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -71,16 +71,16 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return _applicationServiceServer.IsUserRegistrationRequestPermitted(context);
|
return _applicationServiceServer.IsUserRegistrationRequestPermitted(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(51)]
|
[CommandCmif(51)]
|
||||||
// TrySelectUserWithoutInteraction(bool) -> nn::account::Uid
|
// TrySelectUserWithoutInteraction(bool) -> nn::account::Uid
|
||||||
public ResultCode TrySelectUserWithoutInteraction(ServiceCtx context)
|
public ResultCode TrySelectUserWithoutInteraction(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.TrySelectUserWithoutInteraction(context);
|
return _applicationServiceServer.TrySelectUserWithoutInteraction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(100)]
|
[CommandCmif(100)]
|
||||||
[CommandHipc(140)] // 6.0.0+
|
[CommandCmif(140)] // 6.0.0+
|
||||||
[CommandHipc(160)] // 13.0.0+
|
[CommandCmif(160)] // 13.0.0+
|
||||||
// InitializeApplicationInfo(u64 pid_placeholder, pid)
|
// InitializeApplicationInfo(u64 pid_placeholder, pid)
|
||||||
public ResultCode InitializeApplicationInfo(ServiceCtx context)
|
public ResultCode InitializeApplicationInfo(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -105,7 +105,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(101)]
|
[CommandCmif(101)]
|
||||||
// GetBaasAccountManagerForApplication(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
|
// GetBaasAccountManagerForApplication(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
|
||||||
public ResultCode GetBaasAccountManagerForApplication(ServiceCtx context)
|
public ResultCode GetBaasAccountManagerForApplication(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -124,7 +124,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(103)] // 4.0.0+
|
[CommandCmif(103)] // 4.0.0+
|
||||||
// CheckNetworkServiceAvailabilityAsync() -> object<nn::account::detail::IAsyncContext>
|
// CheckNetworkServiceAvailabilityAsync() -> object<nn::account::detail::IAsyncContext>
|
||||||
public ResultCode CheckNetworkServiceAvailabilityAsync(ServiceCtx context)
|
public ResultCode CheckNetworkServiceAvailabilityAsync(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -138,21 +138,21 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(110)]
|
[CommandCmif(110)]
|
||||||
// StoreSaveDataThumbnail(nn::account::Uid, buffer<bytes, 5>)
|
// StoreSaveDataThumbnail(nn::account::Uid, buffer<bytes, 5>)
|
||||||
public ResultCode StoreSaveDataThumbnail(ServiceCtx context)
|
public ResultCode StoreSaveDataThumbnail(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.StoreSaveDataThumbnail(context);
|
return _applicationServiceServer.StoreSaveDataThumbnail(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(111)]
|
[CommandCmif(111)]
|
||||||
// ClearSaveDataThumbnail(nn::account::Uid)
|
// ClearSaveDataThumbnail(nn::account::Uid)
|
||||||
public ResultCode ClearSaveDataThumbnail(ServiceCtx context)
|
public ResultCode ClearSaveDataThumbnail(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ClearSaveDataThumbnail(context);
|
return _applicationServiceServer.ClearSaveDataThumbnail(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(130)] // 5.0.0+
|
[CommandCmif(130)] // 5.0.0+
|
||||||
// LoadOpenContext(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
|
// LoadOpenContext(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
|
||||||
public ResultCode LoadOpenContext(ServiceCtx context)
|
public ResultCode LoadOpenContext(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -168,22 +168,22 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(60)] // 5.0.0-5.1.0
|
[CommandCmif(60)] // 5.0.0-5.1.0
|
||||||
[CommandHipc(131)] // 6.0.0+
|
[CommandCmif(131)] // 6.0.0+
|
||||||
// ListOpenContextStoredUsers() -> array<nn::account::Uid, 0xa>
|
// ListOpenContextStoredUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListOpenContextStoredUsers(ServiceCtx context)
|
public ResultCode ListOpenContextStoredUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ListOpenContextStoredUsers(context);
|
return _applicationServiceServer.ListOpenContextStoredUsers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(141)] // 6.0.0+
|
[CommandCmif(141)] // 6.0.0+
|
||||||
// ListQualifiedUsers() -> array<nn::account::Uid, 0xa>
|
// ListQualifiedUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListQualifiedUsers(ServiceCtx context)
|
public ResultCode ListQualifiedUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ListQualifiedUsers(context);
|
return _applicationServiceServer.ListQualifiedUsers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(150)] // 6.0.0+
|
[CommandCmif(150)] // 6.0.0+
|
||||||
// IsUserAccountSwitchLocked() -> bool
|
// IsUserAccountSwitchLocked() -> bool
|
||||||
public ResultCode IsUserAccountSwitchLocked(ServiceCtx context)
|
public ResultCode IsUserAccountSwitchLocked(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -13,42 +13,42 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
_applicationServiceServer = new ApplicationServiceServer(serviceFlag);
|
_applicationServiceServer = new ApplicationServiceServer(serviceFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetUserCount() -> i32
|
// GetUserCount() -> i32
|
||||||
public ResultCode GetUserCount(ServiceCtx context)
|
public ResultCode GetUserCount(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.GetUserCountImpl(context);
|
return _applicationServiceServer.GetUserCountImpl(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetUserExistence(nn::account::Uid) -> bool
|
// GetUserExistence(nn::account::Uid) -> bool
|
||||||
public ResultCode GetUserExistence(ServiceCtx context)
|
public ResultCode GetUserExistence(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.GetUserExistenceImpl(context);
|
return _applicationServiceServer.GetUserExistenceImpl(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// ListAllUsers() -> array<nn::account::Uid, 0xa>
|
// ListAllUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListAllUsers(ServiceCtx context)
|
public ResultCode ListAllUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ListAllUsers(context);
|
return _applicationServiceServer.ListAllUsers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// ListOpenUsers() -> array<nn::account::Uid, 0xa>
|
// ListOpenUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListOpenUsers(ServiceCtx context)
|
public ResultCode ListOpenUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.ListOpenUsers(context);
|
return _applicationServiceServer.ListOpenUsers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// GetLastOpenedUser() -> nn::account::Uid
|
// GetLastOpenedUser() -> nn::account::Uid
|
||||||
public ResultCode GetLastOpenedUser(ServiceCtx context)
|
public ResultCode GetLastOpenedUser(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.GetLastOpenedUser(context);
|
return _applicationServiceServer.GetLastOpenedUser(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)]
|
[CommandCmif(5)]
|
||||||
// GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
|
// GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
|
||||||
public ResultCode GetProfile(ServiceCtx context)
|
public ResultCode GetProfile(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -62,7 +62,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(50)]
|
[CommandCmif(50)]
|
||||||
// IsUserRegistrationRequestPermitted(pid) -> bool
|
// IsUserRegistrationRequestPermitted(pid) -> bool
|
||||||
public ResultCode IsUserRegistrationRequestPermitted(ServiceCtx context)
|
public ResultCode IsUserRegistrationRequestPermitted(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -71,14 +71,14 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return _applicationServiceServer.IsUserRegistrationRequestPermitted(context);
|
return _applicationServiceServer.IsUserRegistrationRequestPermitted(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(51)]
|
[CommandCmif(51)]
|
||||||
// TrySelectUserWithoutInteraction(bool) -> nn::account::Uid
|
// TrySelectUserWithoutInteraction(bool) -> nn::account::Uid
|
||||||
public ResultCode TrySelectUserWithoutInteraction(ServiceCtx context)
|
public ResultCode TrySelectUserWithoutInteraction(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _applicationServiceServer.TrySelectUserWithoutInteraction(context);
|
return _applicationServiceServer.TrySelectUserWithoutInteraction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(102)]
|
[CommandCmif(102)]
|
||||||
// GetBaasAccountManagerForSystemService(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
|
// GetBaasAccountManagerForSystemService(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
|
||||||
public ResultCode GetBaasAccountManagerForSystemService(ServiceCtx context)
|
public ResultCode GetBaasAccountManagerForSystemService(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -97,7 +97,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(140)] // 6.0.0+
|
[CommandCmif(140)] // 6.0.0+
|
||||||
// ListQualifiedUsers() -> array<nn::account::Uid, 0xa>
|
// ListQualifiedUsers() -> array<nn::account::Uid, 0xa>
|
||||||
public ResultCode ListQualifiedUsers(ServiceCtx context)
|
public ResultCode ListQualifiedUsers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -14,7 +14,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
AsyncExecution = asyncExecution;
|
AsyncExecution = asyncExecution;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetSystemEvent() -> handle<copy>
|
// GetSystemEvent() -> handle<copy>
|
||||||
public ResultCode GetSystemEvent(ServiceCtx context)
|
public ResultCode GetSystemEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -28,7 +28,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// Cancel()
|
// Cancel()
|
||||||
public ResultCode Cancel(ServiceCtx context)
|
public ResultCode Cancel(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -45,7 +45,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// HasDone() -> b8
|
// HasDone() -> b8
|
||||||
public ResultCode HasDone(ServiceCtx context)
|
public ResultCode HasDone(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -59,7 +59,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// GetResult()
|
// GetResult()
|
||||||
public ResultCode GetResult(ServiceCtx context)
|
public ResultCode GetResult(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -11,7 +11,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||||||
_serviceLicenseKind = serviceLicenseKind;
|
_serviceLicenseKind = serviceLicenseKind;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(100)]
|
[CommandCmif(100)]
|
||||||
// GetNetworkServiceLicenseKind() -> nn::account::NetworkServiceLicenseKind
|
// GetNetworkServiceLicenseKind() -> nn::account::NetworkServiceLicenseKind
|
||||||
public ResultCode GetNetworkServiceLicenseKind(ServiceCtx context)
|
public ResultCode GetNetworkServiceLicenseKind(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -12,7 +12,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
_pid = pid;
|
_pid = pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
|
// GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
|
||||||
public ResultCode GetCommonStateGetter(ServiceCtx context)
|
public ResultCode GetCommonStateGetter(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -21,7 +21,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetSelfController() -> object<nn::am::service::ISelfController>
|
// GetSelfController() -> object<nn::am::service::ISelfController>
|
||||||
public ResultCode GetSelfController(ServiceCtx context)
|
public ResultCode GetSelfController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -30,7 +30,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// GetWindowController() -> object<nn::am::service::IWindowController>
|
// GetWindowController() -> object<nn::am::service::IWindowController>
|
||||||
public ResultCode GetWindowController(ServiceCtx context)
|
public ResultCode GetWindowController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -39,7 +39,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// GetAudioController() -> object<nn::am::service::IAudioController>
|
// GetAudioController() -> object<nn::am::service::IAudioController>
|
||||||
public ResultCode GetAudioController(ServiceCtx context)
|
public ResultCode GetAudioController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -48,7 +48,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// GetDisplayController() -> object<nn::am::service::IDisplayController>
|
// GetDisplayController() -> object<nn::am::service::IDisplayController>
|
||||||
public ResultCode GetDisplayController(ServiceCtx context)
|
public ResultCode GetDisplayController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -57,7 +57,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)]
|
[CommandCmif(10)]
|
||||||
// GetProcessWindingController() -> object<nn::am::service::IProcessWindingController>
|
// GetProcessWindingController() -> object<nn::am::service::IProcessWindingController>
|
||||||
public ResultCode GetProcessWindingController(ServiceCtx context)
|
public ResultCode GetProcessWindingController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -66,7 +66,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
|
// GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
|
||||||
public ResultCode GetLibraryAppletCreator(ServiceCtx context)
|
public ResultCode GetLibraryAppletCreator(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -75,7 +75,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(20)]
|
[CommandCmif(20)]
|
||||||
// OpenLibraryAppletSelfAccessor() -> object<nn::am::service::ILibraryAppletSelfAccessor>
|
// OpenLibraryAppletSelfAccessor() -> object<nn::am::service::ILibraryAppletSelfAccessor>
|
||||||
public ResultCode OpenLibraryAppletSelfAccessor(ServiceCtx context)
|
public ResultCode OpenLibraryAppletSelfAccessor(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -84,7 +84,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(21)]
|
[CommandCmif(21)]
|
||||||
// GetAppletCommonFunctions() -> object<nn::am::service::IAppletCommonFunctions>
|
// GetAppletCommonFunctions() -> object<nn::am::service::IAppletCommonFunctions>
|
||||||
public ResultCode GetAppletCommonFunctions(ServiceCtx context)
|
public ResultCode GetAppletCommonFunctions(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -93,7 +93,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1000)]
|
[CommandCmif(1000)]
|
||||||
// GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
|
// GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
|
||||||
public ResultCode GetDebugFunctions(ServiceCtx context)
|
public ResultCode GetDebugFunctions(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -11,7 +11,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
_pid = pid;
|
_pid = pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
|
// GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
|
||||||
public ResultCode GetCommonStateGetter(ServiceCtx context)
|
public ResultCode GetCommonStateGetter(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -20,7 +20,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetSelfController() -> object<nn::am::service::ISelfController>
|
// GetSelfController() -> object<nn::am::service::ISelfController>
|
||||||
public ResultCode GetSelfController(ServiceCtx context)
|
public ResultCode GetSelfController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// GetWindowController() -> object<nn::am::service::IWindowController>
|
// GetWindowController() -> object<nn::am::service::IWindowController>
|
||||||
public ResultCode GetWindowController(ServiceCtx context)
|
public ResultCode GetWindowController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -38,7 +38,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// GetAudioController() -> object<nn::am::service::IAudioController>
|
// GetAudioController() -> object<nn::am::service::IAudioController>
|
||||||
public ResultCode GetAudioController(ServiceCtx context)
|
public ResultCode GetAudioController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -47,7 +47,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// GetDisplayController() -> object<nn::am::service::IDisplayController>
|
// GetDisplayController() -> object<nn::am::service::IDisplayController>
|
||||||
public ResultCode GetDisplayController(ServiceCtx context)
|
public ResultCode GetDisplayController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -56,7 +56,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
|
// GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
|
||||||
public ResultCode GetLibraryAppletCreator(ServiceCtx context)
|
public ResultCode GetLibraryAppletCreator(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -65,7 +65,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(20)]
|
[CommandCmif(20)]
|
||||||
// GetHomeMenuFunctions() -> object<nn::am::service::IHomeMenuFunctions>
|
// GetHomeMenuFunctions() -> object<nn::am::service::IHomeMenuFunctions>
|
||||||
public ResultCode GetHomeMenuFunctions(ServiceCtx context)
|
public ResultCode GetHomeMenuFunctions(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -74,7 +74,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(21)]
|
[CommandCmif(21)]
|
||||||
// GetGlobalStateController() -> object<nn::am::service::IGlobalStateController>
|
// GetGlobalStateController() -> object<nn::am::service::IGlobalStateController>
|
||||||
public ResultCode GetGlobalStateController(ServiceCtx context)
|
public ResultCode GetGlobalStateController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -83,7 +83,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(22)]
|
[CommandCmif(22)]
|
||||||
// GetApplicationCreator() -> object<nn::am::service::IApplicationCreator>
|
// GetApplicationCreator() -> object<nn::am::service::IApplicationCreator>
|
||||||
public ResultCode GetApplicationCreator(ServiceCtx context)
|
public ResultCode GetApplicationCreator(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -92,7 +92,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1000)]
|
[CommandCmif(1000)]
|
||||||
// GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
|
// GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
|
||||||
public ResultCode GetDebugFunctions(ServiceCtx context)
|
public ResultCode GetDebugFunctions(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -62,7 +62,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
_interactiveOutDataEvent.WritableEvent.Signal();
|
_interactiveOutDataEvent.WritableEvent.Signal();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetAppletStateChangedEvent() -> handle<copy>
|
// GetAppletStateChangedEvent() -> handle<copy>
|
||||||
public ResultCode GetAppletStateChangedEvent(ServiceCtx context)
|
public ResultCode GetAppletStateChangedEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -79,14 +79,14 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)]
|
[CommandCmif(10)]
|
||||||
// Start()
|
// Start()
|
||||||
public ResultCode Start(ServiceCtx context)
|
public ResultCode Start(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return (ResultCode)_applet.Start(_normalSession.GetConsumer(), _interactiveSession.GetConsumer());
|
return (ResultCode)_applet.Start(_normalSession.GetConsumer(), _interactiveSession.GetConsumer());
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(20)]
|
[CommandCmif(20)]
|
||||||
// RequestExit()
|
// RequestExit()
|
||||||
public ResultCode RequestExit(ServiceCtx context)
|
public ResultCode RequestExit(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -98,14 +98,14 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(30)]
|
[CommandCmif(30)]
|
||||||
// GetResult()
|
// GetResult()
|
||||||
public ResultCode GetResult(ServiceCtx context)
|
public ResultCode GetResult(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return (ResultCode)_applet.GetResult();
|
return (ResultCode)_applet.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(60)]
|
[CommandCmif(60)]
|
||||||
// PresetLibraryAppletGpuTimeSliceZero()
|
// PresetLibraryAppletGpuTimeSliceZero()
|
||||||
public ResultCode PresetLibraryAppletGpuTimeSliceZero(ServiceCtx context)
|
public ResultCode PresetLibraryAppletGpuTimeSliceZero(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -118,7 +118,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(100)]
|
[CommandCmif(100)]
|
||||||
// PushInData(object<nn::am::service::IStorage>)
|
// PushInData(object<nn::am::service::IStorage>)
|
||||||
public ResultCode PushInData(ServiceCtx context)
|
public ResultCode PushInData(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -129,7 +129,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(101)]
|
[CommandCmif(101)]
|
||||||
// PopOutData() -> object<nn::am::service::IStorage>
|
// PopOutData() -> object<nn::am::service::IStorage>
|
||||||
public ResultCode PopOutData(ServiceCtx context)
|
public ResultCode PopOutData(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -145,7 +145,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.NotAvailable;
|
return ResultCode.NotAvailable;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(103)]
|
[CommandCmif(103)]
|
||||||
// PushInteractiveInData(object<nn::am::service::IStorage>)
|
// PushInteractiveInData(object<nn::am::service::IStorage>)
|
||||||
public ResultCode PushInteractiveInData(ServiceCtx context)
|
public ResultCode PushInteractiveInData(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -156,7 +156,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(104)]
|
[CommandCmif(104)]
|
||||||
// PopInteractiveOutData() -> object<nn::am::service::IStorage>
|
// PopInteractiveOutData() -> object<nn::am::service::IStorage>
|
||||||
public ResultCode PopInteractiveOutData(ServiceCtx context)
|
public ResultCode PopInteractiveOutData(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -172,7 +172,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.NotAvailable;
|
return ResultCode.NotAvailable;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(105)]
|
[CommandCmif(105)]
|
||||||
// GetPopOutDataEvent() -> handle<copy>
|
// GetPopOutDataEvent() -> handle<copy>
|
||||||
public ResultCode GetPopOutDataEvent(ServiceCtx context)
|
public ResultCode GetPopOutDataEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -189,7 +189,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(106)]
|
[CommandCmif(106)]
|
||||||
// GetPopInteractiveOutDataEvent() -> handle<copy>
|
// GetPopInteractiveOutDataEvent() -> handle<copy>
|
||||||
public ResultCode GetPopInteractiveOutDataEvent(ServiceCtx context)
|
public ResultCode GetPopInteractiveOutDataEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -206,21 +206,21 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(110)]
|
[CommandCmif(110)]
|
||||||
// NeedsToExitProcess()
|
// NeedsToExitProcess()
|
||||||
public ResultCode NeedsToExitProcess(ServiceCtx context)
|
public ResultCode NeedsToExitProcess(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return ResultCode.Stubbed;
|
return ResultCode.Stubbed;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(150)]
|
[CommandCmif(150)]
|
||||||
// RequestForAppletToGetForeground()
|
// RequestForAppletToGetForeground()
|
||||||
public ResultCode RequestForAppletToGetForeground(ServiceCtx context)
|
public ResultCode RequestForAppletToGetForeground(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return ResultCode.Stubbed;
|
return ResultCode.Stubbed;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(160)] // 2.0.0+
|
[CommandCmif(160)] // 2.0.0+
|
||||||
// GetIndirectLayerConsumerHandle() -> u64 indirect_layer_consumer_handle
|
// GetIndirectLayerConsumerHandle() -> u64 indirect_layer_consumer_handle
|
||||||
public ResultCode GetIndirectLayerConsumerHandle(ServiceCtx context)
|
public ResultCode GetIndirectLayerConsumerHandle(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// PopInData() -> object<nn::am::service::IStorage>
|
// PopInData() -> object<nn::am::service::IStorage>
|
||||||
public ResultCode PopInData(ServiceCtx context)
|
public ResultCode PopInData(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -45,7 +45,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// GetLibraryAppletInfo() -> nn::am::service::LibraryAppletInfo
|
// GetLibraryAppletInfo() -> nn::am::service::LibraryAppletInfo
|
||||||
public ResultCode GetLibraryAppletInfo(ServiceCtx context)
|
public ResultCode GetLibraryAppletInfo(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -60,7 +60,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(14)]
|
[CommandCmif(14)]
|
||||||
// GetCallerAppletIdentityInfo() -> nn::am::service::AppletIdentityInfo
|
// GetCallerAppletIdentityInfo() -> nn::am::service::AppletIdentityInfo
|
||||||
public ResultCode GetCallerAppletIdentityInfo(ServiceCtx context)
|
public ResultCode GetCallerAppletIdentityInfo(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -6,7 +6,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
{
|
{
|
||||||
public IProcessWindingController() { }
|
public IProcessWindingController() { }
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetLaunchReason() -> nn::am::service::AppletProcessLaunchReason
|
// GetLaunchReason() -> nn::am::service::AppletProcessLaunchReason
|
||||||
public ResultCode GetLaunchReason(ServiceCtx context)
|
public ResultCode GetLaunchReason(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -6,7 +6,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
{
|
{
|
||||||
public IAudioController() { }
|
public IAudioController() { }
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// SetExpectedMasterVolume(f32, f32)
|
// SetExpectedMasterVolume(f32, f32)
|
||||||
public ResultCode SetExpectedMasterVolume(ServiceCtx context)
|
public ResultCode SetExpectedMasterVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -18,7 +18,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetMainAppletExpectedMasterVolume() -> f32
|
// GetMainAppletExpectedMasterVolume() -> f32
|
||||||
public ResultCode GetMainAppletExpectedMasterVolume(ServiceCtx context)
|
public ResultCode GetMainAppletExpectedMasterVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// GetLibraryAppletExpectedMasterVolume() -> f32
|
// GetLibraryAppletExpectedMasterVolume() -> f32
|
||||||
public ResultCode GetLibraryAppletExpectedMasterVolume(ServiceCtx context)
|
public ResultCode GetLibraryAppletExpectedMasterVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -40,7 +40,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// ChangeMainAppletMasterVolume(f32, u64)
|
// ChangeMainAppletMasterVolume(f32, u64)
|
||||||
public ResultCode ChangeMainAppletMasterVolume(ServiceCtx context)
|
public ResultCode ChangeMainAppletMasterVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -52,7 +52,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// SetTransparentVolumeRate(f32)
|
// SetTransparentVolumeRate(f32)
|
||||||
public ResultCode SetTransparentVolumeRate(ServiceCtx context)
|
public ResultCode SetTransparentVolumeRate(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -30,7 +30,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
_lblControllerServer = new Lbl.LblControllerServer(context);
|
_lblControllerServer = new Lbl.LblControllerServer(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetEventHandle() -> handle<copy>
|
// GetEventHandle() -> handle<copy>
|
||||||
public ResultCode GetEventHandle(ServiceCtx context)
|
public ResultCode GetEventHandle(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -49,7 +49,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// ReceiveMessage() -> nn::am::AppletMessage
|
// ReceiveMessage() -> nn::am::AppletMessage
|
||||||
public ResultCode ReceiveMessage(ServiceCtx context)
|
public ResultCode ReceiveMessage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -77,7 +77,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)]
|
[CommandCmif(5)]
|
||||||
// GetOperationMode() -> u8
|
// GetOperationMode() -> u8
|
||||||
public ResultCode GetOperationMode(ServiceCtx context)
|
public ResultCode GetOperationMode(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -90,14 +90,14 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(6)]
|
[CommandCmif(6)]
|
||||||
// GetPerformanceMode() -> nn::apm::PerformanceMode
|
// GetPerformanceMode() -> nn::apm::PerformanceMode
|
||||||
public ResultCode GetPerformanceMode(ServiceCtx context)
|
public ResultCode GetPerformanceMode(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return (ResultCode)_apmManagerServer.GetPerformanceMode(context);
|
return (ResultCode)_apmManagerServer.GetPerformanceMode(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(8)]
|
[CommandCmif(8)]
|
||||||
// GetBootMode() -> u8
|
// GetBootMode() -> u8
|
||||||
public ResultCode GetBootMode(ServiceCtx context)
|
public ResultCode GetBootMode(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -108,7 +108,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(9)]
|
[CommandCmif(9)]
|
||||||
// GetCurrentFocusState() -> u8
|
// GetCurrentFocusState() -> u8
|
||||||
public ResultCode GetCurrentFocusState(ServiceCtx context)
|
public ResultCode GetCurrentFocusState(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -117,7 +117,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(50)] // 3.0.0+
|
[CommandCmif(50)] // 3.0.0+
|
||||||
// IsVrModeEnabled() -> b8
|
// IsVrModeEnabled() -> b8
|
||||||
public ResultCode IsVrModeEnabled(ServiceCtx context)
|
public ResultCode IsVrModeEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -126,7 +126,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(51)] // 3.0.0+
|
[CommandCmif(51)] // 3.0.0+
|
||||||
// SetVrModeEnabled(b8)
|
// SetVrModeEnabled(b8)
|
||||||
public ResultCode SetVrModeEnabled(ServiceCtx context)
|
public ResultCode SetVrModeEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -137,7 +137,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(52)] // 4.0.0+
|
[CommandCmif(52)] // 4.0.0+
|
||||||
// SetLcdBacklighOffEnabled(b8)
|
// SetLcdBacklighOffEnabled(b8)
|
||||||
public ResultCode SetLcdBacklighOffEnabled(ServiceCtx context)
|
public ResultCode SetLcdBacklighOffEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -151,7 +151,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(53)] // 7.0.0+
|
[CommandCmif(53)] // 7.0.0+
|
||||||
// BeginVrModeEx()
|
// BeginVrModeEx()
|
||||||
public ResultCode BeginVrModeEx(ServiceCtx context)
|
public ResultCode BeginVrModeEx(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -160,7 +160,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(54)] // 7.0.0+
|
[CommandCmif(54)] // 7.0.0+
|
||||||
// EndVrModeEx()
|
// EndVrModeEx()
|
||||||
public ResultCode EndVrModeEx(ServiceCtx context)
|
public ResultCode EndVrModeEx(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -190,7 +190,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
// TODO: It signals an internal event of ICommonStateGetter. We have to determine where this event is used.
|
// TODO: It signals an internal event of ICommonStateGetter. We have to determine where this event is used.
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(60)] // 3.0.0+
|
[CommandCmif(60)] // 3.0.0+
|
||||||
// GetDefaultDisplayResolution() -> (u32, u32)
|
// GetDefaultDisplayResolution() -> (u32, u32)
|
||||||
public ResultCode GetDefaultDisplayResolution(ServiceCtx context)
|
public ResultCode GetDefaultDisplayResolution(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -204,7 +204,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(61)] // 3.0.0+
|
[CommandCmif(61)] // 3.0.0+
|
||||||
// GetDefaultDisplayResolutionChangeEvent() -> handle<copy>
|
// GetDefaultDisplayResolutionChangeEvent() -> handle<copy>
|
||||||
public ResultCode GetDefaultDisplayResolutionChangeEvent(ServiceCtx context)
|
public ResultCode GetDefaultDisplayResolutionChangeEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -224,7 +224,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(62)] // 4.0.0+
|
[CommandCmif(62)] // 4.0.0+
|
||||||
// GetHdcpAuthenticationState() -> s32 state
|
// GetHdcpAuthenticationState() -> s32 state
|
||||||
public ResultCode GetHdcpAuthenticationState(ServiceCtx context)
|
public ResultCode GetHdcpAuthenticationState(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -235,7 +235,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(66)] // 6.0.0+
|
[CommandCmif(66)] // 6.0.0+
|
||||||
// SetCpuBoostMode(u32 cpu_boost_mode)
|
// SetCpuBoostMode(u32 cpu_boost_mode)
|
||||||
public ResultCode SetCpuBoostMode(ServiceCtx context)
|
public ResultCode SetCpuBoostMode(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -253,14 +253,14 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(91)] // 7.0.0+
|
[CommandCmif(91)] // 7.0.0+
|
||||||
// GetCurrentPerformanceConfiguration() -> nn::apm::PerformanceConfiguration
|
// GetCurrentPerformanceConfiguration() -> nn::apm::PerformanceConfiguration
|
||||||
public ResultCode GetCurrentPerformanceConfiguration(ServiceCtx context)
|
public ResultCode GetCurrentPerformanceConfiguration(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return (ResultCode)_apmSystemManagerServer.GetCurrentPerformanceConfiguration(context);
|
return (ResultCode)_apmSystemManagerServer.GetCurrentPerformanceConfiguration(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(300)] // 9.0.0+
|
[CommandCmif(300)] // 9.0.0+
|
||||||
// GetSettingsPlatformRegion() -> u8
|
// GetSettingsPlatformRegion() -> u8
|
||||||
public ResultCode GetSettingsPlatformRegion(ServiceCtx context)
|
public ResultCode GetSettingsPlatformRegion(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -272,7 +272,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(900)] // 11.0.0+
|
[CommandCmif(900)] // 11.0.0+
|
||||||
// SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled()
|
// SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled()
|
||||||
public ResultCode SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(ServiceCtx context)
|
public ResultCode SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -17,7 +17,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
_transferMem = context.Device.System.AppletCaptureBufferTransfer;
|
_transferMem = context.Device.System.AppletCaptureBufferTransfer;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(8)] // 2.0.0+
|
[CommandCmif(8)] // 2.0.0+
|
||||||
// TakeScreenShotOfOwnLayer(b8, s32)
|
// TakeScreenShotOfOwnLayer(b8, s32)
|
||||||
public ResultCode TakeScreenShotOfOwnLayer(ServiceCtx context)
|
public ResultCode TakeScreenShotOfOwnLayer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// ReleaseLastApplicationCaptureBuffer()
|
// ReleaseLastApplicationCaptureBuffer()
|
||||||
public ResultCode ReleaseLastApplicationCaptureBuffer(ServiceCtx context)
|
public ResultCode ReleaseLastApplicationCaptureBuffer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -43,7 +43,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(15)]
|
[CommandCmif(15)]
|
||||||
// ReleaseCallerAppletCaptureBuffer()
|
// ReleaseCallerAppletCaptureBuffer()
|
||||||
public ResultCode ReleaseCallerAppletCaptureBuffer(ServiceCtx context)
|
public ResultCode ReleaseCallerAppletCaptureBuffer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -57,7 +57,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(16)]
|
[CommandCmif(16)]
|
||||||
// AcquireLastApplicationCaptureBufferEx() -> (b8, handle<copy>)
|
// AcquireLastApplicationCaptureBufferEx() -> (b8, handle<copy>)
|
||||||
public ResultCode AcquireLastApplicationCaptureBufferEx(ServiceCtx context)
|
public ResultCode AcquireLastApplicationCaptureBufferEx(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -80,7 +80,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(18)]
|
[CommandCmif(18)]
|
||||||
// AcquireCallerAppletCaptureBufferEx() -> (b8, handle<copy>)
|
// AcquireCallerAppletCaptureBufferEx() -> (b8, handle<copy>)
|
||||||
public ResultCode AcquireCallerAppletCaptureBufferEx(ServiceCtx context)
|
public ResultCode AcquireCallerAppletCaptureBufferEx(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -17,7 +17,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
_channelEvent = new KEvent(system.KernelContext);
|
_channelEvent = new KEvent(system.KernelContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)]
|
[CommandCmif(10)]
|
||||||
// RequestToGetForeground()
|
// RequestToGetForeground()
|
||||||
public ResultCode RequestToGetForeground(ServiceCtx context)
|
public ResultCode RequestToGetForeground(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -26,7 +26,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(21)]
|
[CommandCmif(21)]
|
||||||
// GetPopFromGeneralChannelEvent() -> handle<copy>
|
// GetPopFromGeneralChannelEvent() -> handle<copy>
|
||||||
public ResultCode GetPopFromGeneralChannelEvent(ServiceCtx context)
|
public ResultCode GetPopFromGeneralChannelEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -7,7 +7,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
{
|
{
|
||||||
public ILibraryAppletCreator() { }
|
public ILibraryAppletCreator() { }
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// CreateLibraryApplet(u32, u32) -> object<nn::am::service::ILibraryAppletAccessor>
|
// CreateLibraryApplet(u32, u32) -> object<nn::am::service::ILibraryAppletAccessor>
|
||||||
public ResultCode CreateLibraryApplet(ServiceCtx context)
|
public ResultCode CreateLibraryApplet(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -19,7 +19,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)]
|
[CommandCmif(10)]
|
||||||
// CreateStorage(u64) -> object<nn::am::service::IStorage>
|
// CreateStorage(u64) -> object<nn::am::service::IStorage>
|
||||||
public ResultCode CreateStorage(ServiceCtx context)
|
public ResultCode CreateStorage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -37,7 +37,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// CreateTransferMemoryStorage(b8, u64, handle<copy>) -> object<nn::am::service::IStorage>
|
// CreateTransferMemoryStorage(b8, u64, handle<copy>) -> object<nn::am::service::IStorage>
|
||||||
public ResultCode CreateTransferMemoryStorage(ServiceCtx context)
|
public ResultCode CreateTransferMemoryStorage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -63,7 +63,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(12)] // 2.0.0+
|
[CommandCmif(12)] // 2.0.0+
|
||||||
// CreateHandleStorage(u64, handle<copy>) -> object<nn::am::service::IStorage>
|
// CreateHandleStorage(u64, handle<copy>) -> object<nn::am::service::IStorage>
|
||||||
public ResultCode CreateHandleStorage(ServiceCtx context)
|
public ResultCode CreateHandleStorage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -43,7 +43,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
_pid = pid;
|
_pid = pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// Exit()
|
// Exit()
|
||||||
public ResultCode Exit(ServiceCtx context)
|
public ResultCode Exit(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -52,7 +52,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// LockExit()
|
// LockExit()
|
||||||
public ResultCode LockExit(ServiceCtx context)
|
public ResultCode LockExit(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -61,7 +61,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// UnlockExit()
|
// UnlockExit()
|
||||||
public ResultCode UnlockExit(ServiceCtx context)
|
public ResultCode UnlockExit(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -70,7 +70,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)] // 2.0.0+
|
[CommandCmif(3)] // 2.0.0+
|
||||||
// EnterFatalSection()
|
// EnterFatalSection()
|
||||||
public ResultCode EnterFatalSection(ServiceCtx context)
|
public ResultCode EnterFatalSection(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -82,7 +82,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)] // 2.0.0+
|
[CommandCmif(4)] // 2.0.0+
|
||||||
// LeaveFatalSection()
|
// LeaveFatalSection()
|
||||||
public ResultCode LeaveFatalSection(ServiceCtx context)
|
public ResultCode LeaveFatalSection(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -103,7 +103,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(9)]
|
[CommandCmif(9)]
|
||||||
// GetLibraryAppletLaunchableEvent() -> handle<copy>
|
// GetLibraryAppletLaunchableEvent() -> handle<copy>
|
||||||
public ResultCode GetLibraryAppletLaunchableEvent(ServiceCtx context)
|
public ResultCode GetLibraryAppletLaunchableEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -124,7 +124,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)]
|
[CommandCmif(10)]
|
||||||
// SetScreenShotPermission(u32)
|
// SetScreenShotPermission(u32)
|
||||||
public ResultCode SetScreenShotPermission(ServiceCtx context)
|
public ResultCode SetScreenShotPermission(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -137,7 +137,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// SetOperationModeChangedNotification(b8)
|
// SetOperationModeChangedNotification(b8)
|
||||||
public ResultCode SetOperationModeChangedNotification(ServiceCtx context)
|
public ResultCode SetOperationModeChangedNotification(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -150,7 +150,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(12)]
|
[CommandCmif(12)]
|
||||||
// SetPerformanceModeChangedNotification(b8)
|
// SetPerformanceModeChangedNotification(b8)
|
||||||
public ResultCode SetPerformanceModeChangedNotification(ServiceCtx context)
|
public ResultCode SetPerformanceModeChangedNotification(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -163,7 +163,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(13)]
|
[CommandCmif(13)]
|
||||||
// SetFocusHandlingMode(b8, b8, b8)
|
// SetFocusHandlingMode(b8, b8, b8)
|
||||||
public ResultCode SetFocusHandlingMode(ServiceCtx context)
|
public ResultCode SetFocusHandlingMode(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -176,7 +176,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(14)]
|
[CommandCmif(14)]
|
||||||
// SetRestartMessageEnabled(b8)
|
// SetRestartMessageEnabled(b8)
|
||||||
public ResultCode SetRestartMessageEnabled(ServiceCtx context)
|
public ResultCode SetRestartMessageEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -189,7 +189,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(16)] // 2.0.0+
|
[CommandCmif(16)] // 2.0.0+
|
||||||
// SetOutOfFocusSuspendingEnabled(b8)
|
// SetOutOfFocusSuspendingEnabled(b8)
|
||||||
public ResultCode SetOutOfFocusSuspendingEnabled(ServiceCtx context)
|
public ResultCode SetOutOfFocusSuspendingEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -202,7 +202,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(19)] // 3.0.0+
|
[CommandCmif(19)] // 3.0.0+
|
||||||
// SetScreenShotImageOrientation(u32)
|
// SetScreenShotImageOrientation(u32)
|
||||||
public ResultCode SetScreenShotImageOrientation(ServiceCtx context)
|
public ResultCode SetScreenShotImageOrientation(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -215,7 +215,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(40)]
|
[CommandCmif(40)]
|
||||||
// CreateManagedDisplayLayer() -> u64
|
// CreateManagedDisplayLayer() -> u64
|
||||||
public ResultCode CreateManagedDisplayLayer(ServiceCtx context)
|
public ResultCode CreateManagedDisplayLayer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -227,7 +227,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(41)] // 4.0.0+
|
[CommandCmif(41)] // 4.0.0+
|
||||||
// IsSystemBufferSharingEnabled()
|
// IsSystemBufferSharingEnabled()
|
||||||
public ResultCode IsSystemBufferSharingEnabled(ServiceCtx context)
|
public ResultCode IsSystemBufferSharingEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -236,7 +236,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.NotImplemented;
|
return ResultCode.NotImplemented;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(44)] // 10.0.0+
|
[CommandCmif(44)] // 10.0.0+
|
||||||
// CreateManagedDisplaySeparableLayer() -> (u64, u64)
|
// CreateManagedDisplaySeparableLayer() -> (u64, u64)
|
||||||
public ResultCode CreateManagedDisplaySeparableLayer(ServiceCtx context)
|
public ResultCode CreateManagedDisplaySeparableLayer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -250,7 +250,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(50)]
|
[CommandCmif(50)]
|
||||||
// SetHandlesRequestToDisplay(b8)
|
// SetHandlesRequestToDisplay(b8)
|
||||||
public ResultCode SetHandlesRequestToDisplay(ServiceCtx context)
|
public ResultCode SetHandlesRequestToDisplay(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -263,7 +263,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(62)]
|
[CommandCmif(62)]
|
||||||
// SetIdleTimeDetectionExtension(u32)
|
// SetIdleTimeDetectionExtension(u32)
|
||||||
public ResultCode SetIdleTimeDetectionExtension(ServiceCtx context)
|
public ResultCode SetIdleTimeDetectionExtension(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -276,7 +276,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(63)]
|
[CommandCmif(63)]
|
||||||
// GetIdleTimeDetectionExtension() -> u32
|
// GetIdleTimeDetectionExtension() -> u32
|
||||||
public ResultCode GetIdleTimeDetectionExtension(ServiceCtx context)
|
public ResultCode GetIdleTimeDetectionExtension(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -287,7 +287,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(65)]
|
[CommandCmif(65)]
|
||||||
// ReportUserIsActive()
|
// ReportUserIsActive()
|
||||||
public ResultCode ReportUserIsActive(ServiceCtx context)
|
public ResultCode ReportUserIsActive(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -298,19 +298,19 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(67)] //3.0.0+
|
[CommandCmif(67)] //3.0.0+
|
||||||
// IsIlluminanceAvailable() -> bool
|
// IsIlluminanceAvailable() -> bool
|
||||||
public ResultCode IsIlluminanceAvailable(ServiceCtx context)
|
public ResultCode IsIlluminanceAvailable(ServiceCtx context)
|
||||||
{
|
{
|
||||||
// NOTE: This should call IsAmbientLightSensorAvailable through to Lbl, but there's no situation where we'd want false.
|
// NOTE: This should call IsAmbientLightSensorAvailable through to Lbl, but there's no situation where we'd want false.
|
||||||
context.ResponseData.Write(true);
|
context.ResponseData.Write(true);
|
||||||
|
|
||||||
Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
||||||
|
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(68)]
|
[CommandCmif(68)]
|
||||||
// SetAutoSleepDisabled(u8)
|
// SetAutoSleepDisabled(u8)
|
||||||
public ResultCode SetAutoSleepDisabled(ServiceCtx context)
|
public ResultCode SetAutoSleepDisabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -321,7 +321,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(69)]
|
[CommandCmif(69)]
|
||||||
// IsAutoSleepDisabled() -> u8
|
// IsAutoSleepDisabled() -> u8
|
||||||
public ResultCode IsAutoSleepDisabled(ServiceCtx context)
|
public ResultCode IsAutoSleepDisabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -330,7 +330,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(71)] //5.0.0+
|
[CommandCmif(71)] //5.0.0+
|
||||||
// GetCurrentIlluminanceEx() -> (bool, f32)
|
// GetCurrentIlluminanceEx() -> (bool, f32)
|
||||||
public ResultCode GetCurrentIlluminanceEx(ServiceCtx context)
|
public ResultCode GetCurrentIlluminanceEx(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -343,7 +343,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(80)] // 4.0.0+
|
[CommandCmif(80)] // 4.0.0+
|
||||||
// SetWirelessPriorityMode(s32 wireless_priority_mode)
|
// SetWirelessPriorityMode(s32 wireless_priority_mode)
|
||||||
public ResultCode SetWirelessPriorityMode(ServiceCtx context)
|
public ResultCode SetWirelessPriorityMode(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -359,7 +359,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(90)] // 6.0.0+
|
[CommandCmif(90)] // 6.0.0+
|
||||||
// GetAccumulatedSuspendedTickValue() -> u64
|
// GetAccumulatedSuspendedTickValue() -> u64
|
||||||
public ResultCode GetAccumulatedSuspendedTickValue(ServiceCtx context)
|
public ResultCode GetAccumulatedSuspendedTickValue(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -368,7 +368,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(91)] // 6.0.0+
|
[CommandCmif(91)] // 6.0.0+
|
||||||
// GetAccumulatedSuspendedTickChangedEvent() -> handle<copy>
|
// GetAccumulatedSuspendedTickChangedEvent() -> handle<copy>
|
||||||
public ResultCode GetAccumulatedSuspendedTickChangedEvent(ServiceCtx context)
|
public ResultCode GetAccumulatedSuspendedTickChangedEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -389,7 +389,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(100)] // 7.0.0+
|
[CommandCmif(100)] // 7.0.0+
|
||||||
// SetAlbumImageTakenNotificationEnabled(u8)
|
// SetAlbumImageTakenNotificationEnabled(u8)
|
||||||
public ResultCode SetAlbumImageTakenNotificationEnabled(ServiceCtx context)
|
public ResultCode SetAlbumImageTakenNotificationEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -400,7 +400,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(120)] // 11.0.0+
|
[CommandCmif(120)] // 11.0.0+
|
||||||
// SaveCurrentScreenshot(s32 album_report_option)
|
// SaveCurrentScreenshot(s32 album_report_option)
|
||||||
public ResultCode SaveCurrentScreenshot(ServiceCtx context)
|
public ResultCode SaveCurrentScreenshot(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -416,7 +416,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(130)] // 13.0.0+
|
[CommandCmif(130)] // 13.0.0+
|
||||||
// SetRecordVolumeMuted(b8)
|
// SetRecordVolumeMuted(b8)
|
||||||
public ResultCode SetRecordVolumeMuted(ServiceCtx context)
|
public ResultCode SetRecordVolumeMuted(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -429,4 +429,4 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -11,7 +11,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
_pid = pid;
|
_pid = pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetAppletResourceUserId() -> nn::applet::AppletResourceUserId
|
// GetAppletResourceUserId() -> nn::applet::AppletResourceUserId
|
||||||
public ResultCode GetAppletResourceUserId(ServiceCtx context)
|
public ResultCode GetAppletResourceUserId(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -24,7 +24,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)]
|
[CommandCmif(10)]
|
||||||
// AcquireForegroundRights()
|
// AcquireForegroundRights()
|
||||||
public ResultCode AcquireForegroundRights(ServiceCtx context)
|
public ResultCode AcquireForegroundRights(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -7,7 +7,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
|||||||
{
|
{
|
||||||
public IAllSystemAppletProxiesService(ServiceCtx context) { }
|
public IAllSystemAppletProxiesService(ServiceCtx context) { }
|
||||||
|
|
||||||
[CommandHipc(100)]
|
[CommandCmif(100)]
|
||||||
// OpenSystemAppletProxy(u64, pid, handle<copy>) -> object<nn::am::service::ISystemAppletProxy>
|
// OpenSystemAppletProxy(u64, pid, handle<copy>) -> object<nn::am::service::ISystemAppletProxy>
|
||||||
public ResultCode OpenSystemAppletProxy(ServiceCtx context)
|
public ResultCode OpenSystemAppletProxy(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -16,8 +16,8 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(200)]
|
[CommandCmif(200)]
|
||||||
[CommandHipc(201)] // 3.0.0+
|
[CommandCmif(201)] // 3.0.0+
|
||||||
// OpenLibraryAppletProxy(u64, pid, handle<copy>) -> object<nn::am::service::ILibraryAppletProxy>
|
// OpenLibraryAppletProxy(u64, pid, handle<copy>) -> object<nn::am::service::ILibraryAppletProxy>
|
||||||
public ResultCode OpenLibraryAppletProxy(ServiceCtx context)
|
public ResultCode OpenLibraryAppletProxy(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -11,7 +11,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
|||||||
Data = data;
|
Data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// Open() -> object<nn::am::service::IStorageAccessor>
|
// Open() -> object<nn::am::service::IStorageAccessor>
|
||||||
public ResultCode Open(ServiceCtx context)
|
public ResultCode Open(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -11,7 +11,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
|||||||
_storage = storage;
|
_storage = storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetSize() -> u64
|
// GetSize() -> u64
|
||||||
public ResultCode GetSize(ServiceCtx context)
|
public ResultCode GetSize(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -20,7 +20,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)]
|
[CommandCmif(10)]
|
||||||
// Write(u64, buffer<bytes, 0x21>)
|
// Write(u64, buffer<bytes, 0x21>)
|
||||||
public ResultCode Write(ServiceCtx context)
|
public ResultCode Write(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -59,7 +59,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// Read(u64) -> buffer<bytes, 0x22>
|
// Read(u64) -> buffer<bytes, 0x22>
|
||||||
public ResultCode Read(ServiceCtx context)
|
public ResultCode Read(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -55,7 +55,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
_horizon = system.LibHacHorizonManager.AmClient;
|
_horizon = system.LibHacHorizonManager.AmClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// PopLaunchParameter(LaunchParameterKind kind) -> object<nn::am::service::IStorage>
|
// PopLaunchParameter(LaunchParameterKind kind) -> object<nn::am::service::IStorage>
|
||||||
public ResultCode PopLaunchParameter(ServiceCtx context)
|
public ResultCode PopLaunchParameter(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -88,7 +88,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(12)] // 4.0.0+
|
[CommandCmif(12)] // 4.0.0+
|
||||||
// CreateApplicationAndRequestToStart(u64 title_id)
|
// CreateApplicationAndRequestToStart(u64 title_id)
|
||||||
public ResultCode CreateApplicationAndRequestToStart(ServiceCtx context)
|
public ResultCode CreateApplicationAndRequestToStart(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -108,7 +108,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(20)]
|
[CommandCmif(20)]
|
||||||
// EnsureSaveData(nn::account::Uid) -> u64
|
// EnsureSaveData(nn::account::Uid) -> u64
|
||||||
public ResultCode EnsureSaveData(ServiceCtx context)
|
public ResultCode EnsureSaveData(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -127,7 +127,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return (ResultCode)result.Value;
|
return (ResultCode)result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(21)]
|
[CommandCmif(21)]
|
||||||
// GetDesiredLanguage() -> nn::settings::LanguageCode
|
// GetDesiredLanguage() -> nn::settings::LanguageCode
|
||||||
public ResultCode GetDesiredLanguage(ServiceCtx context)
|
public ResultCode GetDesiredLanguage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -164,7 +164,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(22)]
|
[CommandCmif(22)]
|
||||||
// SetTerminateResult(u32)
|
// SetTerminateResult(u32)
|
||||||
public ResultCode SetTerminateResult(ServiceCtx context)
|
public ResultCode SetTerminateResult(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -175,7 +175,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(23)]
|
[CommandCmif(23)]
|
||||||
// GetDisplayVersion() -> nn::oe::DisplayVersion
|
// GetDisplayVersion() -> nn::oe::DisplayVersion
|
||||||
public ResultCode GetDisplayVersion(ServiceCtx context)
|
public ResultCode GetDisplayVersion(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -185,7 +185,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(25)] // 3.0.0+
|
[CommandCmif(25)] // 3.0.0+
|
||||||
// ExtendSaveData(u8 save_data_type, nn::account::Uid, s64 save_size, s64 journal_size) -> u64 result_code
|
// ExtendSaveData(u8 save_data_type, nn::account::Uid, s64 save_size, s64 journal_size) -> u64 result_code
|
||||||
public ResultCode ExtendSaveData(ServiceCtx context)
|
public ResultCode ExtendSaveData(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -207,7 +207,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(26)] // 3.0.0+
|
[CommandCmif(26)] // 3.0.0+
|
||||||
// GetSaveDataSize(u8 save_data_type, nn::account::Uid) -> (s64 save_size, s64 journal_size)
|
// GetSaveDataSize(u8 save_data_type, nn::account::Uid) -> (s64 save_size, s64 journal_size)
|
||||||
public ResultCode GetSaveDataSize(ServiceCtx context)
|
public ResultCode GetSaveDataSize(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -226,7 +226,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(27)] // 5.0.0+
|
[CommandCmif(27)] // 5.0.0+
|
||||||
// CreateCacheStorage(u16 index, s64 save_size, s64 journal_size) -> (u32 storageTarget, u64 requiredSize)
|
// CreateCacheStorage(u16 index, s64 save_size, s64 journal_size) -> (u32 storageTarget, u64 requiredSize)
|
||||||
public ResultCode CreateCacheStorage(ServiceCtx context)
|
public ResultCode CreateCacheStorage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -250,7 +250,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(28)] // 11.0.0+
|
[CommandCmif(28)] // 11.0.0+
|
||||||
// GetSaveDataSizeMax() -> (s64 save_size_max, s64 journal_size_max)
|
// GetSaveDataSizeMax() -> (s64 save_size_max, s64 journal_size_max)
|
||||||
public ResultCode GetSaveDataSizeMax(ServiceCtx context)
|
public ResultCode GetSaveDataSizeMax(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -267,7 +267,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(30)]
|
[CommandCmif(30)]
|
||||||
// BeginBlockingHomeButtonShortAndLongPressed()
|
// BeginBlockingHomeButtonShortAndLongPressed()
|
||||||
public ResultCode BeginBlockingHomeButtonShortAndLongPressed(ServiceCtx context)
|
public ResultCode BeginBlockingHomeButtonShortAndLongPressed(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -278,7 +278,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(31)]
|
[CommandCmif(31)]
|
||||||
// EndBlockingHomeButtonShortAndLongPressed()
|
// EndBlockingHomeButtonShortAndLongPressed()
|
||||||
public ResultCode EndBlockingHomeButtonShortAndLongPressed(ServiceCtx context)
|
public ResultCode EndBlockingHomeButtonShortAndLongPressed(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -289,7 +289,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(32)] // 2.0.0+
|
[CommandCmif(32)] // 2.0.0+
|
||||||
// BeginBlockingHomeButton(u64 nano_second)
|
// BeginBlockingHomeButton(u64 nano_second)
|
||||||
public ResultCode BeginBlockingHomeButton(ServiceCtx context)
|
public ResultCode BeginBlockingHomeButton(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -302,7 +302,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(33)] // 2.0.0+
|
[CommandCmif(33)] // 2.0.0+
|
||||||
// EndBlockingHomeButton()
|
// EndBlockingHomeButton()
|
||||||
public ResultCode EndBlockingHomeButton(ServiceCtx context)
|
public ResultCode EndBlockingHomeButton(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -313,7 +313,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(40)]
|
[CommandCmif(40)]
|
||||||
// NotifyRunning() -> b8
|
// NotifyRunning() -> b8
|
||||||
public ResultCode NotifyRunning(ServiceCtx context)
|
public ResultCode NotifyRunning(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -322,7 +322,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(50)] // 2.0.0+
|
[CommandCmif(50)] // 2.0.0+
|
||||||
// GetPseudoDeviceId() -> nn::util::Uuid
|
// GetPseudoDeviceId() -> nn::util::Uuid
|
||||||
public ResultCode GetPseudoDeviceId(ServiceCtx context)
|
public ResultCode GetPseudoDeviceId(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -334,7 +334,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(60)] // 2.0.0+
|
[CommandCmif(60)] // 2.0.0+
|
||||||
// SetMediaPlaybackStateForApplication(bool enabled)
|
// SetMediaPlaybackStateForApplication(bool enabled)
|
||||||
public ResultCode SetMediaPlaybackStateForApplication(ServiceCtx context)
|
public ResultCode SetMediaPlaybackStateForApplication(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -347,7 +347,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(65)] // 3.0.0+
|
[CommandCmif(65)] // 3.0.0+
|
||||||
// IsGamePlayRecordingSupported() -> u8
|
// IsGamePlayRecordingSupported() -> u8
|
||||||
public ResultCode IsGamePlayRecordingSupported(ServiceCtx context)
|
public ResultCode IsGamePlayRecordingSupported(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -356,7 +356,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(66)] // 3.0.0+
|
[CommandCmif(66)] // 3.0.0+
|
||||||
// InitializeGamePlayRecording(u64, handle<copy>)
|
// InitializeGamePlayRecording(u64, handle<copy>)
|
||||||
public ResultCode InitializeGamePlayRecording(ServiceCtx context)
|
public ResultCode InitializeGamePlayRecording(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -365,7 +365,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(67)] // 3.0.0+
|
[CommandCmif(67)] // 3.0.0+
|
||||||
// SetGamePlayRecordingState(u32)
|
// SetGamePlayRecordingState(u32)
|
||||||
public ResultCode SetGamePlayRecordingState(ServiceCtx context)
|
public ResultCode SetGamePlayRecordingState(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -376,7 +376,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(90)] // 4.0.0+
|
[CommandCmif(90)] // 4.0.0+
|
||||||
// EnableApplicationCrashReport(u8)
|
// EnableApplicationCrashReport(u8)
|
||||||
public ResultCode EnableApplicationCrashReport(ServiceCtx context)
|
public ResultCode EnableApplicationCrashReport(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -387,7 +387,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(100)] // 5.0.0+
|
[CommandCmif(100)] // 5.0.0+
|
||||||
// InitializeApplicationCopyrightFrameBuffer(s32 width, s32 height, handle<copy, transfer_memory> transfer_memory, u64 transfer_memory_size)
|
// InitializeApplicationCopyrightFrameBuffer(s32 width, s32 height, handle<copy, transfer_memory> transfer_memory, u64 transfer_memory_size)
|
||||||
public ResultCode InitializeApplicationCopyrightFrameBuffer(ServiceCtx context)
|
public ResultCode InitializeApplicationCopyrightFrameBuffer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -433,7 +433,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(101)] // 5.0.0+
|
[CommandCmif(101)] // 5.0.0+
|
||||||
// SetApplicationCopyrightImage(buffer<bytes, 0x45> frame_buffer, s32 x, s32 y, s32 width, s32 height, s32 window_origin_mode)
|
// SetApplicationCopyrightImage(buffer<bytes, 0x45> frame_buffer, s32 x, s32 y, s32 width, s32 height, s32 window_origin_mode)
|
||||||
public ResultCode SetApplicationCopyrightImage(ServiceCtx context)
|
public ResultCode SetApplicationCopyrightImage(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -480,7 +480,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(102)] // 5.0.0+
|
[CommandCmif(102)] // 5.0.0+
|
||||||
// SetApplicationCopyrightVisibility(bool visible)
|
// SetApplicationCopyrightVisibility(bool visible)
|
||||||
public ResultCode SetApplicationCopyrightVisibility(ServiceCtx context)
|
public ResultCode SetApplicationCopyrightVisibility(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -493,7 +493,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(110)] // 5.0.0+
|
[CommandCmif(110)] // 5.0.0+
|
||||||
// QueryApplicationPlayStatistics(buffer<bytes, 5> title_id_list) -> (buffer<bytes, 6> entries, s32 entries_count)
|
// QueryApplicationPlayStatistics(buffer<bytes, 5> title_id_list) -> (buffer<bytes, 6> entries, s32 entries_count)
|
||||||
public ResultCode QueryApplicationPlayStatistics(ServiceCtx context)
|
public ResultCode QueryApplicationPlayStatistics(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -501,7 +501,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return (ResultCode)QueryPlayStatisticsManager.GetPlayStatistics(context);
|
return (ResultCode)QueryPlayStatisticsManager.GetPlayStatistics(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(111)] // 6.0.0+
|
[CommandCmif(111)] // 6.0.0+
|
||||||
// QueryApplicationPlayStatisticsByUid(nn::account::Uid, buffer<bytes, 5> title_id_list) -> (buffer<bytes, 6> entries, s32 entries_count)
|
// QueryApplicationPlayStatisticsByUid(nn::account::Uid, buffer<bytes, 5> title_id_list) -> (buffer<bytes, 6> entries, s32 entries_count)
|
||||||
public ResultCode QueryApplicationPlayStatisticsByUid(ServiceCtx context)
|
public ResultCode QueryApplicationPlayStatisticsByUid(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -509,7 +509,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return (ResultCode)QueryPlayStatisticsManager.GetPlayStatistics(context, true);
|
return (ResultCode)QueryPlayStatisticsManager.GetPlayStatistics(context, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(120)] // 5.0.0+
|
[CommandCmif(120)] // 5.0.0+
|
||||||
// ExecuteProgram(ProgramSpecifyKind kind, u64 value)
|
// ExecuteProgram(ProgramSpecifyKind kind, u64 value)
|
||||||
public ResultCode ExecuteProgram(ServiceCtx context)
|
public ResultCode ExecuteProgram(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -527,7 +527,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(121)] // 5.0.0+
|
[CommandCmif(121)] // 5.0.0+
|
||||||
// ClearUserChannel()
|
// ClearUserChannel()
|
||||||
public ResultCode ClearUserChannel(ServiceCtx context)
|
public ResultCode ClearUserChannel(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -536,7 +536,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(122)] // 5.0.0+
|
[CommandCmif(122)] // 5.0.0+
|
||||||
// UnpopToUserChannel(object<nn::am::service::IStorage> input_storage)
|
// UnpopToUserChannel(object<nn::am::service::IStorage> input_storage)
|
||||||
public ResultCode UnpopToUserChannel(ServiceCtx context)
|
public ResultCode UnpopToUserChannel(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -547,7 +547,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(123)] // 5.0.0+
|
[CommandCmif(123)] // 5.0.0+
|
||||||
// GetPreviousProgramIndex() -> s32 program_index
|
// GetPreviousProgramIndex() -> s32 program_index
|
||||||
public ResultCode GetPreviousProgramIndex(ServiceCtx context)
|
public ResultCode GetPreviousProgramIndex(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -560,7 +560,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(130)] // 8.0.0+
|
[CommandCmif(130)] // 8.0.0+
|
||||||
// GetGpuErrorDetectedSystemEvent() -> handle<copy>
|
// GetGpuErrorDetectedSystemEvent() -> handle<copy>
|
||||||
public ResultCode GetGpuErrorDetectedSystemEvent(ServiceCtx context)
|
public ResultCode GetGpuErrorDetectedSystemEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -581,7 +581,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(140)] // 9.0.0+
|
[CommandCmif(140)] // 9.0.0+
|
||||||
// GetFriendInvitationStorageChannelEvent() -> handle<copy>
|
// GetFriendInvitationStorageChannelEvent() -> handle<copy>
|
||||||
public ResultCode GetFriendInvitationStorageChannelEvent(ServiceCtx context)
|
public ResultCode GetFriendInvitationStorageChannelEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -598,7 +598,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(141)] // 9.0.0+
|
[CommandCmif(141)] // 9.0.0+
|
||||||
// TryPopFromFriendInvitationStorageChannel() -> object<nn::am::service::IStorage>
|
// TryPopFromFriendInvitationStorageChannel() -> object<nn::am::service::IStorage>
|
||||||
public ResultCode TryPopFromFriendInvitationStorageChannel(ServiceCtx context)
|
public ResultCode TryPopFromFriendInvitationStorageChannel(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -612,7 +612,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.NotAvailable;
|
return ResultCode.NotAvailable;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(150)] // 9.0.0+
|
[CommandCmif(150)] // 9.0.0+
|
||||||
// GetNotificationStorageChannelEvent() -> handle<copy>
|
// GetNotificationStorageChannelEvent() -> handle<copy>
|
||||||
public ResultCode GetNotificationStorageChannelEvent(ServiceCtx context)
|
public ResultCode GetNotificationStorageChannelEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -629,7 +629,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(160)] // 9.0.0+
|
[CommandCmif(160)] // 9.0.0+
|
||||||
// GetHealthWarningDisappearedSystemEvent() -> handle<copy>
|
// GetHealthWarningDisappearedSystemEvent() -> handle<copy>
|
||||||
public ResultCode GetHealthWarningDisappearedSystemEvent(ServiceCtx context)
|
public ResultCode GetHealthWarningDisappearedSystemEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -646,7 +646,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1001)] // 10.0.0+
|
[CommandCmif(1001)] // 10.0.0+
|
||||||
// PrepareForJit()
|
// PrepareForJit()
|
||||||
public ResultCode PrepareForJit(ServiceCtx context)
|
public ResultCode PrepareForJit(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -12,7 +12,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
|||||||
_pid = pid;
|
_pid = pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
|
// GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
|
||||||
public ResultCode GetCommonStateGetter(ServiceCtx context)
|
public ResultCode GetCommonStateGetter(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -21,7 +21,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetSelfController() -> object<nn::am::service::ISelfController>
|
// GetSelfController() -> object<nn::am::service::ISelfController>
|
||||||
public ResultCode GetSelfController(ServiceCtx context)
|
public ResultCode GetSelfController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -30,7 +30,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// GetWindowController() -> object<nn::am::service::IWindowController>
|
// GetWindowController() -> object<nn::am::service::IWindowController>
|
||||||
public ResultCode GetWindowController(ServiceCtx context)
|
public ResultCode GetWindowController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -39,7 +39,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// GetAudioController() -> object<nn::am::service::IAudioController>
|
// GetAudioController() -> object<nn::am::service::IAudioController>
|
||||||
public ResultCode GetAudioController(ServiceCtx context)
|
public ResultCode GetAudioController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -48,7 +48,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// GetDisplayController() -> object<nn::am::service::IDisplayController>
|
// GetDisplayController() -> object<nn::am::service::IDisplayController>
|
||||||
public ResultCode GetDisplayController(ServiceCtx context)
|
public ResultCode GetDisplayController(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -57,7 +57,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)]
|
[CommandCmif(11)]
|
||||||
// GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
|
// GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
|
||||||
public ResultCode GetLibraryAppletCreator(ServiceCtx context)
|
public ResultCode GetLibraryAppletCreator(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -66,7 +66,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(20)]
|
[CommandCmif(20)]
|
||||||
// GetApplicationFunctions() -> object<nn::am::service::IApplicationFunctions>
|
// GetApplicationFunctions() -> object<nn::am::service::IApplicationFunctions>
|
||||||
public ResultCode GetApplicationFunctions(ServiceCtx context)
|
public ResultCode GetApplicationFunctions(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -75,7 +75,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1000)]
|
[CommandCmif(1000)]
|
||||||
// GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
|
// GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
|
||||||
public ResultCode GetDebugFunctions(ServiceCtx context)
|
public ResultCode GetDebugFunctions(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -7,7 +7,7 @@ namespace Ryujinx.HLE.HOS.Services.Am
|
|||||||
{
|
{
|
||||||
public IApplicationProxyService(ServiceCtx context) { }
|
public IApplicationProxyService(ServiceCtx context) { }
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// OpenApplicationProxy(u64, pid, handle<copy>) -> object<nn::am::service::IApplicationProxy>
|
// OpenApplicationProxy(u64, pid, handle<copy>) -> object<nn::am::service::IApplicationProxy>
|
||||||
public ResultCode OpenApplicationProxy(ServiceCtx context)
|
public ResultCode OpenApplicationProxy(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -8,7 +8,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
protected abstract PerformanceMode GetPerformanceMode();
|
protected abstract PerformanceMode GetPerformanceMode();
|
||||||
protected abstract bool IsCpuOverclockEnabled();
|
protected abstract bool IsCpuOverclockEnabled();
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// OpenSession() -> object<nn::apm::ISession>
|
// OpenSession() -> object<nn::apm::ISession>
|
||||||
public ResultCode OpenSession(ServiceCtx context)
|
public ResultCode OpenSession(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -22,7 +22,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetPerformanceMode() -> nn::apm::PerformanceMode
|
// GetPerformanceMode() -> nn::apm::PerformanceMode
|
||||||
public ResultCode GetPerformanceMode(ServiceCtx context)
|
public ResultCode GetPerformanceMode(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -31,7 +31,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(6)] // 7.0.0+
|
[CommandCmif(6)] // 7.0.0+
|
||||||
// IsCpuOverclockEnabled() -> bool
|
// IsCpuOverclockEnabled() -> bool
|
||||||
public ResultCode IsCpuOverclockEnabled(ServiceCtx context)
|
public ResultCode IsCpuOverclockEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -7,7 +7,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
{
|
{
|
||||||
public IManagerPrivileged(ServiceCtx context) { }
|
public IManagerPrivileged(ServiceCtx context) { }
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// OpenSession() -> object<nn::apm::ISession>
|
// OpenSession() -> object<nn::apm::ISession>
|
||||||
public ResultCode OpenSession(ServiceCtx context)
|
public ResultCode OpenSession(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -8,7 +8,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
protected abstract ResultCode GetPerformanceConfiguration(PerformanceMode performanceMode, out PerformanceConfiguration performanceConfiguration);
|
protected abstract ResultCode GetPerformanceConfiguration(PerformanceMode performanceMode, out PerformanceConfiguration performanceConfiguration);
|
||||||
protected abstract void SetCpuOverclockEnabled(bool enabled);
|
protected abstract void SetCpuOverclockEnabled(bool enabled);
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// SetPerformanceConfiguration(nn::apm::PerformanceMode, nn::apm::PerformanceConfiguration)
|
// SetPerformanceConfiguration(nn::apm::PerformanceMode, nn::apm::PerformanceConfiguration)
|
||||||
public ResultCode SetPerformanceConfiguration(ServiceCtx context)
|
public ResultCode SetPerformanceConfiguration(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -18,7 +18,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
return SetPerformanceConfiguration(performanceMode, performanceConfiguration);
|
return SetPerformanceConfiguration(performanceMode, performanceConfiguration);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetPerformanceConfiguration(nn::apm::PerformanceMode) -> nn::apm::PerformanceConfiguration
|
// GetPerformanceConfiguration(nn::apm::PerformanceMode) -> nn::apm::PerformanceConfiguration
|
||||||
public ResultCode GetPerformanceConfiguration(ServiceCtx context)
|
public ResultCode GetPerformanceConfiguration(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -31,7 +31,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)] // 8.0.0+
|
[CommandCmif(2)] // 8.0.0+
|
||||||
// SetCpuOverclockEnabled(bool)
|
// SetCpuOverclockEnabled(bool)
|
||||||
public ResultCode SetCpuOverclockEnabled(ServiceCtx context)
|
public ResultCode SetCpuOverclockEnabled(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -8,7 +8,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
internal abstract void SetCpuBoostMode(CpuBoostMode cpuBoostMode);
|
internal abstract void SetCpuBoostMode(CpuBoostMode cpuBoostMode);
|
||||||
protected abstract PerformanceConfiguration GetCurrentPerformanceConfiguration();
|
protected abstract PerformanceConfiguration GetCurrentPerformanceConfiguration();
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// RequestPerformanceMode(nn::apm::PerformanceMode)
|
// RequestPerformanceMode(nn::apm::PerformanceMode)
|
||||||
public ResultCode RequestPerformanceMode(ServiceCtx context)
|
public ResultCode RequestPerformanceMode(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -19,7 +19,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(6)] // 7.0.0+
|
[CommandCmif(6)] // 7.0.0+
|
||||||
// SetCpuBoostMode(nn::apm::CpuBootMode)
|
// SetCpuBoostMode(nn::apm::CpuBootMode)
|
||||||
public ResultCode SetCpuBoostMode(ServiceCtx context)
|
public ResultCode SetCpuBoostMode(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -30,7 +30,7 @@ namespace Ryujinx.HLE.HOS.Services.Apm
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(7)] // 7.0.0+
|
[CommandCmif(7)] // 7.0.0+
|
||||||
// GetCurrentPerformanceConfiguration() -> nn::apm::PerformanceConfiguration
|
// GetCurrentPerformanceConfiguration() -> nn::apm::PerformanceConfiguration
|
||||||
public ResultCode GetCurrentPerformanceConfiguration(ServiceCtx context)
|
public ResultCode GetCurrentPerformanceConfiguration(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -18,7 +18,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
_impl = impl;
|
_impl = impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetAudioInState() -> u32 state
|
// GetAudioInState() -> u32 state
|
||||||
public ResultCode GetAudioInState(ServiceCtx context)
|
public ResultCode GetAudioInState(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -27,21 +27,21 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// Start()
|
// Start()
|
||||||
public ResultCode Start(ServiceCtx context)
|
public ResultCode Start(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _impl.Start();
|
return _impl.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// Stop()
|
// Stop()
|
||||||
public ResultCode StopAudioIn(ServiceCtx context)
|
public ResultCode StopAudioIn(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _impl.Stop();
|
return _impl.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// AppendAudioInBuffer(u64 tag, buffer<nn::audio::AudioInBuffer, 5>)
|
// AppendAudioInBuffer(u64 tag, buffer<nn::audio::AudioInBuffer, 5>)
|
||||||
public ResultCode AppendAudioInBuffer(ServiceCtx context)
|
public ResultCode AppendAudioInBuffer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -54,7 +54,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return _impl.AppendBuffer(bufferTag, ref data);
|
return _impl.AppendBuffer(bufferTag, ref data);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// RegisterBufferEvent() -> handle<copy>
|
// RegisterBufferEvent() -> handle<copy>
|
||||||
public ResultCode RegisterBufferEvent(ServiceCtx context)
|
public ResultCode RegisterBufferEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -70,7 +70,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)]
|
[CommandCmif(5)]
|
||||||
// GetReleasedAudioInBuffers() -> (u32 count, buffer<u64, 6> tags)
|
// GetReleasedAudioInBuffers() -> (u32 count, buffer<u64, 6> tags)
|
||||||
public ResultCode GetReleasedAudioInBuffers(ServiceCtx context)
|
public ResultCode GetReleasedAudioInBuffers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -87,7 +87,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(6)]
|
[CommandCmif(6)]
|
||||||
// ContainsAudioInBuffer(u64 tag) -> b8
|
// ContainsAudioInBuffer(u64 tag) -> b8
|
||||||
public ResultCode ContainsAudioInBuffer(ServiceCtx context)
|
public ResultCode ContainsAudioInBuffer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -98,7 +98,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(7)] // 3.0.0+
|
[CommandCmif(7)] // 3.0.0+
|
||||||
// AppendUacInBuffer(u64 tag, handle<copy, unknown>, buffer<nn::audio::AudioInBuffer, 5>)
|
// AppendUacInBuffer(u64 tag, handle<copy, unknown>, buffer<nn::audio::AudioInBuffer, 5>)
|
||||||
public ResultCode AppendUacInBuffer(ServiceCtx context)
|
public ResultCode AppendUacInBuffer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -112,7 +112,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return _impl.AppendUacBuffer(bufferTag, ref data, handle);
|
return _impl.AppendUacBuffer(bufferTag, ref data, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(8)] // 3.0.0+
|
[CommandCmif(8)] // 3.0.0+
|
||||||
// AppendAudioInBufferAuto(u64 tag, buffer<nn::audio::AudioInBuffer, 0x21>)
|
// AppendAudioInBufferAuto(u64 tag, buffer<nn::audio::AudioInBuffer, 0x21>)
|
||||||
public ResultCode AppendAudioInBufferAuto(ServiceCtx context)
|
public ResultCode AppendAudioInBufferAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -125,7 +125,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return _impl.AppendBuffer(bufferTag, ref data);
|
return _impl.AppendBuffer(bufferTag, ref data);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(9)] // 3.0.0+
|
[CommandCmif(9)] // 3.0.0+
|
||||||
// GetReleasedAudioInBuffersAuto() -> (u32 count, buffer<u64, 0x22> tags)
|
// GetReleasedAudioInBuffersAuto() -> (u32 count, buffer<u64, 0x22> tags)
|
||||||
public ResultCode GetReleasedAudioInBuffersAuto(ServiceCtx context)
|
public ResultCode GetReleasedAudioInBuffersAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -141,7 +141,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)] // 3.0.0+
|
[CommandCmif(10)] // 3.0.0+
|
||||||
// AppendUacInBufferAuto(u64 tag, handle<copy, event>, buffer<nn::audio::AudioInBuffer, 0x21>)
|
// AppendUacInBufferAuto(u64 tag, handle<copy, event>, buffer<nn::audio::AudioInBuffer, 0x21>)
|
||||||
public ResultCode AppendUacInBufferAuto(ServiceCtx context)
|
public ResultCode AppendUacInBufferAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -155,7 +155,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return _impl.AppendUacBuffer(bufferTag, ref data, handle);
|
return _impl.AppendUacBuffer(bufferTag, ref data, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)] // 4.0.0+
|
[CommandCmif(11)] // 4.0.0+
|
||||||
// GetAudioInBufferCount() -> u32
|
// GetAudioInBufferCount() -> u32
|
||||||
public ResultCode GetAudioInBufferCount(ServiceCtx context)
|
public ResultCode GetAudioInBufferCount(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -164,7 +164,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(12)] // 4.0.0+
|
[CommandCmif(12)] // 4.0.0+
|
||||||
// SetAudioInVolume(s32)
|
// SetAudioInVolume(s32)
|
||||||
public ResultCode SetAudioInVolume(ServiceCtx context)
|
public ResultCode SetAudioInVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -175,7 +175,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(13)] // 4.0.0+
|
[CommandCmif(13)] // 4.0.0+
|
||||||
// GetAudioInVolume() -> s32
|
// GetAudioInVolume() -> s32
|
||||||
public ResultCode GetAudioInVolume(ServiceCtx context)
|
public ResultCode GetAudioInVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -184,7 +184,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(14)] // 6.0.0+
|
[CommandCmif(14)] // 6.0.0+
|
||||||
// FlushAudioInBuffers() -> b8
|
// FlushAudioInBuffers() -> b8
|
||||||
public ResultCode FlushAudioInBuffers(ServiceCtx context)
|
public ResultCode FlushAudioInBuffers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -21,7 +21,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
_impl = impl;
|
_impl = impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// ListAudioIns() -> (u32, buffer<bytes, 6>)
|
// ListAudioIns() -> (u32, buffer<bytes, 6>)
|
||||||
public ResultCode ListAudioIns(ServiceCtx context)
|
public ResultCode ListAudioIns(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -57,7 +57,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// OpenAudioIn(AudioInInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process>, buffer<bytes, 5> name)
|
// OpenAudioIn(AudioInInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process>, buffer<bytes, 5> name)
|
||||||
// -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioIn>, buffer<bytes, 6> name)
|
// -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioIn>, buffer<bytes, 6> name)
|
||||||
public ResultCode OpenAudioIn(ServiceCtx context)
|
public ResultCode OpenAudioIn(ServiceCtx context)
|
||||||
@@ -92,7 +92,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)] // 3.0.0+
|
[CommandCmif(2)] // 3.0.0+
|
||||||
// ListAudioInsAuto() -> (u32, buffer<bytes, 0x22>)
|
// ListAudioInsAuto() -> (u32, buffer<bytes, 0x22>)
|
||||||
public ResultCode ListAudioInsAuto(ServiceCtx context)
|
public ResultCode ListAudioInsAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -127,7 +127,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)] // 3.0.0+
|
[CommandCmif(3)] // 3.0.0+
|
||||||
// OpenAudioInAuto(AudioInInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process>, buffer<bytes, 0x21>)
|
// OpenAudioInAuto(AudioInInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process>, buffer<bytes, 0x21>)
|
||||||
// -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioIn>, buffer<bytes, 0x22> name)
|
// -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioIn>, buffer<bytes, 0x22> name)
|
||||||
public ResultCode OpenAudioInAuto(ServiceCtx context)
|
public ResultCode OpenAudioInAuto(ServiceCtx context)
|
||||||
@@ -159,7 +159,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)] // 3.0.0+
|
[CommandCmif(4)] // 3.0.0+
|
||||||
// ListAudioInsAutoFiltered() -> (u32, buffer<bytes, 0x22>)
|
// ListAudioInsAutoFiltered() -> (u32, buffer<bytes, 0x22>)
|
||||||
public ResultCode ListAudioInsAutoFiltered(ServiceCtx context)
|
public ResultCode ListAudioInsAutoFiltered(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -194,7 +194,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)] // 5.0.0+
|
[CommandCmif(5)] // 5.0.0+
|
||||||
// OpenAudioInProtocolSpecified(b64 protocol_specified_related, AudioInInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process>, buffer<bytes, 5> name)
|
// OpenAudioInProtocolSpecified(b64 protocol_specified_related, AudioInInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process>, buffer<bytes, 5> name)
|
||||||
// -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioIn>, buffer<bytes, 6> name)
|
// -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioIn>, buffer<bytes, 6> name)
|
||||||
public ResultCode OpenAudioInProtocolSpecified(ServiceCtx context)
|
public ResultCode OpenAudioInProtocolSpecified(ServiceCtx context)
|
||||||
|
@@ -18,7 +18,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
_impl = impl;
|
_impl = impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetAudioOutState() -> u32 state
|
// GetAudioOutState() -> u32 state
|
||||||
public ResultCode GetAudioOutState(ServiceCtx context)
|
public ResultCode GetAudioOutState(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -27,21 +27,21 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// Start()
|
// Start()
|
||||||
public ResultCode Start(ServiceCtx context)
|
public ResultCode Start(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _impl.Start();
|
return _impl.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// Stop()
|
// Stop()
|
||||||
public ResultCode Stop(ServiceCtx context)
|
public ResultCode Stop(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _impl.Stop();
|
return _impl.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// AppendAudioOutBuffer(u64 bufferTag, buffer<nn::audio::AudioOutBuffer, 5> buffer)
|
// AppendAudioOutBuffer(u64 bufferTag, buffer<nn::audio::AudioOutBuffer, 5> buffer)
|
||||||
public ResultCode AppendAudioOutBuffer(ServiceCtx context)
|
public ResultCode AppendAudioOutBuffer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -54,7 +54,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
return _impl.AppendBuffer(bufferTag, ref data);
|
return _impl.AppendBuffer(bufferTag, ref data);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// RegisterBufferEvent() -> handle<copy>
|
// RegisterBufferEvent() -> handle<copy>
|
||||||
public ResultCode RegisterBufferEvent(ServiceCtx context)
|
public ResultCode RegisterBufferEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -70,7 +70,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)]
|
[CommandCmif(5)]
|
||||||
// GetReleasedAudioOutBuffers() -> (u32 count, buffer<u64, 6> tags)
|
// GetReleasedAudioOutBuffers() -> (u32 count, buffer<u64, 6> tags)
|
||||||
public ResultCode GetReleasedAudioOutBuffers(ServiceCtx context)
|
public ResultCode GetReleasedAudioOutBuffers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -87,7 +87,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(6)]
|
[CommandCmif(6)]
|
||||||
// ContainsAudioOutBuffer(u64 tag) -> b8
|
// ContainsAudioOutBuffer(u64 tag) -> b8
|
||||||
public ResultCode ContainsAudioOutBuffer(ServiceCtx context)
|
public ResultCode ContainsAudioOutBuffer(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -98,7 +98,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(7)] // 3.0.0+
|
[CommandCmif(7)] // 3.0.0+
|
||||||
// AppendAudioOutBufferAuto(u64 tag, buffer<nn::audio::AudioOutBuffer, 0x21>)
|
// AppendAudioOutBufferAuto(u64 tag, buffer<nn::audio::AudioOutBuffer, 0x21>)
|
||||||
public ResultCode AppendAudioOutBufferAuto(ServiceCtx context)
|
public ResultCode AppendAudioOutBufferAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -111,7 +111,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
return _impl.AppendBuffer(bufferTag, ref data);
|
return _impl.AppendBuffer(bufferTag, ref data);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(8)] // 3.0.0+
|
[CommandCmif(8)] // 3.0.0+
|
||||||
// GetReleasedAudioOutBuffersAuto() -> (u32 count, buffer<u64, 0x22> tags)
|
// GetReleasedAudioOutBuffersAuto() -> (u32 count, buffer<u64, 0x22> tags)
|
||||||
public ResultCode GetReleasedAudioOutBuffersAuto(ServiceCtx context)
|
public ResultCode GetReleasedAudioOutBuffersAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -127,7 +127,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(9)] // 4.0.0+
|
[CommandCmif(9)] // 4.0.0+
|
||||||
// GetAudioOutBufferCount() -> u32
|
// GetAudioOutBufferCount() -> u32
|
||||||
public ResultCode GetAudioOutBufferCount(ServiceCtx context)
|
public ResultCode GetAudioOutBufferCount(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -136,7 +136,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)] // 4.0.0+
|
[CommandCmif(10)] // 4.0.0+
|
||||||
// GetAudioOutPlayedSampleCount() -> u64
|
// GetAudioOutPlayedSampleCount() -> u64
|
||||||
public ResultCode GetAudioOutPlayedSampleCount(ServiceCtx context)
|
public ResultCode GetAudioOutPlayedSampleCount(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -145,7 +145,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)] // 4.0.0+
|
[CommandCmif(11)] // 4.0.0+
|
||||||
// FlushAudioOutBuffers() -> b8
|
// FlushAudioOutBuffers() -> b8
|
||||||
public ResultCode FlushAudioOutBuffers(ServiceCtx context)
|
public ResultCode FlushAudioOutBuffers(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -154,7 +154,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(12)] // 6.0.0+
|
[CommandCmif(12)] // 6.0.0+
|
||||||
// SetAudioOutVolume(s32)
|
// SetAudioOutVolume(s32)
|
||||||
public ResultCode SetAudioOutVolume(ServiceCtx context)
|
public ResultCode SetAudioOutVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -165,7 +165,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(13)] // 6.0.0+
|
[CommandCmif(13)] // 6.0.0+
|
||||||
// GetAudioOutVolume() -> s32
|
// GetAudioOutVolume() -> s32
|
||||||
public ResultCode GetAudioOutVolume(ServiceCtx context)
|
public ResultCode GetAudioOutVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -21,7 +21,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
_impl = impl;
|
_impl = impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// ListAudioOuts() -> (u32, buffer<bytes, 6>)
|
// ListAudioOuts() -> (u32, buffer<bytes, 6>)
|
||||||
public ResultCode ListAudioOuts(ServiceCtx context)
|
public ResultCode ListAudioOuts(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -57,7 +57,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// OpenAudioOut(AudioOutInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process> process_handle, buffer<bytes, 5> name_in)
|
// OpenAudioOut(AudioOutInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process> process_handle, buffer<bytes, 5> name_in)
|
||||||
// -> (AudioOutInputConfiguration output_config, object<nn::audio::detail::IAudioOut>, buffer<bytes, 6> name_out)
|
// -> (AudioOutInputConfiguration output_config, object<nn::audio::detail::IAudioOut>, buffer<bytes, 6> name_out)
|
||||||
public ResultCode OpenAudioOut(ServiceCtx context)
|
public ResultCode OpenAudioOut(ServiceCtx context)
|
||||||
@@ -92,7 +92,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return resultCode;
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)] // 3.0.0+
|
[CommandCmif(2)] // 3.0.0+
|
||||||
// ListAudioOutsAuto() -> (u32, buffer<bytes, 0x22>)
|
// ListAudioOutsAuto() -> (u32, buffer<bytes, 0x22>)
|
||||||
public ResultCode ListAudioOutsAuto(ServiceCtx context)
|
public ResultCode ListAudioOutsAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -127,7 +127,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)] // 3.0.0+
|
[CommandCmif(3)] // 3.0.0+
|
||||||
// OpenAudioOut(AudioOutInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process> process_handle, buffer<bytes, 0x21> name_in)
|
// OpenAudioOut(AudioOutInputConfiguration input_config, nn::applet::AppletResourceUserId, pid, handle<copy, process> process_handle, buffer<bytes, 0x21> name_in)
|
||||||
// -> (AudioOutInputConfiguration output_config, object<nn::audio::detail::IAudioOut>, buffer<bytes, 0x22> name_out)
|
// -> (AudioOutInputConfiguration output_config, object<nn::audio::detail::IAudioOut>, buffer<bytes, 0x22> name_out)
|
||||||
public ResultCode OpenAudioOutAuto(ServiceCtx context)
|
public ResultCode OpenAudioOutAuto(ServiceCtx context)
|
||||||
|
@@ -19,7 +19,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
_impl = impl;
|
_impl = impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// ListAudioDeviceName() -> (u32, buffer<bytes, 6>)
|
// ListAudioDeviceName() -> (u32, buffer<bytes, 6>)
|
||||||
public ResultCode ListAudioDeviceName(ServiceCtx context)
|
public ResultCode ListAudioDeviceName(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -53,7 +53,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// SetAudioDeviceOutputVolume(f32 volume, buffer<bytes, 5> name)
|
// SetAudioDeviceOutputVolume(f32 volume, buffer<bytes, 5> name)
|
||||||
public ResultCode SetAudioDeviceOutputVolume(ServiceCtx context)
|
public ResultCode SetAudioDeviceOutputVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -67,7 +67,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return _impl.SetAudioDeviceOutputVolume(deviceName, volume);
|
return _impl.SetAudioDeviceOutputVolume(deviceName, volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// GetAudioDeviceOutputVolume(buffer<bytes, 5> name) -> f32 volume
|
// GetAudioDeviceOutputVolume(buffer<bytes, 5> name) -> f32 volume
|
||||||
public ResultCode GetAudioDeviceOutputVolume(ServiceCtx context)
|
public ResultCode GetAudioDeviceOutputVolume(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -86,7 +86,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// GetActiveAudioDeviceName() -> buffer<bytes, 6>
|
// GetActiveAudioDeviceName() -> buffer<bytes, 6>
|
||||||
public ResultCode GetActiveAudioDeviceName(ServiceCtx context)
|
public ResultCode GetActiveAudioDeviceName(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -109,7 +109,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// QueryAudioDeviceSystemEvent() -> handle<copy, event>
|
// QueryAudioDeviceSystemEvent() -> handle<copy, event>
|
||||||
public ResultCode QueryAudioDeviceSystemEvent(ServiceCtx context)
|
public ResultCode QueryAudioDeviceSystemEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -127,7 +127,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)]
|
[CommandCmif(5)]
|
||||||
// GetActiveChannelCount() -> u32
|
// GetActiveChannelCount() -> u32
|
||||||
public ResultCode GetActiveChannelCount(ServiceCtx context)
|
public ResultCode GetActiveChannelCount(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -138,7 +138,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(6)] // 3.0.0+
|
[CommandCmif(6)] // 3.0.0+
|
||||||
// ListAudioDeviceNameAuto() -> (u32, buffer<bytes, 0x22>)
|
// ListAudioDeviceNameAuto() -> (u32, buffer<bytes, 0x22>)
|
||||||
public ResultCode ListAudioDeviceNameAuto(ServiceCtx context)
|
public ResultCode ListAudioDeviceNameAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -171,7 +171,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(7)] // 3.0.0+
|
[CommandCmif(7)] // 3.0.0+
|
||||||
// SetAudioDeviceOutputVolumeAuto(f32 volume, buffer<bytes, 0x21> name)
|
// SetAudioDeviceOutputVolumeAuto(f32 volume, buffer<bytes, 0x21> name)
|
||||||
public ResultCode SetAudioDeviceOutputVolumeAuto(ServiceCtx context)
|
public ResultCode SetAudioDeviceOutputVolumeAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -184,7 +184,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return _impl.SetAudioDeviceOutputVolume(deviceName, volume);
|
return _impl.SetAudioDeviceOutputVolume(deviceName, volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(8)] // 3.0.0+
|
[CommandCmif(8)] // 3.0.0+
|
||||||
// GetAudioDeviceOutputVolumeAuto(buffer<bytes, 0x21> name) -> f32
|
// GetAudioDeviceOutputVolumeAuto(buffer<bytes, 0x21> name) -> f32
|
||||||
public ResultCode GetAudioDeviceOutputVolumeAuto(ServiceCtx context)
|
public ResultCode GetAudioDeviceOutputVolumeAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -202,7 +202,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)] // 3.0.0+
|
[CommandCmif(10)] // 3.0.0+
|
||||||
// GetActiveAudioDeviceNameAuto() -> buffer<bytes, 0x22>
|
// GetActiveAudioDeviceNameAuto() -> buffer<bytes, 0x22>
|
||||||
public ResultCode GetActiveAudioDeviceNameAuto(ServiceCtx context)
|
public ResultCode GetActiveAudioDeviceNameAuto(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -224,7 +224,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)] // 3.0.0+
|
[CommandCmif(11)] // 3.0.0+
|
||||||
// QueryAudioDeviceInputEvent() -> handle<copy, event>
|
// QueryAudioDeviceInputEvent() -> handle<copy, event>
|
||||||
public ResultCode QueryAudioDeviceInputEvent(ServiceCtx context)
|
public ResultCode QueryAudioDeviceInputEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -242,7 +242,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(12)] // 3.0.0+
|
[CommandCmif(12)] // 3.0.0+
|
||||||
// QueryAudioDeviceOutputEvent() -> handle<copy, event>
|
// QueryAudioDeviceOutputEvent() -> handle<copy, event>
|
||||||
public ResultCode QueryAudioDeviceOutputEvent(ServiceCtx context)
|
public ResultCode QueryAudioDeviceOutputEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -260,7 +260,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(13)] // 13.0.0+
|
[CommandCmif(13)] // 13.0.0+
|
||||||
// GetActiveAudioOutputDeviceName() -> buffer<bytes, 6>
|
// GetActiveAudioOutputDeviceName() -> buffer<bytes, 6>
|
||||||
public ResultCode GetActiveAudioOutputDeviceName(ServiceCtx context)
|
public ResultCode GetActiveAudioOutputDeviceName(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -283,7 +283,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(14)] // 13.0.0+
|
[CommandCmif(14)] // 13.0.0+
|
||||||
// ListAudioOutputDeviceName() -> (u32, buffer<bytes, 6>)
|
// ListAudioOutputDeviceName() -> (u32, buffer<bytes, 6>)
|
||||||
public ResultCode ListAudioOutputDeviceName(ServiceCtx context)
|
public ResultCode ListAudioOutputDeviceName(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -16,7 +16,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
_impl = impl;
|
_impl = impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// GetSampleRate() -> u32
|
// GetSampleRate() -> u32
|
||||||
public ResultCode GetSampleRate(ServiceCtx context)
|
public ResultCode GetSampleRate(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -25,7 +25,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetSampleCount() -> u32
|
// GetSampleCount() -> u32
|
||||||
public ResultCode GetSampleCount(ServiceCtx context)
|
public ResultCode GetSampleCount(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -34,7 +34,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// GetMixBufferCount() -> u32
|
// GetMixBufferCount() -> u32
|
||||||
public ResultCode GetMixBufferCount(ServiceCtx context)
|
public ResultCode GetMixBufferCount(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -43,7 +43,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(3)]
|
[CommandCmif(3)]
|
||||||
// GetState() -> u32
|
// GetState() -> u32
|
||||||
public ResultCode GetState(ServiceCtx context)
|
public ResultCode GetState(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -52,7 +52,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)]
|
[CommandCmif(4)]
|
||||||
// RequestUpdate(buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 5> input)
|
// RequestUpdate(buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 5> input)
|
||||||
// -> (buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 6> output, buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 6> performanceOutput)
|
// -> (buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 6> output, buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 6> performanceOutput)
|
||||||
public ResultCode RequestUpdate(ServiceCtx context)
|
public ResultCode RequestUpdate(ServiceCtx context)
|
||||||
@@ -89,21 +89,21 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)]
|
[CommandCmif(5)]
|
||||||
// Start()
|
// Start()
|
||||||
public ResultCode Start(ServiceCtx context)
|
public ResultCode Start(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _impl.Start();
|
return _impl.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(6)]
|
[CommandCmif(6)]
|
||||||
// Stop()
|
// Stop()
|
||||||
public ResultCode Stop(ServiceCtx context)
|
public ResultCode Stop(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _impl.Stop();
|
return _impl.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(7)]
|
[CommandCmif(7)]
|
||||||
// QuerySystemEvent() -> handle<copy, event>
|
// QuerySystemEvent() -> handle<copy, event>
|
||||||
public ResultCode QuerySystemEvent(ServiceCtx context)
|
public ResultCode QuerySystemEvent(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -122,7 +122,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(8)]
|
[CommandCmif(8)]
|
||||||
// SetAudioRendererRenderingTimeLimit(u32 limit)
|
// SetAudioRendererRenderingTimeLimit(u32 limit)
|
||||||
public ResultCode SetAudioRendererRenderingTimeLimit(ServiceCtx context)
|
public ResultCode SetAudioRendererRenderingTimeLimit(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -133,7 +133,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(9)]
|
[CommandCmif(9)]
|
||||||
// GetAudioRendererRenderingTimeLimit() -> u32 limit
|
// GetAudioRendererRenderingTimeLimit() -> u32 limit
|
||||||
public ResultCode GetAudioRendererRenderingTimeLimit(ServiceCtx context)
|
public ResultCode GetAudioRendererRenderingTimeLimit(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -144,7 +144,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(10)] // 3.0.0+
|
[CommandCmif(10)] // 3.0.0+
|
||||||
// RequestUpdateAuto(buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x21> input)
|
// RequestUpdateAuto(buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x21> input)
|
||||||
// -> (buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x22> output, buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x22> performanceOutput)
|
// -> (buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x22> output, buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x22> performanceOutput)
|
||||||
public ResultCode RequestUpdateAuto(ServiceCtx context)
|
public ResultCode RequestUpdateAuto(ServiceCtx context)
|
||||||
@@ -172,14 +172,14 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(11)] // 3.0.0+
|
[CommandCmif(11)] // 3.0.0+
|
||||||
// ExecuteAudioRendererRendering()
|
// ExecuteAudioRendererRendering()
|
||||||
public ResultCode ExecuteAudioRendererRendering(ServiceCtx context)
|
public ResultCode ExecuteAudioRendererRendering(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return _impl.ExecuteAudioRendererRendering();
|
return _impl.ExecuteAudioRendererRendering();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(12)] // 15.0.0+
|
[CommandCmif(12)] // 15.0.0+
|
||||||
// SetVoiceDropParameter(f32 voiceDropParameter)
|
// SetVoiceDropParameter(f32 voiceDropParameter)
|
||||||
public ResultCode SetVoiceDropParameter(ServiceCtx context)
|
public ResultCode SetVoiceDropParameter(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -190,7 +190,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(13)] // 15.0.0+
|
[CommandCmif(13)] // 15.0.0+
|
||||||
// GetVoiceDropParameter() -> f32 voiceDropParameter
|
// GetVoiceDropParameter() -> f32 voiceDropParameter
|
||||||
public ResultCode GetVoiceDropParameter(ServiceCtx context)
|
public ResultCode GetVoiceDropParameter(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -209,4 +209,4 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -21,7 +21,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
_impl = impl;
|
_impl = impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// OpenAudioRenderer(nn::audio::detail::AudioRendererParameterInternal parameter, u64 workBufferSize, nn::applet::AppletResourceUserId appletResourceId, pid, handle<copy> workBuffer, handle<copy> processHandle)
|
// OpenAudioRenderer(nn::audio::detail::AudioRendererParameterInternal parameter, u64 workBufferSize, nn::applet::AppletResourceUserId appletResourceId, pid, handle<copy> workBuffer, handle<copy> processHandle)
|
||||||
// -> object<nn::audio::detail::IAudioRenderer>
|
// -> object<nn::audio::detail::IAudioRenderer>
|
||||||
public ResultCode OpenAudioRenderer(ServiceCtx context)
|
public ResultCode OpenAudioRenderer(ServiceCtx context)
|
||||||
@@ -54,7 +54,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(1)]
|
[CommandCmif(1)]
|
||||||
// GetWorkBufferSize(nn::audio::detail::AudioRendererParameterInternal parameter) -> u64 workBufferSize
|
// GetWorkBufferSize(nn::audio::detail::AudioRendererParameterInternal parameter) -> u64 workBufferSize
|
||||||
public ResultCode GetAudioRendererWorkBufferSize(ServiceCtx context)
|
public ResultCode GetAudioRendererWorkBufferSize(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -80,7 +80,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// GetAudioDeviceService(nn::applet::AppletResourceUserId) -> object<nn::audio::detail::IAudioDevice>
|
// GetAudioDeviceService(nn::applet::AppletResourceUserId) -> object<nn::audio::detail::IAudioDevice>
|
||||||
public ResultCode GetAudioDeviceService(ServiceCtx context)
|
public ResultCode GetAudioDeviceService(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -96,7 +96,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)] // 4.0.0+
|
[CommandCmif(4)] // 4.0.0+
|
||||||
// GetAudioDeviceServiceWithRevisionInfo(s32 revision, nn::applet::AppletResourceUserId appletResourceId) -> object<nn::audio::detail::IAudioDevice>
|
// GetAudioDeviceServiceWithRevisionInfo(s32 revision, nn::applet::AppletResourceUserId appletResourceId) -> object<nn::audio::detail::IAudioDevice>
|
||||||
public ResultCode GetAudioDeviceServiceWithRevisionInfo(ServiceCtx context)
|
public ResultCode GetAudioDeviceServiceWithRevisionInfo(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
@@ -21,35 +21,35 @@ namespace Ryujinx.HLE.HOS.Services.Audio.HardwareOpusDecoderManager
|
|||||||
_flags = flags;
|
_flags = flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(0)]
|
[CommandCmif(0)]
|
||||||
// DecodeInterleavedOld(buffer<unknown, 5>) -> (u32, u32, buffer<unknown, 6>)
|
// DecodeInterleavedOld(buffer<unknown, 5>) -> (u32, u32, buffer<unknown, 6>)
|
||||||
public ResultCode DecodeInterleavedOld(ServiceCtx context)
|
public ResultCode DecodeInterleavedOld(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset: false, withPerf: false);
|
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset: false, withPerf: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(2)]
|
[CommandCmif(2)]
|
||||||
// DecodeInterleavedForMultiStreamOld(buffer<unknown, 5>) -> (u32, u32, buffer<unknown, 6>)
|
// DecodeInterleavedForMultiStreamOld(buffer<unknown, 5>) -> (u32, u32, buffer<unknown, 6>)
|
||||||
public ResultCode DecodeInterleavedForMultiStreamOld(ServiceCtx context)
|
public ResultCode DecodeInterleavedForMultiStreamOld(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset: false, withPerf: false);
|
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset: false, withPerf: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(4)] // 6.0.0+
|
[CommandCmif(4)] // 6.0.0+
|
||||||
// DecodeInterleavedWithPerfOld(buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
// DecodeInterleavedWithPerfOld(buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
||||||
public ResultCode DecodeInterleavedWithPerfOld(ServiceCtx context)
|
public ResultCode DecodeInterleavedWithPerfOld(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset: false, withPerf: true);
|
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset: false, withPerf: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(5)] // 6.0.0+
|
[CommandCmif(5)] // 6.0.0+
|
||||||
// DecodeInterleavedForMultiStreamWithPerfOld(buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
// DecodeInterleavedForMultiStreamWithPerfOld(buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
||||||
public ResultCode DecodeInterleavedForMultiStreamWithPerfOld(ServiceCtx context)
|
public ResultCode DecodeInterleavedForMultiStreamWithPerfOld(ServiceCtx context)
|
||||||
{
|
{
|
||||||
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset: false, withPerf: true);
|
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset: false, withPerf: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(6)] // 6.0.0+
|
[CommandCmif(6)] // 6.0.0+
|
||||||
// DecodeInterleavedWithPerfAndResetOld(bool reset, buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
// DecodeInterleavedWithPerfAndResetOld(bool reset, buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
||||||
public ResultCode DecodeInterleavedWithPerfAndResetOld(ServiceCtx context)
|
public ResultCode DecodeInterleavedWithPerfAndResetOld(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -58,7 +58,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.HardwareOpusDecoderManager
|
|||||||
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset, withPerf: true);
|
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset, withPerf: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(7)] // 6.0.0+
|
[CommandCmif(7)] // 6.0.0+
|
||||||
// DecodeInterleavedForMultiStreamWithPerfAndResetOld(bool reset, buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
// DecodeInterleavedForMultiStreamWithPerfAndResetOld(bool reset, buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
||||||
public ResultCode DecodeInterleavedForMultiStreamWithPerfAndResetOld(ServiceCtx context)
|
public ResultCode DecodeInterleavedForMultiStreamWithPerfAndResetOld(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -67,7 +67,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.HardwareOpusDecoderManager
|
|||||||
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset, withPerf: true);
|
return DecodeInterleavedInternal(context, OpusDecoderFlags.None, reset, withPerf: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(8)] // 7.0.0+
|
[CommandCmif(8)] // 7.0.0+
|
||||||
// DecodeInterleaved(bool reset, buffer<unknown, 0x45>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
// DecodeInterleaved(bool reset, buffer<unknown, 0x45>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
||||||
public ResultCode DecodeInterleaved(ServiceCtx context)
|
public ResultCode DecodeInterleaved(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@@ -76,7 +76,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.HardwareOpusDecoderManager
|
|||||||
return DecodeInterleavedInternal(context, _flags, reset, withPerf: true);
|
return DecodeInterleavedInternal(context, _flags, reset, withPerf: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CommandHipc(9)] // 7.0.0+
|
[CommandCmif(9)] // 7.0.0+
|
||||||
// DecodeInterleavedForMultiStream(bool reset, buffer<unknown, 0x45>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
// DecodeInterleavedForMultiStream(bool reset, buffer<unknown, 0x45>) -> (u32, u32, u64, buffer<unknown, 0x46>)
|
||||||
public ResultCode DecodeInterleavedForMultiStream(ServiceCtx context)
|
public ResultCode DecodeInterleavedForMultiStream(ServiceCtx context)
|
||||||
{
|
{
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user