0
0
Fork 0
mirror of https://github.com/GreemDev/Ryujinx.git synced 2024-12-22 18:05:46 +00:00

Replace 'Expand DRAM' option with dropdown menu (#32)

Allows to use mods that require a larger memory pool to allocate from.
This commit is contained in:
Keaton 2024-10-21 23:16:41 -05:00 committed by GitHub
parent 0f3c7f920b
commit f76a97c976
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
54 changed files with 416 additions and 118 deletions

View file

@ -492,7 +492,7 @@ namespace Ryujinx.Common.Collections
Start = start; Start = start;
End = end; End = end;
Max = end; Max = end;
Values = [ new RangeNode<TKey, TValue>(start, end, value) ]; Values = [new RangeNode<TKey, TValue>(start, end, value)];
Parent = parent; Parent = parent;
} }
} }

View file

@ -4,8 +4,8 @@ using System.Diagnostics;
using System.Numerics; using System.Numerics;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Runtime.Intrinsics.X86;
using System.Runtime.Intrinsics; using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace Ryujinx.Common namespace Ryujinx.Common
@ -67,18 +67,198 @@ namespace Ryujinx.Common
private static ReadOnlySpan<byte> Xxh3KSecret => private static ReadOnlySpan<byte> Xxh3KSecret =>
[ [
0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c, 0xb8,
0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f, 0xfe,
0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21, 0x6c,
0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c, 0x39,
0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3, 0x23,
0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8, 0xa4,
0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d, 0x4b,
0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64, 0xbe,
0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb, 0x7c,
0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e, 0x01,
0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce, 0x81,
0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e 0x2c,
0xf7,
0x21,
0xad,
0x1c,
0xde,
0xd4,
0x6d,
0xe9,
0x83,
0x90,
0x97,
0xdb,
0x72,
0x40,
0xa4,
0xa4,
0xb7,
0xb3,
0x67,
0x1f,
0xcb,
0x79,
0xe6,
0x4e,
0xcc,
0xc0,
0xe5,
0x78,
0x82,
0x5a,
0xd0,
0x7d,
0xcc,
0xff,
0x72,
0x21,
0xb8,
0x08,
0x46,
0x74,
0xf7,
0x43,
0x24,
0x8e,
0xe0,
0x35,
0x90,
0xe6,
0x81,
0x3a,
0x26,
0x4c,
0x3c,
0x28,
0x52,
0xbb,
0x91,
0xc3,
0x00,
0xcb,
0x88,
0xd0,
0x65,
0x8b,
0x1b,
0x53,
0x2e,
0xa3,
0x71,
0x64,
0x48,
0x97,
0xa2,
0x0d,
0xf9,
0x4e,
0x38,
0x19,
0xef,
0x46,
0xa9,
0xde,
0xac,
0xd8,
0xa8,
0xfa,
0x76,
0x3f,
0xe3,
0x9c,
0x34,
0x3f,
0xf9,
0xdc,
0xbb,
0xc7,
0xc7,
0x0b,
0x4f,
0x1d,
0x8a,
0x51,
0xe0,
0x4b,
0xcd,
0xb4,
0x59,
0x31,
0xc8,
0x9f,
0x7e,
0xc9,
0xd9,
0x78,
0x73,
0x64,
0xea,
0xc5,
0xac,
0x83,
0x34,
0xd3,
0xeb,
0xc3,
0xc5,
0x81,
0xa0,
0xff,
0xfa,
0x13,
0x63,
0xeb,
0x17,
0x0d,
0xdd,
0x51,
0xb7,
0xf0,
0xda,
0x49,
0xd3,
0x16,
0x55,
0x26,
0x29,
0xd4,
0x68,
0x9e,
0x2b,
0x16,
0xbe,
0x58,
0x7d,
0x47,
0xa1,
0xfc,
0x8f,
0xf8,
0xb8,
0xd1,
0x7a,
0xd0,
0x31,
0xce,
0x45,
0xcb,
0x3a,
0x8f,
0x95,
0x16,
0x04,
0x28,
0xaf,
0xd7,
0xfb,
0xca,
0xbb,
0x4b,
0x40,
0x7e
]; ];
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -551,6 +731,6 @@ namespace Ryujinx.Common
}; };
} }
#endregion #endregion
} }
} }

View file

@ -7,10 +7,10 @@ namespace Ryujinx.Common
public static T AlignUp<T>(T value, T size) where T : IBinaryInteger<T> public static T AlignUp<T>(T value, T size) where T : IBinaryInteger<T>
=> (value + (size - T.One)) & -size; => (value + (size - T.One)) & -size;
public static T AlignDown<T>(T value, T size) where T : IBinaryInteger<T> public static T AlignDown<T>(T value, T size) where T : IBinaryInteger<T>
=> value & -size; => value & -size;
public static T DivRoundUp<T>(T value, T dividend) where T : IBinaryInteger<T> public static T DivRoundUp<T>(T value, T dividend) where T : IBinaryInteger<T>
=> (value + (dividend - T.One)) / dividend; => (value + (dividend - T.One)) / dividend;
public static int Pow2RoundDown(int value) => BitOperations.IsPow2(value) ? value : Pow2RoundUp(value) >> 1; public static int Pow2RoundDown(int value) => BitOperations.IsPow2(value) ? value : Pow2RoundUp(value) >> 1;

View file

@ -72,7 +72,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.H264
Flush(); Flush();
} }
public readonly Span<byte> AsSpan() public readonly Span<byte> AsSpan()
=> new Span<byte>(workBuffer)[.._offset]; => new Span<byte>(workBuffer)[.._offset];
public void WriteU(uint value, int valueSize) => WriteBits((int)value, valueSize); public void WriteU(uint value, int valueSize) => WriteBits((int)value, valueSize);

View file

@ -114,7 +114,7 @@ namespace Ryujinx.Graphics.Texture
_height == other._height && _height == other._height &&
_stride == other._stride && _stride == other._stride &&
_bytesPerPixel == other._bytesPerPixel; _bytesPerPixel == other._bytesPerPixel;
return !other._isLinear && _layoutConverter.LayoutMatches(other._layoutConverter); return !other._isLinear && _layoutConverter.LayoutMatches(other._layoutConverter);
} }

View file

@ -589,12 +589,12 @@ namespace Ryujinx.HLE.FileSystem
// So, we check it early for a better user experience. // So, we check it early for a better user experience.
if (_virtualFileSystem.KeySet.HeaderKey.IsZeros()) if (_virtualFileSystem.KeySet.HeaderKey.IsZeros())
throw new MissingKeyException("HeaderKey is empty. Cannot decrypt NCA headers."); throw new MissingKeyException("HeaderKey is empty. Cannot decrypt NCA headers.");
Dictionary<ulong, List<(NcaContentType type, string path)>> updateNcas = new(); Dictionary<ulong, List<(NcaContentType type, string path)>> updateNcas = new();
if (Directory.Exists(firmwarePackage)) if (Directory.Exists(firmwarePackage))
return VerifyAndGetVersionDirectory(firmwarePackage); return VerifyAndGetVersionDirectory(firmwarePackage);
if (!File.Exists(firmwarePackage)) if (!File.Exists(firmwarePackage))
throw new FileNotFoundException("Firmware file does not exist."); throw new FileNotFoundException("Firmware file does not exist.");
@ -620,7 +620,7 @@ namespace Ryujinx.HLE.FileSystem
return null; return null;
SystemVersion VerifyAndGetVersionDirectory(string firmwareDirectory) SystemVersion VerifyAndGetVersionDirectory(string firmwareDirectory)
=> VerifyAndGetVersion(new LocalFileSystem(firmwareDirectory)); => VerifyAndGetVersion(new LocalFileSystem(firmwareDirectory));
SystemVersion VerifyAndGetVersionZip(ZipArchive archive) SystemVersion VerifyAndGetVersionZip(ZipArchive archive)

View file

@ -30,6 +30,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemoryArrange.MemoryArrange4GiBAppletDev => 2048 * MiB, MemoryArrange.MemoryArrange4GiBAppletDev => 2048 * MiB,
MemoryArrange.MemoryArrange6GiB => 4916 * MiB, MemoryArrange.MemoryArrange6GiB => 4916 * MiB,
MemoryArrange.MemoryArrange8GiB => 6964 * MiB, MemoryArrange.MemoryArrange8GiB => 6964 * MiB,
MemoryArrange.MemoryArrange12GiB => 11060 * MiB,
_ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."), _ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."),
}; };
} }
@ -43,7 +44,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemoryArrange.MemoryArrange4GiBSystemDev => 448 * MiB, MemoryArrange.MemoryArrange4GiBSystemDev => 448 * MiB,
MemoryArrange.MemoryArrange6GiB => 562 * MiB, MemoryArrange.MemoryArrange6GiB => 562 * MiB,
MemoryArrange.MemoryArrange6GiBAppletDev => 2193 * MiB, MemoryArrange.MemoryArrange6GiBAppletDev => 2193 * MiB,
MemoryArrange.MemoryArrange8GiB => 562 * MiB, MemoryArrange.MemoryArrange8GiB or
MemoryArrange.MemoryArrange12GiB => 562 * MiB,
_ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."), _ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."),
}; };
} }
@ -71,6 +73,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemorySize.MemorySize4GiB => 4 * GiB, MemorySize.MemorySize4GiB => 4 * GiB,
MemorySize.MemorySize6GiB => 6 * GiB, MemorySize.MemorySize6GiB => 6 * GiB,
MemorySize.MemorySize8GiB => 8 * GiB, MemorySize.MemorySize8GiB => 8 * GiB,
MemorySize.MemorySize12GiB => 12 * GiB,
_ => throw new ArgumentException($"Invalid memory size \"{size}\"."), _ => throw new ArgumentException($"Invalid memory size \"{size}\"."),
}; };
} }

View file

@ -8,5 +8,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemoryArrange6GiB, MemoryArrange6GiB,
MemoryArrange6GiBAppletDev, MemoryArrange6GiBAppletDev,
MemoryArrange8GiB, MemoryArrange8GiB,
MemoryArrange12GiB,
} }
} }

View file

@ -5,5 +5,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemorySize4GiB = 0, MemorySize4GiB = 0,
MemorySize6GiB = 1, MemorySize6GiB = 1,
MemorySize8GiB = 2, MemorySize8GiB = 2,
MemorySize12GiB = 3,
} }
} }

View file

@ -6,11 +6,12 @@ namespace Ryujinx.HLE
public enum MemoryConfiguration public enum MemoryConfiguration
{ {
MemoryConfiguration4GiB = 0, MemoryConfiguration4GiB = 0,
MemoryConfiguration4GiBAppletDev = 1, MemoryConfiguration6GiB = 1,
MemoryConfiguration4GiBSystemDev = 2, MemoryConfiguration8GiB = 2,
MemoryConfiguration6GiB = 3, MemoryConfiguration12GiB = 3,
MemoryConfiguration6GiBAppletDev = 4, MemoryConfiguration4GiBAppletDev = 4,
MemoryConfiguration8GiB = 5, MemoryConfiguration4GiBSystemDev = 5,
MemoryConfiguration6GiBAppletDev = 6,
} }
static class MemoryConfigurationExtensions static class MemoryConfigurationExtensions
@ -28,6 +29,7 @@ namespace Ryujinx.HLE
MemoryConfiguration.MemoryConfiguration6GiB => MemoryArrange.MemoryArrange6GiB, MemoryConfiguration.MemoryConfiguration6GiB => MemoryArrange.MemoryArrange6GiB,
MemoryConfiguration.MemoryConfiguration6GiBAppletDev => MemoryArrange.MemoryArrange6GiBAppletDev, MemoryConfiguration.MemoryConfiguration6GiBAppletDev => MemoryArrange.MemoryArrange6GiBAppletDev,
MemoryConfiguration.MemoryConfiguration8GiB => MemoryArrange.MemoryArrange8GiB, MemoryConfiguration.MemoryConfiguration8GiB => MemoryArrange.MemoryArrange8GiB,
MemoryConfiguration.MemoryConfiguration12GiB => MemoryArrange.MemoryArrange12GiB,
_ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."), _ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."),
}; };
} }
@ -42,6 +44,7 @@ namespace Ryujinx.HLE
MemoryConfiguration.MemoryConfiguration6GiB or MemoryConfiguration.MemoryConfiguration6GiB or
MemoryConfiguration.MemoryConfiguration6GiBAppletDev => MemorySize.MemorySize6GiB, MemoryConfiguration.MemoryConfiguration6GiBAppletDev => MemorySize.MemorySize6GiB,
MemoryConfiguration.MemoryConfiguration8GiB => MemorySize.MemorySize8GiB, MemoryConfiguration.MemoryConfiguration8GiB => MemorySize.MemorySize8GiB,
MemoryConfiguration.MemoryConfiguration12GiB => MemorySize.MemorySize12GiB,
_ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."), _ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."),
}; };
} }
@ -56,6 +59,7 @@ namespace Ryujinx.HLE
MemoryConfiguration.MemoryConfiguration6GiB or MemoryConfiguration.MemoryConfiguration6GiB or
MemoryConfiguration.MemoryConfiguration6GiBAppletDev => 6 * GiB, MemoryConfiguration.MemoryConfiguration6GiBAppletDev => 6 * GiB,
MemoryConfiguration.MemoryConfiguration8GiB => 8 * GiB, MemoryConfiguration.MemoryConfiguration8GiB => 8 * GiB,
MemoryConfiguration.MemoryConfiguration12GiB => 12 * GiB,
_ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."), _ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."),
}; };
} }

View file

@ -18,7 +18,7 @@ namespace Ryujinx.Headless.SDL2
public bool TextProcessingEnabled public bool TextProcessingEnabled
{ {
get => Volatile.Read(ref _canProcessInput); get => Volatile.Read(ref _canProcessInput);
set set
{ {
Volatile.Write(ref _canProcessInput, value); Volatile.Write(ref _canProcessInput, value);

View file

@ -1,5 +1,6 @@
using CommandLine; using CommandLine;
using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration;
using Ryujinx.HLE;
using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.HOS.SystemState;
namespace Ryujinx.Headless.SDL2 namespace Ryujinx.Headless.SDL2
@ -219,8 +220,8 @@ namespace Ryujinx.Headless.SDL2
// Hacks // Hacks
[Option("expand-ram", Required = false, Default = false, HelpText = "Expands the RAM amount on the emulated system from 4GiB to 8GiB.")] [Option("dram-size", Required = false, Default = MemoryConfiguration.MemoryConfiguration4GiB, HelpText = "Set the RAM amount on the emulated system.")]
public bool ExpandRAM { get; set; } public MemoryConfiguration DramSize { get; set; }
[Option("ignore-missing-services", Required = false, Default = false, HelpText = "Enable ignoring missing services.")] [Option("ignore-missing-services", Required = false, Default = false, HelpText = "Enable ignoring missing services.")]
public bool IgnoreMissingServices { get; set; } public bool IgnoreMissingServices { get; set; }

View file

@ -562,7 +562,7 @@ namespace Ryujinx.Headless.SDL2
_userChannelPersistence, _userChannelPersistence,
renderer, renderer,
new SDL2HardwareDeviceDriver(), new SDL2HardwareDeviceDriver(),
options.ExpandRAM ? MemoryConfiguration.MemoryConfiguration8GiB : MemoryConfiguration.MemoryConfiguration4GiB, options.DramSize,
window, window,
options.SystemLanguage, options.SystemLanguage,
options.SystemRegion, options.SystemRegion,

View file

@ -147,7 +147,8 @@ namespace Ryujinx.Input.SDL2
public void Rumble(float lowFrequency, float highFrequency, uint durationMs) public void Rumble(float lowFrequency, float highFrequency, uint durationMs)
{ {
if (!Features.HasFlag(GamepadFeaturesFlag.Rumble)) return; if (!Features.HasFlag(GamepadFeaturesFlag.Rumble))
return;
ushort lowFrequencyRaw = (ushort)(lowFrequency * ushort.MaxValue); ushort lowFrequencyRaw = (ushort)(lowFrequency * ushort.MaxValue);
ushort highFrequencyRaw = (ushort)(highFrequency * ushort.MaxValue); ushort highFrequencyRaw = (ushort)(highFrequency * ushort.MaxValue);
@ -265,7 +266,8 @@ namespace Ryujinx.Input.SDL2
// ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator
foreach (ButtonMappingEntry entry in _buttonsUserMapping) foreach (ButtonMappingEntry entry in _buttonsUserMapping)
{ {
if (!entry.IsValid) continue; if (!entry.IsValid)
continue;
// Do not touch state of button already pressed // Do not touch state of button already pressed
if (!result.IsPressed(entry.To)) if (!result.IsPressed(entry.To))

View file

@ -3,6 +3,7 @@ using Ryujinx.Common.Configuration.Hid;
using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Configuration.Multiplayer;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.Common.Utilities; using Ryujinx.Common.Utilities;
using Ryujinx.HLE;
using Ryujinx.UI.Common.Configuration.System; using Ryujinx.UI.Common.Configuration.System;
using Ryujinx.UI.Common.Configuration.UI; using Ryujinx.UI.Common.Configuration.UI;
using System.Collections.Generic; using System.Collections.Generic;
@ -15,7 +16,7 @@ namespace Ryujinx.UI.Common.Configuration
/// <summary> /// <summary>
/// The current version of the file format /// The current version of the file format
/// </summary> /// </summary>
public const int CurrentVersion = 53; public const int CurrentVersion = 54;
/// <summary> /// <summary>
/// Version of the configuration file format /// Version of the configuration file format
@ -245,7 +246,7 @@ namespace Ryujinx.UI.Common.Configuration
/// <summary> /// <summary>
/// Expands the RAM amount on the emulated system from 4GiB to 8GiB /// Expands the RAM amount on the emulated system from 4GiB to 8GiB
/// </summary> /// </summary>
public bool ExpandRam { get; set; } public MemoryConfiguration DramSize { get; set; }
/// <summary> /// <summary>
/// Enable or disable ignoring missing services /// Enable or disable ignoring missing services

View file

@ -7,6 +7,7 @@ using Ryujinx.Common.Configuration.Hid.Keyboard;
using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Configuration.Multiplayer;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan;
using Ryujinx.HLE;
using Ryujinx.UI.Common.Configuration.System; using Ryujinx.UI.Common.Configuration.System;
using Ryujinx.UI.Common.Configuration.UI; using Ryujinx.UI.Common.Configuration.UI;
using Ryujinx.UI.Common.Helper; using Ryujinx.UI.Common.Helper;
@ -366,7 +367,7 @@ namespace Ryujinx.UI.Common.Configuration
/// <summary> /// <summary>
/// Defines the amount of RAM available on the emulated system, and how it is distributed /// Defines the amount of RAM available on the emulated system, and how it is distributed
/// </summary> /// </summary>
public ReactiveObject<bool> ExpandRam { get; private set; } public ReactiveObject<MemoryConfiguration> DramSize { get; private set; }
/// <summary> /// <summary>
/// Enable or disable ignoring missing services /// Enable or disable ignoring missing services
@ -400,8 +401,8 @@ namespace Ryujinx.UI.Common.Configuration
AudioBackend.Event += static (sender, e) => LogValueChange(e, nameof(AudioBackend)); AudioBackend.Event += static (sender, e) => LogValueChange(e, nameof(AudioBackend));
MemoryManagerMode = new ReactiveObject<MemoryManagerMode>(); MemoryManagerMode = new ReactiveObject<MemoryManagerMode>();
MemoryManagerMode.Event += static (sender, e) => LogValueChange(e, nameof(MemoryManagerMode)); MemoryManagerMode.Event += static (sender, e) => LogValueChange(e, nameof(MemoryManagerMode));
ExpandRam = new ReactiveObject<bool>(); DramSize = new ReactiveObject<MemoryConfiguration>();
ExpandRam.Event += static (sender, e) => LogValueChange(e, nameof(ExpandRam)); DramSize.Event += static (sender, e) => LogValueChange(e, nameof(DramSize));
IgnoreMissingServices = new ReactiveObject<bool>(); IgnoreMissingServices = new ReactiveObject<bool>();
IgnoreMissingServices.Event += static (sender, e) => LogValueChange(e, nameof(IgnoreMissingServices)); IgnoreMissingServices.Event += static (sender, e) => LogValueChange(e, nameof(IgnoreMissingServices));
AudioVolume = new ReactiveObject<float>(); AudioVolume = new ReactiveObject<float>();
@ -721,7 +722,7 @@ namespace Ryujinx.UI.Common.Configuration
AudioBackend = System.AudioBackend, AudioBackend = System.AudioBackend,
AudioVolume = System.AudioVolume, AudioVolume = System.AudioVolume,
MemoryManagerMode = System.MemoryManagerMode, MemoryManagerMode = System.MemoryManagerMode,
ExpandRam = System.ExpandRam, DramSize = System.DramSize,
IgnoreMissingServices = System.IgnoreMissingServices, IgnoreMissingServices = System.IgnoreMissingServices,
UseHypervisor = System.UseHypervisor, UseHypervisor = System.UseHypervisor,
GuiColumns = new GuiColumns GuiColumns = new GuiColumns
@ -834,7 +835,7 @@ namespace Ryujinx.UI.Common.Configuration
System.AudioBackend.Value = AudioBackend.SDL2; System.AudioBackend.Value = AudioBackend.SDL2;
System.AudioVolume.Value = 1; System.AudioVolume.Value = 1;
System.MemoryManagerMode.Value = MemoryManagerMode.HostMappedUnsafe; System.MemoryManagerMode.Value = MemoryManagerMode.HostMappedUnsafe;
System.ExpandRam.Value = false; System.DramSize.Value = MemoryConfiguration.MemoryConfiguration4GiB;
System.IgnoreMissingServices.Value = false; System.IgnoreMissingServices.Value = false;
System.UseHypervisor.Value = true; System.UseHypervisor.Value = true;
Multiplayer.LanInterfaceId.Value = "0"; Multiplayer.LanInterfaceId.Value = "0";
@ -1513,6 +1514,15 @@ namespace Ryujinx.UI.Common.Configuration
configurationFileUpdated = true; configurationFileUpdated = true;
} }
if (configurationFileFormat.Version < 54)
{
Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 54.");
configurationFileFormat.DramSize = MemoryConfiguration.MemoryConfiguration4GiB;
configurationFileUpdated = true;
}
Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog;
Graphics.ResScale.Value = configurationFileFormat.ResScale; Graphics.ResScale.Value = configurationFileFormat.ResScale;
Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom; Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom;
@ -1559,7 +1569,7 @@ namespace Ryujinx.UI.Common.Configuration
System.AudioBackend.Value = configurationFileFormat.AudioBackend; System.AudioBackend.Value = configurationFileFormat.AudioBackend;
System.AudioVolume.Value = configurationFileFormat.AudioVolume; System.AudioVolume.Value = configurationFileFormat.AudioVolume;
System.MemoryManagerMode.Value = configurationFileFormat.MemoryManagerMode; System.MemoryManagerMode.Value = configurationFileFormat.MemoryManagerMode;
System.ExpandRam.Value = configurationFileFormat.ExpandRam; System.DramSize.Value = configurationFileFormat.DramSize;
System.IgnoreMissingServices.Value = configurationFileFormat.IgnoreMissingServices; System.IgnoreMissingServices.Value = configurationFileFormat.IgnoreMissingServices;
System.UseHypervisor.Value = configurationFileFormat.UseHypervisor; System.UseHypervisor.Value = configurationFileFormat.UseHypervisor;
UI.GuiColumns.FavColumn.Value = configurationFileFormat.GuiColumns.FavColumn; UI.GuiColumns.FavColumn.Value = configurationFileFormat.GuiColumns.FavColumn;

View file

@ -14,8 +14,8 @@ namespace Ryujinx.UI.Common
public static class DiscordIntegrationModule public static class DiscordIntegrationModule
{ {
public static Timestamps StartedAt { get; set; } public static Timestamps StartedAt { get; set; }
private static readonly string _description = ReleaseInformation.IsValid private static readonly string _description = ReleaseInformation.IsValid
? $"v{ReleaseInformation.Version} {ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}@{ReleaseInformation.BuildGitHash}" ? $"v{ReleaseInformation.Version} {ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}@{ReleaseInformation.BuildGitHash}"
: "dev build"; : "dev build";
@ -80,7 +80,7 @@ namespace Ryujinx.UI.Common
}, },
Details = TruncateToByteLength($"Playing {appMeta.Title}"), Details = TruncateToByteLength($"Playing {appMeta.Title}"),
State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5 State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5
? $"Total play time: {appMeta.TimePlayed.Humanize(2, false)}" ? $"Total play time: {appMeta.TimePlayed.Humanize(2, false)}"
: "Never played", : "Never played",
Timestamps = Timestamps.Now Timestamps = Timestamps.Now
}); });
@ -120,7 +120,7 @@ namespace Ryujinx.UI.Common
_discordClient?.Dispose(); _discordClient?.Dispose();
} }
private static readonly string[] _discordGameAssetKeys = private static readonly string[] _discordGameAssetKeys =
[ [
"01002da013484000", // The Legend of Zelda: Skyward Sword HD "01002da013484000", // The Legend of Zelda: Skyward Sword HD
"01007ef00011e000", // The Legend of Zelda: Breath of the Wild "01007ef00011e000", // The Legend of Zelda: Breath of the Wild

View file

@ -98,7 +98,6 @@ namespace Ryujinx.UI.Common.Helper
if (baseApplicationExtension is not (".nro" or ".nso")) if (baseApplicationExtension is not (".nro" or ".nso"))
return IsFirmwareValid(contentManager, out error); return IsFirmwareValid(contentManager, out error);
error = UserError.Success;
} }
error = UserError.ApplicationNotFound; error = UserError.ApplicationNotFound;

View file

@ -9,7 +9,7 @@ namespace Ryujinx.UI.Common.Helper
{ {
if (activeProcess == null) if (activeProcess == null)
return string.Empty; return string.Empty;
string titleNameSection = string.IsNullOrWhiteSpace(activeProcess.Name) ? string.Empty : $" {activeProcess.Name}"; string titleNameSection = string.IsNullOrWhiteSpace(activeProcess.Name) ? string.Empty : $" {activeProcess.Name}";
string titleVersionSection = string.IsNullOrWhiteSpace(activeProcess.DisplayVersion) ? string.Empty : $" v{activeProcess.DisplayVersion}"; string titleVersionSection = string.IsNullOrWhiteSpace(activeProcess.DisplayVersion) ? string.Empty : $" v{activeProcess.DisplayVersion}";
string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})"; string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})";

View file

@ -87,7 +87,8 @@ namespace Ryujinx.UI.Common.Helper
foreach (string path in titleUpdateMetadata.Paths) foreach (string path in titleUpdateMetadata.Paths)
{ {
if (!File.Exists(path)) continue; if (!File.Exists(path))
continue;
try try
{ {
@ -104,7 +105,7 @@ namespace Ryujinx.UI.Common.Helper
if (controlNca is null || patchNca is null) if (controlNca is null || patchNca is null)
continue; continue;
ApplicationControlProperty controlData = new(); ApplicationControlProperty controlData = new();
using UniqueRef<IFile> nacpFile = new(); using UniqueRef<IFile> nacpFile = new();
@ -144,7 +145,7 @@ namespace Ryujinx.UI.Common.Helper
return result; return result;
} }
private static string PathToGameUpdatesJson(ulong applicationIdBase) private static string PathToGameUpdatesJson(ulong applicationIdBase)
=> Path.Combine(AppDataManager.GamesDirPath, applicationIdBase.ToString("x16"), "updates.json"); => Path.Combine(AppDataManager.GamesDirPath, applicationIdBase.ToString("x16"), "updates.json");
} }
} }

View file

@ -34,10 +34,10 @@ namespace Ryujinx.UI.Common.SystemInfo
{ {
if (OperatingSystem.IsWindows()) if (OperatingSystem.IsWindows())
return new WindowsSystemInfo(); return new WindowsSystemInfo();
if (OperatingSystem.IsLinux()) if (OperatingSystem.IsLinux())
return new LinuxSystemInfo(); return new LinuxSystemInfo();
if (OperatingSystem.IsMacOS()) if (OperatingSystem.IsMacOS())
return new MacOSSystemInfo(); return new MacOSSystemInfo();

View file

@ -22,8 +22,8 @@ namespace Ryujinx.Ava
public class App : Application public class App : Application
{ {
internal static string FormatTitle(LocaleKeys? windowTitleKey = null) internal static string FormatTitle(LocaleKeys? windowTitleKey = null)
=> windowTitleKey is null => windowTitleKey is null
? $"Ryujinx {Program.Version}" ? $"Ryujinx {Program.Version}"
: $"Ryujinx {Program.Version} - {LocaleManager.Instance[windowTitleKey.Value]}"; : $"Ryujinx {Program.Version} - {LocaleManager.Instance[windowTitleKey.Value]}";
public static MainWindow MainWindow => Current! public static MainWindow MainWindow => Current!

View file

@ -541,7 +541,7 @@ namespace Ryujinx.Ava
{ {
if (Device.Processes != null) if (Device.Processes != null)
MainWindowViewModel.UpdateGameMetadata(Device.Processes.ActiveApplication.ProgramIdText); MainWindowViewModel.UpdateGameMetadata(Device.Processes.ActiveApplication.ProgramIdText);
ConfigurationState.Instance.System.IgnoreMissingServices.Event -= UpdateIgnoreMissingServicesState; ConfigurationState.Instance.System.IgnoreMissingServices.Event -= UpdateIgnoreMissingServicesState;
ConfigurationState.Instance.Graphics.AspectRatio.Event -= UpdateAspectRatioState; ConfigurationState.Instance.Graphics.AspectRatio.Event -= UpdateAspectRatioState;
@ -786,7 +786,7 @@ namespace Ryujinx.Ava
return false; return false;
} }
ApplicationMetadata appMeta = ApplicationLibrary.LoadAndSaveMetaData(Device.Processes.ActiveApplication.ProgramIdText, ApplicationMetadata appMeta = ApplicationLibrary.LoadAndSaveMetaData(Device.Processes.ActiveApplication.ProgramIdText,
appMetadata => appMetadata.UpdatePreGame() appMetadata => appMetadata.UpdatePreGame()
); );
@ -845,9 +845,7 @@ namespace Ryujinx.Ava
Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}"); Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}");
// Initialize Configuration. // Initialize Configuration.
var memoryConfiguration = ConfigurationState.Instance.System.ExpandRam var memoryConfiguration = ConfigurationState.Instance.System.DramSize.Value;
? MemoryConfiguration.MemoryConfiguration8GiB
: MemoryConfiguration.MemoryConfiguration4GiB;
Device = new Switch(new HLEConfiguration( Device = new Switch(new HLEConfiguration(
VirtualFileSystem, VirtualFileSystem,
@ -867,7 +865,7 @@ namespace Ryujinx.Ava
ConfigurationState.Instance.System.EnableInternetAccess, ConfigurationState.Instance.System.EnableInternetAccess,
ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None,
ConfigurationState.Instance.System.FsGlobalAccessLogMode, ConfigurationState.Instance.System.FsGlobalAccessLogMode,
ConfigurationState.Instance.System.SystemTimeOffset, ConfigurationState.Instance.System.SystemTimeOffset,
ConfigurationState.Instance.System.TimeZone, ConfigurationState.Instance.System.TimeZone,
ConfigurationState.Instance.System.MemoryManagerMode, ConfigurationState.Instance.System.MemoryManagerMode,
ConfigurationState.Instance.System.IgnoreMissingServices, ConfigurationState.Instance.System.IgnoreMissingServices,

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "هاكات", "SettingsTabSystemHacks": "هاكات",
"SettingsTabSystemHacksNote": "قد يتسبب في عدم الاستقرار", "SettingsTabSystemHacksNote": "قد يتسبب في عدم الاستقرار",
"SettingsTabSystemExpandDramSize": "استخدام تخطيط الذاكرة البديل (المطورين)", "SettingsTabSystemDramSize": "استخدام تخطيط الذاكرة البديل (المطورين)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "تجاهل الخدمات المفقودة", "SettingsTabSystemIgnoreMissingServices": "تجاهل الخدمات المفقودة",
"SettingsTabGraphics": "الرسومات", "SettingsTabGraphics": "الرسومات",
"SettingsTabGraphicsAPI": "API الرسومات ", "SettingsTabGraphicsAPI": "API الرسومات ",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": " (Kann Fehler verursachen)", "SettingsTabSystemHacksNote": " (Kann Fehler verursachen)",
"SettingsTabSystemExpandDramSize": "Erweitere DRAM Größe auf 6GiB", "SettingsTabSystemDramSize": "DRAM Größe:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignoriere fehlende Dienste", "SettingsTabSystemIgnoreMissingServices": "Ignoriere fehlende Dienste",
"SettingsTabGraphics": "Grafik", "SettingsTabGraphics": "Grafik",
"SettingsTabGraphicsAPI": "Grafik-API", "SettingsTabGraphicsAPI": "Grafik-API",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Μικροδιορθώσεις", "SettingsTabSystemHacks": "Μικροδιορθώσεις",
"SettingsTabSystemHacksNote": " (Μπορεί να προκαλέσουν αστάθεια)", "SettingsTabSystemHacksNote": " (Μπορεί να προκαλέσουν αστάθεια)",
"SettingsTabSystemExpandDramSize": "Επέκταση μεγέθους DRAM στα 6GiB", "SettingsTabSystemDramSize": "Μέγεθος DRAM:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Αγνόηση υπηρεσιών που λείπουν", "SettingsTabSystemIgnoreMissingServices": "Αγνόηση υπηρεσιών που λείπουν",
"SettingsTabGraphics": "Γραφικά", "SettingsTabGraphics": "Γραφικά",
"SettingsTabGraphicsAPI": "API Γραφικά", "SettingsTabGraphicsAPI": "API Γραφικά",

View file

@ -149,7 +149,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": "May cause instability", "SettingsTabSystemHacksNote": "May cause instability",
"SettingsTabSystemExpandDramSize": "Expand DRAM to 8GiB", "SettingsTabSystemDramSize": "DRAM size:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignore Missing Services", "SettingsTabSystemIgnoreMissingServices": "Ignore Missing Services",
"SettingsTabGraphics": "Graphics", "SettingsTabGraphics": "Graphics",
"SettingsTabGraphicsAPI": "Graphics API", "SettingsTabGraphicsAPI": "Graphics API",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": " (Pueden causar inestabilidad)", "SettingsTabSystemHacksNote": " (Pueden causar inestabilidad)",
"SettingsTabSystemExpandDramSize": "Usar diseño alternativo de memoria (Desarrolladores)", "SettingsTabSystemDramSize": "Tamaño DRAM:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignorar servicios no implementados", "SettingsTabSystemIgnoreMissingServices": "Ignorar servicios no implementados",
"SettingsTabGraphics": "Gráficos", "SettingsTabGraphics": "Gráficos",
"SettingsTabGraphicsAPI": "API de gráficos", "SettingsTabGraphicsAPI": "API de gráficos",

View file

@ -149,7 +149,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": "Cela peut causer des instabilités", "SettingsTabSystemHacksNote": "Cela peut causer des instabilités",
"SettingsTabSystemExpandDramSize": "Étendre la mémoire à 8GiO", "SettingsTabSystemDramSize": "Taille de la DRAM:",
"SettingsTabSystemDramSize4GiB": "4GiO",
"SettingsTabSystemDramSize6GiB": "6GiO",
"SettingsTabSystemDramSize8GiB": "8GiO",
"SettingsTabSystemDramSize12GiB": "12GiO",
"SettingsTabSystemIgnoreMissingServices": "Ignorer les services manquants", "SettingsTabSystemIgnoreMissingServices": "Ignorer les services manquants",
"SettingsTabGraphics": "Graphismes", "SettingsTabGraphics": "Graphismes",
"SettingsTabGraphicsAPI": "API Graphique", "SettingsTabGraphicsAPI": "API Graphique",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "האצות", "SettingsTabSystemHacks": "האצות",
"SettingsTabSystemHacksNote": "עלול לגרום לאי יציבות", "SettingsTabSystemHacksNote": "עלול לגרום לאי יציבות",
"SettingsTabSystemExpandDramSize": "השתמש בפריסת זיכרון חלופית (נועד למפתחים)", "SettingsTabSystemDramSize": "השתמש בפריסת זיכרון חלופית (נועד למפתחים)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "התעלם משירותים חסרים", "SettingsTabSystemIgnoreMissingServices": "התעלם משירותים חסרים",
"SettingsTabGraphics": "גרפיקה", "SettingsTabGraphics": "גרפיקה",
"SettingsTabGraphicsAPI": "ממשק גראפי", "SettingsTabGraphicsAPI": "ממשק גראפי",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Espedienti", "SettingsTabSystemHacks": "Espedienti",
"SettingsTabSystemHacksNote": "Possono causare instabilità", "SettingsTabSystemHacksNote": "Possono causare instabilità",
"SettingsTabSystemExpandDramSize": "Usa layout di memoria alternativo (per sviluppatori)", "SettingsTabSystemDramSize": "Usa layout di memoria alternativo (per sviluppatori)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignora servizi mancanti", "SettingsTabSystemIgnoreMissingServices": "Ignora servizi mancanti",
"SettingsTabGraphics": "Grafica", "SettingsTabGraphics": "Grafica",
"SettingsTabGraphicsAPI": "API grafica", "SettingsTabGraphicsAPI": "API grafica",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "ハック", "SettingsTabSystemHacks": "ハック",
"SettingsTabSystemHacksNote": " (挙動が不安定になる可能性があります)", "SettingsTabSystemHacksNote": " (挙動が不安定になる可能性があります)",
"SettingsTabSystemExpandDramSize": "DRAMサイズを6GiBに拡大する", "SettingsTabSystemDramSize": "DRAMサイズ:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "未実装サービスを無視する", "SettingsTabSystemIgnoreMissingServices": "未実装サービスを無視する",
"SettingsTabGraphics": "グラフィックス", "SettingsTabGraphics": "グラフィックス",
"SettingsTabGraphicsAPI": "グラフィックスAPI", "SettingsTabGraphicsAPI": "グラフィックスAPI",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "해킹", "SettingsTabSystemHacks": "해킹",
"SettingsTabSystemHacksNote": "불안정성을 유발할 수 있음", "SettingsTabSystemHacksNote": "불안정성을 유발할 수 있음",
"SettingsTabSystemExpandDramSize": "대체 메모리 레이아웃 사용(개발자)", "SettingsTabSystemDramSize": "대체 메모리 레이아웃 사용(개발자)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "누락된 서비스 무시", "SettingsTabSystemIgnoreMissingServices": "누락된 서비스 무시",
"SettingsTabGraphics": "그래픽", "SettingsTabGraphics": "그래픽",
"SettingsTabGraphicsAPI": "그래픽 API", "SettingsTabGraphicsAPI": "그래픽 API",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacki", "SettingsTabSystemHacks": "Hacki",
"SettingsTabSystemHacksNote": " (mogą powodować niestabilność)", "SettingsTabSystemHacksNote": " (mogą powodować niestabilność)",
"SettingsTabSystemExpandDramSize": "Użyj alternatywnego układu pamięci (Deweloperzy)", "SettingsTabSystemDramSize": "Użyj alternatywnego układu pamięci (Deweloperzy)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignoruj Brakujące Usługi", "SettingsTabSystemIgnoreMissingServices": "Ignoruj Brakujące Usługi",
"SettingsTabGraphics": "Grafika", "SettingsTabGraphics": "Grafika",
"SettingsTabGraphicsAPI": "Graficzne API", "SettingsTabGraphicsAPI": "Graficzne API",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": " (Pode causar instabilidade)", "SettingsTabSystemHacksNote": " (Pode causar instabilidade)",
"SettingsTabSystemExpandDramSize": "Expandir memória para 6GiB", "SettingsTabSystemDramSize": "Tamanho da DRAM:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignorar serviços não implementados", "SettingsTabSystemIgnoreMissingServices": "Ignorar serviços não implementados",
"SettingsTabGraphics": "Gráficos", "SettingsTabGraphics": "Gráficos",
"SettingsTabGraphicsAPI": "API gráfica", "SettingsTabGraphicsAPI": "API gráfica",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Хаки", "SettingsTabSystemHacks": "Хаки",
"SettingsTabSystemHacksNote": "Возможна нестабильная работа", "SettingsTabSystemHacksNote": "Возможна нестабильная работа",
"SettingsTabSystemExpandDramSize": "Использовать альтернативный макет памяти (для разработчиков)", "SettingsTabSystemDramSize": "Использовать альтернативный макет памяти (для разработчиков)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Игнорировать отсутствующие службы", "SettingsTabSystemIgnoreMissingServices": "Игнорировать отсутствующие службы",
"SettingsTabGraphics": "Графика", "SettingsTabGraphics": "Графика",
"SettingsTabGraphicsAPI": "Графические API", "SettingsTabGraphicsAPI": "Графические API",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "แฮ็ก", "SettingsTabSystemHacks": "แฮ็ก",
"SettingsTabSystemHacksNote": "อาจทำให้เกิดข้อผิดพลาดได้", "SettingsTabSystemHacksNote": "อาจทำให้เกิดข้อผิดพลาดได้",
"SettingsTabSystemExpandDramSize": "ใช้รูปแบบหน่วยความจำสำรอง (โหมดนักพัฒนา)", "SettingsTabSystemDramSize": "ใช้รูปแบบหน่วยความจำสำรอง (โหมดนักพัฒนา)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "ไม่สนใจบริการที่ขาดหายไป", "SettingsTabSystemIgnoreMissingServices": "ไม่สนใจบริการที่ขาดหายไป",
"SettingsTabGraphics": "กราฟิก", "SettingsTabGraphics": "กราฟิก",
"SettingsTabGraphicsAPI": "กราฟฟิก API", "SettingsTabGraphicsAPI": "กราฟฟิก API",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hack'ler", "SettingsTabSystemHacks": "Hack'ler",
"SettingsTabSystemHacksNote": " (dengesizlik oluşturabilir)", "SettingsTabSystemHacksNote": " (dengesizlik oluşturabilir)",
"SettingsTabSystemExpandDramSize": "Alternatif bellek düzeni kullan (Geliştirici)", "SettingsTabSystemDramSize": "Alternatif bellek düzeni kullan (Geliştirici)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Eksik Servisleri Görmezden Gel", "SettingsTabSystemIgnoreMissingServices": "Eksik Servisleri Görmezden Gel",
"SettingsTabGraphics": "Grafikler", "SettingsTabGraphics": "Grafikler",
"SettingsTabGraphicsAPI": "Grafikler API", "SettingsTabGraphicsAPI": "Grafikler API",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Хитрощі", "SettingsTabSystemHacks": "Хитрощі",
"SettingsTabSystemHacksNote": " (може викликати нестабільність)", "SettingsTabSystemHacksNote": " (може викликати нестабільність)",
"SettingsTabSystemExpandDramSize": "Використовувати альтернативне розташування пам'яті (розробники)", "SettingsTabSystemDramSize": "Використовувати альтернативне розташування пам'яті (розробники)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ігнорувати відсутні служби", "SettingsTabSystemIgnoreMissingServices": "Ігнорувати відсутні служби",
"SettingsTabGraphics": "Графіка", "SettingsTabGraphics": "Графіка",
"SettingsTabGraphicsAPI": "Графічний API", "SettingsTabGraphicsAPI": "Графічний API",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "修改", "SettingsTabSystemHacks": "修改",
"SettingsTabSystemHacksNote": "会导致模拟器不稳定", "SettingsTabSystemHacksNote": "会导致模拟器不稳定",
"SettingsTabSystemExpandDramSize": "使用开发机的内存布局(开发人员使用)", "SettingsTabSystemDramSize": "使用开发机的内存布局(开发人员使用)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "忽略缺失的服务", "SettingsTabSystemIgnoreMissingServices": "忽略缺失的服务",
"SettingsTabGraphics": "图形", "SettingsTabGraphics": "图形",
"SettingsTabGraphicsAPI": "图形 API", "SettingsTabGraphicsAPI": "图形 API",

View file

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "補釘修正", "SettingsTabSystemHacks": "補釘修正",
"SettingsTabSystemHacksNote": "可能導致模擬器不穩定", "SettingsTabSystemHacksNote": "可能導致模擬器不穩定",
"SettingsTabSystemExpandDramSize": "使用替代的記憶體配置 (開發者專用)", "SettingsTabSystemDramSize": "使用替代的記憶體配置 (開發者專用)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "忽略缺少的模擬器功能", "SettingsTabSystemIgnoreMissingServices": "忽略缺少的模擬器功能",
"SettingsTabGraphics": "圖形", "SettingsTabGraphics": "圖形",
"SettingsTabGraphicsAPI": "圖形 API", "SettingsTabGraphicsAPI": "圖形 API",

View file

@ -21,7 +21,8 @@ namespace Ryujinx.Ava.Common.Locale
new CompiledBindingPathBuilder() new CompiledBindingPathBuilder()
.Property(PropertyInfo, PropertyInfoAccessorFactory.CreateInpcPropertyAccessor) .Property(PropertyInfo, PropertyInfoAccessorFactory.CreateInpcPropertyAccessor)
.Build() .Build()
) { Source = LocaleManager.Instance } )
{ Source = LocaleManager.Instance }
.ProvideValue(serviceProvider); .ProvideValue(serviceProvider);
} }
} }

