[common] merge RenderBackend and ShaderBackend options (#3313)

first of all it makes UI a tad bit more simple and benefits the end user
second, it allows to add new backends a bit more easily
and also, there was a shader backend option in android... we don't use opengl in android
so may as well save ourselves the trouble, aye

![image](/attachments/c0195bca-da18-4907-9e4a-3b62c4292f1a)

Signed-off-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3313
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Reviewed-by: DraVee <dravee@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
lizzie 2026-01-18 12:33:00 +01:00 committed by crueter
parent ed0276582e
commit 291b5febec
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
45 changed files with 133 additions and 351 deletions

View File

@ -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"),

View File

@ -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,

View File

@ -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)

View File

@ -100,11 +100,6 @@
<string name="debug_knobs_description">للإستخدام في التطوير فقط.</string>
<string name="debug_knobs_hint">0 إلى 65535</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<string name="shader_backend_spirv">SPIRV</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">محاكاة NVDEC</string>
<string name="nvdec_emulation_description">حدد كيفية التعامل مع فك تشفير الفيديو (NVDEC) خلال المشاهد التمهيدية والمقدمة.</string>
@ -458,8 +453,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">الدقة (الإرساء/محمول)</string>
<string name="renderer_vsync">VSync وضع</string>
<string name="shader_backend">واجهة برمجة التظليل</string>
<string name="shader_backend_description">حدد كيفية تجميع وترجمة برامج التظليل لوحدة معالجة الرسومات الخاصة بك.</string>
<string name="renderer_scaling_filter">مرشح ملائم للنافذة</string>
<string name="fsr_sharpness">حدة FSR</string>
<string name="fsr_sharpness_description">يحدد مدى وضوح الصورة عند استخدام التباين الديناميكي لـ FSR</string>

View File

@ -63,9 +63,7 @@
<string name="cpuopt_unsafe_host_mmu">چالاککردنی میمیکردنی MMU میواندە</string>
<string name="cpuopt_unsafe_host_mmu_description">ئەم باشکردنە خێرایی دەستکەوتنی بیرگە لەلایەن پرۆگرامی میوانەکە زیاد دەکات. چالاککردنی وای لێدەکات کە خوێندنەوە/نووسینەکانی بیرگەی میوانەکە ڕاستەوخۆ لە بیرگە ئەنجام بدرێت و میمیکردنی MMU میواندە بەکاربهێنێت. ناچالاککردنی ئەمە هەموو دەستکەوتنەکانی بیرگە ڕەت دەکاتەوە لە بەکارهێنانی میمیکردنی MMU نەرمەکاڵا.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">ئیمولەیشنی NVDEC</string>
<string name="nvdec_emulation_description">هەڵبژاردنی ڕێگای دیکۆدکردنی ڤیدیۆ</string>
@ -339,8 +337,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">ڕوونی (دۆخی دەستی/دۆخی دۆک)</string>
<string name="renderer_vsync">دۆخی VSync</string>
<string name="shader_backend">شادەر باکند</string>
<string name="shader_backend_description">هەڵبژاردنی ڕێگای پێکهێنانی شادەر</string>
<string name="renderer_scaling_filter">فلتەری گونجاندنی پەنجەرە</string>
<string name="fsr_sharpness">تیژی FSR</string>
<string name="fsr_sharpness_description">دیاریکردنی تیژی وێنە لە کاتی بەکارهێنانی FSR</string>

View File

@ -63,9 +63,7 @@
<string name="cpuopt_unsafe_host_mmu">Povolit emulaci hostitelské MMU</string>
<string name="cpuopt_unsafe_host_mmu_description">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.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Emulace NVDEC</string>
<string name="nvdec_emulation_description">Zpracování dekódování videa</string>
@ -327,8 +325,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Rozlišení (Handheld/Docked)</string>
<string name="renderer_vsync">VSync režim</string>
<string name="shader_backend">Backend shaderů</string>
<string name="shader_backend_description">Způsob kompilace shaderů</string>
<string name="renderer_scaling_filter">Filtr přizpůsobení</string>
<string name="fsr_sharpness">Ostrost FSR</string>
<string name="fsr_sharpness_description">Nastavení ostrosti pro FSR</string>

View File

@ -71,9 +71,7 @@
<string name="cpuopt_unsafe_host_mmu">Host-MMU-Emulation aktivieren</string>
<string name="cpuopt_unsafe_host_mmu_description">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.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">NVDEC-Emulation</string>
<string name="nvdec_emulation_description">Methode zur Videodekodierung</string>
@ -383,8 +381,6 @@ Wird der Handheld-Modus verwendet, verringert es die Auflösung und erhöht die
<!-- Graphics settings strings -->
<string name="renderer_resolution">Auflösung (Handheld/Gedockt)</string>
<string name="renderer_vsync">VSync-Modus</string>
<string name="shader_backend">Shader-Backend</string>
<string name="shader_backend_description">Methode zur Shader-Kompilierung</string>
<string name="renderer_scaling_filter">Skalierungsfilter</string>
<string name="fsr_sharpness">FSR-Schärfe</string>
<string name="fsr_sharpness_description">Bestimmt die Schärfe bei FSR-Nutzung.</string>

View File

@ -81,9 +81,7 @@
<string name="cpuopt_unsafe_host_mmu">Habilitar emulación de MMU del anfitrión</string>
<string name="cpuopt_unsafe_host_mmu_description">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.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Emulación NVDEC</string>
<string name="nvdec_emulation_description">Seleccione cómo se maneja la decodificación de vídeo (NVDEC) durante las escenas y las introducciones.</string>
@ -398,8 +396,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Resolución (Portátil/Sobremesa)</string>
<string name="renderer_vsync">Modo VSync</string>
<string name="shader_backend">Backend de sombreador</string>
<string name="shader_backend_description">Elija cómo se compilan y traducen los sombreadores para su GPU.</string>
<string name="renderer_scaling_filter">Filtro de adaptación de ventana</string>
<string name="fsr_sharpness">Nitidez FSR</string>
<string name="fsr_sharpness_description">Ajusta la intensidad del filtro de enfoque al usar el contraste dinámico de FSR.</string>

View File

@ -127,13 +127,6 @@
<string name="vram_usage_conservative">محافظه‌کارانه</string>
<string name="vram_usage_aggressive">تهاجمی</string>
<!-- Shader Backend -->
<string name="shader_backend">بک‌اند شیدر</string>
<string name="shader_backend_description">انتخاب روش کامپایل و ترجمه شیدرها</string>
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<string name="shader_backend_spirv">Spir-V</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">شبیه‌سازی NVDEC</string>
<string name="nvdec_emulation_description">انتخاب روش پردازش ویدیو (NVDEC)</string>

View File

@ -85,9 +85,6 @@
<string name="debug_knobs_description">À usage de développement uniquement.</string>
<string name="debug_knobs_hint">0 à 65535</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Émulation NVDEC</string>
<string name="nvdec_emulation_description">Sélectionnez la manière dont le décodage vidéo (NVDEC) est géré pendant les cinématiques et les intros.</string>
@ -412,8 +409,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Résolution (Mode Portable/Mode TV)</string>
<string name="renderer_vsync">Mode VSync</string>
<string name="shader_backend">Backend shader</string>
<string name="shader_backend_description">Méthode de compilation</string>
<string name="renderer_scaling_filter">Filtre de fenêtre adaptatif</string>
<string name="fsr_sharpness">Netteté FSR</string>
<string name="fsr_sharpness_description">Détermine à quel point l\'image sera affinée lors de l\'utilisation du contraste dynamique FSR.</string>

View File

@ -63,9 +63,7 @@
<string name="cpuopt_unsafe_host_mmu">הפעל אמולציית MMU מארח</string>
<string name="cpuopt_unsafe_host_mmu_description">אופטימיזציה זו מאיצה את גישת הזיכרון על ידי התוכנית האורחת. הפעלתה גורמת לכך שפעולות קריאה/כתיבה לזיכרון האורח מתבצעות ישירות לזיכרון ומשתמשות ב-MMU של המארח. השבתת זאת מאלצת את כל גישות הזיכרון להשתמש באמולציית MMU תוכנתית.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">אמולציית NVDEC</string>
<string name="nvdec_emulation_description">בחר כיצד לטפל בפענוח וידאו</string>
@ -363,8 +361,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">רזולוציה (מעוגן/נייד)</string>
<string name="renderer_vsync">מצב VSync</string>
<string name="shader_backend">מנוע שיידרים</string>
<string name="shader_backend_description">בחר כיצד לקמפל שיידרים</string>
<string name="renderer_scaling_filter">פילטר מתאם חלון</string>
<string name="fsr_sharpness">חדות FSR</string>
<string name="fsr_sharpness_description">קובע את מידת החדות בעת שימוש ב-FSR.</string>

View File

@ -63,9 +63,7 @@
<string name="cpuopt_unsafe_host_mmu">Gazda MMU emuláció engedélyezése</string>
<string name="cpuopt_unsafe_host_mmu_description">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.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">NVDEC emuláció</string>
<string name="nvdec_emulation_description">Videódekódolás kezelése</string>
@ -358,8 +356,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Felbontás (Kézi/Dockolt)</string>
<string name="renderer_vsync">VSync mód</string>
<string name="shader_backend">Shader backend</string>
<string name="shader_backend_description">Shaderek fordításának módja</string>
<string name="renderer_scaling_filter">Ablakhoz alkalmazkodó szűrő</string>
<string name="fsr_sharpness">FSR élesség</string>
<string name="fsr_sharpness_description">Meghatározza, milyen éles lesz a kép az FSR dinamikus kontraszt használata közben.</string>

View File

@ -81,9 +81,7 @@
<string name="cpuopt_unsafe_host_mmu">Aktifkan Emulasi MMU Host</string>
<string name="cpuopt_unsafe_host_mmu_description">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.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Emulasi NVDEC</string>
<string name="nvdec_emulation_description">Pilih cara decoding video (NVDEC) ditangani selama cutscene dan intro.</string>
@ -390,8 +388,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Resolusi (Handheld/Docked)</string>
<string name="renderer_vsync">Mode Sinkronisasi Vertikal</string>
<string name="shader_backend">Backend Shader</string>
<string name="shader_backend_description">Pilih cara shader dikompilasi dan diterjemahkan untuk GPU Anda.</string>
<string name="renderer_scaling_filter">Filter penyesuaian jendela</string>
<string name="fsr_sharpness">Ketajaman FSR</string>
<string name="fsr_sharpness_description">Menentukan seberapa tajam gambar akan terlihat saat menggunakan kontras dinamis FSR</string>

View File

@ -81,9 +81,7 @@
<string name="cpuopt_unsafe_host_mmu">Abilita l\'emulazione della MMU nell\'host</string>
<string name="cpuopt_unsafe_host_mmu_description">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.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Emulazione NVDEC</string>
<string name="nvdec_emulation_description">Scegli come gestire la decodifica video</string>
@ -399,8 +397,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Risoluzione (Portatile/Docked)</string>
<string name="renderer_vsync">Modalità VSync</string>
<string name="shader_backend">Backend shader</string>
<string name="shader_backend_description">Scegli come compilare gli shader</string>
<string name="renderer_scaling_filter">Filtro adattivo della finestra </string>
<string name="fsr_sharpness">Nitidezza FSR</string>
<string name="fsr_sharpness_description">Determina quanto sarà nitida l\'immagine utilizzando il contrasto dinamico di FSR</string>

View File

@ -63,9 +63,7 @@
<string name="cpuopt_unsafe_host_mmu">ホストMMUエミュレーションを有効化</string>
<string name="cpuopt_unsafe_host_mmu_description">この最適化により、ゲストプログラムによるメモリアクセスが高速化されます。有効にすると、ゲストのメモリ読み書きが直接メモリ内で実行され、ホストのMMUを利用します。無効にすると、すべてのメモリアクセスでソフトウェアMMUエミュレーションが使用されます。</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">NVDECエミュレーション</string>
<string name="nvdec_emulation_description">ビデオデコード方法</string>
@ -358,8 +356,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">解像度(携帯モード/TVモード</string>
<string name="renderer_vsync">垂直同期モード</string>
<string name="shader_backend">シェーダーバックエンド</string>
<string name="shader_backend_description">シェーダーのコンパイル方法</string>
<string name="renderer_scaling_filter">ウィンドウ適応フィルター</string>
<string name="renderer_anti_aliasing">アンチエイリアス方式</string>
<string name="renderer_optimize_spirv_output_description">コンパイル済みシェーダーを最適化し、GPUの効率を向上させます。</string>

View File

