From 02d459a9bd47e5b6b41a7e1540759581e9d2a9e9 Mon Sep 17 00:00:00 2001 From: Yeager Date: Fri, 21 Mar 2025 06:26:42 +0000 Subject: [PATCH 1/5] Swedish translations for new strings --- src/Ryujinx/Assets/locales.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 2605490b1..dd6b7ee88 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -2764,7 +2764,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Задать индивидуальные параметры", - "sv_SE": "", + "sv_SE": "Skapa anpassad konfiguration", "th_TH": "", "tr_TR": "", "uk_UA": "Створити користувацьку конфігурацію", @@ -2789,7 +2789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Изменить индивидуальные параметры", - "sv_SE": "", + "sv_SE": "Redigera anpassad konfiguration", "th_TH": "", "tr_TR": "", "uk_UA": "Редагувати користувацьку конфігурацію", @@ -2864,7 +2864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Отредактировать существующие независимые параметры для выбранной игры.", - "sv_SE": "", + "sv_SE": "Redigera din befintliga oberoende konfiguration för det valda spelet", "th_TH": "", "tr_TR": "", "uk_UA": "Відредагувати наявну індивідуальну конфігурацію для цієї гри.", @@ -3839,7 +3839,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Включить оригинальный интерфейса (требуется перезагрузка)", - "sv_SE": "", + "sv_SE": "Visa ursprunglig gränssnittsstil (kräver omstart)", "th_TH": "", "tr_TR": "", "uk_UA": "Показати оригінальний UI (Потрібен перезапуск)", @@ -3864,7 +3864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Показать старый пользовательский интерфейс Avalonia Ryujinx, напоминающий Ryujinx 1.1.1403. Включено по умолчанию на платформах, отличных от Windows.\nСтрока заголовка в классическом стиле вернётся на место, а основные изменения в оформлении окна будут отменены; например, расположение навигации по настройкам над этой всплывающей подсказкой.", - "sv_SE": "", + "sv_SE": "Visa det gamla Ryuijinx-gränssnittet baserat på Avalonia som påminner om version 1.1.1403. Detta är aktiverat som standard på plattformat som inte är Windows.\nDen klassiska titelfältet är tillbaka och de stora omarbetningarna av fönsterlayouten är omvända, till exempel placeringen av inställningsnavigeringen ovanför detta verktygstips.", "th_TH": "", "tr_TR": "", "uk_UA": "Показати старий інтерфейс Avalonia Ryujinx, який був у Ryujinx 1.1.1403. Ця опція активна за замовчуванням на всіх інших, окрім Windows платформах.\nПовернеться класична панель заголовка, а всі суттєві зміни інтерфейсу будуть скасовані, зокрема горизонтальне розміщення навігації в налаштуваннях.", @@ -23864,7 +23864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Список совместимости — записей: {0}", - "sv_SE": "", + "sv_SE": "Kompatibilitetslista - {0} poster", "th_TH": "", "tr_TR": "", "uk_UA": "Список сумісності — {0} ігор", @@ -23939,7 +23939,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Поиск среди {0} записей о совместимости...", - "sv_SE": "", + "sv_SE": "Sök i {0} kompatibilitetsposter...", "th_TH": "", "tr_TR": "", "uk_UA": "Шукати серед {0} перевірених ігор...", @@ -24264,7 +24264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Индивидуальные параметры", - "sv_SE": "", + "sv_SE": "Anpassad konfiguration", "th_TH": "", "tr_TR": "", "uk_UA": "Власна конфігурація", From 86c2f261afd1bc098e89c0285cd2c5bbdf24b41f Mon Sep 17 00:00:00 2001 From: GreemDev Date: Sat, 22 Mar 2025 22:39:03 -0500 Subject: [PATCH 2/5] Graphics: Save shaders to a lowercase title ID folder. I think this got reverted in the metal revert commit. --- src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs index 4fc66c4c0..2ab413848 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs @@ -117,7 +117,7 @@ namespace Ryujinx.Graphics.Gpu.Shader private static string GetDiskCachePath() { return GraphicsConfig.EnableShaderCache && GraphicsConfig.TitleId != null - ? Path.Combine(AppDataManager.GamesDirPath, GraphicsConfig.TitleId, "cache", "shader") + ? Path.Combine(AppDataManager.GamesDirPath, GraphicsConfig.TitleId.ToLower(), "cache", "shader") : null; } From 2f064064ca4040e299462325714281844a4b33af Mon Sep 17 00:00:00 2001 From: GreemDev Date: Sun, 23 Mar 2025 04:14:31 -0500 Subject: [PATCH 3/5] HLE: Slightly speed up IpcService creation This is not a crazy speedup, we're talking fractions of a millisecond here (I had to measure in ticks; 10000000 ticks per second) - TIPC commands are opted-into for registration since they are only used for IUserInterface, but were still attempted to be initialized for every service which spent needless time. - Directly use GetType() instead of accessing all exported types, and Where()ing for equivalency to GetType(). This causes the logic for registration to be a lot faster. --- src/Ryujinx.HLE/HOS/Services/IpcService.cs | 43 ++++++++++++++----- .../HOS/Services/Sm/IUserInterface.cs | 2 +- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/IpcService.cs b/src/Ryujinx.HLE/HOS/Services/IpcService.cs index 1b95b6712..7b1739e8e 100644 --- a/src/Ryujinx.HLE/HOS/Services/IpcService.cs +++ b/src/Ryujinx.HLE/HOS/Services/IpcService.cs @@ -1,8 +1,10 @@ +using Gommon; using Ryujinx.Common.Logging; using Ryujinx.HLE.Exceptions; using Ryujinx.HLE.HOS.Ipc; using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; @@ -21,22 +23,43 @@ namespace Ryujinx.HLE.HOS.Services private int _selfId; private bool _isDomain; - public IpcService(ServerBase server = null) + public IpcService(ServerBase server = null, bool registerTipc = false) { - CmifCommands = GetType().Assembly.GetTypes() - .Where(type => type == GetType()) - .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)) + Stopwatch sw = Stopwatch.StartNew(); + + CmifCommands = GetType() + .GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public) .SelectMany(methodInfo => methodInfo.GetCustomAttributes() .Select(command => (command.Id, methodInfo))) .ToDictionary(command => command.Id, command => command.methodInfo); + + sw.Stop(); + + Logger.Notice.Print( + LogClass.Emulation, + $"{CmifCommands.Count} Cmif commands loaded in {sw.ElapsedTicks} ticks ({Stopwatch.Frequency} tps).", + GetType().AsPrettyString() + ); - TipcCommands = GetType().Assembly.GetTypes() - .Where(type => type == GetType()) - .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)) - .SelectMany(methodInfo => methodInfo.GetCustomAttributes() - .Select(command => (command.Id, methodInfo))) - .ToDictionary(command => command.Id, command => command.methodInfo); + if (registerTipc) + { + sw.Start(); + TipcCommands = GetType() + .GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public) + .SelectMany(methodInfo => methodInfo.GetCustomAttributes() + .Select(command => (command.Id, methodInfo))) + .ToDictionary(command => command.Id, command => command.methodInfo); + + sw.Stop(); + + Logger.Notice.Print( + LogClass.Emulation, + $"{TipcCommands.Count} Tipc commands loaded in {sw.ElapsedTicks} ticks ({Stopwatch.Frequency} tps).", + GetType().AsPrettyString() + ); + } + Server = server; _parent = this; diff --git a/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs b/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs index 6d03d8d05..af511af29 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs @@ -21,7 +21,7 @@ namespace Ryujinx.HLE.HOS.Services.Sm private bool _isInitialized; - public IUserInterface(KernelContext context, SmRegistry registry) + public IUserInterface(KernelContext context, SmRegistry registry) : base(registerTipc: true) { _commonServer = new ServerBase(context, "CommonServer"); _registry = registry; From e7d3f39c1b21ca54b67ac620253ba245f399cebf Mon Sep 17 00:00:00 2001 From: GreemDev Date: Sun, 23 Mar 2025 04:16:23 -0500 Subject: [PATCH 4/5] HLE: Damnit Greem, those were supposed to be debug. OOPSIE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --- src/Ryujinx.HLE/HOS/Services/IpcService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/IpcService.cs b/src/Ryujinx.HLE/HOS/Services/IpcService.cs index 7b1739e8e..1fa8d7842 100644 --- a/src/Ryujinx.HLE/HOS/Services/IpcService.cs +++ b/src/Ryujinx.HLE/HOS/Services/IpcService.cs @@ -35,7 +35,7 @@ namespace Ryujinx.HLE.HOS.Services sw.Stop(); - Logger.Notice.Print( + Logger.Debug?.Print( LogClass.Emulation, $"{CmifCommands.Count} Cmif commands loaded in {sw.ElapsedTicks} ticks ({Stopwatch.Frequency} tps).", GetType().AsPrettyString() @@ -53,7 +53,7 @@ namespace Ryujinx.HLE.HOS.Services sw.Stop(); - Logger.Notice.Print( + Logger.Debug?.Print( LogClass.Emulation, $"{TipcCommands.Count} Tipc commands loaded in {sw.ElapsedTicks} ticks ({Stopwatch.Frequency} tps).", GetType().AsPrettyString() From 4ef2836df14ef050d7c0eed93c277da2ee63f729 Mon Sep 17 00:00:00 2001 From: Yeager Date: Sun, 23 Mar 2025 17:41:58 +0000 Subject: [PATCH 5/5] Very small fix for Swedish in locales.json to render the Settings tab line better --- src/Ryujinx/Assets/locales.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 2605490b1..00e31dd33 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -2764,7 +2764,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Задать индивидуальные параметры", - "sv_SE": "", + "sv_SE": "Skapa anpassad konfiguration", "th_TH": "", "tr_TR": "", "uk_UA": "Створити користувацьку конфігурацію", @@ -2789,7 +2789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Изменить индивидуальные параметры", - "sv_SE": "", + "sv_SE": "Redigera anpassad konfiguration", "th_TH": "", "tr_TR": "", "uk_UA": "Редагувати користувацьку конфігурацію", @@ -2864,7 +2864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Отредактировать существующие независимые параметры для выбранной игры.", - "sv_SE": "", + "sv_SE": "Redigera din befintliga oberoende konfiguration för det valda spelet", "th_TH": "", "tr_TR": "", "uk_UA": "Відредагувати наявну індивідуальну конфігурацію для цієї гри.", @@ -3839,7 +3839,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Включить оригинальный интерфейса (требуется перезагрузка)", - "sv_SE": "", + "sv_SE": "Visa ursprunglig gränssnittsstil (kräver omstart)", "th_TH": "", "tr_TR": "", "uk_UA": "Показати оригінальний UI (Потрібен перезапуск)", @@ -3864,7 +3864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Показать старый пользовательский интерфейс Avalonia Ryujinx, напоминающий Ryujinx 1.1.1403. Включено по умолчанию на платформах, отличных от Windows.\nСтрока заголовка в классическом стиле вернётся на место, а основные изменения в оформлении окна будут отменены; например, расположение навигации по настройкам над этой всплывающей подсказкой.", - "sv_SE": "", + "sv_SE": "Visa det gamla Ryuijinx-gränssnittet baserat på Avalonia som påminner om version 1.1.1403. Detta är aktiverat som standard på plattformat som inte är Windows.\nDen klassiska titelfältet är tillbaka och de stora omarbetningarna av fönsterlayouten är omvända, till exempel placeringen av inställningsnavigeringen ovanför detta verktygstips.", "th_TH": "", "tr_TR": "", "uk_UA": "Показати старий інтерфейс Avalonia Ryujinx, який був у Ryujinx 1.1.1403. Ця опція активна за замовчуванням на всіх інших, окрім Windows платформах.\nПовернеться класична панель заголовка, а всі суттєві зміни інтерфейсу будуть скасовані, зокрема горизонтальне розміщення навігації в налаштуваннях.", @@ -19764,7 +19764,7 @@ "pl_PL": "Skróty Klawiszowe Klawiatury", "pt_BR": "Atalhos do Teclado", "ru_RU": "Горячие клавиши", - "sv_SE": "Snabbtangenter för tangentbord", + "sv_SE": "Snabbtangenter", "th_TH": "ปุ่มลัดของคีย์บอร์ด", "tr_TR": "Klavye Kısayolları", "uk_UA": "Гарячі клавіші клавіатури", @@ -23864,7 +23864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Список совместимости — записей: {0}", - "sv_SE": "", + "sv_SE": "Kompatibilitetslista - {0} poster", "th_TH": "", "tr_TR": "", "uk_UA": "Список сумісності — {0} ігор", @@ -23939,7 +23939,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Поиск среди {0} записей о совместимости...", - "sv_SE": "", + "sv_SE": "Sök i {0} kompatibilitetsposter...", "th_TH": "", "tr_TR": "", "uk_UA": "Шукати серед {0} перевірених ігор...", @@ -24264,7 +24264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Индивидуальные параметры", - "sv_SE": "", + "sv_SE": "Anpassad konfiguration", "th_TH": "", "tr_TR": "", "uk_UA": "Власна конфігурація",