View file

@ -80,8 +80,8 @@ namespace Ryujinx.Ava.Common.Locale
} }
// If the locale doesn't contain the key return the default one. // If the locale doesn't contain the key return the default one.
return _localeDefaultStrings.TryGetValue(key, out string defaultValue) return _localeDefaultStrings.TryGetValue(key, out string defaultValue)
? defaultValue ? defaultValue
: key.ToString(); // If the locale text doesn't exist return the key. : key.ToString(); // If the locale text doesn't exist return the key.
} }
set set

View file

@ -72,23 +72,23 @@ namespace Ryujinx.Ava
EnableMultiTouch = true, EnableMultiTouch = true,
EnableIme = true, EnableIme = true,
EnableInputFocusProxy = Environment.GetEnvironmentVariable("XDG_CURRENT_DESKTOP") == "gamescope", EnableInputFocusProxy = Environment.GetEnvironmentVariable("XDG_CURRENT_DESKTOP") == "gamescope",
RenderingMode = UseHardwareAcceleration RenderingMode = UseHardwareAcceleration
? [ X11RenderingMode.Glx, X11RenderingMode.Software ] ? [X11RenderingMode.Glx, X11RenderingMode.Software]
: [ X11RenderingMode.Software ], : [X11RenderingMode.Software],
}) })
.With(new Win32PlatformOptions .With(new Win32PlatformOptions
{ {
WinUICompositionBackdropCornerRadius = 8.0f, WinUICompositionBackdropCornerRadius = 8.0f,
RenderingMode = UseHardwareAcceleration RenderingMode = UseHardwareAcceleration
? [ Win32RenderingMode.AngleEgl, Win32RenderingMode.Software ] ? [Win32RenderingMode.AngleEgl, Win32RenderingMode.Software]
: [ Win32RenderingMode.Software ], : [Win32RenderingMode.Software],
}); });
private static void Initialize(string[] args) private static void Initialize(string[] args)
{ {
// Ensure Discord presence timestamp begins at the absolute start of when Ryujinx is launched // Ensure Discord presence timestamp begins at the absolute start of when Ryujinx is launched
DiscordIntegrationModule.StartedAt = Timestamps.Now; DiscordIntegrationModule.StartedAt = Timestamps.Now;
// Parse arguments // Parse arguments
CommandLineState.ParseArguments(args); CommandLineState.ParseArguments(args);
@ -203,7 +203,7 @@ namespace Ryujinx.Ava
// Check if docked mode was overriden. // Check if docked mode was overriden.
if (CommandLineState.OverrideDockedMode.HasValue) if (CommandLineState.OverrideDockedMode.HasValue)
ConfigurationState.Instance.System.EnableDockedMode.Value = CommandLineState.OverrideDockedMode.Value; ConfigurationState.Instance.System.EnableDockedMode.Value = CommandLineState.OverrideDockedMode.Value;
// Check if HideCursor was overridden. // Check if HideCursor was overridden.
if (CommandLineState.OverrideHideCursor is not null) if (CommandLineState.OverrideHideCursor is not null)
@ -214,7 +214,7 @@ namespace Ryujinx.Ava
"always" => HideCursorMode.Always, "always" => HideCursorMode.Always,
_ => ConfigurationState.Instance.HideCursor, _ => ConfigurationState.Instance.HideCursor,
}; };
// Check if hardware-acceleration was overridden. // Check if hardware-acceleration was overridden.
if (CommandLineState.OverrideHardwareAcceleration != null) if (CommandLineState.OverrideHardwareAcceleration != null)

View file

@ -136,7 +136,7 @@ namespace Ryujinx.Ava.UI.Applet
_hiddenTextBox.CaretIndex = cursorBegin; _hiddenTextBox.CaretIndex = cursorBegin;
}); });
public void SetText(string text, int cursorBegin, int cursorEnd) => public void SetText(string text, int cursorBegin, int cursorEnd) =>
Dispatcher.UIThread.Post(() => Dispatcher.UIThread.Post(() =>
{ {
_hiddenTextBox.Text = text; _hiddenTextBox.Text = text;

View file

@ -224,7 +224,7 @@ namespace Ryujinx.Ava.UI.Controls
{ {
if (sender is not MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) if (sender is not MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel })
return; return;
string ptcDir = Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString, "cache", "cpu"); string ptcDir = Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString, "cache", "cpu");
string mainDir = Path.Combine(ptcDir, "0"); string mainDir = Path.Combine(ptcDir, "0");
string backupDir = Path.Combine(ptcDir, "1"); string backupDir = Path.Combine(ptcDir, "1");

View file

@ -199,7 +199,7 @@ namespace Ryujinx.Ava.UI.Helpers
string secondaryText, string secondaryText,
string acceptButton, string acceptButton,
string closeButton, string closeButton,
string title) string title)
=> ShowTextDialog( => ShowTextDialog(
title, title,
primary, primary,
@ -215,7 +215,7 @@ namespace Ryujinx.Ava.UI.Helpers
string acceptButtonText, string acceptButtonText,
string cancelButtonText, string cancelButtonText,
string title, string title,
UserResult primaryButtonResult = UserResult.Yes) UserResult primaryButtonResult = UserResult.Yes)
=> await ShowTextDialog( => await ShowTextDialog(
string.IsNullOrWhiteSpace(title) ? LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle] : title, string.IsNullOrWhiteSpace(title) ? LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle] : title,
primaryText, primaryText,
@ -226,7 +226,7 @@ namespace Ryujinx.Ava.UI.Helpers
(int)Symbol.Help, (int)Symbol.Help,
primaryButtonResult); primaryButtonResult);
internal static async Task<UserResult> CreateLocalizedConfirmationDialog(string primaryText, string secondaryText) internal static async Task<UserResult> CreateLocalizedConfirmationDialog(string primaryText, string secondaryText)
=> await CreateConfirmationDialog( => await CreateConfirmationDialog(
primaryText, primaryText,
secondaryText, secondaryText,
@ -234,7 +234,7 @@ namespace Ryujinx.Ava.UI.Helpers
LocaleManager.Instance[LocaleKeys.InputDialogNo], LocaleManager.Instance[LocaleKeys.InputDialogNo],
LocaleManager.Instance[LocaleKeys.RyujinxConfirm]); LocaleManager.Instance[LocaleKeys.RyujinxConfirm]);
internal static async Task CreateUpdaterInfoDialog(string primary, string secondaryText) internal static async Task CreateUpdaterInfoDialog(string primary, string secondaryText)
=> await ShowTextDialog( => await ShowTextDialog(
LocaleManager.Instance[LocaleKeys.DialogUpdaterTitle], LocaleManager.Instance[LocaleKeys.DialogUpdaterTitle],
primary, primary,
@ -244,7 +244,7 @@ namespace Ryujinx.Ava.UI.Helpers
LocaleManager.Instance[LocaleKeys.InputDialogOk], LocaleManager.Instance[LocaleKeys.InputDialogOk],
(int)Symbol.Important); (int)Symbol.Important);
internal static async Task CreateWarningDialog(string primary, string secondaryText) internal static async Task CreateWarningDialog(string primary, string secondaryText)
=> await ShowTextDialog( => await ShowTextDialog(
LocaleManager.Instance[LocaleKeys.DialogWarningTitle], LocaleManager.Instance[LocaleKeys.DialogWarningTitle],
primary, primary,

View file

@ -39,8 +39,8 @@ namespace Ryujinx.Ava.UI.Helpers
await ContentDialogHelper.CreateInfoDialog( await ContentDialogHelper.CreateInfoDialog(
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogUserErrorDialogMessage, errorCode, GetErrorTitle(error)), LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogUserErrorDialogMessage, errorCode, GetErrorTitle(error)),
GetErrorDescription(error), GetErrorDescription(error),
"", "",
LocaleManager.Instance[LocaleKeys.InputDialogOk], LocaleManager.Instance[LocaleKeys.InputDialogOk],
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogUserErrorDialogTitle, errorCode)); LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogUserErrorDialogTitle, errorCode));
} }

View file

@ -45,7 +45,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
private PlayerIndex _playerId; private PlayerIndex _playerId;
private int _controller; private int _controller;
private int _controllerNumber; private readonly int _controllerNumber;
private string _controllerImage; private string _controllerImage;
private int _device; private int _device;
private object _configViewModel; private object _configViewModel;

View file

@ -913,7 +913,7 @@ namespace Ryujinx.Ava.UI.ViewModels
public KeyGesture PauseKey public KeyGesture PauseKey
{ {
get => KeyGesture.Parse(_pauseKey); get => KeyGesture.Parse(_pauseKey);
set set
{ {
_pauseKey = value.ToString(); _pauseKey = value.ToString();

View file

@ -14,6 +14,7 @@ using Ryujinx.Common.Configuration.Multiplayer;
using Ryujinx.Common.GraphicsDriver; using Ryujinx.Common.GraphicsDriver;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan;
using Ryujinx.HLE;
using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.FileSystem;
using Ryujinx.HLE.HOS.Services.Time.TimeZone; using Ryujinx.HLE.HOS.Services.Time.TimeZone;
using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Configuration;
@ -154,7 +155,7 @@ namespace Ryujinx.Ava.UI.ViewModels
public bool EnableInternetAccess { get; set; } public bool EnableInternetAccess { get; set; }
public bool EnableFsIntegrityChecks { get; set; } public bool EnableFsIntegrityChecks { get; set; }
public bool IgnoreMissingServices { get; set; } public bool IgnoreMissingServices { get; set; }
public bool ExpandDramSize { get; set; } public MemoryConfiguration DramSize { get; set; }
public bool EnableShaderCache { get; set; } public bool EnableShaderCache { get; set; }
public bool EnableTextureRecompression { get; set; } public bool EnableTextureRecompression { get; set; }
public bool EnableMacroHLE { get; set; } public bool EnableMacroHLE { get; set; }
@ -444,7 +445,7 @@ namespace Ryujinx.Ava.UI.ViewModels
EnableVsync = config.Graphics.EnableVsync; EnableVsync = config.Graphics.EnableVsync;
EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks; EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks;
ExpandDramSize = config.System.ExpandRam; DramSize = config.System.DramSize;
IgnoreMissingServices = config.System.IgnoreMissingServices; IgnoreMissingServices = config.System.IgnoreMissingServices;
// CPU // CPU
@ -545,7 +546,7 @@ namespace Ryujinx.Ava.UI.ViewModels
config.System.SystemTimeOffset.Value = Convert.ToInt64((CurrentDate.ToUnixTimeSeconds() + CurrentTime.TotalSeconds) - DateTimeOffset.Now.ToUnixTimeSeconds()); config.System.SystemTimeOffset.Value = Convert.ToInt64((CurrentDate.ToUnixTimeSeconds() + CurrentTime.TotalSeconds) - DateTimeOffset.Now.ToUnixTimeSeconds());
config.Graphics.EnableVsync.Value = EnableVsync; config.Graphics.EnableVsync.Value = EnableVsync;
config.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks; config.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks;
config.System.ExpandRam.Value = ExpandDramSize; config.System.DramSize.Value = DramSize;
config.System.IgnoreMissingServices.Value = IgnoreMissingServices; config.System.IgnoreMissingServices.Value = IgnoreMissingServices;
// CPU // CPU

View file

@ -143,14 +143,14 @@ namespace Ryujinx.Ava.UI.Views.Main
} }
} }
public async void OpenAmiiboWindow(object sender, RoutedEventArgs e) public async void OpenAmiiboWindow(object sender, RoutedEventArgs e)
=> await ViewModel.OpenAmiiboWindow(); => await ViewModel.OpenAmiiboWindow();
public async void OpenCheatManagerForCurrentApp(object sender, RoutedEventArgs e) public async void OpenCheatManagerForCurrentApp(object sender, RoutedEventArgs e)
{ {
if (!ViewModel.IsGameRunning) if (!ViewModel.IsGameRunning)
return; return;
string name = ViewModel.AppHost.Device.Processes.ActiveApplication.ApplicationControlProperties.Title[(int)ViewModel.AppHost.Device.System.State.DesiredTitleLanguage].NameString.ToString(); string name = ViewModel.AppHost.Device.Processes.ActiveApplication.ApplicationControlProperties.Title[(int)ViewModel.AppHost.Device.System.State.DesiredTitleLanguage].NameString.ToString();
await new CheatWindow( await new CheatWindow(
@ -186,7 +186,8 @@ namespace Ryujinx.Ava.UI.Views.Main
private async void ChangeWindowSize_Click(object sender, RoutedEventArgs e) private async void ChangeWindowSize_Click(object sender, RoutedEventArgs e)
{ {
if (sender is not MenuItem { Tag: string resolution }) return; if (sender is not MenuItem { Tag: string resolution })
return;
(int height, int width) = resolution.Split(' ') (int height, int width) = resolution.Split(' ')
.Into(parts => (int.Parse(parts[0]), int.Parse(parts[1]))); .Into(parts => (int.Parse(parts[0]), int.Parse(parts[1])));

View file

@ -1,4 +1,4 @@
<UserControl <UserControl
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsSystemView" x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsSystemView"
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"
@ -203,15 +203,36 @@
Foreground="{DynamicResource SecondaryTextColor}" Foreground="{DynamicResource SecondaryTextColor}"
Text="{locale:Locale SettingsTabSystemHacksNote}" /> Text="{locale:Locale SettingsTabSystemHacksNote}" />
</StackPanel> </StackPanel>
<StackPanel
Margin="10,0,0,0"
Orientation="Horizontal">
<TextBlock
VerticalAlignment="Center"
Text="{locale:Locale SettingsTabSystemDramSize}"
Width="250" />
<ComboBox
SelectedIndex="{Binding DramSize}"
ToolTip.Tip="{locale:Locale DRamTooltip}"
HorizontalContentAlignment="Left"
Width="350">
<ComboBoxItem>
<TextBlock Text="{locale:Locale SettingsTabSystemDramSize4GiB}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{locale:Locale SettingsTabSystemDramSize6GiB}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{locale:Locale SettingsTabSystemDramSize8GiB}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{locale:Locale SettingsTabSystemDramSize12GiB}" />
</ComboBoxItem>
</ComboBox>
</StackPanel>
<StackPanel <StackPanel
Margin="10,0,0,0" Margin="10,0,0,0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Orientation="Vertical"> Orientation="Vertical">
<CheckBox
IsChecked="{Binding ExpandDramSize}"
ToolTip.Tip="{locale:Locale DRamTooltip}">
<TextBlock Text="{locale:Locale SettingsTabSystemExpandDramSize}" />
</CheckBox>
<CheckBox <CheckBox
IsChecked="{Binding IgnoreMissingServices}" IsChecked="{Binding IgnoreMissingServices}"
ToolTip.Tip="{locale:Locale IgnoreMissingServicesTooltip}"> ToolTip.Tip="{locale:Locale IgnoreMissingServicesTooltip}">
@ -221,4 +242,4 @@
</StackPanel> </StackPanel>
</Border> </Border>
</ScrollViewer> </ScrollViewer>
</UserControl> </UserControl>

View file

@ -83,7 +83,7 @@ namespace Ryujinx.Ava.UI.Windows
TitleBar.ExtendsContentIntoTitleBar = true; TitleBar.ExtendsContentIntoTitleBar = true;
TitleBar.TitleBarHitTestType = TitleBarHitTestType.Complex; TitleBar.TitleBarHitTestType = TitleBarHitTestType.Complex;
// NOTE: Height of MenuBar and StatusBar is not usable here, since it would still be 0 at this point. // NOTE: Height of MenuBar and StatusBar is not usable here, since it would still be 0 at this point.
StatusBarHeight = StatusBarView.StatusBar.MinHeight; StatusBarHeight = StatusBarView.StatusBar.MinHeight;
@ -665,8 +665,9 @@ namespace Ryujinx.Ava.UI.Windows
? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadUpdateAddedMessage], numUpdatesAdded) ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadUpdateAddedMessage], numUpdatesAdded)
: null; : null;
if (msg is null) return; if (msg is null)
return;
Dispatcher.UIThread.InvokeAsync(async () => Dispatcher.UIThread.InvokeAsync(async () =>
{ {