@ -63,9 +63,7 @@
<string name="cpuopt_unsafe_host_mmu">호스트 MMU 에뮬레이션 사용</string>
<string name="cpuopt_unsafe_host_mmu_description">이 최적화는 게스트 프로그램의 메모리 접근 속도를 높입니다. 활성화하면 게스트의 메모리 읽기/쓰기가 메모리에서 직접 수행되고 호스트의 MMU를 활용합니다. 비활성화하면 모든 메모리 접근에 소프트웨어 MMU 에뮬레이션을 사용하게 됩니다.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">NVDEC 에뮬레이션</string>
<string name="nvdec_emulation_description">비디오 디코딩 처리 방식 선택</string>
@ -358,8 +356,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">해상도 (휴대 모드/독 모드)</string>
<string name="renderer_vsync">수직동기화 모드</string>
<string name="shader_backend">셰이더 백엔드</string>
<string name="shader_backend_description">셰이더 컴파일 방식 선택</string>
<string name="renderer_scaling_filter">윈도우 적응 필터</string>
<string name="renderer_anti_aliasing">안티에일리어싱 방법</string>
<string name="renderer_optimize_spirv_output_description">컴파일된 셰이더를 최적화하여 GPU 효율성을 향상시킵니다.</string>

View File

@ -63,9 +63,7 @@
<string name="cpuopt_unsafe_host_mmu">Aktiver verts-MMU-emulering</string>
<string name="cpuopt_unsafe_host_mmu_description">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.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">NVDEC-emulering</string>
<string name="nvdec_emulation_description">Velg hvordan videodekoding håndteres</string>
@ -339,8 +337,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Oppløsning (håndholdt/dokket)</string>
<string name="renderer_vsync">VSync-modus</string>
<string name="shader_backend">Shader-backend</string>
<string name="shader_backend_description">Velg hvordan shadere kompileres</string>
<string name="renderer_scaling_filter">Filter for vindustilpasning</string>
<string name="fsr_sharpness">FSR-skarphet</string>
<string name="fsr_sharpness_description">Bestemmer bildekvalitet med FSR</string>

View File

@ -88,9 +88,6 @@
<string name="debug_knobs_description">Wyłącznie do użytku deweloperskiego.</string>
<string name="debug_knobs_hint">0 do 65535</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Emulacja NVDEC</string>
<string name="nvdec_emulation_description">Wybierz metodę dekodowania wideo (NVDEC).</string>
@ -437,8 +434,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Rozdzielczość (Handheld/Zadokowany)</string>
<string name="renderer_vsync">Synchronizacja pionowa VSync</string>
<string name="shader_backend">Backend shaderów</string>
<string name="shader_backend_description">Wybierz metodę kompilacji shaderów.</string>
<string name="renderer_scaling_filter">Filtr adaptacji rozdzielczości</string>
<string name="fsr_sharpness">Ostrość FSR</string>
<string name="fsr_sharpness_description">Kontroluje ostrość obrazu w FSR.</string>

View File

@ -88,9 +88,6 @@
<string name="debug_knobs_description">Apenas para uso em desenvolvimento.</string>
<string name="debug_knobs_hint">0 a 65535</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Decodificação de Vídeo (NVDEC)</string>
<string name="nvdec_emulation_description">Selecione como a decodificação de vídeo é realizada durante cutscenes e intros.</string>
@ -435,8 +432,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Resolução (Portátil/Modo TV)</string>
<string name="renderer_vsync">Modo de VSync</string>
<string name="shader_backend">Shader Backend</string>
<string name="shader_backend_description">Escolha como os shaders são compilados e traduzidos para sua GPU.</string>
<string name="renderer_scaling_filter">Filtro de Adaptação da Janela</string>
<string name="fsr_sharpness">Nitidez do FSR</string>
<string name="fsr_sharpness_description">Determina a nitidez da imagem ao utilizar o contraste dinâmico do FSR</string>

View File

@ -63,9 +63,7 @@
<string name="cpuopt_unsafe_host_mmu">Ativar Emulação de MMU do Anfitrião</string>
<string name="cpuopt_unsafe_host_mmu_description">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.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Emulação NVDEC</string>
<string name="nvdec_emulation_description">Método de decodificação de vídeo.</string>
@ -362,8 +360,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Resolução (Portátil/Ancorado)</string>
<string name="renderer_vsync">Modo VSync</string>
<string name="shader_backend">Backend de Shader</string>
<string name="shader_backend_description">Método de compilação de shaders.</string>
<string name="renderer_scaling_filter">Filtro de Adaptação da Janela</string>
<string name="fsr_sharpness">Nitidez do FSR</string>
<string name="fsr_sharpness_description">Determina a nitidez da imagem ao usar contraste dinâmico do FSR</string>

