diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt index 35bcf430da..e9a489d2e8 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt @@ -15,7 +15,6 @@ enum class IntSetting(override val key: String) : AbstractIntSetting { LANGUAGE_INDEX("language_index"), RENDERER_BACKEND("backend"), RENDERER_VRAM_USAGE_MODE("vram_usage_mode"), - RENDERER_SHADER_BACKEND("shader_backend"), RENDERER_NVDEC_EMULATION("nvdec_emulation"), RENDERER_ASTC_DECODE_METHOD("accelerate_astc"), RENDERER_ASTC_RECOMPRESSION("astc_recompression"), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt index df475271fb..0b72cd52ad 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt @@ -311,15 +311,6 @@ abstract class SettingsItem( valuesId = R.array.rendererAccuracyValues ) ) - put( - SingleChoiceSetting( - IntSetting.RENDERER_SHADER_BACKEND, - titleId = R.string.shader_backend, - descriptionId = R.string.shader_backend_description, - choicesId = R.array.rendererShaderNames, - valuesId = R.array.rendererShaderValues - ) - ) put( SingleChoiceSetting( IntSetting.RENDERER_NVDEC_EMULATION, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index 68c8a0b309..c03bd2a950 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -255,7 +255,6 @@ class SettingsFragmentPresenter( add(IntSetting.RENDERER_RESOLUTION.key) add(IntSetting.RENDERER_VSYNC.key) - add(IntSetting.RENDERER_SHADER_BACKEND.key) add(IntSetting.RENDERER_SCALING_FILTER.key) add(IntSetting.FSR_SHARPENING_SLIDER.key) add(IntSetting.RENDERER_ANTI_ALIASING.key) diff --git a/src/android/app/src/main/res/values-ar/strings.xml b/src/android/app/src/main/res/values-ar/strings.xml index 638274c6a1..9b6b1741b6 100644 --- a/src/android/app/src/main/res/values-ar/strings.xml +++ b/src/android/app/src/main/res/values-ar/strings.xml @@ -100,11 +100,6 @@ للإستخدام في التطوير فقط. 0 إلى 65535 - - GLSL - GLASM - SPIRV - محاكاة NVDEC حدد كيفية التعامل مع فك تشفير الفيديو (NVDEC) خلال المشاهد التمهيدية والمقدمة. @@ -458,8 +453,6 @@ الدقة (الإرساء/محمول) VSync وضع - واجهة برمجة التظليل - حدد كيفية تجميع وترجمة برامج التظليل لوحدة معالجة الرسومات الخاصة بك. مرشح ملائم للنافذة حدة FSR يحدد مدى وضوح الصورة عند استخدام التباين الديناميكي لـ FSR diff --git a/src/android/app/src/main/res/values-ckb/strings.xml b/src/android/app/src/main/res/values-ckb/strings.xml index 10f034144a..6b9a715a49 100644 --- a/src/android/app/src/main/res/values-ckb/strings.xml +++ b/src/android/app/src/main/res/values-ckb/strings.xml @@ -63,9 +63,7 @@ چالاککردنی میمیکردنی MMU میواندە ئەم باشکردنە خێرایی دەستکەوتنی بیرگە لەلایەن پرۆگرامی میوانەکە زیاد دەکات. چالاککردنی وای لێدەکات کە خوێندنەوە/نووسینەکانی بیرگەی میوانەکە ڕاستەوخۆ لە بیرگە ئەنجام بدرێت و میمیکردنی MMU میواندە بەکاربهێنێت. ناچالاککردنی ئەمە هەموو دەستکەوتنەکانی بیرگە ڕەت دەکاتەوە لە بەکارهێنانی میمیکردنی MMU نەرمەکاڵا. - - GLSL - GLASM + ئیمولەیشنی NVDEC هەڵبژاردنی ڕێگای دیکۆدکردنی ڤیدیۆ @@ -339,8 +337,6 @@ ڕوونی (دۆخی دەستی/دۆخی دۆک) دۆخی VSync - شادەر باکند - هەڵبژاردنی ڕێگای پێکهێنانی شادەر فلتەری گونجاندنی پەنجەرە تیژی FSR دیاریکردنی تیژی وێنە لە کاتی بەکارهێنانی FSR diff --git a/src/android/app/src/main/res/values-cs/strings.xml b/src/android/app/src/main/res/values-cs/strings.xml index c0f65b9c61..51df57c5ec 100644 --- a/src/android/app/src/main/res/values-cs/strings.xml +++ b/src/android/app/src/main/res/values-cs/strings.xml @@ -63,9 +63,7 @@ Povolit emulaci hostitelské MMU Tato optimalizace zrychluje přístup do paměti hostovaného programu. Její povolení způsobí, že čtení a zápisy do paměti hosta se provádějí přímo v paměti a využívají hostitelskou MMU. Zakázání této funkce vynutí použití softwarové emulace MMU pro všechny přístupy do paměti. - - GLSL - GLASM + Emulace NVDEC Zpracování dekódování videa @@ -327,8 +325,6 @@ Rozlišení (Handheld/Docked) VSync režim - Backend shaderů - Způsob kompilace shaderů Filtr přizpůsobení Ostrost FSR Nastavení ostrosti pro FSR diff --git a/src/android/app/src/main/res/values-de/strings.xml b/src/android/app/src/main/res/values-de/strings.xml index 0909f0dee1..4ac63917de 100644 --- a/src/android/app/src/main/res/values-de/strings.xml +++ b/src/android/app/src/main/res/values-de/strings.xml @@ -71,9 +71,7 @@ Host-MMU-Emulation aktivieren Diese Optimierung beschleunigt Speicherzugriffe durch das Gastprogramm. Wenn aktiviert, erfolgen Speicherlese- und -schreibvorgänge des Gastes direkt im Speicher und nutzen die MMU des Hosts. Das Deaktivieren erzwingt die Verwendung der Software-MMU-Emulation für alle Speicherzugriffe. - - GLSL - GLASM + NVDEC-Emulation Methode zur Videodekodierung @@ -383,8 +381,6 @@ Wird der Handheld-Modus verwendet, verringert es die Auflösung und erhöht die Auflösung (Handheld/Gedockt) VSync-Modus - Shader-Backend - Methode zur Shader-Kompilierung Skalierungsfilter FSR-Schärfe Bestimmt die Schärfe bei FSR-Nutzung. diff --git a/src/android/app/src/main/res/values-es/strings.xml b/src/android/app/src/main/res/values-es/strings.xml index 80b386e5e0..f7311c86b7 100644 --- a/src/android/app/src/main/res/values-es/strings.xml +++ b/src/android/app/src/main/res/values-es/strings.xml @@ -81,9 +81,7 @@ Habilitar emulación de MMU del anfitrión Esta optimización acelera el acceso a la memoria del programa invitado. Al habilitarla, las lecturas y escrituras de la memoria del invitado se realizan directamente en la memoria y utilizan la MMU del anfitrión. Al deshabilitarla, todos los accesos a la memoria utilizan el software de emulación de la MMU. - - GLSL - GLASM + Emulación NVDEC Seleccione cómo se maneja la decodificación de vídeo (NVDEC) durante las escenas y las introducciones. @@ -398,8 +396,6 @@ Resolución (Portátil/Sobremesa) Modo VSync - Backend de sombreador - Elija cómo se compilan y traducen los sombreadores para su GPU. Filtro de adaptación de ventana Nitidez FSR Ajusta la intensidad del filtro de enfoque al usar el contraste dinámico de FSR. diff --git a/src/android/app/src/main/res/values-fa/strings.xml b/src/android/app/src/main/res/values-fa/strings.xml index e15f3c3851..e831c699a3 100644 --- a/src/android/app/src/main/res/values-fa/strings.xml +++ b/src/android/app/src/main/res/values-fa/strings.xml @@ -127,13 +127,6 @@ محافظه‌کارانه تهاجمی - - بک‌اند شیدر - انتخاب روش کامپایل و ترجمه شیدرها - GLSL - GLASM - Spir-V - شبیه‌سازی NVDEC انتخاب روش پردازش ویدیو (NVDEC) diff --git a/src/android/app/src/main/res/values-fr/strings.xml b/src/android/app/src/main/res/values-fr/strings.xml index 4554a36499..146d826335 100644 --- a/src/android/app/src/main/res/values-fr/strings.xml +++ b/src/android/app/src/main/res/values-fr/strings.xml @@ -85,9 +85,6 @@ À usage de développement uniquement. 0 à 65535 - - GLSL - GLASM Émulation NVDEC Sélectionnez la manière dont le décodage vidéo (NVDEC) est géré pendant les cinématiques et les intros. @@ -412,8 +409,6 @@ Résolution (Mode Portable/Mode TV) Mode VSync - Backend shader - Méthode de compilation Filtre de fenêtre adaptatif Netteté FSR Détermine à quel point l\'image sera affinée lors de l\'utilisation du contraste dynamique FSR. diff --git a/src/android/app/src/main/res/values-he/strings.xml b/src/android/app/src/main/res/values-he/strings.xml index d9fad35484..669aa63de3 100644 --- a/src/android/app/src/main/res/values-he/strings.xml +++ b/src/android/app/src/main/res/values-he/strings.xml @@ -63,9 +63,7 @@ הפעל אמולציית MMU מארח אופטימיזציה זו מאיצה את גישת הזיכרון על ידי התוכנית האורחת. הפעלתה גורמת לכך שפעולות קריאה/כתיבה לזיכרון האורח מתבצעות ישירות לזיכרון ומשתמשות ב-MMU של המארח. השבתת זאת מאלצת את כל גישות הזיכרון להשתמש באמולציית MMU תוכנתית. - - GLSL - GLASM + אמולציית NVDEC בחר כיצד לטפל בפענוח וידאו @@ -363,8 +361,6 @@ רזולוציה (מעוגן/נייד) מצב VSync - מנוע שיידרים - בחר כיצד לקמפל שיידרים פילטר מתאם חלון חדות FSR קובע את מידת החדות בעת שימוש ב-FSR. diff --git a/src/android/app/src/main/res/values-hu/strings.xml b/src/android/app/src/main/res/values-hu/strings.xml index 1c288d5f81..9270f37d45 100644 --- a/src/android/app/src/main/res/values-hu/strings.xml +++ b/src/android/app/src/main/res/values-hu/strings.xml @@ -63,9 +63,7 @@ Gazda MMU emuláció engedélyezése Ez az optimalizáció gyorsítja a vendégprogram memória-hozzáférését. Engedélyezése esetén a vendég memóriaolvasási/írási műveletei közvetlenül a memóriában történnek, és kihasználják a gazda MMU-ját. Letiltás esetén minden memória-hozzáférés a szoftveres MMU emulációt használja. - - GLSL - GLASM + NVDEC emuláció Videódekódolás kezelése @@ -358,8 +356,6 @@ Felbontás (Kézi/Dockolt) VSync mód - Shader backend - Shaderek fordításának módja Ablakhoz alkalmazkodó szűrő FSR élesség Meghatározza, milyen éles lesz a kép az FSR dinamikus kontraszt használata közben. diff --git a/src/android/app/src/main/res/values-id/strings.xml b/src/android/app/src/main/res/values-id/strings.xml index c039679527..c95856c6db 100644 --- a/src/android/app/src/main/res/values-id/strings.xml +++ b/src/android/app/src/main/res/values-id/strings.xml @@ -81,9 +81,7 @@ Aktifkan Emulasi MMU Host Optimasi ini mempercepat akses memori oleh program tamu. Mengaktifkannya menyebabkan pembacaan/penulisan memori tamu dilakukan langsung ke memori dan memanfaatkan MMU Host. Menonaktifkan ini memaksa semua akses memori menggunakan Emulasi MMU Perangkat Lunak. - - GLSL - GLASM + Emulasi NVDEC Pilih cara decoding video (NVDEC) ditangani selama cutscene dan intro. @@ -390,8 +388,6 @@ Resolusi (Handheld/Docked) Mode Sinkronisasi Vertikal - Backend Shader - Pilih cara shader dikompilasi dan diterjemahkan untuk GPU Anda. Filter penyesuaian jendela Ketajaman FSR Menentukan seberapa tajam gambar akan terlihat saat menggunakan kontras dinamis FSR diff --git a/src/android/app/src/main/res/values-it/strings.xml b/src/android/app/src/main/res/values-it/strings.xml index 29a4ec0e1e..6c18addf2f 100644 --- a/src/android/app/src/main/res/values-it/strings.xml +++ b/src/android/app/src/main/res/values-it/strings.xml @@ -81,9 +81,7 @@ Abilita l\'emulazione della MMU nell\'host Questa ottimizzazione accelera gli accessi alla memoria da parte del programma guest. Abilitandola, le letture/scritture della memoria guest vengono eseguite direttamente in memoria e sfruttano la MMU host. Disabilitandola, tutti gli accessi alla memoria sono costretti a utilizzare l\'emulazione software della MMU. - - GLSL - GLASM + Emulazione NVDEC Scegli come gestire la decodifica video @@ -399,8 +397,6 @@ Risoluzione (Portatile/Docked) Modalità VSync - Backend shader - Scegli come compilare gli shader Filtro adattivo della finestra Nitidezza FSR Determina quanto sarà nitida l\'immagine utilizzando il contrasto dinamico di FSR diff --git a/src/android/app/src/main/res/values-ja/strings.xml b/src/android/app/src/main/res/values-ja/strings.xml index 9c1249a614..2c443003f8 100644 --- a/src/android/app/src/main/res/values-ja/strings.xml +++ b/src/android/app/src/main/res/values-ja/strings.xml @@ -63,9 +63,7 @@ ホストMMUエミュレーションを有効化 この最適化により、ゲストプログラムによるメモリアクセスが高速化されます。有効にすると、ゲストのメモリ読み書きが直接メモリ内で実行され、ホストのMMUを利用します。無効にすると、すべてのメモリアクセスでソフトウェアMMUエミュレーションが使用されます。 - - GLSL - GLASM + NVDECエミュレーション ビデオデコード方法 @@ -358,8 +356,6 @@ 解像度(携帯モード/TVモード) 垂直同期モード - シェーダーバックエンド - シェーダーのコンパイル方法 ウィンドウ適応フィルター アンチエイリアス方式 コンパイル済みシェーダーを最適化し、GPUの効率を向上させます。 diff --git a/src/android/app/src/main/res/values-ko/strings.xml b/src/android/app/src/main/res/values-ko/strings.xml index 60889b8f61..4a703f6930 100644 --- a/src/android/app/src/main/res/values-ko/strings.xml +++ b/src/android/app/src/main/res/values-ko/strings.xml @@ -63,9 +63,7 @@ 호스트 MMU 에뮬레이션 사용 이 최적화는 게스트 프로그램의 메모리 접근 속도를 높입니다. 활성화하면 게스트의 메모리 읽기/쓰기가 메모리에서 직접 수행되고 호스트의 MMU를 활용합니다. 비활성화하면 모든 메모리 접근에 소프트웨어 MMU 에뮬레이션을 사용하게 됩니다. - - GLSL - GLASM + NVDEC 에뮬레이션 비디오 디코딩 처리 방식 선택 @@ -358,8 +356,6 @@ 해상도 (휴대 모드/독 모드) 수직동기화 모드 - 셰이더 백엔드 - 셰이더 컴파일 방식 선택 윈도우 적응 필터 안티에일리어싱 방법 컴파일된 셰이더를 최적화하여 GPU 효율성을 향상시킵니다. diff --git a/src/android/app/src/main/res/values-nb/strings.xml b/src/android/app/src/main/res/values-nb/strings.xml index 17e8088941..34bd32640c 100644 --- a/src/android/app/src/main/res/values-nb/strings.xml +++ b/src/android/app/src/main/res/values-nb/strings.xml @@ -63,9 +63,7 @@ Aktiver verts-MMU-emulering Denne optimaliseringen fremskynder minnetilgang av gjesteprogrammet. Hvis aktivert, utføres gjestens minnelesing/skriving direkte i minnet og bruker vertens MMU. Deaktivering tvinger alle minnetilganger til å bruke programvarebasert MMU-emulering. - - GLSL - GLASM + NVDEC-emulering Velg hvordan videodekoding håndteres @@ -339,8 +337,6 @@ Oppløsning (håndholdt/dokket) VSync-modus - Shader-backend - Velg hvordan shadere kompileres Filter for vindustilpasning FSR-skarphet Bestemmer bildekvalitet med FSR diff --git a/src/android/app/src/main/res/values-pl/strings.xml b/src/android/app/src/main/res/values-pl/strings.xml index 4639fa04c9..d1fce4bb0e 100644 --- a/src/android/app/src/main/res/values-pl/strings.xml +++ b/src/android/app/src/main/res/values-pl/strings.xml @@ -88,9 +88,6 @@ Wyłącznie do użytku deweloperskiego. 0 do 65535 - - GLSL - GLASM Emulacja NVDEC Wybierz metodę dekodowania wideo (NVDEC). @@ -437,8 +434,6 @@ Rozdzielczość (Handheld/Zadokowany) Synchronizacja pionowa VSync - Backend shaderów - Wybierz metodę kompilacji shaderów. Filtr adaptacji rozdzielczości Ostrość FSR Kontroluje ostrość obrazu w FSR. diff --git a/src/android/app/src/main/res/values-pt-rBR/strings.xml b/src/android/app/src/main/res/values-pt-rBR/strings.xml index c536f740e3..89b59729a6 100644 --- a/src/android/app/src/main/res/values-pt-rBR/strings.xml +++ b/src/android/app/src/main/res/values-pt-rBR/strings.xml @@ -88,9 +88,6 @@ Apenas para uso em desenvolvimento. 0 a 65535 - - GLSL - GLASM Decodificação de Vídeo (NVDEC) Selecione como a decodificação de vídeo é realizada durante cutscenes e intros. @@ -435,8 +432,6 @@ Resolução (Portátil/Modo TV) Modo de VSync - Shader Backend - Escolha como os shaders são compilados e traduzidos para sua GPU. Filtro de Adaptação da Janela Nitidez do FSR Determina a nitidez da imagem ao utilizar o contraste dinâmico do FSR diff --git a/src/android/app/src/main/res/values-pt-rPT/strings.xml b/src/android/app/src/main/res/values-pt-rPT/strings.xml index 271b71e5d7..c99fc3364a 100644 --- a/src/android/app/src/main/res/values-pt-rPT/strings.xml +++ b/src/android/app/src/main/res/values-pt-rPT/strings.xml @@ -63,9 +63,7 @@ Ativar Emulação de MMU do Anfitrião Esta otimização acelera os acessos à memória pelo programa convidado. Ativar faz com que as leituras/escritas de memória do convidado sejam efetuadas diretamente na memória e utilizem a MMU do Anfitrião. Desativar força todos os acessos à memória a usar a Emulação de MMU por Software. - - GLSL - GLASM + Emulação NVDEC Método de decodificação de vídeo. @@ -362,8 +360,6 @@ Resolução (Portátil/Ancorado) Modo VSync - Backend de Shader - Método de compilação de shaders. Filtro de Adaptação da Janela Nitidez do FSR Determina a nitidez da imagem ao usar contraste dinâmico do FSR diff --git a/src/android/app/src/main/res/values-ru/strings.xml b/src/android/app/src/main/res/values-ru/strings.xml index 34bdb0d5cc..ccb52605db 100644 --- a/src/android/app/src/main/res/values-ru/strings.xml +++ b/src/android/app/src/main/res/values-ru/strings.xml @@ -88,9 +88,6 @@ Только для разработчиков От 0 до 65535 - - GLSL - GLASM Эмуляция NVDEC Обработка видео (ролики, интро) @@ -437,8 +434,6 @@ Разрешение (портативное/в док-станции) Режим верт. синхронизации - Шейдерный бэкенд - Метод компиляции шейдеров Фильтр адаптации окна Резкость FSR Определяет, насколько чётким будет изображение при использовании динамического контраста FSR. diff --git a/src/android/app/src/main/res/values-sr/strings.xml b/src/android/app/src/main/res/values-sr/strings.xml index c9ede9a032..e14c93991c 100644 --- a/src/android/app/src/main/res/values-sr/strings.xml +++ b/src/android/app/src/main/res/values-sr/strings.xml @@ -61,9 +61,7 @@ Омогући емулацију MMU домаћина Ова оптимизација убрзава приступ меморији од стране гостујућег програма. Укључивање изазива да се читања/уписа меморије госта обављају директно у меморији и користе MMU домаћина. Искључивање присиљава све приступе меморији да користе софтверску емулацију MMU. - - GLSL - GLASM + НВДЕЦ Емулација Изаберите како се видео декодирање (НВДЕЦ) обрађује током секс и увозних интросија. @@ -361,8 +359,6 @@ Резолуција (ручно / прикључено) Всинц мод - Схадер Бацкенд - Изаберите како се сјеначици саставе и преведете за ваш ГПУ. Филтер прилагођавања прозора ФСР оштрина Одређује колико ће се слика наоштрен трајати док користи \"ФСР\" динамички контраст diff --git a/src/android/app/src/main/res/values-uk/strings.xml b/src/android/app/src/main/res/values-uk/strings.xml index 21995b3916..d5df12a78c 100644 --- a/src/android/app/src/main/res/values-uk/strings.xml +++ b/src/android/app/src/main/res/values-uk/strings.xml @@ -88,11 +88,6 @@ Лише для розробників. 0–65535 - - GLSL - GLASM - SPIRV - Емуляція NVDEC Обробка відео під час катсцен @@ -442,8 +437,6 @@ Роздільна здатність (Портативний/Док) Режим верт. синхронізації - Система обробки шейдерів - Виберіть, як компілювати й транслювати шейдери для ГП. Фільтр масштабування вікна Різкість FSR Визначає різкість зображення при використанні FSR. diff --git a/src/android/app/src/main/res/values-vi/strings.xml b/src/android/app/src/main/res/values-vi/strings.xml index 948378d075..da5867a41e 100644 --- a/src/android/app/src/main/res/values-vi/strings.xml +++ b/src/android/app/src/main/res/values-vi/strings.xml @@ -63,9 +63,7 @@ Bật giả lập MMU Máy chủ Tối ưu hóa này tăng tốc độ truy cập bộ nhớ của chương trình khách. Bật nó lên khiến các thao tác đọc/ghi bộ nhớ khách được thực hiện trực tiếp vào bộ nhớ và sử dụng MMU của Máy chủ. Tắt tính năng này buộc tất cả quyền truy cập bộ nhớ phải sử dụng Giả lập MMU Phần mềm. - - GLSL - GLASM + Giả lập NVDEC Chọn cách xử lý giải mã video @@ -337,8 +335,6 @@ Độ phân giải (Handheld/Docked) Chế độ VSync - Backend Shader - Chọn cách biên dịch shader Bộ lọc điều chỉnh cửa sổ Độ sắc nét FSR Độ sắc nét khi dùng FSR diff --git a/src/android/app/src/main/res/values-zh-rCN/strings.xml b/src/android/app/src/main/res/values-zh-rCN/strings.xml index e2544cc835..02ad7e0ff0 100644 --- a/src/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/src/android/app/src/main/res/values-zh-rCN/strings.xml @@ -85,9 +85,6 @@ 仅用于开发用途。 0 到 65535 - - GLSL - GLASM NVDEC模拟 选择视频解码处理方式 @@ -428,8 +425,6 @@ 分辨率 (掌机模式/主机模式) 垂直同步模式 - 着色器后端 - 选择着色器编译方式 窗口滤镜 FSR 锐化度 指定使用 FSR 时图像的锐化程度 diff --git a/src/android/app/src/main/res/values-zh-rTW/strings.xml b/src/android/app/src/main/res/values-zh-rTW/strings.xml index 3d39cccf6c..bd8416036b 100644 --- a/src/android/app/src/main/res/values-zh-rTW/strings.xml +++ b/src/android/app/src/main/res/values-zh-rTW/strings.xml @@ -88,9 +88,6 @@ 僅限開發用途 0到65535 - - GLSL - GLASM NVDEC模擬 選擇影片解碼(NVDEC)的方式 @@ -431,8 +428,6 @@ 解析度 (手提/底座) 垂直同步 - 著色器後端 - 選擇著色器的編譯與轉譯方式 視窗適應過濾器 FSR 銳化度 使用 FSR 時圖片的銳化程度 diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index bf553725d5..3e77d82267 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -111,18 +111,6 @@ 2 - - @string/shader_backend_glsl - @string/shader_backend_glasm - @string/shader_backend_spirv - - - - 0 - 1 - 2 - - @string/vram_usage_conservative diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 09888ecc92..c630d9a03c 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -105,11 +105,6 @@ For development use only. 0 to 65535 - - GLSL - GLASM - SPIRV - NVDEC Emulation Select how video decoding (NVDEC) is handled during cutscenes and intros. @@ -461,8 +456,6 @@ Resolution (Handheld/Docked) VSync mode - Shader Backend - Choose how shaders are compiled and translated for your GPU. Window adapting filter FSR sharpness Determines how sharpened the image will look while using FSR\'s dynamic contrast diff --git a/src/common/settings.cpp b/src/common/settings.cpp index b7c2d3c9a9..d6b17b2f73 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -56,7 +56,6 @@ SWITCHABLE(Region, true); SWITCHABLE(RendererBackend, true); SWITCHABLE(ScalingFilter, false); SWITCHABLE(SpirvOptimizeMode, true); -SWITCHABLE(ShaderBackend, true); SWITCHABLE(TimeZone, true); SETTING(VSyncMode, true); SWITCHABLE(bool, false); diff --git a/src/common/settings.h b/src/common/settings.h index 03a371cd1d..a942c90418 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -78,7 +78,6 @@ SWITCHABLE(Region, true); SWITCHABLE(RendererBackend, true); SWITCHABLE(ScalingFilter, false); SWITCHABLE(SpirvOptimizeMode, true); -SWITCHABLE(ShaderBackend, true); SWITCHABLE(TimeZone, true); SETTING(VSyncMode, true); SWITCHABLE(bool, false); @@ -313,20 +312,12 @@ struct Values { // Renderer SwitchableSetting renderer_backend{linkage, #if defined(__sun__) || defined(__managarm__) - RendererBackend::OpenGL, + RendererBackend::OpenGL_GLSL, #else - RendererBackend::Vulkan, + RendererBackend::Vulkan, #endif - "backend", Category::Renderer}; - SwitchableSetting shader_backend{linkage, -#if defined(__sun__) || defined(__managarm__) - ShaderBackend::Glsl, -#else - ShaderBackend::SpirV, -#endif - "shader_backend", Category::Renderer, Specialization::RuntimeList}; - SwitchableSetting vulkan_device{linkage, 0, "vulkan_device", Category::Renderer, - Specialization::RuntimeList}; + "backend", Category::Renderer}; + SwitchableSetting vulkan_device{linkage, 0, "vulkan_device", Category::Renderer, Specialization::RuntimeList}; // Graphics Settings ResolutionScalingInfo resolution_info{}; diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h index be0c95906d..7d8d3f40d4 100644 --- a/src/common/settings_enums.h +++ b/src/common/settings_enums.h @@ -131,8 +131,7 @@ ENUM(AstcDecodeMode, Cpu, Gpu, CpuAsynchronous); ENUM(AstcRecompression, Uncompressed, Bc1, Bc3); ENUM(VSyncMode, Immediate, Mailbox, Fifo, FifoRelaxed); ENUM(VramUsageMode, Conservative, Aggressive); -ENUM(RendererBackend, OpenGL, Vulkan, Null); -ENUM(ShaderBackend, Glsl, Glasm, SpirV); +ENUM(RendererBackend, OpenGL_GLSL, Vulkan, Null, OpenGL_GLASM, OpenGL_SPIRV); ENUM(GpuAccuracy, Low, Medium, High); ENUM(DmaAccuracy, Default, Unsafe, Safe); ENUM(CpuBackend, Dynarmic, Nce); diff --git a/src/qt_common/config/shared_translation.cpp b/src/qt_common/config/shared_translation.cpp index f48dcac55e..152bb7b43f 100644 --- a/src/qt_common/config/shared_translation.cpp +++ b/src/qt_common/config/shared_translation.cpp @@ -163,10 +163,6 @@ std::unique_ptr InitializeTranslations(QObject* parent) vulkan_device, tr("Device:"), tr("This setting selects the GPU to use (Vulkan only).")); - INSERT(Settings, - shader_backend, - tr("Shader Backend:"), - tr("The shader backend to use with OpenGL.\nGLSL is recommended.")); INSERT(Settings, resolution_setup, tr("Resolution:"), @@ -498,21 +494,15 @@ std::unique_ptr ComboboxEnumeration(QObject* parent) PAIR(VramUsageMode, Conservative, tr("Conservative")), PAIR(VramUsageMode, Aggressive, tr("Aggressive")), }}); - translations->insert({Settings::EnumMetadata::Index(), - { + translations->insert({Settings::EnumMetadata::Index(), { + PAIR(RendererBackend, Vulkan, tr("Vulkan")), #ifdef HAS_OPENGL - PAIR(RendererBackend, OpenGL, tr("OpenGL")), + PAIR(RendererBackend, OpenGL_GLSL, tr("OpenGL GLSL")), + PAIR(RendererBackend, OpenGL_GLASM, tr("OpenGL GLASM (Assembly Shaders, NVIDIA Only)")), + PAIR(RendererBackend, OpenGL_SPIRV, tr("OpenGL SPIR-V (Experimental, AMD/Mesa Only)")), #endif - PAIR(RendererBackend, Vulkan, tr("Vulkan")), - PAIR(RendererBackend, Null, tr("Null")), - }}); - translations->insert( - {Settings::EnumMetadata::Index(), - { - PAIR(ShaderBackend, Glsl, tr("GLSL")), - PAIR(ShaderBackend, Glasm, tr("GLASM (Assembly Shaders, NVIDIA Only)")), - PAIR(ShaderBackend, SpirV, tr("SPIR-V (Experimental, AMD/Mesa Only)")), - }}); + PAIR(RendererBackend, Null, tr("Null")) + }}); translations->insert({Settings::EnumMetadata::Index(), { PAIR(GpuAccuracy, Low, tr("Fast")), diff --git a/src/qt_common/config/shared_translation.h b/src/qt_common/config/shared_translation.h index e12b93ea6d..afb18ec435 100644 --- a/src/qt_common/config/shared_translation.h +++ b/src/qt_common/config/shared_translation.h @@ -68,14 +68,10 @@ static const std::map gpu_accuracy_texts_map = { static const std::map renderer_backend_texts_map = { {Settings::RendererBackend::Vulkan, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "Vulkan"))}, - {Settings::RendererBackend::OpenGL, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "OpenGL"))}, + {Settings::RendererBackend::OpenGL_GLSL, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "OpenGL GLSL"))}, + {Settings::RendererBackend::OpenGL_SPIRV, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "OpenGL SPIRV"))}, + {Settings::RendererBackend::OpenGL_GLASM, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "OpenGL GLASM"))}, {Settings::RendererBackend::Null, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "Null"))}, }; -static const std::map shader_backend_texts_map = { - {Settings::ShaderBackend::Glsl, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "GLSL"))}, - {Settings::ShaderBackend::Glasm, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "GLASM"))}, - {Settings::ShaderBackend::SpirV, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "SPIRV"))}, -}; - } // namespace ConfigurationShared diff --git a/src/qt_common/config/uisettings.h b/src/qt_common/config/uisettings.h index d139f43871..679d00782d 100644 --- a/src/qt_common/config/uisettings.h +++ b/src/qt_common/config/uisettings.h @@ -294,7 +294,6 @@ Q_DECLARE_METATYPE(Settings::ResolutionSetup); Q_DECLARE_METATYPE(Settings::ScalingFilter); Q_DECLARE_METATYPE(Settings::AntiAliasing); Q_DECLARE_METATYPE(Settings::RendererBackend); -Q_DECLARE_METATYPE(Settings::ShaderBackend); Q_DECLARE_METATYPE(Settings::AstcRecompression); Q_DECLARE_METATYPE(Settings::AstcDecodeMode); Q_DECLARE_METATYPE(Settings::SpirvOptimizeMode); diff --git a/src/video_core/renderer_opengl/gl_compute_pipeline.cpp b/src/video_core/renderer_opengl/gl_compute_pipeline.cpp index 9a69ea4e06..661fbef2b0 100644 --- a/src/video_core/renderer_opengl/gl_compute_pipeline.cpp +++ b/src/video_core/renderer_opengl/gl_compute_pipeline.cpp @@ -8,7 +8,7 @@ #include #include #include "common/cityhash.h" -#include "common/settings.h" // for enum class Settings::ShaderBackend +#include "common/settings.h" #include "video_core/renderer_opengl/gl_compute_pipeline.h" #include "video_core/renderer_opengl/gl_shader_manager.h" #include "video_core/renderer_opengl/gl_shader_util.h" @@ -37,19 +37,20 @@ ComputePipeline::ComputePipeline(const Device& device, TextureCache& texture_cac std::vector code_v, bool force_context_flush) : texture_cache{texture_cache_}, buffer_cache{buffer_cache_}, program_manager{program_manager_}, info{info_} { - switch (device.GetShaderBackend()) { - case Settings::ShaderBackend::Glsl: + switch (::Settings::values.renderer_backend.GetValue()) { + case Settings::RendererBackend::OpenGL_GLSL: source_program = CreateProgram(code, GL_COMPUTE_SHADER); break; - case Settings::ShaderBackend::Glasm: + case Settings::RendererBackend::OpenGL_GLASM: assembly_program = CompileProgram(code, GL_COMPUTE_PROGRAM_NV); break; - case Settings::ShaderBackend::SpirV: + case Settings::RendererBackend::OpenGL_SPIRV: source_program = CreateProgram(code_v, GL_COMPUTE_SHADER); break; + default: + UNREACHABLE(); } - std::copy_n(info.constant_buffer_used_sizes.begin(), uniform_buffer_sizes.size(), - uniform_buffer_sizes.begin()); + std::copy_n(info.constant_buffer_used_sizes.begin(), uniform_buffer_sizes.size(), uniform_buffer_sizes.begin()); num_texture_buffers = Shader::NumDescriptors(info.texture_buffer_descriptors); num_image_buffers = Shader::NumDescriptors(info.image_buffer_descriptors); diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp index f5bf995d00..b49568b77d 100644 --- a/src/video_core/renderer_opengl/gl_device.cpp +++ b/src/video_core/renderer_opengl/gl_device.cpp @@ -233,19 +233,17 @@ Device::Device(Core::Frontend::EmuWindow& emu_window) { // uniform buffers as "push constants" has_fast_buffer_sub_data = is_nvidia && !disable_fast_buffer_sub_data; - shader_backend = Settings::values.shader_backend.GetValue(); - use_assembly_shaders = shader_backend == Settings::ShaderBackend::Glasm && - GLAD_GL_NV_gpu_program5 && GLAD_GL_NV_compute_program5 && - GLAD_GL_NV_transform_feedback && GLAD_GL_NV_transform_feedback2; - if (shader_backend == Settings::ShaderBackend::Glasm && !use_assembly_shaders) { - LOG_ERROR(Render_OpenGL, "Assembly shaders enabled but not supported"); - shader_backend = Settings::ShaderBackend::Glsl; + auto const shader_backend = Settings::values.renderer_backend.GetValue(); + use_assembly_shaders = shader_backend == Settings::RendererBackend::OpenGL_GLASM + && GLAD_GL_NV_gpu_program5 && GLAD_GL_NV_compute_program5 + && GLAD_GL_NV_transform_feedback && GLAD_GL_NV_transform_feedback2; + if (shader_backend == Settings::RendererBackend::OpenGL_GLASM && !use_assembly_shaders) { + LOG_ERROR(Render_OpenGL, "Assembly shaders enabled but not supported - expect instability!"); } - if (shader_backend == Settings::ShaderBackend::Glsl && is_nvidia) { + if (shader_backend == Settings::RendererBackend::OpenGL_GLSL && is_nvidia) { const std::string driver_version = version.substr(13); - const int version_major = - std::atoi(driver_version.substr(0, driver_version.find(".")).data()); + const int version_major = std::atoi(driver_version.substr(0, driver_version.find(".")).data()); if (version_major >= 495) { has_cbuf_ftou_bug = true; has_bool_ref_bug = true; diff --git a/src/video_core/renderer_opengl/gl_device.h b/src/video_core/renderer_opengl/gl_device.h index a5a6bbbba7..17b5a828f2 100644 --- a/src/video_core/renderer_opengl/gl_device.h +++ b/src/video_core/renderer_opengl/gl_device.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -10,10 +13,6 @@ #include "core/frontend/emu_window.h" #include "shader_recompiler/stage.h" -namespace Settings { -enum class ShaderBackend : u32; -}; - namespace OpenGL { class Device { @@ -168,10 +167,6 @@ public: return has_bool_ref_bug; } - Settings::ShaderBackend GetShaderBackend() const { - return shader_backend; - } - bool IsAmd() const { return vendor_name == "ATI Technologies Inc."; } @@ -208,8 +203,6 @@ private: u32 max_compute_shared_memory_size{}; u32 max_glasm_storage_buffer_blocks{}; - Settings::ShaderBackend shader_backend{}; - bool has_warp_intrinsics{}; bool has_shader_ballot{}; bool has_vertex_viewport_layer{}; diff --git a/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp b/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp index a5815b76d4..2abbd0de78 100644 --- a/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp +++ b/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp @@ -10,7 +10,7 @@ #include #include #include -#include "common/settings.h" // for enum class Settings::ShaderBackend +#include "common/settings.h" #include "common/thread_worker.h" #include "shader_recompiler/shader_info.h" #include "video_core/renderer_opengl/gl_graphics_pipeline.h" @@ -224,8 +224,8 @@ GraphicsPipeline::GraphicsPipeline(const Device& device, TextureCache& texture_c ASSERT(num_textures <= MAX_TEXTURES); ASSERT(num_images <= MAX_IMAGES); - const auto backend = device.GetShaderBackend(); - const bool assembly_shaders{backend == Settings::ShaderBackend::Glasm}; + const auto backend = ::Settings::values.renderer_backend.GetValue(); + const bool assembly_shaders = backend == Settings::RendererBackend::OpenGL_GLASM; use_storage_buffers = !assembly_shaders || num_storage_buffers <= device.GetMaxGLASMStorageBufferBlocks(); writes_global_memory &= !use_storage_buffers; @@ -240,21 +240,19 @@ GraphicsPipeline::GraphicsPipeline(const Device& device, TextureCache& texture_c force_context_flush](ShaderContext::Context*) mutable { for (size_t stage = 0; stage < 5; ++stage) { switch (backend) { - case Settings::ShaderBackend::Glsl: - if (!sources_[stage].empty()) { + case Settings::RendererBackend::OpenGL_GLSL: + if (!sources_[stage].empty()) source_programs[stage] = CreateProgram(sources_[stage], Stage(stage)); - } break; - case Settings::ShaderBackend::Glasm: - if (!sources_[stage].empty()) { - assembly_programs[stage] = - CompileProgram(sources_[stage], AssemblyStage(stage)); - } + case Settings::RendererBackend::OpenGL_GLASM: + if (!sources_[stage].empty()) + assembly_programs[stage] = CompileProgram(sources_[stage], AssemblyStage(stage)); break; - case Settings::ShaderBackend::SpirV: - if (!sources_spirv_[stage].empty()) { + case Settings::RendererBackend::OpenGL_SPIRV: + if (!sources_spirv_[stage].empty()) source_programs[stage] = CreateProgram(sources_spirv_[stage], Stage(stage)); - } + break; + default: break; } } diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 45f729698e..83ef393481 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp @@ -465,8 +465,8 @@ std::unique_ptr ShaderCache::CreateGraphicsPipeline( Shader::IR::Program* layer_source_program{}; for (size_t index = 0; index < Maxwell::MaxShaderProgram; ++index) { - const bool is_emulated_stage = layer_source_program != nullptr && - index == static_cast(Maxwell::ShaderType::Geometry); + const bool is_emulated_stage = layer_source_program != nullptr + && index == u32(Maxwell::ShaderType::Geometry); if (key.unique_hashes[index] == 0 && is_emulated_stage) { auto topology = MaxwellToOutputTopology(key.gs_input_topology); programs[index] = GenerateGeometryPassthrough(pools.inst, pools.block, host_info, @@ -479,7 +479,7 @@ std::unique_ptr ShaderCache::CreateGraphicsPipeline( Shader::Environment& env{*envs[env_index]}; ++env_index; - const u32 cfg_offset{static_cast(env.StartAddress() + sizeof(Shader::ProgramHeader))}; + const u32 cfg_offset = u32(env.StartAddress() + sizeof(Shader::ProgramHeader)); Shader::Maxwell::Flow::CFG cfg(env, pools.flow_block, cfg_offset, index == 0); if (Settings::values.dump_shaders) { @@ -490,14 +490,12 @@ std::unique_ptr ShaderCache::CreateGraphicsPipeline( // Normal path programs[index] = TranslateProgram(pools.inst, pools.block, env, cfg, host_info); - total_storage_buffers += - Shader::NumDescriptors(programs[index].info.storage_buffers_descriptors); + total_storage_buffers += Shader::NumDescriptors(programs[index].info.storage_buffers_descriptors); } else { // VertexB path when VertexA is present. auto& program_va{programs[0]}; auto program_vb{TranslateProgram(pools.inst, pools.block, env, cfg, host_info)}; - total_storage_buffers += - Shader::NumDescriptors(program_vb.info.storage_buffers_descriptors); + total_storage_buffers += Shader::NumDescriptors(program_vb.info.storage_buffers_descriptors); programs[index] = MergeDualVertexPrograms(program_va, program_vb, env); } @@ -505,8 +503,8 @@ std::unique_ptr ShaderCache::CreateGraphicsPipeline( layer_source_program = &programs[index]; } } - const u32 glasm_storage_buffer_limit{device.GetMaxGLASMStorageBufferBlocks()}; - const bool glasm_use_storage_buffers{total_storage_buffers <= glasm_storage_buffer_limit}; + const u32 glasm_storage_buffer_limit = device.GetMaxGLASMStorageBufferBlocks(); + const bool glasm_use_storage_buffers = total_storage_buffers <= glasm_storage_buffer_limit; std::array infos{}; @@ -514,7 +512,7 @@ std::unique_ptr ShaderCache::CreateGraphicsPipeline( std::array, 5> sources_spirv; Shader::Backend::Bindings binding; Shader::IR::Program* previous_program{}; - const bool use_glasm{device.UseAssemblyShaders()}; + const bool use_glasm = device.UseAssemblyShaders(); const size_t first_index = uses_vertex_a && uses_vertex_b ? 1 : 0; for (size_t index = first_index; index < Maxwell::MaxShaderProgram; ++index) { const bool is_emulated_stage = layer_source_program != nullptr && @@ -528,21 +526,21 @@ std::unique_ptr ShaderCache::CreateGraphicsPipeline( const size_t stage_index{index - 1}; infos[stage_index] = &program.info; - const auto runtime_info{ - MakeRuntimeInfo(key, program, previous_program, glasm_use_storage_buffers, use_glasm)}; - switch (device.GetShaderBackend()) { - case Settings::ShaderBackend::Glsl: + const auto runtime_info = MakeRuntimeInfo(key, program, previous_program, glasm_use_storage_buffers, use_glasm); + switch (::Settings::values.renderer_backend.GetValue()) { + case Settings::RendererBackend::OpenGL_GLSL: ConvertLegacyToGeneric(program, runtime_info); sources[stage_index] = EmitGLSL(profile, runtime_info, program, binding); break; - case Settings::ShaderBackend::Glasm: + case Settings::RendererBackend::OpenGL_GLASM: sources[stage_index] = EmitGLASM(profile, runtime_info, program, binding); break; - case Settings::ShaderBackend::SpirV: + case Settings::RendererBackend::OpenGL_SPIRV: ConvertLegacyToGeneric(program, runtime_info); - sources_spirv[stage_index] = - EmitSPIRV(profile, runtime_info, program, binding, this->optimize_spirv_output); + sources_spirv[stage_index] = EmitSPIRV(profile, runtime_info, program, binding, this->optimize_spirv_output); break; + default: + UNREACHABLE(); } previous_program = &program; } @@ -592,20 +590,20 @@ std::unique_ptr ShaderCache::CreateComputePipeline( std::string code{}; std::vector code_spirv; - switch (device.GetShaderBackend()) { - case Settings::ShaderBackend::Glsl: + switch (::Settings::values.renderer_backend.GetValue()) { + case Settings::RendererBackend::OpenGL_GLSL: code = EmitGLSL(profile, program); break; - case Settings::ShaderBackend::Glasm: + case Settings::RendererBackend::OpenGL_GLASM: code = EmitGLASM(profile, info, program); break; - case Settings::ShaderBackend::SpirV: + case Settings::RendererBackend::OpenGL_SPIRV: code_spirv = EmitSPIRV(profile, program, this->optimize_spirv_output); break; + default: + UNREACHABLE(); } - - return std::make_unique(device, texture_cache, buffer_cache, program_manager, - program.info, code, code_spirv, force_context_flush); + return std::make_unique(device, texture_cache, buffer_cache, program_manager, program.info, code, code_spirv, force_context_flush); } catch (Shader::Exception& exception) { LOG_ERROR(Render_OpenGL, "{}", exception.what()); return nullptr; diff --git a/src/video_core/video_core.cpp b/src/video_core/video_core.cpp index 146f6955bd..4a9751e208 100644 --- a/src/video_core/video_core.cpp +++ b/src/video_core/video_core.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: 2014 Citra Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -22,12 +25,12 @@ std::unique_ptr CreateRenderer( auto& device_memory = system.Host1x().MemoryManager(); switch (Settings::values.renderer_backend.GetValue()) { - case Settings::RendererBackend::OpenGL: - return std::make_unique(emu_window, device_memory, gpu, - std::move(context)); + case Settings::RendererBackend::OpenGL_GLSL: + case Settings::RendererBackend::OpenGL_GLASM: + case Settings::RendererBackend::OpenGL_SPIRV: + return std::make_unique(emu_window, device_memory, gpu, std::move(context)); case Settings::RendererBackend::Vulkan: - return std::make_unique(emu_window, device_memory, gpu, - std::move(context)); + return std::make_unique(emu_window, device_memory, gpu, std::move(context)); case Settings::RendererBackend::Null: return std::make_unique(emu_window, gpu, std::move(context)); default: diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp index b6cd7d0985..45cf304644 100644 --- a/src/yuzu/bootmanager.cpp +++ b/src/yuzu/bootmanager.cpp @@ -889,12 +889,13 @@ void GRenderWindow::resizeEvent(QResizeEvent* event) { std::unique_ptr GRenderWindow::CreateSharedContext() const { #ifdef HAS_OPENGL - if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL) { + if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL_GLSL + || Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL_GLASM + || Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL_SPIRV) { auto c = static_cast(main_context.get()); // Bind the shared contexts to the main surface in case the backend wants to take over // presentation - return std::make_unique(c->GetShareContext(), - child_widget->windowHandle()); + return std::make_unique(c->GetShareContext(), child_widget->windowHandle()); } #endif return std::make_unique(); @@ -912,15 +913,15 @@ bool GRenderWindow::InitRenderTarget() { first_frame = false; switch (Settings::values.renderer_backend.GetValue()) { - case Settings::RendererBackend::OpenGL: - if (!InitializeOpenGL()) { + case Settings::RendererBackend::OpenGL_GLSL: + case Settings::RendererBackend::OpenGL_GLASM: + case Settings::RendererBackend::OpenGL_SPIRV: + if (!InitializeOpenGL()) return false; - } break; case Settings::RendererBackend::Vulkan: - if (!InitializeVulkan()) { + if (!InitializeVulkan()) return false; - } break; case Settings::RendererBackend::Null: InitializeNull(); @@ -941,12 +942,10 @@ bool GRenderWindow::InitRenderTarget() { OnFramebufferSizeChanged(); BackupGeometry(); - if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL) { - if (!LoadOpenGL()) { - return false; - } - } - + if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL_GLSL + || Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL_GLASM + || Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL_SPIRV) + return LoadOpenGL(); return true; } diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index 76b6153b1a..8663594678 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -91,9 +91,8 @@ ConfigureGraphics::ConfigureGraphics( : ConfigurationShared::Tab(group_, parent), ui{std::make_unique()}, records{records_}, expose_compute_option{expose_compute_option_}, update_aspect_ratio{update_aspect_ratio_}, system{system_}, - combobox_translations{builder.ComboboxTranslations()}, - shader_mapping{ - combobox_translations.at(Settings::EnumMetadata::Index())} { + combobox_translations{builder.ComboboxTranslations()} +{ vulkan_device = Settings::values.vulkan_device.GetValue(); RetrieveVulkanDevices(); @@ -134,9 +133,6 @@ ConfigureGraphics::ConfigureGraphics( UpdateDeviceSelection(device); PopulateVSyncModeSelection(false); }); - connect(shader_backend_combobox, qOverload(&QComboBox::activated), this, - [this](int backend) { UpdateShaderBackendSelection(backend); }); - connect(ui->bg_button, &QPushButton::clicked, this, [this] { const QColor new_bg_color = QColorDialog::getColor(bg_color); if (!new_bg_color.isValid()) { @@ -219,7 +215,9 @@ void ConfigureGraphics::PopulateVSyncModeSelection(bool use_setting) { const Settings::VSyncMode global_vsync_mode = Settings::values.vsync_mode.GetValue(true); vsync_restore_global_button->setEnabled( - (backend == Settings::RendererBackend::OpenGL && + ((backend == Settings::RendererBackend::OpenGL_GLSL + || backend == Settings::RendererBackend::OpenGL_GLASM + || backend == Settings::RendererBackend::OpenGL_SPIRV) && (global_vsync_mode == Settings::VSyncMode::Immediate || global_vsync_mode == Settings::VSyncMode::Fifo)) || backend == Settings::RendererBackend::Vulkan); @@ -246,15 +244,6 @@ void ConfigureGraphics::UpdateDeviceSelection(int device) { } } -void ConfigureGraphics::UpdateShaderBackendSelection(int backend) { - if (backend == -1) { - return; - } - if (GetCurrentGraphicsBackend() == Settings::RendererBackend::OpenGL) { - shader_backend = static_cast(backend); - } -} - ConfigureGraphics::~ConfigureGraphics() = default; void ConfigureGraphics::SetConfiguration() {} @@ -296,14 +285,11 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) { api_grid_layout->addWidget(widget); api_combobox = widget->combobox; api_restore_global_button = widget->restore_button; - if (!Settings::IsConfiguringGlobal()) { - api_restore_global_button->connect(api_restore_global_button, &QAbstractButton::clicked, - [this](bool) { UpdateAPILayout(); }); - + api_restore_global_button->connect(api_restore_global_button, &QAbstractButton::clicked, [this](bool) { UpdateAPILayout(); }); // Detach API's restore button and place it where we want // Lets us put it on the side, and it will automatically scale if there's a - // second combobox (shader_backend, vulkan_device) + // second combobox (vulkan_device) widget->layout()->removeWidget(api_restore_global_button); api_layout->addWidget(api_restore_global_button); } @@ -312,11 +298,6 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) { hold_api.push_back(widget); vulkan_device_combobox = widget->combobox; vulkan_device_widget = widget; - } else if (setting->Id() == Settings::values.shader_backend.Id()) { - // Keep track of shader_backend's combobox so we can populate it - hold_api.push_back(widget); - shader_backend_combobox = widget->combobox; - shader_backend_widget = widget; } else if (setting->Id() == Settings::values.vsync_mode.Id()) { // Keep track of vsync_mode's combobox so we can populate it vsync_mode_combobox = widget->combobox; @@ -416,20 +397,21 @@ const QString ConfigureGraphics::TranslateVSyncMode(VkPresentModeKHR mode, Settings::RendererBackend backend) const { switch (mode) { case VK_PRESENT_MODE_IMMEDIATE_KHR: - return backend == Settings::RendererBackend::OpenGL - ? tr("Off") - : QStringLiteral("Immediate (%1)").arg(tr("VSync Off")); + return (backend == Settings::RendererBackend::OpenGL_GLSL + || backend == Settings::RendererBackend::OpenGL_GLASM + || backend == Settings::RendererBackend::OpenGL_SPIRV) + ? tr("Off") : QStringLiteral("Immediate (%1)").arg(tr("VSync Off")); case VK_PRESENT_MODE_MAILBOX_KHR: return QStringLiteral("Mailbox (%1)").arg(tr("Recommended")); case VK_PRESENT_MODE_FIFO_KHR: - return backend == Settings::RendererBackend::OpenGL - ? tr("On") - : QStringLiteral("FIFO (%1)").arg(tr("VSync On")); + return (backend == Settings::RendererBackend::OpenGL_GLSL + || backend == Settings::RendererBackend::OpenGL_GLASM + || backend == Settings::RendererBackend::OpenGL_SPIRV) + ? tr("On") : QStringLiteral("FIFO (%1)").arg(tr("VSync On")); case VK_PRESENT_MODE_FIFO_RELAXED_KHR: return QStringLiteral("FIFO Relaxed"); default: return {}; - break; } } @@ -451,7 +433,6 @@ void ConfigureGraphics::ApplyConfiguration() { UpdateVsyncSetting(); Settings::values.vulkan_device.SetGlobal(true); - Settings::values.shader_backend.SetGlobal(true); if (Settings::IsConfiguringGlobal() || (!Settings::IsConfiguringGlobal() && api_restore_global_button->isEnabled())) { auto backend = static_cast( @@ -460,15 +441,13 @@ void ConfigureGraphics::ApplyConfiguration() { Settings::RendererBackend>::Index())[api_combobox->currentIndex()] .first); switch (backend) { - case Settings::RendererBackend::OpenGL: - Settings::values.shader_backend.SetGlobal(Settings::IsConfiguringGlobal()); - Settings::values.shader_backend.SetValue(static_cast( - shader_mapping[shader_backend_combobox->currentIndex()].first)); - break; case Settings::RendererBackend::Vulkan: Settings::values.vulkan_device.SetGlobal(Settings::IsConfiguringGlobal()); Settings::values.vulkan_device.SetValue(vulkan_device_combobox->currentIndex()); break; + case Settings::RendererBackend::OpenGL_GLSL: + case Settings::RendererBackend::OpenGL_SPIRV: + case Settings::RendererBackend::OpenGL_GLASM: case Settings::RendererBackend::Null: break; } @@ -501,22 +480,12 @@ void ConfigureGraphics::UpdateAPILayout() { bool runtime_lock = !system.IsPoweredOn(); bool need_global = !(Settings::IsConfiguringGlobal() || api_restore_global_button->isEnabled()); vulkan_device = Settings::values.vulkan_device.GetValue(need_global); - shader_backend = Settings::values.shader_backend.GetValue(need_global); vulkan_device_widget->setEnabled(!need_global && runtime_lock); - shader_backend_widget->setEnabled(!need_global && runtime_lock); const auto current_backend = GetCurrentGraphicsBackend(); - const bool is_opengl = current_backend == Settings::RendererBackend::OpenGL; const bool is_vulkan = current_backend == Settings::RendererBackend::Vulkan; - vulkan_device_widget->setVisible(is_vulkan); - shader_backend_widget->setVisible(is_opengl); - - if (is_opengl) { - shader_backend_combobox->setCurrentIndex( - FindIndex(Settings::EnumMetadata::Index(), - static_cast(shader_backend))); - } else if (is_vulkan && static_cast(vulkan_device) < vulkan_device_combobox->count()) { + if (is_vulkan && int(vulkan_device) < vulkan_device_combobox->count()) { vulkan_device_combobox->setCurrentIndex(vulkan_device); } } @@ -541,15 +510,13 @@ Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const { if (!Settings::IsConfiguringGlobal() && !api_restore_global_button->isEnabled()) { return Settings::values.renderer_backend.GetValue(true); } - return static_cast( + return Settings::RendererBackend( combobox_translations.at(Settings::EnumMetadata::Index()) .at(api_combobox->currentIndex()) .first); }(); - if (selected_backend == Settings::RendererBackend::Vulkan && - UISettings::values.has_broken_vulkan) { - return Settings::RendererBackend::OpenGL; - } + if (selected_backend == Settings::RendererBackend::Vulkan && UISettings::values.has_broken_vulkan) + return Settings::RendererBackend::OpenGL_GLSL; return selected_backend; } diff --git a/src/yuzu/configuration/configure_graphics.h b/src/yuzu/configuration/configure_graphics.h index 7142b2d36c..3009edf4b6 100644 --- a/src/yuzu/configuration/configure_graphics.h +++ b/src/yuzu/configuration/configure_graphics.h @@ -30,7 +30,6 @@ class QComboBox; namespace Settings { enum class NvdecEmulation : u32; enum class RendererBackend : u32; -enum class ShaderBackend : u32; } // namespace Settings namespace Core { @@ -72,7 +71,6 @@ private: void UpdateBackgroundColorButton(QColor color); void UpdateAPILayout(); void UpdateDeviceSelection(int device); - void UpdateShaderBackendSelection(int backend); void RetrieveVulkanDevices(); @@ -97,23 +95,19 @@ private: vsync_mode_combobox_enum_map{}; //< Keeps track of which present mode corresponds to which // selection in the combobox u32 vulkan_device{}; - Settings::ShaderBackend shader_backend{}; const std::function& expose_compute_option; const std::function update_aspect_ratio; const Core::System& system; const ConfigurationShared::ComboboxTranslationMap& combobox_translations; - const std::vector>& shader_mapping; QPushButton* api_restore_global_button; QComboBox* vulkan_device_combobox; QComboBox* api_combobox; - QComboBox* shader_backend_combobox; QComboBox* vsync_mode_combobox; QPushButton* vsync_restore_global_button; QWidget* vulkan_device_widget; QWidget* api_widget; - QWidget* shader_backend_widget; QComboBox* aspect_ratio_combobox; QComboBox* resolution_combobox; }; diff --git a/src/yuzu/main_window.cpp b/src/yuzu/main_window.cpp index c246923fcc..10ebc454d9 100644 --- a/src/yuzu/main_window.cpp +++ b/src/yuzu/main_window.cpp @@ -570,11 +570,9 @@ MainWindow::MainWindow(bool has_broken_vulkan) if (has_broken_vulkan) { UISettings::values.has_broken_vulkan = true; - QMessageBox::warning(this, tr("Broken Vulkan Installation Detected"), - tr("Vulkan initialization failed during boot.")); - + QMessageBox::warning(this, tr("Broken Vulkan Installation Detected"), tr("Vulkan initialization failed during boot.")); #ifdef HAS_OPENGL - Settings::values.renderer_backend = Settings::RendererBackend::OpenGL; + Settings::values.renderer_backend = Settings::RendererBackend::OpenGL_GLSL; #else Settings::values.renderer_backend = Settings::RendererBackend::Null; #endif @@ -3625,7 +3623,7 @@ void MainWindow::OnToggleGraphicsAPI() { api = Settings::RendererBackend::Vulkan; } else { #ifdef HAS_OPENGL - api = Settings::RendererBackend::OpenGL; + api = Settings::RendererBackend::OpenGL_GLSL; #else api = Settings::RendererBackend::Null; #endif @@ -4270,13 +4268,7 @@ void MainWindow::UpdateAPIText() { const auto api = Settings::values.renderer_backend.GetValue(); const auto renderer_status_text = ConfigurationShared::renderer_backend_texts_map.find(api)->second; - renderer_status_button->setText( - api == Settings::RendererBackend::OpenGL - ? tr("%1 %2").arg(renderer_status_text.toUpper(), - ConfigurationShared::shader_backend_texts_map - .find(Settings::values.shader_backend.GetValue()) - ->second) - : renderer_status_text.toUpper()); + renderer_status_button->setText(renderer_status_text.toUpper()); } void MainWindow::UpdateFilterText() { diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp index 975e72e00c..b292b4886b 100644 --- a/src/yuzu_cmd/yuzu.cpp +++ b/src/yuzu_cmd/yuzu.cpp @@ -339,7 +339,9 @@ int main(int argc, char** argv) { std::unique_ptr emu_window; switch (Settings::values.renderer_backend.GetValue()) { - case Settings::RendererBackend::OpenGL: + case Settings::RendererBackend::OpenGL_GLSL: + case Settings::RendererBackend::OpenGL_GLASM: + case Settings::RendererBackend::OpenGL_SPIRV: emu_window = std::make_unique(&input_subsystem, system, fullscreen); break; case Settings::RendererBackend::Vulkan: