mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-04-24 00:17:44 +02:00
Merge branch 'removal/ims' into 'master'
Make 'Ignore Missing Services' Debug-only See merge request ryubing/ryujinx!16
This commit is contained in:
commit
15b9d2ecac
18 changed files with 143 additions and 124 deletions
|
@ -265,13 +265,25 @@ namespace Ryujinx.HLE.HOS
|
||||||
HorizonFsClient fsClient = new(this);
|
HorizonFsClient fsClient = new(this);
|
||||||
|
|
||||||
ServiceTable = new ServiceTable();
|
ServiceTable = new ServiceTable();
|
||||||
IEnumerable<ServiceEntry> services = ServiceTable.GetServices(new HorizonOptions
|
|
||||||
(Device.Configuration.IgnoreMissingServices,
|
IEnumerable<ServiceEntry> services = ServiceTable.GetServices(new HorizonOptions(
|
||||||
|
#if DEBUG
|
||||||
|
Device.Configuration.IgnoreMissingServices,
|
||||||
LibHacHorizonManager.BcatClient,
|
LibHacHorizonManager.BcatClient,
|
||||||
fsClient,
|
fsClient,
|
||||||
AccountManager,
|
AccountManager,
|
||||||
Device.AudioDeviceDriver,
|
Device.AudioDeviceDriver,
|
||||||
TickSource));
|
TickSource
|
||||||
|
#else
|
||||||
|
LibHacHorizonManager.BcatClient,
|
||||||
|
fsClient,
|
||||||
|
AccountManager,
|
||||||
|
Device.AudioDeviceDriver,
|
||||||
|
TickSource
|
||||||
|
#endif
|
||||||
|
));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach (ServiceEntry service in services)
|
foreach (ServiceEntry service in services)
|
||||||
{
|
{
|
||||||
|
|
|
@ -136,6 +136,7 @@ namespace Ryujinx.HLE.HOS.Services
|
||||||
|
|
||||||
bool serviceExists = service.CmifCommands.TryGetValue(commandId, out MethodInfo processRequest);
|
bool serviceExists = service.CmifCommands.TryGetValue(commandId, out MethodInfo processRequest);
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
if (context.Device.Configuration.IgnoreMissingServices || serviceExists)
|
if (context.Device.Configuration.IgnoreMissingServices || serviceExists)
|
||||||
{
|
{
|
||||||
ResultCode result = ResultCode.Success;
|
ResultCode result = ResultCode.Success;
|
||||||
|
@ -178,6 +179,39 @@ namespace Ryujinx.HLE.HOS.Services
|
||||||
|
|
||||||
throw new ServiceNotImplementedException(service, context, dbgMessage);
|
throw new ServiceNotImplementedException(service, context, dbgMessage);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (serviceExists)
|
||||||
|
{
|
||||||
|
context.ResponseData.BaseStream.Seek(_isDomain ? 0x20 : 0x10, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
Logger.Trace?.Print(LogClass.KernelIpc, $"{service.GetType().Name}: {processRequest.Name}");
|
||||||
|
|
||||||
|
ResultCode result = (ResultCode)processRequest.Invoke(service, [context]);
|
||||||
|
|
||||||
|
if (_isDomain)
|
||||||
|
{
|
||||||
|
foreach (int id in context.Response.ObjectIds)
|
||||||
|
{
|
||||||
|
context.ResponseData.Write(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
context.ResponseData.BaseStream.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
context.ResponseData.Write(context.Response.ObjectIds.Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
context.ResponseData.BaseStream.Seek(_isDomain ? 0x10 : 0, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
context.ResponseData.Write(IpcMagic.Sfco);
|
||||||
|
context.ResponseData.Write((long)result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string dbgMessage = $"{service.GetType().FullName}: {commandId}";
|
||||||
|
|
||||||
|
throw new ServiceNotImplementedException(service, context, dbgMessage);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CallTipcMethod(ServiceCtx context)
|
public void CallTipcMethod(ServiceCtx context)
|
||||||
|
@ -186,6 +220,7 @@ namespace Ryujinx.HLE.HOS.Services
|
||||||
|
|
||||||
bool serviceExists = TipcCommands.TryGetValue(commandId, out MethodInfo processRequest);
|
bool serviceExists = TipcCommands.TryGetValue(commandId, out MethodInfo processRequest);
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
if (context.Device.Configuration.IgnoreMissingServices || serviceExists)
|
if (context.Device.Configuration.IgnoreMissingServices || serviceExists)
|
||||||
{
|
{
|
||||||
ResultCode result = ResultCode.Success;
|
ResultCode result = ResultCode.Success;
|
||||||
|
@ -218,6 +253,26 @@ namespace Ryujinx.HLE.HOS.Services
|
||||||
|
|
||||||
throw new ServiceNotImplementedException(this, context, dbgMessage);
|
throw new ServiceNotImplementedException(this, context, dbgMessage);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (serviceExists)
|
||||||
|
{
|
||||||
|
context.ResponseData.BaseStream.Seek(0x4, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
Logger.Debug?.Print(LogClass.KernelIpc, $"{GetType().Name}: {processRequest.Name}");
|
||||||
|
|
||||||
|
ResultCode result = (ResultCode)processRequest.Invoke(this, [context]);
|
||||||
|
|
||||||
|
context.ResponseData.BaseStream.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
context.ResponseData.Write((uint)result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string dbgMessage = $"{GetType().FullName}: {commandId}";
|
||||||
|
|
||||||
|
throw new ServiceNotImplementedException(this, context, dbgMessage);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void MakeObject(ServiceCtx context, IpcService obj)
|
protected void MakeObject(ServiceCtx context, IpcService obj)
|
||||||
|
|
|
@ -102,11 +102,13 @@ namespace Ryujinx.HLE.HOS.Services.Sm
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#if DEBUG
|
||||||
if (context.Device.Configuration.IgnoreMissingServices)
|
if (context.Device.Configuration.IgnoreMissingServices)
|
||||||
{
|
{
|
||||||
Logger.Warning?.Print(LogClass.Service, $"Missing service {name} ignored");
|
Logger.Warning?.Print(LogClass.Service, $"Missing service {name} ignored");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
throw new NotImplementedException(name);
|
throw new NotImplementedException(name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,12 +142,14 @@ namespace Ryujinx.HLE
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemoryManagerMode MemoryManagerMode { internal get; set; }
|
public MemoryManagerMode MemoryManagerMode { internal get; set; }
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Control the initial state of the ignore missing services setting.
|
/// Control the initial state of the ignore missing services setting.
|
||||||
/// If this is set to true, when a missing service is encountered, it will try to automatically handle it instead of throwing an exception.
|
/// If this is set to true, when a missing service is encountered, it will try to automatically handle it instead of throwing an exception.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// TODO: Update this again.
|
/// TODO: Update this again.
|
||||||
public bool IgnoreMissingServices { internal get; set; }
|
public bool IgnoreMissingServices { get; set; }
|
||||||
|
#endif
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Aspect Ratio applied to the renderer window by the SurfaceFlinger service.
|
/// Aspect Ratio applied to the renderer window by the SurfaceFlinger service.
|
||||||
|
@ -213,7 +215,9 @@ namespace Ryujinx.HLE
|
||||||
long systemTimeOffset,
|
long systemTimeOffset,
|
||||||
string timeZone,
|
string timeZone,
|
||||||
MemoryManagerMode memoryManagerMode,
|
MemoryManagerMode memoryManagerMode,
|
||||||
|
#if DEBUG
|
||||||
bool ignoreMissingServices,
|
bool ignoreMissingServices,
|
||||||
|
#endif
|
||||||
AspectRatio aspectRatio,
|
AspectRatio aspectRatio,
|
||||||
float audioVolume,
|
float audioVolume,
|
||||||
bool useHypervisor,
|
bool useHypervisor,
|
||||||
|
@ -239,7 +243,9 @@ namespace Ryujinx.HLE
|
||||||
SystemTimeOffset = systemTimeOffset;
|
SystemTimeOffset = systemTimeOffset;
|
||||||
TimeZone = timeZone;
|
TimeZone = timeZone;
|
||||||
MemoryManagerMode = memoryManagerMode;
|
MemoryManagerMode = memoryManagerMode;
|
||||||
|
#if DEBUG
|
||||||
IgnoreMissingServices = ignoreMissingServices;
|
IgnoreMissingServices = ignoreMissingServices;
|
||||||
|
#endif
|
||||||
AspectRatio = aspectRatio;
|
AspectRatio = aspectRatio;
|
||||||
AudioVolume = audioVolume;
|
AudioVolume = audioVolume;
|
||||||
UseHypervisor = useHypervisor;
|
UseHypervisor = useHypervisor;
|
||||||
|
|
|
@ -4,6 +4,7 @@ using Ryujinx.Audio.Backends.CompatLayer;
|
||||||
using Ryujinx.Audio.Integration;
|
using Ryujinx.Audio.Integration;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Cpu;
|
using Ryujinx.Cpu;
|
||||||
using Ryujinx.Graphics.Gpu;
|
using Ryujinx.Graphics.Gpu;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
|
@ -94,6 +95,11 @@ namespace Ryujinx.HLE
|
||||||
UpdateVSyncInterval();
|
UpdateVSyncInterval();
|
||||||
#pragma warning restore IDE0055
|
#pragma warning restore IDE0055
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
if (Configuration.IgnoreMissingServices)
|
||||||
|
Logger.Notice.Print(LogClass.Emulation, "Ignore Missing Services is enabled.", nameof(Switch));
|
||||||
|
#endif
|
||||||
|
|
||||||
Shared = this;
|
Shared = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,9 @@ namespace Ryujinx.Horizon
|
||||||
{
|
{
|
||||||
public readonly struct HorizonOptions
|
public readonly struct HorizonOptions
|
||||||
{
|
{
|
||||||
|
#if DEBUG
|
||||||
public bool IgnoreMissingServices { get; }
|
public bool IgnoreMissingServices { get; }
|
||||||
|
#endif
|
||||||
public bool ThrowOnInvalidCommandIds { get; }
|
public bool ThrowOnInvalidCommandIds { get; }
|
||||||
|
|
||||||
public HorizonClient BcatClient { get; }
|
public HorizonClient BcatClient { get; }
|
||||||
|
@ -18,14 +20,18 @@ namespace Ryujinx.Horizon
|
||||||
public ITickSource TickSource { get; }
|
public ITickSource TickSource { get; }
|
||||||
|
|
||||||
public HorizonOptions(
|
public HorizonOptions(
|
||||||
|
#if DEBUG
|
||||||
bool ignoreMissingServices,
|
bool ignoreMissingServices,
|
||||||
|
#endif
|
||||||
HorizonClient bcatClient,
|
HorizonClient bcatClient,
|
||||||
IFsClient fsClient,
|
IFsClient fsClient,
|
||||||
IEmulatorAccountManager accountManager,
|
IEmulatorAccountManager accountManager,
|
||||||
IHardwareDeviceDriver audioDeviceDriver,
|
IHardwareDeviceDriver audioDeviceDriver,
|
||||||
ITickSource tickSource)
|
ITickSource tickSource)
|
||||||
{
|
{
|
||||||
|
#if DEBUG
|
||||||
IgnoreMissingServices = ignoreMissingServices;
|
IgnoreMissingServices = ignoreMissingServices;
|
||||||
|
#endif
|
||||||
ThrowOnInvalidCommandIds = true;
|
ThrowOnInvalidCommandIds = true;
|
||||||
BcatClient = bcatClient;
|
BcatClient = bcatClient;
|
||||||
FsClient = fsClient;
|
FsClient = fsClient;
|
||||||
|
|
|
@ -39,6 +39,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif
|
||||||
|
|
||||||
if (!entries.TryGetValue((int)commandId, out CommandHandler commandHandler))
|
if (!entries.TryGetValue((int)commandId, out CommandHandler commandHandler))
|
||||||
{
|
{
|
||||||
|
#if DEBUG
|
||||||
if (HorizonStatic.Options.IgnoreMissingServices)
|
if (HorizonStatic.Options.IgnoreMissingServices)
|
||||||
{
|
{
|
||||||
// If ignore missing services is enabled, just pretend that everything is fine.
|
// If ignore missing services is enabled, just pretend that everything is fine.
|
||||||
|
@ -50,7 +51,9 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif
|
||||||
|
|
||||||
return Result.Success;
|
return Result.Success;
|
||||||
}
|
}
|
||||||
else if (HorizonStatic.Options.ThrowOnInvalidCommandIds)
|
#endif
|
||||||
|
|
||||||
|
if (HorizonStatic.Options.ThrowOnInvalidCommandIds)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException($"{objectName} command ID: {commandId} is not implemented");
|
throw new NotImplementedException($"{objectName} command ID: {commandId} is not implemented");
|
||||||
}
|
}
|
||||||
|
|
|
@ -5322,31 +5322,6 @@
|
||||||
"zh_TW": ""
|
"zh_TW": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ID": "SettingsTabSystemIgnoreMissingServices",
|
|
||||||
"Translations": {
|
|
||||||
"ar_SA": "تجاهل الخدمات المفقودة",
|
|
||||||
"de_DE": "Ignoriere fehlende Dienste",
|
|
||||||
"el_GR": "Αγνόηση υπηρεσιών που λείπουν",
|
|
||||||
"en_US": "Ignore Missing Services",
|
|
||||||
"es_ES": "Ignorar servicios no implementados",
|
|
||||||
"fr_FR": "Ignorer les services manquants",
|
|
||||||
"he_IL": "התעלם משירותים חסרים",
|
|
||||||
"it_IT": "Ignora servizi mancanti",
|
|
||||||
"ja_JP": "未実装サービスを無視する",
|
|
||||||
"ko_KR": "누락된 서비스 무시",
|
|
||||||
"no_NO": "Ignorer manglende tjenester",
|
|
||||||
"pl_PL": "Ignoruj Brakujące Usługi",
|
|
||||||
"pt_BR": "Ignorar Serviços Ausentes",
|
|
||||||
"ru_RU": "Игнорировать отсутствующие службы",
|
|
||||||
"sv_SE": "Ignorera saknade tjänster",
|
|
||||||
"th_TH": "เมินเฉยบริการที่หายไป",
|
|
||||||
"tr_TR": "Eksik Servisleri Görmezden Gel",
|
|
||||||
"uk_UA": "Ігнорувати відсутні служби",
|
|
||||||
"zh_CN": "忽略缺失的服务",
|
|
||||||
"zh_TW": "忽略缺少的模擬器功能"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ID": "SettingsTabSystemIgnoreControllerApplet",
|
"ID": "SettingsTabSystemIgnoreControllerApplet",
|
||||||
"Translations": {
|
"Translations": {
|
||||||
|
@ -16722,31 +16697,6 @@
|
||||||
"zh_TW": "利用另一種 MemoryMode 配置來模仿 Switch 開發模式。\n\n這僅對高解析度紋理套件或 4K 解析度模組有用。不會提高效能。\n\n如果不確定,請設定為 4GiB。"
|
"zh_TW": "利用另一種 MemoryMode 配置來模仿 Switch 開發模式。\n\n這僅對高解析度紋理套件或 4K 解析度模組有用。不會提高效能。\n\n如果不確定,請設定為 4GiB。"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ID": "IgnoreMissingServicesTooltip",
|
|
||||||
"Translations": {
|
|
||||||
"ar_SA": "يتجاهل خدمات نظام هوريزون غير المنفذة. قد يساعد هذا في تجاوز الأعطال عند تشغيل ألعاب معينة.\n\nاتركه معطلا إذا كنت غير متأكد.",
|
|
||||||
"de_DE": "Durch diese Option werden nicht implementierte Dienste der Switch-Firmware ignoriert. Dies kann dabei helfen, Abstürze beim Starten bestimmter Spiele zu umgehen.\n\nIm Zweifelsfall AUS lassen.",
|
|
||||||
"el_GR": "Ενεργοποίηση ή απενεργοποίηση της αγνοώησης για υπηρεσίες που λείπουν",
|
|
||||||
"en_US": "Ignores unimplemented Horizon OS services. This may help in bypassing crashes when booting certain games.\n\nLeave OFF if unsure.",
|
|
||||||
"es_ES": "Hack para ignorar servicios no implementados del Horizon OS. Esto puede ayudar a sobrepasar crasheos cuando inicies ciertos juegos.\n\nDesactívalo si no sabes qué hacer.",
|
|
||||||
"fr_FR": "Ignore les services Horizon OS non-intégrés. Cela peut aider à contourner les plantages lors du démarrage de certains jeux.\n\nLaissez désactivé en cas d'incertitude.",
|
|
||||||
"he_IL": "מתעלם מפעולות שלא קיבלו מימוש במערכת ההפעלה Horizon OS. זה עלול לעזור לעקוף קריסות של היישום במשחקים מסויימים.\n\nמוטב להשאיר כבוי אם לא בטוחים.",
|
|
||||||
"it_IT": "Ignora i servizi non implementati del sistema operativo Horizon. Può aiutare ad aggirare gli arresti anomali che si verificano avviando alcuni giochi.\n\nNel dubbio, lascia l'opzione disattivata.",
|
|
||||||
"ja_JP": "未実装の Horizon OS サービスを無視します. 特定のゲームにおいて起動時のクラッシュを回避できる場合があります.\n\nよくわからない場合はオフのままにしてください.",
|
|
||||||
"ko_KR": "구현되지 않은 Horizon OS 서비스는 무시됩니다. 특정 게임을 부팅할 때, 발생하는 충돌을 우회하는 데 도움이 될 수 있습니다.\n\n모르면 끔으로 두세요.",
|
|
||||||
"no_NO": "Ignorerer ikke implementerte Horisont OS-tjenester. Dette kan hjelpe med å omgå krasj ved oppstart av enkelte spill.\n\nLa AV hvis du er usikker.",
|
|
||||||
"pl_PL": "Ignoruje niezaimplementowane usługi Horizon OS. Może to pomóc w ominięciu awarii podczas uruchamiania niektórych gier.\n\nW razie wątpliwości pozostaw WYŁĄCZONE.",
|
|
||||||
"pt_BR": "Ignora serviços não implementados do Horizon OS. Isso pode ajudar a contornar travamentos ao inicializar certos jogos.\n\nDeixe OFF se não tiver certeza.",
|
|
||||||
"ru_RU": "Игнорирует нереализованные сервисы Horizon в новых прошивках. Эта настройка поможет избежать вылеты при запуске определенных игр.\n\nРекомендуется оставить выключенным.",
|
|
||||||
"sv_SE": "Ignorerar Horizon OS-tjänster som inte har implementerats. Detta kan avhjälpa krascher när vissa spel startar upp.\n\nLämna AV om du är osäker.",
|
|
||||||
"th_TH": "ละเว้นบริการ Horizon OS ที่ยังไม่ได้ใช้งาน วิธีนี้อาจช่วยในการหลีกเลี่ยงข้อผิดพลาดเมื่อบูตเกมบางเกม\n\nปล่อยให้ปิดหากคุณไม่แน่ใจ",
|
|
||||||
"tr_TR": "Henüz programlanmamış Horizon işletim sistemi servislerini görmezden gelir. Bu seçenek belirli oyunların açılırken çökmesinin önüne geçmeye yardımcı olabilir.\n\nEmin değilseniz devre dışı bırakın.",
|
|
||||||
"uk_UA": "Ігнорує нереалізовані служби Horizon OS. Це може допомогти в обході збоїв під час завантаження певних ігор.\n\nЗалиште вимкненим якщо не впевнені.",
|
|
||||||
"zh_CN": "开启后,游戏会忽略未实现的系统服务,从而继续运行。\n少部分新发布的游戏由于使用了新的未知系统服务,可能需要此选项来避免闪退。\n模拟器更新完善系统服务之后,则无需开启此选项。\n\n如果不确定,请保持关闭状态。",
|
|
||||||
"zh_TW": "忽略未實現的 Horizon OS 服務。這可能有助於在啟動某些遊戲時避免崩潰。\n\n如果不確定,請保持關閉狀態。"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ID": "IgnoreControllerAppletTooltip",
|
"ID": "IgnoreControllerAppletTooltip",
|
||||||
"Translations": {
|
"Translations": {
|
||||||
|
|
|
@ -315,6 +315,7 @@ namespace Ryujinx.Headless
|
||||||
|
|
||||||
private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) =>
|
private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) =>
|
||||||
new(
|
new(
|
||||||
|
|
||||||
new HleConfiguration(
|
new HleConfiguration(
|
||||||
options.DramSize,
|
options.DramSize,
|
||||||
options.SystemLanguage,
|
options.SystemLanguage,
|
||||||
|
@ -329,7 +330,9 @@ namespace Ryujinx.Headless
|
||||||
options.SystemTimeOffset,
|
options.SystemTimeOffset,
|
||||||
options.SystemTimeZone,
|
options.SystemTimeZone,
|
||||||
options.MemoryManagerMode,
|
options.MemoryManagerMode,
|
||||||
|
#if DEBUG
|
||||||
options.IgnoreMissingServices,
|
options.IgnoreMissingServices,
|
||||||
|
#endif
|
||||||
options.AspectRatio,
|
options.AspectRatio,
|
||||||
options.AudioVolume,
|
options.AudioVolume,
|
||||||
options.UseHypervisor ?? true,
|
options.UseHypervisor ?? true,
|
||||||
|
|
|
@ -145,9 +145,6 @@ namespace Ryujinx.Headless
|
||||||
if (NeedsOverride(nameof(DramSize)))
|
if (NeedsOverride(nameof(DramSize)))
|
||||||
DramSize = configurationState.System.DramSize;
|
DramSize = configurationState.System.DramSize;
|
||||||
|
|
||||||
if (NeedsOverride(nameof(IgnoreMissingServices)))
|
|
||||||
IgnoreMissingServices = configurationState.System.IgnoreMissingServices;
|
|
||||||
|
|
||||||
if (NeedsOverride(nameof(IgnoreControllerApplet)))
|
if (NeedsOverride(nameof(IgnoreControllerApplet)))
|
||||||
IgnoreControllerApplet = configurationState.System.IgnoreControllerApplet;
|
IgnoreControllerApplet = configurationState.System.IgnoreControllerApplet;
|
||||||
|
|
||||||
|
@ -408,8 +405,10 @@ namespace Ryujinx.Headless
|
||||||
[Option("dram-size", Required = false, Default = MemoryConfiguration.MemoryConfiguration4GiB, HelpText = "Set the RAM amount on the emulated system.")]
|
[Option("dram-size", Required = false, Default = MemoryConfiguration.MemoryConfiguration4GiB, HelpText = "Set the RAM amount on the emulated system.")]
|
||||||
public MemoryConfiguration DramSize { get; set; }
|
public MemoryConfiguration DramSize { get; set; }
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
[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; }
|
||||||
|
#endif
|
||||||
|
|
||||||
[Option("ignore-controller-applet", Required = false, Default = false, HelpText = "Enable ignoring the controller applet when your game loses connection to your controller.")]
|
[Option("ignore-controller-applet", Required = false, Default = false, HelpText = "Enable ignoring the controller applet when your game loses connection to your controller.")]
|
||||||
public bool IgnoreControllerApplet { get; set; }
|
public bool IgnoreControllerApplet { get; set; }
|
||||||
|
|
|
@ -195,7 +195,6 @@ namespace Ryujinx.Ava.Systems
|
||||||
_defaultCursorWin = CreateArrowCursor();
|
_defaultCursorWin = CreateArrowCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigurationState.Instance.System.IgnoreMissingServices.Event += UpdateIgnoreMissingServicesState;
|
|
||||||
ConfigurationState.Instance.Graphics.AspectRatio.Event += UpdateAspectRatioState;
|
ConfigurationState.Instance.Graphics.AspectRatio.Event += UpdateAspectRatioState;
|
||||||
ConfigurationState.Instance.System.EnableDockedMode.Event += UpdateDockedModeState;
|
ConfigurationState.Instance.System.EnableDockedMode.Event += UpdateDockedModeState;
|
||||||
ConfigurationState.Instance.System.AudioVolume.Event += UpdateAudioVolumeState;
|
ConfigurationState.Instance.System.AudioVolume.Event += UpdateAudioVolumeState;
|
||||||
|
@ -488,14 +487,6 @@ namespace Ryujinx.Ava.Systems
|
||||||
Exit();
|
Exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateIgnoreMissingServicesState(object sender, ReactiveEventArgs<bool> args)
|
|
||||||
{
|
|
||||||
if (Device != null)
|
|
||||||
{
|
|
||||||
Device.Configuration.IgnoreMissingServices = args.NewValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateAspectRatioState(object sender, ReactiveEventArgs<AspectRatio> args)
|
private void UpdateAspectRatioState(object sender, ReactiveEventArgs<AspectRatio> args)
|
||||||
{
|
{
|
||||||
if (Device != null)
|
if (Device != null)
|
||||||
|
@ -610,8 +601,6 @@ namespace Ryujinx.Ava.Systems
|
||||||
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.Graphics.AspectRatio.Event -= UpdateAspectRatioState;
|
ConfigurationState.Instance.Graphics.AspectRatio.Event -= UpdateAspectRatioState;
|
||||||
ConfigurationState.Instance.System.EnableDockedMode.Event -= UpdateDockedModeState;
|
ConfigurationState.Instance.System.EnableDockedMode.Event -= UpdateDockedModeState;
|
||||||
ConfigurationState.Instance.System.AudioVolume.Event -= UpdateAudioVolumeState;
|
ConfigurationState.Instance.System.AudioVolume.Event -= UpdateAudioVolumeState;
|
||||||
|
|
|
@ -299,11 +299,6 @@ namespace Ryujinx.Ava.Systems.Configuration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemoryConfiguration DramSize { get; set; }
|
public MemoryConfiguration DramSize { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enable or disable ignoring missing services
|
|
||||||
/// </summary>
|
|
||||||
public bool IgnoreMissingServices { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Used to toggle columns in the GUI
|
/// Used to toggle columns in the GUI
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -101,7 +101,6 @@ namespace Ryujinx.Ava.Systems.Configuration
|
||||||
System.AudioVolume.Value = cff.AudioVolume;
|
System.AudioVolume.Value = cff.AudioVolume;
|
||||||
System.MemoryManagerMode.Value = cff.MemoryManagerMode;
|
System.MemoryManagerMode.Value = cff.MemoryManagerMode;
|
||||||
System.DramSize.Value = cff.DramSize;
|
System.DramSize.Value = cff.DramSize;
|
||||||
System.IgnoreMissingServices.Value = cff.IgnoreMissingServices;
|
|
||||||
System.IgnoreControllerApplet.Value = cff.IgnoreApplet;
|
System.IgnoreControllerApplet.Value = cff.IgnoreApplet;
|
||||||
System.UseHypervisor.Value = cff.UseHypervisor;
|
System.UseHypervisor.Value = cff.UseHypervisor;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ using Gommon;
|
||||||
using LibHac.Tools.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
using Ryujinx.Ava.Systems.Configuration.System;
|
using Ryujinx.Ava.Systems.Configuration.System;
|
||||||
using Ryujinx.Ava.Systems.Configuration.UI;
|
using Ryujinx.Ava.Systems.Configuration.UI;
|
||||||
|
using Ryujinx.Ava.Utilities;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
using Ryujinx.Common.Configuration.Hid;
|
using Ryujinx.Common.Configuration.Hid;
|
||||||
|
@ -385,11 +386,6 @@ namespace Ryujinx.Ava.Systems.Configuration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ReactiveObject<MemoryConfiguration> DramSize { get; private set; }
|
public ReactiveObject<MemoryConfiguration> DramSize { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enable or disable ignoring missing services
|
|
||||||
/// </summary>
|
|
||||||
public ReactiveObject<bool> IgnoreMissingServices { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Ignore Controller Applet
|
/// Ignore Controller Applet
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -441,8 +437,6 @@ namespace Ryujinx.Ava.Systems.Configuration
|
||||||
MemoryManagerMode.LogChangesToValue(nameof(MemoryManagerMode));
|
MemoryManagerMode.LogChangesToValue(nameof(MemoryManagerMode));
|
||||||
DramSize = new ReactiveObject<MemoryConfiguration>();
|
DramSize = new ReactiveObject<MemoryConfiguration>();
|
||||||
DramSize.LogChangesToValue(nameof(DramSize));
|
DramSize.LogChangesToValue(nameof(DramSize));
|
||||||
IgnoreMissingServices = new ReactiveObject<bool>();
|
|
||||||
IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices));
|
|
||||||
IgnoreControllerApplet = new ReactiveObject<bool>();
|
IgnoreControllerApplet = new ReactiveObject<bool>();
|
||||||
IgnoreControllerApplet.LogChangesToValue(nameof(IgnoreControllerApplet));
|
IgnoreControllerApplet.LogChangesToValue(nameof(IgnoreControllerApplet));
|
||||||
AudioVolume = new ReactiveObject<float>();
|
AudioVolume = new ReactiveObject<float>();
|
||||||
|
@ -867,7 +861,9 @@ namespace Ryujinx.Ava.Systems.Configuration
|
||||||
: System.SystemTimeOffset,
|
: System.SystemTimeOffset,
|
||||||
System.TimeZone,
|
System.TimeZone,
|
||||||
System.MemoryManagerMode,
|
System.MemoryManagerMode,
|
||||||
System.IgnoreMissingServices,
|
#if DEBUG
|
||||||
|
CommandLineState.IgnoreMissingServices,
|
||||||
|
#endif
|
||||||
Graphics.AspectRatio,
|
Graphics.AspectRatio,
|
||||||
System.AudioVolume,
|
System.AudioVolume,
|
||||||
System.UseHypervisor,
|
System.UseHypervisor,
|
||||||
|
@ -875,8 +871,8 @@ namespace Ryujinx.Ava.Systems.Configuration
|
||||||
Multiplayer.Mode,
|
Multiplayer.Mode,
|
||||||
Multiplayer.DisableP2p,
|
Multiplayer.DisableP2p,
|
||||||
Multiplayer.LdnPassphrase,
|
Multiplayer.LdnPassphrase,
|
||||||
Multiplayer.GetLdnServer(),
|
Instance.Multiplayer.GetLdnServer(),
|
||||||
Graphics.CustomVSyncInterval,
|
Instance.Graphics.CustomVSyncInterval,
|
||||||
Hacks.ShowDirtyHacks ? Hacks.EnabledHacks : null);
|
Instance.Hacks.ShowDirtyHacks ? Instance.Hacks.EnabledHacks : null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,6 @@ namespace Ryujinx.Ava.Systems.Configuration
|
||||||
AudioVolume = System.AudioVolume,
|
AudioVolume = System.AudioVolume,
|
||||||
MemoryManagerMode = System.MemoryManagerMode,
|
MemoryManagerMode = System.MemoryManagerMode,
|
||||||
DramSize = System.DramSize,
|
DramSize = System.DramSize,
|
||||||
IgnoreMissingServices = System.IgnoreMissingServices,
|
|
||||||
IgnoreApplet = System.IgnoreControllerApplet,
|
IgnoreApplet = System.IgnoreControllerApplet,
|
||||||
UseHypervisor = System.UseHypervisor,
|
UseHypervisor = System.UseHypervisor,
|
||||||
GuiColumns = new GuiColumns
|
GuiColumns = new GuiColumns
|
||||||
|
@ -204,7 +203,6 @@ namespace Ryujinx.Ava.Systems.Configuration
|
||||||
System.AudioVolume.Value = 1;
|
System.AudioVolume.Value = 1;
|
||||||
System.MemoryManagerMode.Value = MemoryManagerMode.HostMappedUnsafe;
|
System.MemoryManagerMode.Value = MemoryManagerMode.HostMappedUnsafe;
|
||||||
System.DramSize.Value = MemoryConfiguration.MemoryConfiguration4GiB;
|
System.DramSize.Value = MemoryConfiguration.MemoryConfiguration4GiB;
|
||||||
System.IgnoreMissingServices.Value = false;
|
|
||||||
System.IgnoreControllerApplet.Value = false;
|
System.IgnoreControllerApplet.Value = false;
|
||||||
System.UseHypervisor.Value = true;
|
System.UseHypervisor.Value = true;
|
||||||
Multiplayer.LanInterfaceId.Value = "0";
|
Multiplayer.LanInterfaceId.Value = "0";
|
||||||
|
|
|
@ -228,7 +228,6 @@ 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 MemoryConfiguration DramSize { 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; }
|
||||||
|
@ -604,7 +603,6 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
VSyncMode = config.Graphics.VSyncMode;
|
VSyncMode = config.Graphics.VSyncMode;
|
||||||
EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks;
|
EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks;
|
||||||
DramSize = config.System.DramSize;
|
DramSize = config.System.DramSize;
|
||||||
IgnoreMissingServices = config.System.IgnoreMissingServices;
|
|
||||||
IgnoreApplet = config.System.IgnoreControllerApplet;
|
IgnoreApplet = config.System.IgnoreControllerApplet;
|
||||||
|
|
||||||
// CPU
|
// CPU
|
||||||
|
@ -707,7 +705,6 @@ 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.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks;
|
config.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks;
|
||||||
config.System.DramSize.Value = DramSize;
|
config.System.DramSize.Value = DramSize;
|
||||||
config.System.IgnoreMissingServices.Value = IgnoreMissingServices;
|
|
||||||
config.System.IgnoreControllerApplet.Value = IgnoreApplet;
|
config.System.IgnoreControllerApplet.Value = IgnoreApplet;
|
||||||
|
|
||||||
// CPU
|
// CPU
|
||||||
|
|
|
@ -313,11 +313,6 @@
|
||||||
Margin="10,0,0,0"
|
Margin="10,0,0,0"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
Orientation="Vertical">
|
Orientation="Vertical">
|
||||||
<CheckBox
|
|
||||||
IsChecked="{Binding IgnoreMissingServices}"
|
|
||||||
ToolTip.Tip="{ext:Locale IgnoreMissingServicesTooltip}">
|
|
||||||
<TextBlock Text="{ext:Locale SettingsTabSystemIgnoreMissingServices}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
IsChecked="{Binding IgnoreApplet}"
|
IsChecked="{Binding IgnoreApplet}"
|
||||||
ToolTip.Tip="{ext:Locale IgnoreControllerAppletTooltip}">
|
ToolTip.Tip="{ext:Locale IgnoreControllerAppletTooltip}">
|
||||||
|
|
|
@ -26,6 +26,9 @@ namespace Ryujinx.Ava.Utilities
|
||||||
public static bool StartFullscreenArg { get; private set; }
|
public static bool StartFullscreenArg { get; private set; }
|
||||||
public static bool HideAvailableUpdates { get; private set; }
|
public static bool HideAvailableUpdates { get; private set; }
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
public static bool IgnoreMissingServices { get; private set; }
|
||||||
|
#endif
|
||||||
|
|
||||||
public static void ParseArguments(string[] args)
|
public static void ParseArguments(string[] args)
|
||||||
{
|
{
|
||||||
|
@ -185,6 +188,11 @@ namespace Ryujinx.Ava.Utilities
|
||||||
case "--hide-updates":
|
case "--hide-updates":
|
||||||
HideAvailableUpdates = true;
|
HideAvailableUpdates = true;
|
||||||
break;
|
break;
|
||||||
|
#if DEBUG
|
||||||
|
case "--ignore-missing-services":
|
||||||
|
IgnoreMissingServices = true;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case "--software-gui":
|
case "--software-gui":
|
||||||
OverrideHardwareAcceleration = false;
|
OverrideHardwareAcceleration = false;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue