mirror of
https://github.com/ryujinx-mirror/ryujinx.git
synced 2024-12-23 02:25:45 +00:00
Misc cleanup (#708)
* Fix typos * Remove unneeded using statements * Enforce var style more * Remove redundant qualifiers * Fix some indentation * Disable naming warnings on files with external enum names * Fix build * Mass find & replace for comments with no spacing * Standardize todo capitalization and for/if spacing
This commit is contained in:
parent
10c74182ba
commit
b2b736abc2
205 changed files with 1020 additions and 1041 deletions
|
@ -10,7 +10,7 @@ namespace ChocolArm64.Decoders
|
||||||
{
|
{
|
||||||
uint pc = GetPc();
|
uint pc = GetPc();
|
||||||
|
|
||||||
//When the codition is never, the instruction is BLX to Thumb mode.
|
// When the condition is never, the instruction is BLX to Thumb mode.
|
||||||
if (Cond != Condition.Nv)
|
if (Cond != Condition.Nv)
|
||||||
{
|
{
|
||||||
pc &= ~3u;
|
pc &= ~3u;
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace ChocolArm64.Instructions
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
context.EmitLdint(InstEmit32Helper.GetRegisterAlias(context.Mode, register));
|
context.EmitLdint(GetRegisterAlias(context.Mode, register));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -229,7 +229,7 @@ namespace ChocolArm64.Instructions
|
||||||
|
|
||||||
context.Emit(OpCodes.Br, lblEnd);
|
context.Emit(OpCodes.Br, lblEnd);
|
||||||
|
|
||||||
//Address check passsed.
|
// Address check passed.
|
||||||
context.MarkLabel(lblEx);
|
context.MarkLabel(lblEx);
|
||||||
|
|
||||||
context.EmitLdarg(TranslatedSub.MemoryArgIdx);
|
context.EmitLdarg(TranslatedSub.MemoryArgIdx);
|
||||||
|
|
|
@ -30,22 +30,22 @@ namespace ChocolArm64.Memory
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool Reprotect(IntPtr address, ulong size, Memory.MemoryProtection protection)
|
public static bool Reprotect(IntPtr address, ulong size, MemoryProtection protection)
|
||||||
{
|
{
|
||||||
MmapProts prot = GetProtection(protection);
|
MmapProts prot = GetProtection(protection);
|
||||||
|
|
||||||
return Syscall.mprotect(address, size, prot) == 0;
|
return Syscall.mprotect(address, size, prot) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MmapProts GetProtection(Memory.MemoryProtection protection)
|
private static MmapProts GetProtection(MemoryProtection protection)
|
||||||
{
|
{
|
||||||
switch (protection)
|
switch (protection)
|
||||||
{
|
{
|
||||||
case Memory.MemoryProtection.None: return MmapProts.PROT_NONE;
|
case MemoryProtection.None: return MmapProts.PROT_NONE;
|
||||||
case Memory.MemoryProtection.Read: return MmapProts.PROT_READ;
|
case MemoryProtection.Read: return MmapProts.PROT_READ;
|
||||||
case Memory.MemoryProtection.ReadAndWrite: return MmapProts.PROT_READ | MmapProts.PROT_WRITE;
|
case MemoryProtection.ReadAndWrite: return MmapProts.PROT_READ | MmapProts.PROT_WRITE;
|
||||||
case Memory.MemoryProtection.ReadAndExecute: return MmapProts.PROT_READ | MmapProts.PROT_EXEC;
|
case MemoryProtection.ReadAndExecute: return MmapProts.PROT_READ | MmapProts.PROT_EXEC;
|
||||||
case Memory.MemoryProtection.Execute: return MmapProts.PROT_EXEC;
|
case MemoryProtection.Execute: return MmapProts.PROT_EXEC;
|
||||||
|
|
||||||
default: throw new ArgumentException($"Invalid permission \"{protection}\".");
|
default: throw new ArgumentException($"Invalid permission \"{protection}\".");
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace ChocolArm64.Translation
|
||||||
|
|
||||||
public TranslatedSub(DynamicMethod method, TranslationTier tier, bool rejit)
|
public TranslatedSub(DynamicMethod method, TranslationTier tier, bool rejit)
|
||||||
{
|
{
|
||||||
Method = method ?? throw new ArgumentNullException(nameof(method));;
|
Method = method ?? throw new ArgumentNullException(nameof(method));
|
||||||
Tier = tier;
|
Tier = tier;
|
||||||
_rejit = rejit;
|
_rejit = rejit;
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,7 +206,7 @@ namespace Ryujinx.Audio
|
||||||
return defaultAudioDevice;
|
return defaultAudioDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var i = 0; i < audioContext.BackendCount; i++)
|
for (int i = 0; i < audioContext.BackendCount; i++)
|
||||||
{
|
{
|
||||||
SoundIODevice audioDevice = audioContext.GetOutputDevice(i);
|
SoundIODevice audioDevice = audioContext.GetOutputDevice(i);
|
||||||
|
|
||||||
|
|
|
@ -140,7 +140,7 @@ namespace Ryujinx.Audio.SoundIo
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Attempers to get a <see cref="SoundIoAudioTrack"/> from the pool
|
/// Attempts to get a <see cref="SoundIoAudioTrack"/> from the pool
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="track">The track retrieved from the pool</param>
|
/// <param name="track">The track retrieved from the pool</param>
|
||||||
/// <returns>True if retrieve was successful</returns>
|
/// <returns>True if retrieve was successful</returns>
|
||||||
|
|
|
@ -13,19 +13,19 @@ namespace Ryujinx.Common.Logging
|
||||||
|
|
||||||
public LogEventArgs(LogLevel level, TimeSpan time, int threadId, string message)
|
public LogEventArgs(LogLevel level, TimeSpan time, int threadId, string message)
|
||||||
{
|
{
|
||||||
this.Level = level;
|
Level = level;
|
||||||
this.Time = time;
|
Time = time;
|
||||||
this.ThreadId = threadId;
|
ThreadId = threadId;
|
||||||
this.Message = message;
|
Message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LogEventArgs(LogLevel level, TimeSpan time, int threadId, string message, object data)
|
public LogEventArgs(LogLevel level, TimeSpan time, int threadId, string message, object data)
|
||||||
{
|
{
|
||||||
this.Level = level;
|
Level = level;
|
||||||
this.Time = time;
|
Time = time;
|
||||||
this.ThreadId = threadId;
|
ThreadId = threadId;
|
||||||
this.Message = message;
|
Message = message;
|
||||||
this.Data = data;
|
Data = data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -19,7 +19,7 @@ namespace Ryujinx.Common
|
||||||
|
|
||||||
public T Allocate()
|
public T Allocate()
|
||||||
{
|
{
|
||||||
var instance = _firstItem;
|
T instance = _firstItem;
|
||||||
|
|
||||||
if (instance == null || instance != Interlocked.CompareExchange(ref _firstItem, null, instance))
|
if (instance == null || instance != Interlocked.CompareExchange(ref _firstItem, null, instance))
|
||||||
{
|
{
|
||||||
|
@ -31,11 +31,11 @@ namespace Ryujinx.Common
|
||||||
|
|
||||||
private T AllocateInternal()
|
private T AllocateInternal()
|
||||||
{
|
{
|
||||||
var items = _items;
|
T[] items = _items;
|
||||||
|
|
||||||
for (int i = 0; i < items.Length; i++)
|
for (int i = 0; i < items.Length; i++)
|
||||||
{
|
{
|
||||||
var instance = items[i];
|
T instance = items[i];
|
||||||
|
|
||||||
if (instance != null && instance == Interlocked.CompareExchange(ref items[i], null, instance))
|
if (instance != null && instance == Interlocked.CompareExchange(ref items[i], null, instance))
|
||||||
{
|
{
|
||||||
|
@ -60,7 +60,7 @@ namespace Ryujinx.Common
|
||||||
|
|
||||||
private void ReleaseInternal(T obj)
|
private void ReleaseInternal(T obj)
|
||||||
{
|
{
|
||||||
var items = _items;
|
T[] items = _items;
|
||||||
|
|
||||||
for (int i = 0; i < items.Length; i++)
|
for (int i = 0; i < items.Length; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -104,9 +104,9 @@ namespace Ryujinx.Graphics
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int sumissionMode = (word >> 29) & 7;
|
int submissionMode = (word >> 29) & 7;
|
||||||
|
|
||||||
switch (sumissionMode)
|
switch (submissionMode)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
// Incrementing.
|
// Incrementing.
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
// ReSharper disable InconsistentNaming
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Graphics.Gal
|
namespace Ryujinx.Graphics.Gal
|
||||||
{
|
{
|
||||||
|
|
|
@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Gal
|
||||||
|
|
||||||
instruction = word0 | (ulong)word1 << 32;
|
instruction = word0 | (ulong)word1 << 32;
|
||||||
|
|
||||||
//Zero instructions (other kind of NOP) stop immediatly,
|
// Zero instructions (other kind of NOP) stop immediately,
|
||||||
// this is to avoid two rows of zeroes
|
// this is to avoid two rows of zeroes
|
||||||
if (instruction == 0)
|
if (instruction == 0)
|
||||||
{
|
{
|
||||||
|
@ -59,7 +59,7 @@ namespace Ryujinx.Graphics.Gal
|
||||||
offset += 8;
|
offset += 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Align to meet nvdisasm requeriments
|
// Align to meet nvdisasm requirements
|
||||||
while (offset % 0x20 != 0)
|
while (offset % 0x20 != 0)
|
||||||
{
|
{
|
||||||
fullWriter.Write(0);
|
fullWriter.Write(0);
|
||||||
|
|
|
@ -171,7 +171,7 @@ namespace Ryujinx.Graphics.Graphics3d
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Move result and use as Method Address, then fetch and send paramter.
|
// Move result and use as Method Address, then fetch and send parameter.
|
||||||
case AssignmentOperation.MoveAndSetMaddrThenFetchAndSend:
|
case AssignmentOperation.MoveAndSetMaddrThenFetchAndSend:
|
||||||
{
|
{
|
||||||
SetDstGpr(result);
|
SetDstGpr(result);
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
|
||||||
|
|
||||||
private int _level;
|
private int _level;
|
||||||
|
|
||||||
private string _identation;
|
private string _indentation;
|
||||||
|
|
||||||
public CodeGenContext(ShaderConfig config)
|
public CodeGenContext(ShaderConfig config)
|
||||||
{
|
{
|
||||||
|
@ -39,7 +39,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
|
||||||
|
|
||||||
public void AppendLine(string str)
|
public void AppendLine(string str)
|
||||||
{
|
{
|
||||||
_sb.AppendLine(_identation + str);
|
_sb.AppendLine(_indentation + str);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetCode()
|
public string GetCode()
|
||||||
|
@ -53,7 +53,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
|
||||||
|
|
||||||
_level++;
|
_level++;
|
||||||
|
|
||||||
UpdateIdentation();
|
UpdateIndentation();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LeaveScope(string suffix = "")
|
public void LeaveScope(string suffix = "")
|
||||||
|
@ -65,26 +65,26 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
|
||||||
|
|
||||||
_level--;
|
_level--;
|
||||||
|
|
||||||
UpdateIdentation();
|
UpdateIndentation();
|
||||||
|
|
||||||
AppendLine("}" + suffix);
|
AppendLine("}" + suffix);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateIdentation()
|
private void UpdateIndentation()
|
||||||
{
|
{
|
||||||
_identation = GetIdentation(_level);
|
_indentation = GetIndentation(_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetIdentation(int level)
|
private static string GetIndentation(int level)
|
||||||
{
|
{
|
||||||
string identation = string.Empty;
|
string indentation = string.Empty;
|
||||||
|
|
||||||
for (int index = 0; index < level; index++)
|
for (int index = 0; index < level; index++)
|
||||||
{
|
{
|
||||||
identation += Tab;
|
indentation += Tab;
|
||||||
}
|
}
|
||||||
|
|
||||||
return identation;
|
return indentation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,7 +9,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
|
||||||
OpUnary = Op | 1,
|
OpUnary = Op | 1,
|
||||||
OpBinary = Op | 2,
|
OpBinary = Op | 2,
|
||||||
OpTernary = Op | 3,
|
OpTernary = Op | 3,
|
||||||
OpBinaryCom = OpBinary | Comutative,
|
OpBinaryCom = OpBinary | Commutative,
|
||||||
|
|
||||||
CallNullary = Call | 0,
|
CallNullary = Call | 0,
|
||||||
CallUnary = Call | 1,
|
CallUnary = Call | 1,
|
||||||
|
@ -17,7 +17,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
|
||||||
CallTernary = Call | 3,
|
CallTernary = Call | 3,
|
||||||
CallQuaternary = Call | 4,
|
CallQuaternary = Call | 4,
|
||||||
|
|
||||||
Comutative = 1 << 8,
|
Commutative = 1 << 8,
|
||||||
Op = 1 << 9,
|
Op = 1 << 9,
|
||||||
Call = 1 << 10,
|
Call = 1 << 10,
|
||||||
Special = 1 << 11,
|
Special = 1 << 11,
|
||||||
|
|
|
@ -187,7 +187,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
|
||||||
|
|
||||||
public static string GetUbName(GalShaderType shaderType, int slot)
|
public static string GetUbName(GalShaderType shaderType, int slot)
|
||||||
{
|
{
|
||||||
string ubName = OperandManager.GetShaderStagePrefix(shaderType);
|
string ubName = GetShaderStagePrefix(shaderType);
|
||||||
|
|
||||||
ubName += "_" + DefaultNames.UniformNamePrefix + slot;
|
ubName += "_" + DefaultNames.UniformNamePrefix + slot;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// ReSharper disable InconsistentNaming
|
||||||
using Ryujinx.Graphics.Shader.Instructions;
|
using Ryujinx.Graphics.Shader.Instructions;
|
||||||
|
|
||||||
namespace Ryujinx.Graphics.Shader.Decoders
|
namespace Ryujinx.Graphics.Shader.Decoders
|
||||||
|
|
|
@ -146,7 +146,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
|
||||||
{
|
{
|
||||||
AddNode(gotoTempAsg);
|
AddNode(gotoTempAsg);
|
||||||
|
|
||||||
//For block 0, we don't need to add the extra "reset" at the beggining,
|
// For block 0, we don't need to add the extra "reset" at the beginning,
|
||||||
// because it is already the first node to be executed on the shader,
|
// because it is already the first node to be executed on the shader,
|
||||||
// so it is reset to false by the "local" assignment anyway.
|
// so it is reset to false by the "local" assignment anyway.
|
||||||
if (block.Index != 0)
|
if (block.Index != 0)
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
|
||||||
{
|
{
|
||||||
case Instruction.Add:
|
case Instruction.Add:
|
||||||
case Instruction.BitwiseExclusiveOr:
|
case Instruction.BitwiseExclusiveOr:
|
||||||
TryEliminateBinaryOpComutative(operation, 0);
|
TryEliminateBinaryOpCommutative(operation, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Instruction.BitwiseAnd:
|
case Instruction.BitwiseAnd:
|
||||||
|
@ -34,7 +34,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Instruction.Multiply:
|
case Instruction.Multiply:
|
||||||
TryEliminateBinaryOpComutative(operation, 1);
|
TryEliminateBinaryOpCommutative(operation, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Instruction.ShiftLeft:
|
case Instruction.ShiftLeft:
|
||||||
|
@ -101,7 +101,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void TryEliminateBinaryOpComutative(Operation operation, int comparand)
|
private static void TryEliminateBinaryOpCommutative(Operation operation, int comparand)
|
||||||
{
|
{
|
||||||
Operand x = operation.GetSource(0);
|
Operand x = operation.GetSource(0);
|
||||||
Operand y = operation.GetSource(1);
|
Operand y = operation.GetSource(1);
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.HLE.HOS;
|
using Ryujinx.HLE.HOS;
|
||||||
using Ryujinx.HLE.HOS.Ipc;
|
using Ryujinx.HLE.HOS.Ipc;
|
||||||
using Ryujinx.HLE.HOS.Kernel.Ipc;
|
|
||||||
using Ryujinx.HLE.HOS.Services;
|
using Ryujinx.HLE.HOS.Services;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
|
@ -2909,7 +2909,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler
|
||||||
}
|
}
|
||||||
} while (!ConsumeIf("E"));
|
} while (!ConsumeIf("E"));
|
||||||
}
|
}
|
||||||
// ::= sr <unresolved-type> [tempate-args] <base-unresolved-name> # T::x / decltype(p)::x
|
// ::= sr <unresolved-type> [template-args] <base-unresolved-name> # T::x / decltype(p)::x
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = ParseUnresolvedType();
|
result = ParseUnresolvedType();
|
||||||
|
|
|
@ -1980,9 +1980,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
|
||||||
|
|
||||||
for (int unit = MappingUnitSizes.Length - 1; unit >= 0 && va == 0; unit--)
|
for (int unit = MappingUnitSizes.Length - 1; unit >= 0 && va == 0; unit--)
|
||||||
{
|
{
|
||||||
int alignemnt = MappingUnitSizes[unit];
|
int alignment = MappingUnitSizes[unit];
|
||||||
|
|
||||||
va = AllocateVa(AliasRegionStart, regionPagesCount, neededPagesCount, alignemnt);
|
va = AllocateVa(AliasRegionStart, regionPagesCount, neededPagesCount, alignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (va == 0)
|
if (va == 0)
|
||||||
|
@ -2451,7 +2451,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
|
||||||
|
|
||||||
newNode.Value.SetState(newPermission, newState, newAttribute);
|
newNode.Value.SetState(newPermission, newState, newAttribute);
|
||||||
|
|
||||||
MergeEqualStateNeighbours(newNode);
|
MergeEqualStateNeighbors(newNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currEndAddr - 1 >= endAddr - 1)
|
if (currEndAddr - 1 >= endAddr - 1)
|
||||||
|
@ -2472,7 +2472,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
|
||||||
MemoryPermission permission = MemoryPermission.None,
|
MemoryPermission permission = MemoryPermission.None,
|
||||||
MemoryAttribute attribute = MemoryAttribute.None)
|
MemoryAttribute attribute = MemoryAttribute.None)
|
||||||
{
|
{
|
||||||
//Inserts new block at the list, replacing and spliting
|
// Inserts new block at the list, replacing and splitting
|
||||||
// existing blocks as needed.
|
// existing blocks as needed.
|
||||||
int oldCount = _blocks.Count;
|
int oldCount = _blocks.Count;
|
||||||
|
|
||||||
|
@ -2505,7 +2505,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
|
||||||
|
|
||||||
newNode.Value.SetState(permission, state, attribute);
|
newNode.Value.SetState(permission, state, attribute);
|
||||||
|
|
||||||
MergeEqualStateNeighbours(newNode);
|
MergeEqualStateNeighbors(newNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currEndAddr - 1 >= endAddr - 1)
|
if (currEndAddr - 1 >= endAddr - 1)
|
||||||
|
@ -2537,7 +2537,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
|
||||||
BlockMutator blockMutate,
|
BlockMutator blockMutate,
|
||||||
MemoryPermission permission = MemoryPermission.None)
|
MemoryPermission permission = MemoryPermission.None)
|
||||||
{
|
{
|
||||||
//Inserts new block at the list, replacing and spliting
|
// Inserts new block at the list, replacing and splitting
|
||||||
// existing blocks as needed, then calling the callback
|
// existing blocks as needed, then calling the callback
|
||||||
// function on the new block.
|
// function on the new block.
|
||||||
int oldCount = _blocks.Count;
|
int oldCount = _blocks.Count;
|
||||||
|
@ -2573,7 +2573,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
|
||||||
|
|
||||||
blockMutate(newBlock, permission);
|
blockMutate(newBlock, permission);
|
||||||
|
|
||||||
MergeEqualStateNeighbours(newNode);
|
MergeEqualStateNeighbors(newNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currEndAddr - 1 >= endAddr - 1)
|
if (currEndAddr - 1 >= endAddr - 1)
|
||||||
|
@ -2587,7 +2587,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
|
||||||
_blockAllocator.Count += _blocks.Count - oldCount;
|
_blockAllocator.Count += _blocks.Count - oldCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MergeEqualStateNeighbours(LinkedListNode<KMemoryBlock> node)
|
private void MergeEqualStateNeighbors(LinkedListNode<KMemoryBlock> node)
|
||||||
{
|
{
|
||||||
KMemoryBlock block = node.Value;
|
KMemoryBlock block = node.Value;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
using ChocolArm64.Memory;
|
using ChocolArm64.Memory;
|
||||||
using ChocolArm64.State;
|
using ChocolArm64.State;
|
||||||
using Ryujinx.Common.Logging;
|
|
||||||
using Ryujinx.HLE.HOS.Diagnostics.Demangler;
|
using Ryujinx.HLE.HOS.Diagnostics.Demangler;
|
||||||
using Ryujinx.HLE.HOS.Kernel.Memory;
|
using Ryujinx.HLE.HOS.Kernel.Memory;
|
||||||
using Ryujinx.HLE.Loaders.Elf;
|
using Ryujinx.HLE.Loaders.Elf;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
|
@ -173,7 +173,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//All candiates are already selected, choose the best one
|
// All candidates are already selected, choose the best one
|
||||||
// (the first one that doesn't make the source core idle if moved).
|
// (the first one that doesn't make the source core idle if moved).
|
||||||
for (int index = 0; index < srcCoresHighestPrioThreadsCount; index++)
|
for (int index = 0; index < srcCoresHighestPrioThreadsCount; index++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace Ryujinx.HLE.HOS.Services.Am
|
||||||
{ 21, GetPopFromGeneralChannelEvent }
|
{ 21, GetPopFromGeneralChannelEvent }
|
||||||
};
|
};
|
||||||
|
|
||||||
//ToDo: Signal this Event somewhere in future.
|
// TODO: Signal this Event somewhere in future.
|
||||||
_channelEvent = new KEvent(system);
|
_channelEvent = new KEvent(system);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend
|
||||||
long position = context.Request.PtrBuff[0].Position;
|
long position = context.Request.PtrBuff[0].Position;
|
||||||
long size = context.Request.PtrBuff[0].Size;
|
long size = context.Request.PtrBuff[0].Size;
|
||||||
|
|
||||||
//Todo: Write the buffer content.
|
// TODO: Write the buffer content.
|
||||||
|
|
||||||
Logger.PrintStub(LogClass.ServiceFriend, new { UserId = uuid.ToString(), unknown0 });
|
Logger.PrintStub(LogClass.ServiceFriend, new { UserId = uuid.ToString(), unknown0 });
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Services.FspSrv
|
||||||
};
|
};
|
||||||
|
|
||||||
_baseFile = baseFile;
|
_baseFile = baseFile;
|
||||||
Path = LibHac.Fs.PathTools.Normalize(path);
|
Path = PathTools.Normalize(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read(u32 readOption, u64 offset, u64 size) -> (u64 out_size, buffer<u8, 0x46, 0> out_buf)
|
// Read(u32 readOption, u64 offset, u64 size) -> (u64 out_size, buffer<u8, 0x46, 0> out_buf)
|
||||||
|
|
|
@ -306,7 +306,7 @@ namespace Ryujinx.HLE.HOS.Services.FspSrv
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
LibHac.Fs.DirectoryEntryType entryType = _provider.GetEntryType(name);
|
DirectoryEntryType entryType = _provider.GetEntryType(name);
|
||||||
|
|
||||||
context.ResponseData.Write((int)entryType);
|
context.ResponseData.Write((int)entryType);
|
||||||
}
|
}
|
||||||
|
|
|
@ -312,7 +312,7 @@ namespace Ryujinx.HLE.HOS.Services.FspSrv
|
||||||
|
|
||||||
private void ImportTitleKeysFromNsp(LibHac.Fs.IFileSystem nsp, Keyset keySet)
|
private void ImportTitleKeysFromNsp(LibHac.Fs.IFileSystem nsp, Keyset keySet)
|
||||||
{
|
{
|
||||||
foreach (LibHac.Fs.DirectoryEntry ticketEntry in nsp.EnumerateEntries("*.tik"))
|
foreach (DirectoryEntry ticketEntry in nsp.EnumerateEntries("*.tik"))
|
||||||
{
|
{
|
||||||
Ticket ticket = new Ticket(nsp.OpenFile(ticketEntry.FullPath, OpenMode.Read).AsStream());
|
Ticket ticket = new Ticket(nsp.OpenFile(ticketEntry.FullPath, OpenMode.Read).AsStream());
|
||||||
|
|
||||||
|
|
|
@ -1014,7 +1014,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
context.Request.PtrBuff[1].Position,
|
context.Request.PtrBuff[1].Position,
|
||||||
context.Request.PtrBuff[1].Size);
|
context.Request.PtrBuff[1].Size);
|
||||||
|
|
||||||
//Todo: Read all handles and values from buffer.
|
// TODO: Read all handles and values from buffer.
|
||||||
|
|
||||||
Logger.PrintStub(LogClass.ServiceHid, new {
|
Logger.PrintStub(LogClass.ServiceHid, new {
|
||||||
appletResourceUserId,
|
appletResourceUserId,
|
||||||
|
@ -1137,7 +1137,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
long counter0 = context.RequestData.ReadInt64();
|
long counter0 = context.RequestData.ReadInt64();
|
||||||
long counter1 = context.RequestData.ReadInt64();
|
long counter1 = context.RequestData.ReadInt64();
|
||||||
|
|
||||||
// Todo: Determine if array<nn::sf::NativeHandle> is a buffer or not...
|
// TODO: Determine if array<nn::sf::NativeHandle> is a buffer or not...
|
||||||
|
|
||||||
Logger.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, counter0, counter1 });
|
Logger.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, counter0, counter1 });
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using LibHac;
|
using LibHac;
|
||||||
using Ryujinx.Common.Logging;
|
|
||||||
using Ryujinx.HLE.HOS.Ipc;
|
using Ryujinx.HLE.HOS.Ipc;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.HLE.HOS.Ipc;
|
using Ryujinx.HLE.HOS.Ipc;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Pctl
|
namespace Ryujinx.HLE.HOS.Services.Pctl
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
using Ryujinx.HLE.HOS.Ipc;
|
using Ryujinx.HLE.HOS.Ipc;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Pm
|
namespace Ryujinx.HLE.HOS.Services.Pm
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
namespace Ryujinx.HLE.HOS.Services.Android
|
// ReSharper disable InconsistentNaming
|
||||||
|
namespace Ryujinx.HLE.HOS.Services.Android
|
||||||
{
|
{
|
||||||
class ColorShift
|
class ColorShift
|
||||||
{
|
{
|
||||||
|
|
|
@ -150,7 +150,7 @@ namespace Ryujinx.HLE.HOS.Services.Android
|
||||||
|
|
||||||
if (Header.IntsCount != 0x51)
|
if (Header.IntsCount != 0x51)
|
||||||
{
|
{
|
||||||
throw new System.NotImplementedException($"Unexpected Graphic Buffer ints count (expected 0x51, found 0x{Header.IntsCount:x}");
|
throw new NotImplementedException($"Unexpected Graphic Buffer ints count (expected 0x51, found 0x{Header.IntsCount:x}");
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer = reader.ReadStruct<NvGraphicBuffer>();
|
Buffer = reader.ReadStruct<NvGraphicBuffer>();
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Graphics.Gal;
|
using Ryujinx.Graphics.Gal;
|
||||||
using Ryujinx.Graphics.Memory;
|
using Ryujinx.Graphics.Memory;
|
||||||
using Ryujinx.HLE.HOS.Kernel;
|
|
||||||
using Ryujinx.HLE.HOS.Kernel.Threading;
|
using Ryujinx.HLE.HOS.Kernel.Threading;
|
||||||
using Ryujinx.HLE.HOS.Services.Nv.NvGpuAS;
|
using Ryujinx.HLE.HOS.Services.Nv.NvGpuAS;
|
||||||
using Ryujinx.HLE.HOS.Services.Nv.NvMap;
|
using Ryujinx.HLE.HOS.Services.Nv.NvMap;
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace Ryujinx.HLE.HOS.SystemState
|
||||||
|
|
||||||
internal string ActiveAudioOutput { get; private set; }
|
internal string ActiveAudioOutput { get; private set; }
|
||||||
|
|
||||||
public bool DiscordIntergrationEnabled { get; set; }
|
public bool DiscordIntegrationEnabled { get; set; }
|
||||||
|
|
||||||
public bool DockedMode { get; set; }
|
public bool DockedMode { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace Ryujinx.HLE.Input
|
||||||
device.Memory.FillWithZeros(hidPosition, Horizon.HidSize);
|
device.Memory.FillWithZeros(hidPosition, Horizon.HidSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitilizePrimaryController(HidControllerType controllerType)
|
public void InitializePrimaryController(HidControllerType controllerType)
|
||||||
{
|
{
|
||||||
HidControllerId controllerId = controllerType == HidControllerType.Handheld ?
|
HidControllerId controllerId = controllerType == HidControllerType.Handheld ?
|
||||||
HidControllerId.ControllerHandheld : HidControllerId.ControllerPlayer1;
|
HidControllerId.ControllerHandheld : HidControllerId.ControllerPlayer1;
|
||||||
|
@ -39,7 +39,7 @@ namespace Ryujinx.HLE.Input
|
||||||
PrimaryController.Connect(controllerId);
|
PrimaryController.Connect(controllerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitilizeKeyboard()
|
public void InitializeKeyboard()
|
||||||
{
|
{
|
||||||
_device.Memory.FillWithZeros(HidPosition + HidKeyboardOffset, HidKeyboardSize);
|
_device.Memory.FillWithZeros(HidPosition + HidKeyboardOffset, HidKeyboardSize);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace Ryujinx.HLE.Loaders.Compression
|
||||||
int encCount = (token >> 0) & 0xf;
|
int encCount = (token >> 0) & 0xf;
|
||||||
int litCount = (token >> 4) & 0xf;
|
int litCount = (token >> 4) & 0xf;
|
||||||
|
|
||||||
//Copy literal chunck
|
// Copy literal chunk
|
||||||
litCount = GetLength(litCount);
|
litCount = GetLength(litCount);
|
||||||
|
|
||||||
Buffer.BlockCopy(cmp, cmpPos, dec, decPos, litCount);
|
Buffer.BlockCopy(cmp, cmpPos, dec, decPos, litCount);
|
||||||
|
@ -47,7 +47,7 @@ namespace Ryujinx.HLE.Loaders.Compression
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Copy compressed chunck
|
// Copy compressed chunk
|
||||||
int back = cmp[cmpPos++] << 0 |
|
int back = cmp[cmpPos++] << 0 |
|
||||||
cmp[cmpPos++] << 8;
|
cmp[cmpPos++] << 8;
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,11 @@ namespace Ryujinx.HLE.Loaders.Npdm
|
||||||
|
|
||||||
BinaryReader reader = new BinaryReader(stream);
|
BinaryReader reader = new BinaryReader(stream);
|
||||||
|
|
||||||
int byteReaded = 0;
|
int bytesRead = 0;
|
||||||
|
|
||||||
Dictionary<string, bool> services = new Dictionary<string, bool>();
|
Dictionary<string, bool> services = new Dictionary<string, bool>();
|
||||||
|
|
||||||
while (byteReaded != size)
|
while (bytesRead != size)
|
||||||
{
|
{
|
||||||
byte controlByte = reader.ReadByte();
|
byte controlByte = reader.ReadByte();
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ namespace Ryujinx.HLE.Loaders.Npdm
|
||||||
|
|
||||||
services[Encoding.ASCII.GetString(reader.ReadBytes(length))] = registerAllowed;
|
services[Encoding.ASCII.GetString(reader.ReadBytes(length))] = registerAllowed;
|
||||||
|
|
||||||
byteReaded += length + 1;
|
bytesRead += length + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Services = new ReadOnlyDictionary<string, bool>(services);
|
Services = new ReadOnlyDictionary<string, bool>(services);
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace Ryujinx.HLE.Utilities
|
||||||
|
|
||||||
public static byte[] HexToBytes(string hexString)
|
public static byte[] HexToBytes(string hexString)
|
||||||
{
|
{
|
||||||
//Ignore last charactor if HexLength % 2 != 0.
|
// Ignore last character if HexLength % 2 != 0.
|
||||||
int bytesInHex = hexString.Length / 2;
|
int bytesInHex = hexString.Length / 2;
|
||||||
|
|
||||||
byte[] output = new byte[bytesInHex];
|
byte[] output = new byte[bytesInHex];
|
||||||
|
|
|
@ -80,7 +80,7 @@ namespace Ryujinx.Profiler
|
||||||
Monitor.Exit(_timerQueueClearLock);
|
Monitor.Exit(_timerQueueClearLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only sleep if queue was sucessfully cleared
|
// Only sleep if queue was successfully cleared
|
||||||
if (queueCleared)
|
if (queueCleared)
|
||||||
{
|
{
|
||||||
Thread.Sleep(5);
|
Thread.Sleep(5);
|
||||||
|
@ -92,9 +92,9 @@ namespace Ryujinx.Profiler
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
while (_timerQueue.TryDequeue(out var item))
|
while (_timerQueue.TryDequeue(out TimerQueueValue item))
|
||||||
{
|
{
|
||||||
if (!Timers.TryGetValue(item.Config, out var value))
|
if (!Timers.TryGetValue(item.Config, out TimingInfo value))
|
||||||
{
|
{
|
||||||
value = new TimingInfo();
|
value = new TimingInfo();
|
||||||
Timers.Add(item.Config, value);
|
Timers.Add(item.Config, value);
|
||||||
|
@ -206,9 +206,9 @@ namespace Ryujinx.Profiler
|
||||||
return (_timingFlagAverages, _timingFlagLastDelta);
|
return (_timingFlagAverages, _timingFlagLastDelta);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RegisterFlagReciever(Action<TimingFlag> reciever)
|
public void RegisterFlagReceiver(Action<TimingFlag> receiver)
|
||||||
{
|
{
|
||||||
_timingFlagCallback = reciever;
|
_timingFlagCallback = receiver;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace Ryujinx.Profiler
|
||||||
private static ProfilerSettings _settings;
|
private static ProfilerSettings _settings;
|
||||||
|
|
||||||
[Conditional("USE_PROFILING")]
|
[Conditional("USE_PROFILING")]
|
||||||
public static void Initalize()
|
public static void Initialize()
|
||||||
{
|
{
|
||||||
var config = ProfilerConfiguration.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ProfilerConfig.jsonc"));
|
var config = ProfilerConfiguration.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ProfilerConfig.jsonc"));
|
||||||
|
|
||||||
|
@ -70,11 +70,11 @@ namespace Ryujinx.Profiler
|
||||||
}
|
}
|
||||||
|
|
||||||
[Conditional("USE_PROFILING")]
|
[Conditional("USE_PROFILING")]
|
||||||
public static void RegisterFlagReciever(Action<TimingFlag> reciever)
|
public static void RegisterFlagReceiver(Action<TimingFlag> receiver)
|
||||||
{
|
{
|
||||||
if (!ProfilingEnabled())
|
if (!ProfilingEnabled())
|
||||||
return;
|
return;
|
||||||
_profileInstance.RegisterFlagReciever(reciever);
|
_profileInstance.RegisterFlagReceiver(receiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Conditional("USE_PROFILING")]
|
[Conditional("USE_PROFILING")]
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
using OpenTK.Input;
|
using OpenTK.Input;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Utf8Json;
|
using Utf8Json;
|
||||||
using Utf8Json.Resolvers;
|
using Utf8Json.Resolvers;
|
||||||
|
|
||||||
|
@ -58,7 +55,7 @@ namespace Ryujinx.Profiler
|
||||||
return default(T);
|
return default(T);
|
||||||
}
|
}
|
||||||
|
|
||||||
var enumName = formatterResolver.GetFormatterWithVerify<string>()
|
string enumName = formatterResolver.GetFormatterWithVerify<string>()
|
||||||
.Deserialize(ref reader, formatterResolver);
|
.Deserialize(ref reader, formatterResolver);
|
||||||
|
|
||||||
if (Enum.TryParse<T>(enumName, out T result))
|
if (Enum.TryParse<T>(enumName, out T result))
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
using System;
|
using OpenTK.Input;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using OpenTK.Input;
|
|
||||||
|
|
||||||
namespace Ryujinx.Profiler
|
namespace Ryujinx.Profiler
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
using System;
|
namespace Ryujinx.Profiler
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Ryujinx.Profiler
|
|
||||||
{
|
{
|
||||||
public class ProfilerSettings
|
public class ProfilerSettings
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,9 +1,4 @@
|
||||||
using System;
|
namespace Ryujinx.Profiler
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Ryujinx.Profiler
|
|
||||||
{
|
{
|
||||||
public enum TimingFlagType
|
public enum TimingFlagType
|
||||||
{
|
{
|
||||||
|
|
|
@ -107,7 +107,7 @@ namespace Ryujinx.Profiler
|
||||||
_timestamps.Add(_currentTimestamp);
|
_timestamps.Add(_currentTimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
var delta = _currentTimestamp.EndTime - _currentTimestamp.BeginTime;
|
long delta = _currentTimestamp.EndTime - _currentTimestamp.BeginTime;
|
||||||
TotalTime += delta;
|
TotalTime += delta;
|
||||||
Instant += delta;
|
Instant += delta;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Ryujinx.Profiler.UI
|
namespace Ryujinx.Profiler.UI
|
||||||
{
|
{
|
||||||
|
|
|
@ -98,7 +98,7 @@ namespace Ryujinx.Profiler.UI
|
||||||
private readonly object _profileDataLock = new object();
|
private readonly object _profileDataLock = new object();
|
||||||
|
|
||||||
public ProfileWindow()
|
public ProfileWindow()
|
||||||
// Graphigs mode enables 2xAA
|
// Graphics mode enables 2xAA
|
||||||
: base(1280, 720, new GraphicsMode(new ColorFormat(8, 8, 8, 8), 1, 1, 2))
|
: base(1280, 720, new GraphicsMode(new ColorFormat(8, 8, 8, 8), 1, 1, 2))
|
||||||
{
|
{
|
||||||
Title = "Profiler";
|
Title = "Profiler";
|
||||||
|
@ -108,7 +108,7 @@ namespace Ryujinx.Profiler.UI
|
||||||
if (Profile.UpdateRate <= 0)
|
if (Profile.UpdateRate <= 0)
|
||||||
{
|
{
|
||||||
// Perform step regardless of flag type
|
// Perform step regardless of flag type
|
||||||
Profile.RegisterFlagReciever((t) =>
|
Profile.RegisterFlagReceiver((t) =>
|
||||||
{
|
{
|
||||||
if (!_paused)
|
if (!_paused)
|
||||||
{
|
{
|
||||||
|
@ -146,7 +146,7 @@ namespace Ryujinx.Profiler.UI
|
||||||
{
|
{
|
||||||
GL.ClearColor(Color.Black);
|
GL.ClearColor(Color.Black);
|
||||||
_fontService = new FontService();
|
_fontService = new FontService();
|
||||||
_fontService.InitalizeTextures();
|
_fontService.InitializeTextures();
|
||||||
_fontService.UpdateScreenHeight(Height);
|
_fontService.UpdateScreenHeight(Height);
|
||||||
|
|
||||||
_buttons = new ProfileButton[(int)ButtonIndex.Count];
|
_buttons = new ProfileButton[(int)ButtonIndex.Count];
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace Ryujinx.Profiler.UI
|
||||||
float barHeight = (LineHeight - LinePadding) / 3.0f;
|
float barHeight = (LineHeight - LinePadding) / 3.0f;
|
||||||
|
|
||||||
// Get max values
|
// Get max values
|
||||||
var maxInstant = maxAverage = maxTotal = 0;
|
long maxInstant = maxAverage = maxTotal = 0;
|
||||||
foreach (KeyValuePair<ProfileConfig, TimingInfo> kvp in _sortedProfileData)
|
foreach (KeyValuePair<ProfileConfig, TimingInfo> kvp in _sortedProfileData)
|
||||||
{
|
{
|
||||||
maxInstant = Math.Max(maxInstant, kvp.Value.Instant);
|
maxInstant = Math.Max(maxInstant, kvp.Value.Instant);
|
||||||
|
|
|
@ -7,8 +7,8 @@ namespace Ryujinx.Profiler.UI
|
||||||
{
|
{
|
||||||
public partial class ProfileWindow
|
public partial class ProfileWindow
|
||||||
{
|
{
|
||||||
// Colour index equal to timing flag type as int
|
// Color index equal to timing flag type as int
|
||||||
private Color[] _timingFlagColours = new[]
|
private Color[] _timingFlagColors = new[]
|
||||||
{
|
{
|
||||||
new Color(150, 25, 25, 50), // FrameSwap = 0
|
new Color(150, 25, 25, 50), // FrameSwap = 0
|
||||||
new Color(25, 25, 150, 50), // SystemFrame = 1
|
new Color(25, 25, 150, 50), // SystemFrame = 1
|
||||||
|
@ -62,7 +62,7 @@ namespace Ryujinx.Profiler.UI
|
||||||
if (prevType != timingFlag.FlagType)
|
if (prevType != timingFlag.FlagType)
|
||||||
{
|
{
|
||||||
prevType = timingFlag.FlagType;
|
prevType = timingFlag.FlagType;
|
||||||
GL.Color4(_timingFlagColours[(int)prevType]);
|
GL.Color4(_timingFlagColors[(int)prevType]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int x = (int)(graphRight - ((graphPositionTicks - timingFlag.Timestamp) / timeWidthTicks) * width);
|
int x = (int)(graphRight - ((graphPositionTicks - timingFlag.Timestamp) / timeWidthTicks) * width);
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Diagnostics;
|
using System.Threading;
|
||||||
using System.Threading;
|
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Input;
|
using OpenTK.Input;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
|
|
|
@ -36,7 +36,7 @@ namespace Ryujinx.Profiler.UI.SharpFontHelpers
|
||||||
|
|
||||||
private string GetFontPath()
|
private string GetFontPath()
|
||||||
{
|
{
|
||||||
string fontFolder = System.Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
|
string fontFolder = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
|
||||||
|
|
||||||
// Only uses Arial, add more fonts here if wanted
|
// Only uses Arial, add more fonts here if wanted
|
||||||
string path = Path.Combine(fontFolder, "arial.ttf");
|
string path = Path.Combine(fontFolder, "arial.ttf");
|
||||||
|
@ -48,7 +48,7 @@ namespace Ryujinx.Profiler.UI.SharpFontHelpers
|
||||||
throw new Exception($"Profiler exception. Required font Courier New or Arial not installed to {fontFolder}");
|
throw new Exception($"Profiler exception. Required font Courier New or Arial not installed to {fontFolder}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitalizeTextures()
|
public void InitializeTextures()
|
||||||
{
|
{
|
||||||
// Create and init some vars
|
// Create and init some vars
|
||||||
uint[] rawCharacterSheet = new uint[SheetWidth * SheetHeight];
|
uint[] rawCharacterSheet = new uint[SheetWidth * SheetHeight];
|
||||||
|
@ -66,7 +66,7 @@ namespace Ryujinx.Profiler.UI.SharpFontHelpers
|
||||||
// Update raw data for each character
|
// Update raw data for each character
|
||||||
for (int i = 0; i < 94; i++)
|
for (int i = 0; i < 94; i++)
|
||||||
{
|
{
|
||||||
var surface = RenderSurface((char)(i + 33), font, out var xBearing, out var yBearing, out var advance);
|
var surface = RenderSurface((char)(i + 33), font, out float xBearing, out float yBearing, out float advance);
|
||||||
|
|
||||||
characters[i] = UpdateTexture(surface, ref rawCharacterSheet, ref x, ref y, ref lineOffset);
|
characters[i] = UpdateTexture(surface, ref rawCharacterSheet, ref x, ref y, ref lineOffset);
|
||||||
characters[i].BearingX = xBearing;
|
characters[i].BearingX = xBearing;
|
||||||
|
@ -217,7 +217,7 @@ namespace Ryujinx.Profiler.UI.SharpFontHelpers
|
||||||
lineOffset = 0;
|
lineOffset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update lineoffset
|
// Update lineOffset
|
||||||
if (lineOffset < height)
|
if (lineOffset < height)
|
||||||
{
|
{
|
||||||
lineOffset = height + 1;
|
lineOffset = height + 1;
|
||||||
|
|
|
@ -9,8 +9,8 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
|
|
||||||
public IndexedProperty(Func<TIndex, TValue> getFunc, Action<TIndex, TValue> setAction)
|
public IndexedProperty(Func<TIndex, TValue> getFunc, Action<TIndex, TValue> setAction)
|
||||||
{
|
{
|
||||||
this.GetFunc = getFunc;
|
GetFunc = getFunc;
|
||||||
this.SetAction = setAction;
|
SetAction = setAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TValue this[TIndex i]
|
public TValue this[TIndex i]
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// ReSharper disable InconsistentNaming
|
||||||
namespace Ryujinx.Tests.Unicorn.Native
|
namespace Ryujinx.Tests.Unicorn.Native
|
||||||
{
|
{
|
||||||
public enum ArmRegister
|
public enum ArmRegister
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace Ryujinx.Tests.Unicorn.Native
|
||||||
|
|
||||||
public static void MarshalArrayOf<T>(IntPtr input, int length, out T[] output)
|
public static void MarshalArrayOf<T>(IntPtr input, int length, out T[] output)
|
||||||
{
|
{
|
||||||
var size = Marshal.SizeOf(typeof(T));
|
int size = Marshal.SizeOf(typeof(T));
|
||||||
output = new T[length];
|
output = new T[length];
|
||||||
|
|
||||||
for (int i = 0; i < length; i++)
|
for (int i = 0; i < length; i++)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// ReSharper disable InconsistentNaming
|
||||||
namespace Ryujinx.Tests.Unicorn.Native
|
namespace Ryujinx.Tests.Unicorn.Native
|
||||||
{
|
{
|
||||||
public enum UnicornMode
|
public enum UnicornMode
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
using Ryujinx.Tests.Unicorn.Native;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics.Contracts;
|
using System.Diagnostics.Contracts;
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
|
@ -31,38 +32,38 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
|
|
||||||
public ulong LR
|
public ulong LR
|
||||||
{
|
{
|
||||||
get { return GetRegister(Native.ArmRegister.LR); }
|
get { return GetRegister(ArmRegister.LR); }
|
||||||
set { SetRegister(Native.ArmRegister.LR, value); }
|
set { SetRegister(ArmRegister.LR, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong SP
|
public ulong SP
|
||||||
{
|
{
|
||||||
get { return GetRegister(Native.ArmRegister.SP); }
|
get { return GetRegister(ArmRegister.SP); }
|
||||||
set { SetRegister(Native.ArmRegister.SP, value); }
|
set { SetRegister(ArmRegister.SP, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong PC
|
public ulong PC
|
||||||
{
|
{
|
||||||
get { return GetRegister(Native.ArmRegister.PC); }
|
get { return GetRegister(ArmRegister.PC); }
|
||||||
set { SetRegister(Native.ArmRegister.PC, value); }
|
set { SetRegister(ArmRegister.PC, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint Pstate
|
public uint Pstate
|
||||||
{
|
{
|
||||||
get { return (uint)GetRegister(Native.ArmRegister.PSTATE); }
|
get { return (uint)GetRegister(ArmRegister.PSTATE); }
|
||||||
set { SetRegister(Native.ArmRegister.PSTATE, (uint)value); }
|
set { SetRegister(ArmRegister.PSTATE, (uint)value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Fpcr
|
public int Fpcr
|
||||||
{
|
{
|
||||||
get { return (int)GetRegister(Native.ArmRegister.FPCR); }
|
get { return (int)GetRegister(ArmRegister.FPCR); }
|
||||||
set { SetRegister(Native.ArmRegister.FPCR, (uint)value); }
|
set { SetRegister(ArmRegister.FPCR, (uint)value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Fpsr
|
public int Fpsr
|
||||||
{
|
{
|
||||||
get { return (int)GetRegister(Native.ArmRegister.FPSR); }
|
get { return (int)GetRegister(ArmRegister.FPSR); }
|
||||||
set { SetRegister(Native.ArmRegister.FPSR, (uint)value); }
|
set { SetRegister(ArmRegister.FPSR, (uint)value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool OverflowFlag
|
public bool OverflowFlag
|
||||||
|
@ -91,18 +92,18 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
|
|
||||||
public UnicornAArch64()
|
public UnicornAArch64()
|
||||||
{
|
{
|
||||||
Native.Interface.Checked(Native.Interface.uc_open((uint)Native.UnicornArch.UC_ARCH_ARM64, (uint)Native.UnicornMode.UC_MODE_LITTLE_ENDIAN, out uc));
|
Interface.Checked(Interface.uc_open((uint)UnicornArch.UC_ARCH_ARM64, (uint)UnicornMode.UC_MODE_LITTLE_ENDIAN, out uc));
|
||||||
SetRegister(Native.ArmRegister.CPACR_EL1, 0x00300000);
|
SetRegister(ArmRegister.CPACR_EL1, 0x00300000);
|
||||||
}
|
}
|
||||||
|
|
||||||
~UnicornAArch64()
|
~UnicornAArch64()
|
||||||
{
|
{
|
||||||
Native.Interface.Checked(Native.Interface.uc_close(uc));
|
Interface.Checked(Interface.uc_close(uc));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RunForCount(ulong count)
|
public void RunForCount(ulong count)
|
||||||
{
|
{
|
||||||
Native.Interface.Checked(Native.Interface.uc_emu_start(uc, this.PC, 0xFFFFFFFFFFFFFFFFu, 0, count));
|
Interface.Checked(Interface.uc_emu_start(uc, PC, 0xFFFFFFFFFFFFFFFFu, 0, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Step()
|
public void Step()
|
||||||
|
@ -110,94 +111,94 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
RunForCount(1);
|
RunForCount(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Native.ArmRegister[] X_registers = new Native.ArmRegister[31]
|
internal static ArmRegister[] X_registers = new ArmRegister[31]
|
||||||
{
|
{
|
||||||
Native.ArmRegister.X0,
|
ArmRegister.X0,
|
||||||
Native.ArmRegister.X1,
|
ArmRegister.X1,
|
||||||
Native.ArmRegister.X2,
|
ArmRegister.X2,
|
||||||
Native.ArmRegister.X3,
|
ArmRegister.X3,
|
||||||
Native.ArmRegister.X4,
|
ArmRegister.X4,
|
||||||
Native.ArmRegister.X5,
|
ArmRegister.X5,
|
||||||
Native.ArmRegister.X6,
|
ArmRegister.X6,
|
||||||
Native.ArmRegister.X7,
|
ArmRegister.X7,
|
||||||
Native.ArmRegister.X8,
|
ArmRegister.X8,
|
||||||
Native.ArmRegister.X9,
|
ArmRegister.X9,
|
||||||
Native.ArmRegister.X10,
|
ArmRegister.X10,
|
||||||
Native.ArmRegister.X11,
|
ArmRegister.X11,
|
||||||
Native.ArmRegister.X12,
|
ArmRegister.X12,
|
||||||
Native.ArmRegister.X13,
|
ArmRegister.X13,
|
||||||
Native.ArmRegister.X14,
|
ArmRegister.X14,
|
||||||
Native.ArmRegister.X15,
|
ArmRegister.X15,
|
||||||
Native.ArmRegister.X16,
|
ArmRegister.X16,
|
||||||
Native.ArmRegister.X17,
|
ArmRegister.X17,
|
||||||
Native.ArmRegister.X18,
|
ArmRegister.X18,
|
||||||
Native.ArmRegister.X19,
|
ArmRegister.X19,
|
||||||
Native.ArmRegister.X20,
|
ArmRegister.X20,
|
||||||
Native.ArmRegister.X21,
|
ArmRegister.X21,
|
||||||
Native.ArmRegister.X22,
|
ArmRegister.X22,
|
||||||
Native.ArmRegister.X23,
|
ArmRegister.X23,
|
||||||
Native.ArmRegister.X24,
|
ArmRegister.X24,
|
||||||
Native.ArmRegister.X25,
|
ArmRegister.X25,
|
||||||
Native.ArmRegister.X26,
|
ArmRegister.X26,
|
||||||
Native.ArmRegister.X27,
|
ArmRegister.X27,
|
||||||
Native.ArmRegister.X28,
|
ArmRegister.X28,
|
||||||
Native.ArmRegister.X29,
|
ArmRegister.X29,
|
||||||
Native.ArmRegister.X30,
|
ArmRegister.X30,
|
||||||
};
|
};
|
||||||
|
|
||||||
internal static Native.ArmRegister[] Q_registers = new Native.ArmRegister[32]
|
internal static ArmRegister[] Q_registers = new ArmRegister[32]
|
||||||
{
|
{
|
||||||
Native.ArmRegister.Q0,
|
ArmRegister.Q0,
|
||||||
Native.ArmRegister.Q1,
|
ArmRegister.Q1,
|
||||||
Native.ArmRegister.Q2,
|
ArmRegister.Q2,
|
||||||
Native.ArmRegister.Q3,
|
ArmRegister.Q3,
|
||||||
Native.ArmRegister.Q4,
|
ArmRegister.Q4,
|
||||||
Native.ArmRegister.Q5,
|
ArmRegister.Q5,
|
||||||
Native.ArmRegister.Q6,
|
ArmRegister.Q6,
|
||||||
Native.ArmRegister.Q7,
|
ArmRegister.Q7,
|
||||||
Native.ArmRegister.Q8,
|
ArmRegister.Q8,
|
||||||
Native.ArmRegister.Q9,
|
ArmRegister.Q9,
|
||||||
Native.ArmRegister.Q10,
|
ArmRegister.Q10,
|
||||||
Native.ArmRegister.Q11,
|
ArmRegister.Q11,
|
||||||
Native.ArmRegister.Q12,
|
ArmRegister.Q12,
|
||||||
Native.ArmRegister.Q13,
|
ArmRegister.Q13,
|
||||||
Native.ArmRegister.Q14,
|
ArmRegister.Q14,
|
||||||
Native.ArmRegister.Q15,
|
ArmRegister.Q15,
|
||||||
Native.ArmRegister.Q16,
|
ArmRegister.Q16,
|
||||||
Native.ArmRegister.Q17,
|
ArmRegister.Q17,
|
||||||
Native.ArmRegister.Q18,
|
ArmRegister.Q18,
|
||||||
Native.ArmRegister.Q19,
|
ArmRegister.Q19,
|
||||||
Native.ArmRegister.Q20,
|
ArmRegister.Q20,
|
||||||
Native.ArmRegister.Q21,
|
ArmRegister.Q21,
|
||||||
Native.ArmRegister.Q22,
|
ArmRegister.Q22,
|
||||||
Native.ArmRegister.Q23,
|
ArmRegister.Q23,
|
||||||
Native.ArmRegister.Q24,
|
ArmRegister.Q24,
|
||||||
Native.ArmRegister.Q25,
|
ArmRegister.Q25,
|
||||||
Native.ArmRegister.Q26,
|
ArmRegister.Q26,
|
||||||
Native.ArmRegister.Q27,
|
ArmRegister.Q27,
|
||||||
Native.ArmRegister.Q28,
|
ArmRegister.Q28,
|
||||||
Native.ArmRegister.Q29,
|
ArmRegister.Q29,
|
||||||
Native.ArmRegister.Q30,
|
ArmRegister.Q30,
|
||||||
Native.ArmRegister.Q31,
|
ArmRegister.Q31,
|
||||||
};
|
};
|
||||||
|
|
||||||
internal ulong GetRegister(Native.ArmRegister register)
|
internal ulong GetRegister(ArmRegister register)
|
||||||
{
|
{
|
||||||
byte[] value_bytes = new byte[8];
|
byte[] value_bytes = new byte[8];
|
||||||
Native.Interface.Checked(Native.Interface.uc_reg_read(uc, (int)register, value_bytes));
|
Interface.Checked(Interface.uc_reg_read(uc, (int)register, value_bytes));
|
||||||
return (ulong)BitConverter.ToInt64(value_bytes, 0);
|
return (ulong)BitConverter.ToInt64(value_bytes, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void SetRegister(Native.ArmRegister register, ulong value)
|
internal void SetRegister(ArmRegister register, ulong value)
|
||||||
{
|
{
|
||||||
byte[] value_bytes = BitConverter.GetBytes(value);
|
byte[] value_bytes = BitConverter.GetBytes(value);
|
||||||
Native.Interface.Checked(Native.Interface.uc_reg_write(uc, (int)register, value_bytes));
|
Interface.Checked(Interface.uc_reg_write(uc, (int)register, value_bytes));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Vector128<float> GetVector(Native.ArmRegister register)
|
internal Vector128<float> GetVector(ArmRegister register)
|
||||||
{
|
{
|
||||||
byte[] value_bytes = new byte[16];
|
byte[] value_bytes = new byte[16];
|
||||||
Native.Interface.Checked(Native.Interface.uc_reg_read(uc, (int)register, value_bytes));
|
Interface.Checked(Interface.uc_reg_read(uc, (int)register, value_bytes));
|
||||||
unsafe
|
unsafe
|
||||||
{
|
{
|
||||||
fixed (byte* p = &value_bytes[0])
|
fixed (byte* p = &value_bytes[0])
|
||||||
|
@ -207,7 +208,7 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void SetVector(Native.ArmRegister register, Vector128<float> value)
|
internal void SetVector(ArmRegister register, Vector128<float> value)
|
||||||
{
|
{
|
||||||
byte[] value_bytes = new byte[16];
|
byte[] value_bytes = new byte[16];
|
||||||
unsafe
|
unsafe
|
||||||
|
@ -217,7 +218,7 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
Sse.Store((float*)p, value);
|
Sse.Store((float*)p, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Native.Interface.Checked(Native.Interface.uc_reg_write(uc, (int)register, value_bytes));
|
Interface.Checked(Interface.uc_reg_write(uc, (int)register, value_bytes));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong GetX(int index)
|
public ulong GetX(int index)
|
||||||
|
@ -251,7 +252,7 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
public byte[] MemoryRead(ulong address, ulong size)
|
public byte[] MemoryRead(ulong address, ulong size)
|
||||||
{
|
{
|
||||||
byte[] value = new byte[size];
|
byte[] value = new byte[size];
|
||||||
Native.Interface.Checked(Native.Interface.uc_mem_read(uc, address, value, size));
|
Interface.Checked(Interface.uc_mem_read(uc, address, value, size));
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,7 +263,7 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
|
|
||||||
public void MemoryWrite(ulong address, byte[] value)
|
public void MemoryWrite(ulong address, byte[] value)
|
||||||
{
|
{
|
||||||
Native.Interface.Checked(Native.Interface.uc_mem_write(uc, address, value, (ulong)value.Length));
|
Interface.Checked(Interface.uc_mem_write(uc, address, value, (ulong)value.Length));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MemoryWrite8 (ulong address, byte value) { MemoryWrite(address, new byte[]{value}); }
|
public void MemoryWrite8 (ulong address, byte value) { MemoryWrite(address, new byte[]{value}); }
|
||||||
|
@ -275,23 +276,23 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
|
|
||||||
public void MemoryMap(ulong address, ulong size, MemoryPermission permissions)
|
public void MemoryMap(ulong address, ulong size, MemoryPermission permissions)
|
||||||
{
|
{
|
||||||
Native.Interface.Checked(Native.Interface.uc_mem_map(uc, address, size, (uint)permissions));
|
Interface.Checked(Interface.uc_mem_map(uc, address, size, (uint)permissions));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MemoryUnmap(ulong address, ulong size)
|
public void MemoryUnmap(ulong address, ulong size)
|
||||||
{
|
{
|
||||||
Native.Interface.Checked(Native.Interface.uc_mem_unmap(uc, address, size));
|
Interface.Checked(Interface.uc_mem_unmap(uc, address, size));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MemoryProtect(ulong address, ulong size, MemoryPermission permissions)
|
public void MemoryProtect(ulong address, ulong size, MemoryPermission permissions)
|
||||||
{
|
{
|
||||||
Native.Interface.Checked(Native.Interface.uc_mem_protect(uc, address, size, (uint)permissions));
|
Interface.Checked(Interface.uc_mem_protect(uc, address, size, (uint)permissions));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DumpMemoryInformation()
|
public void DumpMemoryInformation()
|
||||||
{
|
{
|
||||||
Native.Interface.Checked(Native.Interface.uc_mem_regions(uc, out IntPtr regions_raw, out uint length));
|
Interface.Checked(Interface.uc_mem_regions(uc, out IntPtr regions_raw, out uint length));
|
||||||
Native.Interface.MarshalArrayOf<Native.UnicornMemoryRegion>(regions_raw, (int)length, out var regions);
|
Interface.MarshalArrayOf<UnicornMemoryRegion>(regions_raw, (int)length, out var regions);
|
||||||
foreach (var region in regions)
|
foreach (var region in regions)
|
||||||
{
|
{
|
||||||
Console.WriteLine("region: begin {0:X16} end {1:X16} perms {2:X8}", region.begin, region.end, region.perms);
|
Console.WriteLine("region: begin {0:X16} end {1:X16} perms {2:X8}", region.begin, region.end, region.perms);
|
||||||
|
@ -302,7 +303,7 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Native.Interface.uc_version(out uint major, out uint minor);
|
Interface.uc_version(out uint major, out uint minor);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (DllNotFoundException)
|
catch (DllNotFoundException)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// ReSharper disable InconsistentNaming
|
||||||
namespace Ryujinx.Tests.Unicorn
|
namespace Ryujinx.Tests.Unicorn
|
||||||
{
|
{
|
||||||
public enum UnicornError
|
public enum UnicornError
|
||||||
|
@ -17,7 +18,7 @@ namespace Ryujinx.Tests.Unicorn
|
||||||
UC_ERR_WRITE_PROT, // Quit emulation due to UC_MEM_WRITE_PROT violation: uc_emu_start()
|
UC_ERR_WRITE_PROT, // Quit emulation due to UC_MEM_WRITE_PROT violation: uc_emu_start()
|
||||||
UC_ERR_READ_PROT, // Quit emulation due to UC_MEM_READ_PROT violation: uc_emu_start()
|
UC_ERR_READ_PROT, // Quit emulation due to UC_MEM_READ_PROT violation: uc_emu_start()
|
||||||
UC_ERR_FETCH_PROT, // Quit emulation due to UC_MEM_FETCH_PROT violation: uc_emu_start()
|
UC_ERR_FETCH_PROT, // Quit emulation due to UC_MEM_FETCH_PROT violation: uc_emu_start()
|
||||||
UC_ERR_ARG, // Inavalid argument provided to uc_xxx function (See specific function API)
|
UC_ERR_ARG, // Invalid argument provided to uc_xxx function (See specific function API)
|
||||||
UC_ERR_READ_UNALIGNED, // Unaligned read
|
UC_ERR_READ_UNALIGNED, // Unaligned read
|
||||||
UC_ERR_WRITE_UNALIGNED, // Unaligned write
|
UC_ERR_WRITE_UNALIGNED, // Unaligned write
|
||||||
UC_ERR_FETCH_UNALIGNED, // Unaligned fetch
|
UC_ERR_FETCH_UNALIGNED, // Unaligned fetch
|
||||||
|
|
|
@ -4,19 +4,19 @@
|
||||||
// Dump shaders in local directory (e.g. `C:\ShaderDumps`)
|
// Dump shaders in local directory (e.g. `C:\ShaderDumps`)
|
||||||
"graphics_shaders_dump_path": "",
|
"graphics_shaders_dump_path": "",
|
||||||
|
|
||||||
// Enable print debug logs
|
// Enable printing debug logs
|
||||||
"logging_enable_debug": false,
|
"logging_enable_debug": false,
|
||||||
|
|
||||||
// Enable print stubbed calls logs
|
// Enable printing stubbed calls logs
|
||||||
"logging_enable_stub": true,
|
"logging_enable_stub": true,
|
||||||
|
|
||||||
// Enable print informations logs
|
// Enable printing information logs
|
||||||
"logging_enable_info": true,
|
"logging_enable_info": true,
|
||||||
|
|
||||||
// Enable print warning logs
|
// Enable printing warning logs
|
||||||
"logging_enable_warn": true,
|
"logging_enable_warn": true,
|
||||||
|
|
||||||
// Enable print error logs
|
// Enable printing error logs
|
||||||
"logging_enable_error": true,
|
"logging_enable_error": true,
|
||||||
|
|
||||||
// Enable printing guest logs
|
// Enable printing guest logs
|
||||||
|
@ -38,8 +38,8 @@
|
||||||
// Enable or disable Docked Mode
|
// Enable or disable Docked Mode
|
||||||
"docked_mode": false,
|
"docked_mode": false,
|
||||||
|
|
||||||
// Enable or disable Discord Rich Presense
|
// Enable or disable Discord Rich Presence
|
||||||
"enable_discord_intergration": true,
|
"enable_discord_integration": true,
|
||||||
|
|
||||||
// Enable or disable Game Vsync
|
// Enable or disable Game Vsync
|
||||||
"enable_vsync": true,
|
"enable_vsync": true,
|
||||||
|
|
|
@ -83,9 +83,9 @@ namespace Ryujinx
|
||||||
public bool DockedMode { get; private set; }
|
public bool DockedMode { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enables or disables Discord Rich Presense
|
/// Enables or disables Discord Rich Presence
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool EnableDiscordIntergration { get; private set; }
|
public bool EnableDiscordIntegration { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enables or disables Vertical Sync
|
/// Enables or disables Vertical Sync
|
||||||
|
@ -220,7 +220,7 @@ namespace Ryujinx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
device.System.State.DiscordIntergrationEnabled = Instance.EnableDiscordIntergration;
|
device.System.State.DiscordIntegrationEnabled = Instance.EnableDiscordIntegration;
|
||||||
|
|
||||||
device.EnableDeviceVsync = Instance.EnableVsync;
|
device.EnableDeviceVsync = Instance.EnableVsync;
|
||||||
|
|
||||||
|
@ -254,8 +254,8 @@ namespace Ryujinx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
device.Hid.InitilizePrimaryController(Instance.ControllerType);
|
device.Hid.InitializePrimaryController(Instance.ControllerType);
|
||||||
device.Hid.InitilizeKeyboard();
|
device.Hid.InitializeKeyboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ConfigurationEnumFormatter<T> : IJsonFormatter<T>
|
private class ConfigurationEnumFormatter<T> : IJsonFormatter<T>
|
||||||
|
@ -274,7 +274,7 @@ namespace Ryujinx
|
||||||
return default(T);
|
return default(T);
|
||||||
}
|
}
|
||||||
|
|
||||||
var enumName = formatterResolver.GetFormatterWithVerify<string>()
|
string enumName = formatterResolver.GetFormatterWithVerify<string>()
|
||||||
.Deserialize(ref reader, formatterResolver);
|
.Deserialize(ref reader, formatterResolver);
|
||||||
|
|
||||||
if (Enum.TryParse<T>(enumName, out T result))
|
if (Enum.TryParse<T>(enumName, out T result))
|
||||||
|
|
|
@ -32,12 +32,12 @@ namespace Ryujinx
|
||||||
Configuration.Load(Path.Combine(ApplicationDirectory, "Config.jsonc"));
|
Configuration.Load(Path.Combine(ApplicationDirectory, "Config.jsonc"));
|
||||||
Configuration.Configure(device);
|
Configuration.Configure(device);
|
||||||
|
|
||||||
Profile.Initalize();
|
Profile.Initialize();
|
||||||
|
|
||||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||||
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
|
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
|
||||||
|
|
||||||
if (device.System.State.DiscordIntergrationEnabled == true)
|
if (device.System.State.DiscordIntegrationEnabled == true)
|
||||||
{
|
{
|
||||||
DiscordClient = new DiscordRpcClient("568815339807309834");
|
DiscordClient = new DiscordRpcClient("568815339807309834");
|
||||||
DiscordPresence = new RichPresence
|
DiscordPresence = new RichPresence
|
||||||
|
@ -108,7 +108,7 @@ namespace Ryujinx
|
||||||
Logger.PrintWarning(LogClass.Application, "Please specify the folder with the NSOs/IStorage or a NSO/NRO.");
|
Logger.PrintWarning(LogClass.Application, "Please specify the folder with the NSOs/IStorage or a NSO/NRO.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device.System.State.DiscordIntergrationEnabled == true)
|
if (device.System.State.DiscordIntegrationEnabled == true)
|
||||||
{
|
{
|
||||||
if (File.ReadAllLines(Path.Combine(ApplicationDirectory, "RPsupported.dat")).Contains(device.System.TitleID))
|
if (File.ReadAllLines(Path.Combine(ApplicationDirectory, "RPsupported.dat")).Contains(device.System.TitleID))
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,7 +4,6 @@ using OpenTK.Input;
|
||||||
using Ryujinx.Graphics.Gal;
|
using Ryujinx.Graphics.Gal;
|
||||||
using Ryujinx.HLE;
|
using Ryujinx.HLE;
|
||||||
using Ryujinx.HLE.Input;
|
using Ryujinx.HLE.Input;
|
||||||
using Ryujinx.Profiler;
|
|
||||||
using Ryujinx.Profiler.UI;
|
using Ryujinx.Profiler.UI;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using OpenTK.Input;
|
using OpenTK.Input;
|
||||||
using Ryujinx.HLE.Input;
|
using Ryujinx.HLE.Input;
|
||||||
using Ryujinx.Common.Logging;
|
|
||||||
|
|
||||||
namespace Ryujinx.UI.Input
|
namespace Ryujinx.UI.Input
|
||||||
{
|
{
|
||||||
|
|
|
@ -393,11 +393,11 @@
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"enable_discord_intergration": {
|
"enable_discord_integration": {
|
||||||
"$id": "#/properties/enable_discord_intergration",
|
"$id": "#/properties/enable_discord_integration",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"title": "Enable Discord Rich Presense",
|
"title": "Enable Discord Rich Presence",
|
||||||
"description": "Enable or disable Discord Rich Presense",
|
"description": "Enable or disable Discord Rich Presence",
|
||||||
"default": true,
|
"default": true,
|
||||||
"examples": [
|
"examples": [
|
||||||
true,
|
true,
|
||||||
|
|
Loading…
Reference in a new issue