From f70e333c081783cedc593481c9d6825b182045e1 Mon Sep 17 00:00:00 2001 From: Berk <12572227+par274@users.noreply.github.com> Date: Wed, 23 Sep 2026 16:08:19 +0300 Subject: [PATCH] [GUI/CLI] Add option to disable Vulkan implicit layers (#900) --- docs/sharpemu-gui-undocumented-env-vars.md | 2 +- src/SharpEmu.CLI/Program.cs | 1 + src/SharpEmu.GUI/Languages/ar.json | 1 + src/SharpEmu.GUI/Languages/az.json | 1 + src/SharpEmu.GUI/Languages/br.json | 1 + src/SharpEmu.GUI/Languages/de.json | 1 + src/SharpEmu.GUI/Languages/dk.json | 1 + src/SharpEmu.GUI/Languages/ee.json | 1 + src/SharpEmu.GUI/Languages/en.json | 1 + src/SharpEmu.GUI/Languages/es.json | 1 + src/SharpEmu.GUI/Languages/fr.json | 1 + src/SharpEmu.GUI/Languages/hu.json | 1 + src/SharpEmu.GUI/Languages/it.json | 1 + src/SharpEmu.GUI/Languages/ja.json | 1 + src/SharpEmu.GUI/Languages/ko.json | 1 + src/SharpEmu.GUI/Languages/nl.json | 1 + src/SharpEmu.GUI/Languages/pl.json | 1 + src/SharpEmu.GUI/Languages/pt.json | 1 + src/SharpEmu.GUI/Languages/ru.json | 1 + src/SharpEmu.GUI/Languages/tr.json | 1 + src/SharpEmu.GUI/MainWindow.GameOptions.cs | 2 ++ src/SharpEmu.GUI/MainWindow.axaml | 15 +++++++++++++++ src/SharpEmu.GUI/MainWindow.axaml.cs | 13 +++++++++++++ src/SharpEmu.Libs/VideoOut/RenderDocCapture.cs | 16 ++++++++++++++++ 24 files changed, 66 insertions(+), 1 deletion(-) diff --git a/docs/sharpemu-gui-undocumented-env-vars.md b/docs/sharpemu-gui-undocumented-env-vars.md index 771eb8d..82b0697 100644 --- a/docs/sharpemu-gui-undocumented-env-vars.md +++ b/docs/sharpemu-gui-undocumented-env-vars.md @@ -12,7 +12,7 @@ The GUI shows 14 variables on its **Options** and **Game options** pages. This l `SHARPEMU_BTHID_UNAVAILABLE`, `SHARPEMU_CRASH_CAPTURE`, `SHARPEMU_DEFAULT_PROFILE`, `SHARPEMU_DISABLE_IMPORT_LOOP_GUARD`, `SHARPEMU_DUMP_SPIRV`, `SHARPEMU_LOG_DIRECT_MEMORY`, `SHARPEMU_LOG_IO`, `SHARPEMU_LOG_NP`, `SHARPEMU_PROFILE_PERFORMANCE`, `SHARPEMU_PROFILE_PERFORMANCE_FRAME_TRACE`, -`SHARPEMU_RENDERDOC`, `SHARPEMU_STRICT_COMPUTE`, `SHARPEMU_VK_VALIDATION`, `SHARPEMU_WRITABLE_APP0`. +`SHARPEMU_RENDERDOC`, `SHARPEMU_VK_DISABLE_IMPLICITS`, `SHARPEMU_STRICT_COMPUTE`, `SHARPEMU_VK_VALIDATION`, `SHARPEMU_WRITABLE_APP0`. The list contains 252 variables. The source was examined on 2026-09-19, branch `dev`. The descriptions come from the code that reads each variable. The emulator was not started for this list. diff --git a/src/SharpEmu.CLI/Program.cs b/src/SharpEmu.CLI/Program.cs index 3b70573..9f406d2 100644 --- a/src/SharpEmu.CLI/Program.cs +++ b/src/SharpEmu.CLI/Program.cs @@ -50,6 +50,7 @@ internal static partial class Program if (args.Length > 0 && args[0] == SharpEmu.Core.Diagnostics.WindowsCrashCapture.HelperArgument) return SharpEmu.Core.Diagnostics.WindowsCrashCapture.RunHelper(args); + RenderDocCapture.ApplyVulkanLoaderEnvironment(); SharpEmu.Libs.VideoOut.RenderDocCapture.Initialize(); try diff --git a/src/SharpEmu.GUI/Languages/ar.json b/src/SharpEmu.GUI/Languages/ar.json index fd6bcbe..7120751 100644 --- a/src/SharpEmu.GUI/Languages/ar.json +++ b/src/SharpEmu.GUI/Languages/ar.json @@ -177,6 +177,7 @@ "Options.Env.Group.Debug": "تصحيح الأخطاء", "Options.Env.Group.General": "عام", "Options.Env.RenderDoc.Desc": "يحمّل واجهة RenderDoc داخل التطبيق حتى يمكن التقاط الإطارات من داخل المحاكي.\nاضغط F12 أثناء تشغيل اللعبة لالتقاط إطار واحد؛ تُحفظ اللقطات في user/logs/capture_logs/.\nيتطلب تثبيت RenderDoc. يبطئ وحدة معالجة الرسوميات ويسبب تعليق بعض الألعاب، لذا اتركه معطلاً ما لم تكن تصحح الأخطاء.", + "Options.Env.DisableVkImplicitLayers.Desc": "عند تفعيل RenderDoc، قد تتسبب التراكبات الأخرى المتعارضة في فقدان الجهاز. قد يؤدي تفعيل هذا الخيار إلى حل المشكلة.", "Common.Save": "حفظ", "Common.Cancel": "إلغاء", "Options.About": "حول", diff --git a/src/SharpEmu.GUI/Languages/az.json b/src/SharpEmu.GUI/Languages/az.json index 952bf24..626c6ec 100644 --- a/src/SharpEmu.GUI/Languages/az.json +++ b/src/SharpEmu.GUI/Languages/az.json @@ -47,6 +47,7 @@ "Options.Env.Group.Debug": "Xətaların araşdırılması", "Options.Env.Group.General": "Ümumi", "Options.Env.RenderDoc.Desc": "Kadrları emulyatorun daxilindən çəkmək üçün RenderDoc tətbiqdaxili API-sini yükləyin.\nOyun işləyərkən bir kadr çəkmək üçün F10 düyməsini basın; çəkilən kadrlar user/logs/capture_logs/ qovluğunda saxlanılır.\nRenderDoc quraşdırılmalıdır. GPU-nu ləngidir və bəzi oyunların donmasına səbəb olur, buna görə xətaları araşdırmadıqda söndürülmüş saxlayın.", + "Options.Env.DisableVkImplicitLayers.Desc": "RenderDoc aktiv olduqda digər ziddiyyətli overlay-lər device loss-a səbəb ola bilər. Bu seçimi aktivləşdirmək problemi həll edə bilər.", "Options.Env.GuestImageCpuSync.Desc": "Emulyasiya olunan sistemdə oyunun öz CPU kodunun yenidən yazdığı təsvir səthlərini təkrar yükləyin.\nAdətən söndürülmüş saxlayın. CPU ilə çəkilən səthləri ekranda görünməyən oyunlar üçün aktivləşdirin.\nPerformansı azaldır və GTA V kimi bəzi oyunların işini pisləşdirir.", "Options.Env.ForceSubmitOrphanPreambles.Desc": "GPU əmr buferlərinin giriş əmrlərini hədəf növbəsi onları qəbul etmədikdə belə ötürün.\nAdətən söndürülmüş saxlayın. Heç vaxt siqnal verməyən GPU sinxronlaşdırma səddini gözləyərkən donan oyunlar üçün aktivləşdirin.", "Options.DefaultProfile.Label": "Standart profil adı", diff --git a/src/SharpEmu.GUI/Languages/br.json b/src/SharpEmu.GUI/Languages/br.json index c1cc17f..0debf2b 100644 --- a/src/SharpEmu.GUI/Languages/br.json +++ b/src/SharpEmu.GUI/Languages/br.json @@ -58,6 +58,7 @@ "Options.Env.Group.Debug": "Depuração", "Options.Env.Group.General": "Geral", "Options.Env.RenderDoc.Desc": "Carrega a API in-application do RenderDoc para capturar frames de dentro do emulador.\nPressione F12 enquanto o jogo roda para capturar um frame; as capturas vão para user/logs/capture_logs/.\nExige o RenderDoc instalado. Deixa a GPU mais lenta e trava alguns títulos, então mantenha desativado a menos que esteja depurando.", + "Options.Env.DisableVkImplicitLayers.Desc": "Quando o RenderDoc está ativado, outros overlays conflitantes podem causar device loss. Ativar esta opção pode corrigir o problema.", "Options.Section.Emulation": "EMULAÇÃO", "Options.Section.Logging": "LOGS", "Options.Section.Launcher": "INICIALIZADOR", diff --git a/src/SharpEmu.GUI/Languages/de.json b/src/SharpEmu.GUI/Languages/de.json index 65fcbfc..c3a4189 100644 --- a/src/SharpEmu.GUI/Languages/de.json +++ b/src/SharpEmu.GUI/Languages/de.json @@ -177,6 +177,7 @@ "Options.Env.Group.Debug": "Debug", "Options.Env.Group.General": "Allgemein", "Options.Env.RenderDoc.Desc": "Lädt die RenderDoc-In-Application-API, damit Frames aus dem Emulator heraus aufgezeichnet werden können.\nDrücke F12 während das Spiel läuft, um ein Frame aufzuzeichnen; Aufzeichnungen landen in user/logs/capture_logs/.\nErfordert eine RenderDoc-Installation. Verlangsamt die GPU und lässt manche Titel hängen, lass es also aus, wenn du nicht debuggst.", + "Options.Env.DisableVkImplicitLayers.Desc": "Wenn RenderDoc aktiviert ist, können andere kollidierende Overlays einen Device Loss verursachen. Das Aktivieren dieser Option kann das Problem beheben.", "Common.Save": "Speichern", "Common.Cancel": "Abbrechen", "Options.About": "Über", diff --git a/src/SharpEmu.GUI/Languages/dk.json b/src/SharpEmu.GUI/Languages/dk.json index 6b5bd6c..88d7658 100644 --- a/src/SharpEmu.GUI/Languages/dk.json +++ b/src/SharpEmu.GUI/Languages/dk.json @@ -177,6 +177,7 @@ "Options.Env.Group.Debug": "Fejlfinding", "Options.Env.Group.General": "Generelt", "Options.Env.RenderDoc.Desc": "Indlæser RenderDocs in-application-API, så frames kan optages inde fra emulatoren.\nTryk på F12 mens spillet kører for at optage ét frame; optagelser havner i user/logs/capture_logs/.\nKræver at RenderDoc er installeret. Gør GPU'en langsommere og får nogle titler til at hænge, så lad den være slået fra, medmindre du fejlfinder.", + "Options.Env.DisableVkImplicitLayers.Desc": "Når RenderDoc er aktiveret, kan andre konflikterende overlays forårsage device loss. Aktivering af denne indstilling kan løse problemet.", "Common.Save": "Gem", "Common.Cancel": "Annuller", "Options.About": "Om", diff --git a/src/SharpEmu.GUI/Languages/ee.json b/src/SharpEmu.GUI/Languages/ee.json index 636738b..10c414d 100644 --- a/src/SharpEmu.GUI/Languages/ee.json +++ b/src/SharpEmu.GUI/Languages/ee.json @@ -63,6 +63,7 @@ "Options.Env.Group.Debug": "Silumine", "Options.Env.Group.General": "Üldine", "Options.Env.RenderDoc.Desc": "Laadib RenderDoc'i rakendusesisese API, et kaadreid saaks hõivata otse emulaatorist.\nVajuta mängu käigus F12 ühe kaadri hõivamiseks; hõivatised salvestatakse kausta user/logs/capture_logs/.\nNõuab paigaldatud RenderDoc'i. Aeglustab GPU-d ja põhjustab mõningate mängude hangumist, seega hoia välja lülitatuna, kui sa ei silu.", + "Options.Env.DisableVkImplicitLayers.Desc": "Kui RenderDoc on lubatud, võivad teised konfliktis overlay'd põhjustada device loss'i. Selle valiku lubamine võib probleemi lahendada.", "Options.DefaultProfile.Label": "Vaikimisi profiili nimi", "Options.DefaultProfile.Desc": "Nimi, mida kasutatakse, kui mäng küsib tekstisisestust. Vaikimisi Sharp.", "Options.Section.Emulation": "EMULATSIOON", diff --git a/src/SharpEmu.GUI/Languages/en.json b/src/SharpEmu.GUI/Languages/en.json index 7bcaa55..fd5f8a1 100644 --- a/src/SharpEmu.GUI/Languages/en.json +++ b/src/SharpEmu.GUI/Languages/en.json @@ -63,6 +63,7 @@ "Options.Env.Group.Debug": "Debug", "Options.Env.Group.General": "General", "Options.Env.RenderDoc.Desc": "Load the RenderDoc in-application API so frames can be captured from inside the emulator.\nPress F12 while the game runs to capture one frame; captures land in user/logs/capture_logs/.\nRequires RenderDoc to be installed. Slows the GPU down and hangs some titles, so leave it off unless you are debugging.", + "Options.Env.DisableVkImplicitLayers.Desc": "When RenderDoc is enabled, other conflicting overlays can cause device loss. Enabling this option may fix it.", "Options.DefaultProfile.Label": "Default profile name", "Options.DefaultProfile.Desc": "Name used when a game asks for text input. Defaults to Sharp.", "Options.Section.Emulation": "EMULATION", diff --git a/src/SharpEmu.GUI/Languages/es.json b/src/SharpEmu.GUI/Languages/es.json index 58f4aa6..0fbef3e 100644 --- a/src/SharpEmu.GUI/Languages/es.json +++ b/src/SharpEmu.GUI/Languages/es.json @@ -187,6 +187,7 @@ "Options.Env.Group.Debug": "Depuración", "Options.Env.Group.General": "General", "Options.Env.RenderDoc.Desc": "Carga la API in-application de RenderDoc para poder capturar fotogramas desde el emulador.\nPulsa F12 mientras el juego se ejecuta para capturar un fotograma; las capturas se guardan en user/logs/capture_logs/.\nRequiere tener RenderDoc instalado. Ralentiza la GPU y bloquea algunos títulos, así que déjalo desactivado salvo que estés depurando.", + "Options.Env.DisableVkImplicitLayers.Desc": "Cuando RenderDoc está activado, otros overlays en conflicto pueden provocar una pérdida del dispositivo. Activar esta opción puede solucionar el problema.", "Common.Save": "Guardar", "Common.Cancel": "Cancelar", "Updater.Auto.Label": "Buscar actualizaciones al iniciar", diff --git a/src/SharpEmu.GUI/Languages/fr.json b/src/SharpEmu.GUI/Languages/fr.json index 2f6ad15..2c4d670 100644 --- a/src/SharpEmu.GUI/Languages/fr.json +++ b/src/SharpEmu.GUI/Languages/fr.json @@ -58,6 +58,7 @@ "Options.Env.Group.Debug": "Débogage", "Options.Env.Group.General": "Général", "Options.Env.RenderDoc.Desc": "Charge l'API in-application de RenderDoc afin de capturer des images depuis l'émulateur.\nAppuyez sur F12 pendant le jeu pour capturer une image ; les captures sont écrites dans user/logs/capture_logs/.\nNécessite l'installation de RenderDoc. Ralentit le GPU et bloque certains jeux : laissez cette option désactivée sauf en cas de débogage.", + "Options.Env.DisableVkImplicitLayers.Desc": "Lorsque RenderDoc est activé, d'autres overlays en conflit peuvent provoquer une perte du périphérique. Activer cette option peut corriger le problème.", "Options.Section.Emulation": "ÉMULATION", "Options.Section.Logging": "JOURNALISATION", "Options.Section.Launcher": "LANCEUR", diff --git a/src/SharpEmu.GUI/Languages/hu.json b/src/SharpEmu.GUI/Languages/hu.json index e43ba59..75606ac 100644 --- a/src/SharpEmu.GUI/Languages/hu.json +++ b/src/SharpEmu.GUI/Languages/hu.json @@ -58,6 +58,7 @@ "Options.Env.Group.Debug": "Hibakeresés", "Options.Env.Group.General": "Általános", "Options.Env.RenderDoc.Desc": "Betölti a RenderDoc alkalmazáson belüli API-ját, így képkockák rögzíthetők az emulátorból.\nNyomd meg az F12-et futó játék közben egy képkocka rögzítéséhez; a felvételek a user/logs/capture_logs/ mappába kerülnek.\nTelepített RenderDocot igényel. Lassítja a GPU-t és egyes játékokat lefagyaszt, ezért hagyd kikapcsolva, hacsak nem hibakeresel.", + "Options.Env.DisableVkImplicitLayers.Desc": "Ha a RenderDoc engedélyezve van, más ütköző overlayek device loss hibát okozhatnak. Ennek a beállításnak az engedélyezése megoldhatja a problémát.", "Options.Section.Emulation": "EMULÁCIÓ", "Options.Section.Logging": "LOGOLÁS", "Options.Section.Launcher": "INDITÓ", diff --git a/src/SharpEmu.GUI/Languages/it.json b/src/SharpEmu.GUI/Languages/it.json index 440ae0a..d3eab27 100644 --- a/src/SharpEmu.GUI/Languages/it.json +++ b/src/SharpEmu.GUI/Languages/it.json @@ -182,6 +182,7 @@ "Options.Env.Group.Debug": "Debug", "Options.Env.Group.General": "Generale", "Options.Env.RenderDoc.Desc": "Carica l'API in-application di RenderDoc per catturare i frame dall'interno dell'emulatore.\nPremi F12 mentre il gioco è in esecuzione per catturare un frame; le catture finiscono in user/logs/capture_logs/.\nRichiede RenderDoc installato. Rallenta la GPU e blocca alcuni titoli, quindi lascialo disattivato se non stai facendo debug.", + "Options.Env.DisableVkImplicitLayers.Desc": "Quando RenderDoc è attivo, altri overlay in conflitto possono causare una perdita del dispositivo. Abilitare questa opzione può risolvere il problema.", "Common.Save": "Salva", "Common.Cancel": "Annulla", "Options.About": "Informazioni", diff --git a/src/SharpEmu.GUI/Languages/ja.json b/src/SharpEmu.GUI/Languages/ja.json index da01b4b..c5ddccc 100644 --- a/src/SharpEmu.GUI/Languages/ja.json +++ b/src/SharpEmu.GUI/Languages/ja.json @@ -177,6 +177,7 @@ "Options.Env.Group.Debug": "デバッグ", "Options.Env.Group.General": "一般", "Options.Env.RenderDoc.Desc": "RenderDoc のアプリ内 API を読み込み、エミュレーター内からフレームをキャプチャできるようにします。\nゲーム実行中に F12 を押すと 1 フレームをキャプチャします。保存先は user/logs/capture_logs/ です。\nRenderDoc のインストールが必要です。GPU が遅くなり一部のタイトルはハングするため、デバッグ時以外はオフのままにしてください。", + "Options.Env.DisableVkImplicitLayers.Desc": "RenderDoc が有効な場合、競合する他のオーバーレイによって device loss が発生することがあります。この設定を有効にすると解決する場合があります。", "Common.Save": "保存", "Common.Cancel": "キャンセル", "Options.About": "情報", diff --git a/src/SharpEmu.GUI/Languages/ko.json b/src/SharpEmu.GUI/Languages/ko.json index 8f36db7..cae6590 100644 --- a/src/SharpEmu.GUI/Languages/ko.json +++ b/src/SharpEmu.GUI/Languages/ko.json @@ -177,6 +177,7 @@ "Options.Env.Group.Debug": "디버그", "Options.Env.Group.General": "일반", "Options.Env.RenderDoc.Desc": "RenderDoc의 인앱 API를 로드하여 에뮬레이터 내부에서 프레임을 캡처할 수 있게 합니다.\n게임 실행 중 F12을 누르면 한 프레임을 캡처하며, 캡처 파일은 user/logs/capture_logs/에 저장됩니다.\nRenderDoc이 설치되어 있어야 합니다. GPU 속도가 느려지고 일부 타이틀은 멈추므로 디버깅할 때가 아니면 꺼 두세요.", + "Options.Env.DisableVkImplicitLayers.Desc": "RenderDoc이 활성화된 경우 다른 충돌하는 오버레이로 인해 device loss가 발생할 수 있습니다. 이 옵션을 활성화하면 문제가 해결될 수 있습니다.", "Common.Save": "저장", "Common.Cancel": "취소", "Options.About": "정보", diff --git a/src/SharpEmu.GUI/Languages/nl.json b/src/SharpEmu.GUI/Languages/nl.json index abe3311..7425baa 100644 --- a/src/SharpEmu.GUI/Languages/nl.json +++ b/src/SharpEmu.GUI/Languages/nl.json @@ -177,6 +177,7 @@ "Options.Env.Group.Debug": "Debuggen", "Options.Env.Group.General": "Algemeen", "Options.Env.RenderDoc.Desc": "Laadt de RenderDoc in-application-API zodat frames vanuit de emulator kunnen worden vastgelegd.\nDruk op F12 terwijl het spel draait om één frame vast te leggen; opnamen komen in user/logs/capture_logs/.\nVereist een geïnstalleerde RenderDoc. Vertraagt de GPU en laat sommige games vastlopen, dus laat dit uit tenzij je aan het debuggen bent.", + "Options.Env.DisableVkImplicitLayers.Desc": "Wanneer RenderDoc is ingeschakeld, kunnen andere conflicterende overlays device loss veroorzaken. Het inschakelen van deze optie kan het probleem oplossen.", "Common.Save": "Opslaan", "Common.Cancel": "Annuleren", "Options.About": "Over", diff --git a/src/SharpEmu.GUI/Languages/pl.json b/src/SharpEmu.GUI/Languages/pl.json index 941c368..7366ee2 100644 --- a/src/SharpEmu.GUI/Languages/pl.json +++ b/src/SharpEmu.GUI/Languages/pl.json @@ -63,6 +63,7 @@ "Options.Env.Group.Debug": "Debugowanie", "Options.Env.Group.General": "Ogólne", "Options.Env.RenderDoc.Desc": "Załaduj API RenderDoc w aplikacji, aby można było przechwytywać klatki z wnętrza emulatora.\nNaciśnij F12 podczas działania gry, aby przechwycić jedną klatkę; przechwycone klatki trafiają do user/logs/capture_logs/.\nWymaga zainstalowanego RenderDoc. Spowalnia GPU i zawiesza niektóre tytuły, więc zostaw wyłączone, chyba że debugujesz.", + "Options.Env.DisableVkImplicitLayers.Desc": "Gdy RenderDoc jest włączony, inne konfliktujące nakładki mogą powodować utratę urządzenia. Włączenie tej opcji może rozwiązać problem.", "Options.DefaultProfile.Label": "Domyślna nazwa profilu", "Options.DefaultProfile.Desc": "Nazwa używana, gdy gra prosi o wprowadzenie tekstu. Domyślnie Sharp.", "Options.Section.Emulation": "EMULACJA", diff --git a/src/SharpEmu.GUI/Languages/pt.json b/src/SharpEmu.GUI/Languages/pt.json index 3835a88..f55aa1b 100644 --- a/src/SharpEmu.GUI/Languages/pt.json +++ b/src/SharpEmu.GUI/Languages/pt.json @@ -58,6 +58,7 @@ "Options.Env.Group.Debug": "Depuração", "Options.Env.Group.General": "Geral", "Options.Env.RenderDoc.Desc": "Carrega a API in-application do RenderDoc para capturar frames a partir do emulador.\nPrime F12 enquanto o jogo corre para capturar um frame; as capturas vão para user/logs/capture_logs/.\nRequer o RenderDoc instalado. Torna a GPU mais lenta e bloqueia alguns títulos, por isso deixa desativado a menos que estejas a depurar.", + "Options.Env.DisableVkImplicitLayers.Desc": "Quando o RenderDoc está ativado, outros overlays em conflito podem causar perda do dispositivo. Ativar esta opção pode corrigir o problema.", "Options.Section.Emulation": "EMULAÇÃO", "Options.Section.Logging": "REGISTOS", "Options.Section.Launcher": "LANÇADOR", diff --git a/src/SharpEmu.GUI/Languages/ru.json b/src/SharpEmu.GUI/Languages/ru.json index 6f8eb98..8326bef 100644 --- a/src/SharpEmu.GUI/Languages/ru.json +++ b/src/SharpEmu.GUI/Languages/ru.json @@ -61,6 +61,7 @@ "Options.Env.Group.Debug": "Отладка", "Options.Env.Group.General": "Общие", "Options.Env.RenderDoc.Desc": "Загружает внутренний API RenderDoc, чтобы кадры можно было захватывать из эмулятора.\nНажмите F12 во время игры, чтобы захватить один кадр; захваты сохраняются в user/logs/capture_logs/.\nТребует установленного RenderDoc. Замедляет GPU и подвешивает некоторые игры, поэтому оставьте выключенным, если не занимаетесь отладкой.", + "Options.Env.DisableVkImplicitLayers.Desc": "Когда RenderDoc включён, другие конфликтующие оверлеи могут вызвать потерю устройства. Включение этой настройки может решить проблему.", "Options.Section.Emulation": "ЭМУЛЯЦИЯ", "Options.Section.Logging": "ЛОГГИРОВАНИЕ", "Options.Section.Launcher": "ЛАУНЧЕР", diff --git a/src/SharpEmu.GUI/Languages/tr.json b/src/SharpEmu.GUI/Languages/tr.json index e8ef546..421cbc6 100644 --- a/src/SharpEmu.GUI/Languages/tr.json +++ b/src/SharpEmu.GUI/Languages/tr.json @@ -211,6 +211,7 @@ "Options.Env.Group.Debug": "Hata Ayıklama", "Options.Env.Group.General": "Genel", "Options.Env.RenderDoc.Desc": "RenderDoc uygulama içi API'sini yükler, böylece kareler emülatörün içinden yakalanabilir.\nOyun çalışırken F12'a basınca bir kare yakalanır; kayıtlar user/logs/capture_logs/ altına düşer.\nRenderDoc'un kurulu olmasını gerektirir. GPU'yu yavaşlatır ve bazı oyunları kilitler, hata ayıklamıyorsanız kapalı bırakın.", + "Options.Env.DisableVkImplicitLayers.Desc": "RenderDoc ayarı açıkken diğer çakışan overlayler device loss'a sebebiyet verebiliyor. Bu ayarı açmak bunu düzeltebilir.", "Options.DefaultProfile.Label": "Varsayilan profil adi", "Options.DefaultProfile.Desc": "Oyun metin girisi istediginde kullanilacak ad. Varsayilan deger Sharp'tir.", "Common.Save": "Kaydet", diff --git a/src/SharpEmu.GUI/MainWindow.GameOptions.cs b/src/SharpEmu.GUI/MainWindow.GameOptions.cs index bac0bd2..ca09cc1 100644 --- a/src/SharpEmu.GUI/MainWindow.GameOptions.cs +++ b/src/SharpEmu.GUI/MainWindow.GameOptions.cs @@ -25,6 +25,7 @@ public partial class MainWindow "SHARPEMU_LOG_IO", "SHARPEMU_LOG_NP", "SHARPEMU_RENDERDOC", + "SHARPEMU_VK_DISABLE_IMPLICITS", "SHARPEMU_CRASH_CAPTURE", ]; @@ -502,6 +503,7 @@ public partial class MainWindow ("SHARPEMU_LOG_IO", GameEnvLogIoToggle), ("SHARPEMU_LOG_NP", GameEnvLogNpToggle), ("SHARPEMU_RENDERDOC", GameEnvRenderDocToggle), + ("SHARPEMU_VK_DISABLE_IMPLICITS", GameEnvDisableVkImplicitLayersToggle), ("SHARPEMU_CRASH_CAPTURE", GameCrashDumpToggle), ]; diff --git a/src/SharpEmu.GUI/MainWindow.axaml b/src/SharpEmu.GUI/MainWindow.axaml index 98136f5..da9a172 100644 --- a/src/SharpEmu.GUI/MainWindow.axaml +++ b/src/SharpEmu.GUI/MainWindow.axaml @@ -992,6 +992,14 @@ SPDX-License-Identifier: GPL-2.0-or-later + + + + + + + diff --git a/src/SharpEmu.GUI/MainWindow.axaml.cs b/src/SharpEmu.GUI/MainWindow.axaml.cs index be454ba..3e5e6e7 100644 --- a/src/SharpEmu.GUI/MainWindow.axaml.cs +++ b/src/SharpEmu.GUI/MainWindow.axaml.cs @@ -342,6 +342,10 @@ public partial class MainWindow : Window SetEnvironmentToggle( "SHARPEMU_RENDERDOC", EnvRenderDocToggle.IsChecked == true); + EnvDisableVkImplicitLayersToggle.IsCheckedChanged += (_, _) => + SetEnvironmentToggle( + "SHARPEMU_VK_DISABLE_IMPLICITS", + EnvDisableVkImplicitLayersToggle.IsChecked == true); DefaultProfileBox.TextChanged += (_, _) => _settings.DefaultProfile = GuiSettings.NormalizeDefaultProfile(DefaultProfileBox.Text); LanguageBox.SelectionChanged += (_, _) => OnLanguageChanged(); @@ -1261,6 +1265,8 @@ public partial class MainWindow : Window EnvLogNpToggle.IsChecked = _settings.EnvironmentToggles.Contains("SHARPEMU_LOG_NP"); EnvRenderDocToggle.IsChecked = _settings.EnvironmentToggles.Contains("SHARPEMU_RENDERDOC"); + EnvDisableVkImplicitLayersToggle.IsChecked = + _settings.EnvironmentToggles.Contains("SHARPEMU_VK_DISABLE_IMPLICITS"); DefaultProfileBox.Text = _settings.DefaultProfile; WindowModeBox.SelectedIndex = ChoiceIndex(_settings.WindowMode, "Windowed", "Borderless", "Exclusive"); LoadHostDisplayOptions(); @@ -2471,6 +2477,13 @@ public partial class MainWindow : Window _appliedEnvironmentVariables.Add(name); } + if (RenderDocCapture.ApplyVulkanLoaderEnvironment()) + { + _appliedEnvironmentVariables.Add("VK_LOADER_DEBUG"); + _appliedEnvironmentVariables.Add("VK_LOADER_LAYERS_DISABLE"); + _appliedEnvironmentVariables.Add("VK_LOADER_LAYERS_ALLOW"); + } + Environment.SetEnvironmentVariable( DefaultProfileEnvironmentName, GuiSettings.NormalizeDefaultProfile(_settings.DefaultProfile)); diff --git a/src/SharpEmu.Libs/VideoOut/RenderDocCapture.cs b/src/SharpEmu.Libs/VideoOut/RenderDocCapture.cs index 12d1fc6..b9dcc7f 100644 --- a/src/SharpEmu.Libs/VideoOut/RenderDocCapture.cs +++ b/src/SharpEmu.Libs/VideoOut/RenderDocCapture.cs @@ -37,6 +37,22 @@ public static unsafe class RenderDocCapture public static bool IsAvailable => _api is not null; + public static bool ApplyVulkanLoaderEnvironment() + { + if (!string.Equals( + Environment.GetEnvironmentVariable("SHARPEMU_VK_DISABLE_IMPLICITS"), + "1", + StringComparison.Ordinal)) + { + return false; + } + + Environment.SetEnvironmentVariable("VK_LOADER_DEBUG", "error,warn,layer"); + Environment.SetEnvironmentVariable("VK_LOADER_LAYERS_DISABLE", "~implicit~"); + Environment.SetEnvironmentVariable("VK_LOADER_LAYERS_ALLOW", "*RENDERDOC*"); + return true; + } + public static void Initialize() { if (_initialized)