View File

@ -88,9 +88,6 @@
<string name="debug_knobs_description">Только для разработчиков</string>
<string name="debug_knobs_hint">От 0 до 65535</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Эмуляция NVDEC</string>
<string name="nvdec_emulation_description">Обработка видео (ролики, интро)</string>
@ -437,8 +434,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Разрешение (портативное/в док-станции)</string>
<string name="renderer_vsync">Режим верт. синхронизации</string>
<string name="shader_backend">Шейдерный бэкенд</string>
<string name="shader_backend_description">Метод компиляции шейдеров</string>
<string name="renderer_scaling_filter">Фильтр адаптации окна</string>
<string name="fsr_sharpness">Резкость FSR</string>
<string name="fsr_sharpness_description">Определяет, насколько чётким будет изображение при использовании динамического контраста FSR.</string>

View File

@ -61,9 +61,7 @@
<string name="cpuopt_unsafe_host_mmu">Омогући емулацију MMU домаћина</string>
<string name="cpuopt_unsafe_host_mmu_description">Ова оптимизација убрзава приступ меморији од стране гостујућег програма. Укључивање изазива да се читања/уписа меморије госта обављају директно у меморији и користе MMU домаћина. Искључивање присиљава све приступе меморији да користе софтверску емулацију MMU.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">НВДЕЦ Емулација</string>
<string name="nvdec_emulation_description">Изаберите како се видео декодирање (НВДЕЦ) обрађује током секс и увозних интросија.</string>
@ -361,8 +359,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Резолуција (ручно / прикључено)</string>
<string name="renderer_vsync">Всинц мод</string>
<string name="shader_backend">Схадер Бацкенд</string>
<string name="shader_backend_description">Изаберите како се сјеначици саставе и преведете за ваш ГПУ.</string>
<string name="renderer_scaling_filter">Филтер прилагођавања прозора</string>
<string name="fsr_sharpness">ФСР оштрина</string>
<string name="fsr_sharpness_description">Одређује колико ће се слика наоштрен трајати док користи \"ФСР\" динамички контраст</string>

View File

@ -88,11 +88,6 @@
<string name="debug_knobs_description">Лише для розробників.</string>
<string name="debug_knobs_hint">065535</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<string name="shader_backend_spirv">SPIRV</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Емуляція NVDEC</string>
<string name="nvdec_emulation_description">Обробка відео під час катсцен</string>
@ -442,8 +437,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Роздільна здатність (Портативний/Док)</string>
<string name="renderer_vsync">Режим верт. синхронізації</string>
<string name="shader_backend">Система обробки шейдерів</string>
<string name="shader_backend_description">Виберіть, як компілювати й транслювати шейдери для ГП.</string>
<string name="renderer_scaling_filter">Фільтр масштабування вікна</string>
<string name="fsr_sharpness">Різкість FSR</string>
<string name="fsr_sharpness_description">Визначає різкість зображення при використанні FSR.</string>

View File

@ -63,9 +63,7 @@
<string name="cpuopt_unsafe_host_mmu">Bật giả lập MMU Máy chủ</string>
<string name="cpuopt_unsafe_host_mmu_description">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.</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">Giả lập NVDEC</string>
<string name="nvdec_emulation_description">Chọn cách xử lý giải mã video</string>
@ -337,8 +335,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Độ phân giải (Handheld/Docked)</string>
<string name="renderer_vsync">Chế độ VSync</string>
<string name="shader_backend">Backend Shader</string>
<string name="shader_backend_description">Chọn cách biên dịch shader</string>
<string name="renderer_scaling_filter">Bộ lọc điều chỉnh cửa sổ</string>
<string name="fsr_sharpness">Độ sắc nét FSR</string>
<string name="fsr_sharpness_description">Độ sắc nét khi dùng FSR</string>

View File

@ -85,9 +85,6 @@
<string name="debug_knobs_description">仅用于开发用途。</string>
<string name="debug_knobs_hint">0 到 65535</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">NVDEC模拟</string>
<string name="nvdec_emulation_description">选择视频解码处理方式</string>
@ -428,8 +425,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">分辨率 (掌机模式/主机模式)</string>
<string name="renderer_vsync">垂直同步模式</string>
<string name="shader_backend">着色器后端</string>
<string name="shader_backend_description">选择着色器编译方式</string>
<string name="renderer_scaling_filter">窗口滤镜</string>
<string name="fsr_sharpness">FSR 锐化度</string>
<string name="fsr_sharpness_description">指定使用 FSR 时图像的锐化程度</string>

View File

@ -88,9 +88,6 @@
<string name="debug_knobs_description">僅限開發用途</string>
<string name="debug_knobs_hint">0到65535</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">NVDEC模擬</string>
<string name="nvdec_emulation_description">選擇影片解碼NVDEC的方式</string>
@ -431,8 +428,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">解析度 (手提/底座)</string>
<string name="renderer_vsync">垂直同步</string>
<string name="shader_backend">著色器後端</string>
<string name="shader_backend_description">選擇著色器的編譯與轉譯方式</string>
<string name="renderer_scaling_filter">視窗適應過濾器</string>
<string name="fsr_sharpness">FSR 銳化度</string>
<string name="fsr_sharpness_description">使用 FSR 時圖片的銳化程度</string>

View File

@ -111,18 +111,6 @@
<item>2</item>
</integer-array>
<string-array name="rendererShaderNames">
<item>@string/shader_backend_glsl</item>
<item>@string/shader_backend_glasm</item>
<item>@string/shader_backend_spirv</item>
</string-array>
<integer-array name="rendererShaderValues">
<item>0</item>
<item>1</item>
<item>2</item>
</integer-array>
<!-- VRAM USAGE MODE CHOICES -->
<string-array name="vramUsageMethodNames">
<item>@string/vram_usage_conservative</item>

View File

@ -105,11 +105,6 @@
<string name="debug_knobs_description">For development use only.</string>
<string name="debug_knobs_hint">0 to 65535</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<string name="shader_backend_spirv">SPIRV</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation">NVDEC Emulation</string>
<string name="nvdec_emulation_description">Select how video decoding (NVDEC) is handled during cutscenes and intros.</string>
@ -461,8 +456,6 @@
<!-- Graphics settings strings -->
<string name="renderer_resolution">Resolution (Handheld/Docked)</string>
<string name="renderer_vsync">VSync mode</string>
<string name="shader_backend">Shader Backend</string>
<string name="shader_backend_description">Choose how shaders are compiled and translated for your GPU.</string>
<string name="renderer_scaling_filter">Window adapting filter</string>
<string name="fsr_sharpness">FSR sharpness</string>
<string name="fsr_sharpness_description">Determines how sharpened the image will look while using FSR\'s dynamic contrast</string>

View File

@ -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);

View File

@ -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<RendererBackend, true> renderer_backend{linkage,
#if defined(__sun__) || defined(__managarm__)
RendererBackend::OpenGL,
RendererBackend::OpenGL_GLSL,
#else
RendererBackend::Vulkan,
RendererBackend::Vulkan,
#endif
"backend", Category::Renderer};
SwitchableSetting<ShaderBackend, true> shader_backend{linkage,
#if defined(__sun__) || defined(__managarm__)
ShaderBackend::Glsl,
#else
ShaderBackend::SpirV,
#endif
"shader_backend", Category::Renderer, Specialization::RuntimeList};
SwitchableSetting<int> vulkan_device{linkage, 0, "vulkan_device", Category::Renderer,
Specialization::RuntimeList};
"backend", Category::Renderer};
SwitchableSetting<int> vulkan_device{linkage, 0, "vulkan_device", Category::Renderer, Specialization::RuntimeList};
// Graphics Settings
ResolutionScalingInfo resolution_info{};

View File

@ -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);

View File

@ -163,10 +163,6 @@ std::unique_ptr<TranslationMap> 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<ComboboxTranslationMap> ComboboxEnumeration(QObject* parent)
PAIR(VramUsageMode, Conservative, tr("Conservative")),
PAIR(VramUsageMode, Aggressive, tr("Aggressive")),
}});
translations->insert({Settings::EnumMetadata<Settings::RendererBackend>::Index(),
{
translations->insert({Settings::EnumMetadata<Settings::RendererBackend>::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<Settings::ShaderBackend>::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<Settings::GpuAccuracy>::Index(),
{
PAIR(GpuAccuracy, Low, tr("Fast")),

View File

@ -68,14 +68,10 @@ static const std::map<Settings::GpuAccuracy, QString> gpu_accuracy_texts_map = {
static const std::map<Settings::RendererBackend, QString> 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<Settings::ShaderBackend, QString> 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

View File

@ -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);

View File

@ -8,7 +8,7 @@
#include <bit>
#include <numeric>
#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<u32> 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);

View File

@ -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;

View File

@ -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{};

View File

@ -10,7 +10,7 @@
#include <vector>
#include <bit>
#include <numeric>
#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;
}
}

View File

@ -465,8 +465,8 @@ std::unique_ptr<GraphicsPipeline> 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<u32>(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<GraphicsPipeline> ShaderCache::CreateGraphicsPipeline(
Shader::Environment& env{*envs[env_index]};
++env_index;
const u32 cfg_offset{static_cast<u32>(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<GraphicsPipeline> 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<GraphicsPipeline> 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<const Shader::Info*, Maxwell::MaxShaderStage> infos{};
@ -514,7 +512,7 @@ std::unique_ptr<GraphicsPipeline> ShaderCache::CreateGraphicsPipeline(
std::array<std::vector<u32>, 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<GraphicsPipeline> 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<ComputePipeline> ShaderCache::CreateComputePipeline(
std::string code{};
std::vector<u32> 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<ComputePipeline>(device, texture_cache, buffer_cache, program_manager,
program.info, code, code_spirv, force_context_flush);
return std::make_unique<ComputePipeline>(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;

View File

@ -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<VideoCore::RendererBase> CreateRenderer(
auto& device_memory = system.Host1x().MemoryManager();
switch (Settings::values.renderer_backend.GetValue()) {
case Settings::RendererBackend::OpenGL:
return std::make_unique<OpenGL::RendererOpenGL>(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<OpenGL::RendererOpenGL>(emu_window, device_memory, gpu, std::move(context));
case Settings::RendererBackend::Vulkan:
return std::make_unique<Vulkan::RendererVulkan>(emu_window, device_memory, gpu,
std::move(context));
return std::make_unique<Vulkan::RendererVulkan>(emu_window, device_memory, gpu, std::move(context));
case Settings::RendererBackend::Null:
return std::make_unique<Null::RendererNull>(emu_window, gpu, std::move(context));
default:

View File

@ -889,12 +889,13 @@ void GRenderWindow::resizeEvent(QResizeEvent* event) {
std::unique_ptr<Core::Frontend::GraphicsContext> 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<OpenGLSharedContext*>(main_context.get());
// Bind the shared contexts to the main surface in case the backend wants to take over
// presentation
return std::make_unique<OpenGLSharedContext>(c->GetShareContext(),
child_widget->windowHandle());
return std::make_unique<OpenGLSharedContext>(c->GetShareContext(), child_widget->windowHandle());
}
#endif
return std::make_unique<DummyContext>();
@ -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;
}

View File

@ -91,9 +91,8 @@ ConfigureGraphics::ConfigureGraphics(
: ConfigurationShared::Tab(group_, parent), ui{std::make_unique<Ui::ConfigureGraphics>()},
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<Settings::ShaderBackend>::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<int>(&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<Settings::ShaderBackend>(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<Settings::RendererBackend>(
@ -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<Settings::ShaderBackend>(
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<Settings::ShaderBackend>::Index(),
static_cast<int>(shader_backend)));
} else if (is_vulkan && static_cast<int>(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<Settings::RendererBackend>(
return Settings::RendererBackend(
combobox_translations.at(Settings::EnumMetadata<Settings::RendererBackend>::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;
}

View File

@ -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<void()>& expose_compute_option;
const std::function<void(Settings::AspectRatio, Settings::ResolutionSetup)> update_aspect_ratio;
const Core::System& system;
const ConfigurationShared::ComboboxTranslationMap& combobox_translations;
const std::vector<std::pair<u32, QString>>& 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;
};

View File

@ -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() {

View File

@ -339,7 +339,9 @@ int main(int argc, char** argv) {
std::unique_ptr<EmuWindow_SDL2> 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<EmuWindow_SDL2_GL>(&input_subsystem, system, fullscreen);
break;
case Settings::RendererBackend::Vulkan: