From 5b864d406d44cd786b00ce0a4cec70fc44930652 Mon Sep 17 00:00:00 2001 From: MaranBr Date: Sat, 23 Aug 2025 19:42:10 +0200 Subject: [PATCH] [video_core] Add option to control the DMA precision level at runtime (#304) This adds an option to control the DMA precision level at runtime. Co-authored-by: crueter Co-authored-by: PavelBARABANOV Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/304 Reviewed-by: crueter Co-authored-by: MaranBr Co-committed-by: MaranBr --- .../features/settings/model/IntSetting.kt | 1 + .../features/settings/model/view/SettingsItem.kt | 9 +++++++++ .../settings/ui/SettingsFragmentPresenter.kt | 1 + .../app/src/main/res/values-ar/strings.xml | 8 ++++++++ .../app/src/main/res/values-ckb/strings.xml | 10 ++++++++++ .../app/src/main/res/values-cs/strings.xml | 8 ++++++++ .../app/src/main/res/values-de/strings.xml | 8 ++++++++ .../app/src/main/res/values-es/strings.xml | 8 ++++++++ .../app/src/main/res/values-fa/strings.xml | 8 ++++++++ .../app/src/main/res/values-fr/strings.xml | 8 ++++++++ .../app/src/main/res/values-he/strings.xml | 8 ++++++++ .../app/src/main/res/values-hu/strings.xml | 8 ++++++++ .../app/src/main/res/values-id/strings.xml | 8 ++++++++ .../app/src/main/res/values-it/strings.xml | 8 ++++++++ .../app/src/main/res/values-ja/strings.xml | 8 ++++++++ .../app/src/main/res/values-ko/strings.xml | 8 ++++++++ .../app/src/main/res/values-nb/strings.xml | 10 ++++++++++ .../app/src/main/res/values-pl/strings.xml | 9 +++++++++ .../app/src/main/res/values-pt-rBR/strings.xml | 8 ++++++++ .../app/src/main/res/values-pt-rPT/strings.xml | 8 ++++++++ .../app/src/main/res/values-ru/strings.xml | 8 ++++++++ .../app/src/main/res/values-sr/strings.xml | 8 ++++++++ .../app/src/main/res/values-uk/strings.xml | 8 ++++++++ .../app/src/main/res/values-vi/strings.xml | 10 ++++++++++ .../app/src/main/res/values-zh-rCN/strings.xml | 8 ++++++++ .../app/src/main/res/values-zh-rTW/strings.xml | 8 ++++++++ src/android/app/src/main/res/values/arrays.xml | 13 +++++++++++++ src/android/app/src/main/res/values/strings.xml | 8 ++++++++ src/common/settings.h | 12 ++++++++++++ src/common/settings_enums.h | 2 ++ src/video_core/dma_pusher.cpp | 13 +++++++++++-- src/yuzu/configuration/shared_translation.cpp | 15 +++++++++++++-- src/yuzu/uisettings.h | 1 + 33 files changed, 262 insertions(+), 4 deletions(-) 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 6ba101263a..21aad8b5d1 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 @@ -27,6 +27,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting { RENDERER_SCREEN_LAYOUT("screen_layout"), RENDERER_ASPECT_RATIO("aspect_ratio"), RENDERER_OPTIMIZE_SPIRV_OUTPUT("optimize_spirv_output"), + DMA_ACCURACY("dma_accuracy"), AUDIO_OUTPUT_ENGINE("output_engine"), MAX_ANISOTROPY("max_anisotropy"), THEME("theme"), 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 15fde13bf3..062038aa44 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 @@ -602,6 +602,15 @@ abstract class SettingsItem( valuesId = R.array.optimizeSpirvOutputValues ) ) + put( + SingleChoiceSetting( + IntSetting.DMA_ACCURACY, + titleId = R.string.dma_accuracy, + descriptionId = R.string.dma_accuracy_description, + choicesId = R.array.dmaAccuracyNames, + valuesId = R.array.dmaAccuracyValues + ) + ) put( SwitchSetting( BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS, 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 bcdd65b1a3..672bcd492c 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 @@ -448,6 +448,7 @@ class SettingsFragmentPresenter( add(HeaderSetting(R.string.veil_renderer)) add(BooleanSetting.ENABLE_RAII.key) add(BooleanSetting.RENDERER_EARLY_RELEASE_FENCES.key) + add(IntSetting.DMA_ACCURACY.key) add(BooleanSetting.BUFFER_REORDER_DISABLE.key) add(BooleanSetting.FRAME_INTERPOLATION.key) add(BooleanSetting.RENDERER_FAST_GPU.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 f9130457cc..a775e3c176 100644 --- a/src/android/app/src/main/res/values-ar/strings.xml +++ b/src/android/app/src/main/res/values-ar/strings.xml @@ -117,6 +117,8 @@ دورات تخطي إبطال ذاكرة التخزين المؤقت الداخلية للوحدة المركزية يتخطى بعض عمليات إبطال ذاكرة التخزين المؤقت أثناء تحديثات الذاكرة، مما يقلل استخدام المعالج ويحسن أدائه. قد يسبب هذا أعطالاً أو تعطلًا في بعض الألعاب. + مستوى DMA + يتحكم في دقة تحديد مستوى DMA. الدقة الأعلى يمكنها إصلاح بعض المشاكل في بعض الألعاب، ولكنها قد تؤثر أيضًا على الأداء في بعض الحالات. إذا كنت غير متأكد، اتركه على الوضع الافتراضي. 4 جيجابايت (موصى به) @@ -741,6 +743,12 @@ عالي Extreme (بطيء) + + افتراضي + عادي + عالي + مفرط + 0.25X (180p/270p) 0.5X (360p/540p) 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 c005e0cab7..7c71e9e8fe 100644 --- a/src/android/app/src/main/res/values-ckb/strings.xml +++ b/src/android/app/src/main/res/values-ckb/strings.xml @@ -126,6 +126,8 @@ تیک بازنەکردنی ناوەکی CPU هەندێک لە بازنەکردنەکانی هەڵگر لە کاتی نوێکردنەوەی بیرگە دەنێرێت، کەمکردنەوەی بەکارهێنانی CPU و باشترکردنی کارایی. لەوانەیە لە هەندێک یاری کێشە درووست بکات. + ئاستی DMA + کۆنتڕۆڵی وردی ڕێکخستنی DMA دەکات. وردی زیاتر دەتوانێ هەندێک کێشە لە هەندێک یاری چارەسەر بکات، بەڵام لە هەندێک حاڵەتدا کاریگەری لەسەر کارایی هەیە. ئەگەر دڵنیا نیت، بە ڕێکخستنی بنەڕەتی بێڵە. 4GB (پێشنیارکراو) 6GB (نائاسایش) @@ -688,6 +690,7 @@ هەڵەی کوشندە هەڵەیەکی کوشندە ڕوویدا. بۆ وردەکارییەکان لۆگەکە بپشکنە.\nبەردەوامی ئیمولەیشن لەوانەیە ببێتە هۆی تێکچوون و فڕێدانەدەرەوە. کوژاندنەوەی ئەم ڕێکخستنە دەبێتە هۆی کەمکردنەوەی کارایی ئیمولەیشن! بۆ باشترین ئەزموون، باشترە ئەم ڕێکخستنە چالاک بهێڵیتەوە. + ژاپۆن ئەمریکا @@ -699,6 +702,7 @@ B GB + ڤوڵکان هیچ @@ -708,6 +712,12 @@ بەرز ئەوپەڕ (خاو) + + بنەڕەتی + ئاسایی + بەرز + زۆر بەرز + 0.25X (180p/270p) 0.5X (360p/540p) 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 8cdc753e8d..18df8c8413 100644 --- a/src/android/app/src/main/res/values-cs/strings.xml +++ b/src/android/app/src/main/res/values-cs/strings.xml @@ -125,6 +125,8 @@ Takty Přeskočit vnitřní invalidaci CPU Přeskočí některé invalidace mezipaměti na straně CPU během aktualizací paměti, čímž sníží zatížení CPU a zlepší jeho výkon. Může způsobit chyby nebo pády v některých hrách. + Úroveň DMA + Ovládá přesnost DMA. Vyšší přesnost může opravit problémy v některých hrách, ale může také ovlivnit výkon. Pokud si nejste jisti, ponechejte výchozí nastavení. 4GB (Doporučeno) 6GB (Nebezpečné) @@ -684,6 +686,12 @@ Vysoká Extrémní (Pomalé) + + Výchozí + Normální + Vysoká + Extrémní + 0.25X (180p/270p) 0.5X (360p/540p) 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 9aae9f3bd3..fcd85018cc 100644 --- a/src/android/app/src/main/res/values-de/strings.xml +++ b/src/android/app/src/main/res/values-de/strings.xml @@ -126,6 +126,8 @@ Ticks CPU-interne Invalidierung überspringen Überspringt bestimmte Cache-Invalidierungen auf CPU-Seite während Speicherupdates, reduziert die CPU-Auslastung und verbessert die Leistung. Kann in einigen Spielen zu Fehlern oder Abstürzen führen. + DMA-Level + Steuert die DMA-Präzisionsgenauigkeit. Eine höhere Präzision kann Probleme in einigen Spielen beheben, kann aber in einigen Fällen auch die Leistung beeinträchtigen. Im Zweifel auf „Standard“ belassen. 4 GB (Empfohlen) 6 GB (Unsicher) @@ -770,6 +772,12 @@ Wirklich fortfahren? Hoch Extrem (Langsam) + + Standard + Normal + Hoch + Extrem + 0.25X (180p/270p) 0.5X (360p/540p) 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 ebd0768d6b..8cd93efe73 100644 --- a/src/android/app/src/main/res/values-es/strings.xml +++ b/src/android/app/src/main/res/values-es/strings.xml @@ -126,6 +126,8 @@ Ticks Omitir invalidación interna de la CPU Omite ciertas invalidaciones de caché durante actualizaciones de memoria, reduciendo el uso de CPU y mejorando su rendimiento. Puede causar fallos en algunos juegos. + Nivel de DMA + Controla la precisión del DMA. Una mayor precisión puede solucionar problemas en algunos juegos, pero también puede afectar el rendimiento en algunos casos. Si no está seguro, déjelo en Predeterminado. 4GB (Recomendado) 6GB (Inseguro) @@ -819,6 +821,12 @@ Alto Extremo (Lento) + + Predeterminado + Normal + Alto + Extremo + 0.25X (180p/270p) 0.5X (360p/540p) 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 dec0a1c842..5bf8a634d1 100644 --- a/src/android/app/src/main/res/values-fa/strings.xml +++ b/src/android/app/src/main/res/values-fa/strings.xml @@ -126,6 +126,8 @@ تیک‌ها رد کردن ابطال داخلی CPU بعضی ابطال‌های حافظه نهان در هنگام به‌روزرسانی‌های حافظه را رد می‌کند، استفاده از CPU را کاهش داده و عملکرد آن را بهبود می‌بخشد. ممکن است در برخی بازی‌ها باعث مشکلات یا خرابی شود. + سطح DMA + دقت صحت DMA را کنترل می کند. دقت بالاتر می تواند مشکلات برخی بازی ها را برطرف کند، اما در برخی موارد نیز می تواند بر عملکرد تأثیر بگذارد. اگر مطمئن نیستید، آن را روی پیش فرض بگذارید. 4 گیگابایت (توصیه شده) 6 گیگابایت (ناامن) @@ -818,6 +820,12 @@ زیاد افراطی (کند) + + پیش فرض + معمولی + بالا + فوق العاده + 0.25X (180p/270p) 0.5X (360p/540p) 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 6ca92875cf..9a74bb61bb 100644 --- a/src/android/app/src/main/res/values-fr/strings.xml +++ b/src/android/app/src/main/res/values-fr/strings.xml @@ -126,6 +126,8 @@ Ticks Ignorer l\'invalidation interne du CPU Ignore certaines invalidations de cache côté CPU lors des mises à jour mémoire, réduisant l\'utilisation du CPU et améliorant ses performances. Peut causer des bugs ou plantages sur certains jeux. + Niveau DMA + Contrôle la précision du DMA. Une précision plus élevée peut résoudre les problèmes dans certains jeux, mais peut aussi affecter les performances dans certains cas. Si vous n\'êtes pas sûr, laissez-la sur Défaut. 4 Go (Recommandé) 6 Go (Dangereux) @@ -867,6 +869,12 @@ Haut Extrême (Lent) + + Défaut + Normal + Élevé + Extrême + 0.25X (180p/270p) 0.5X (360p/540p) 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 caf4f5bf74..5413c0797b 100644 --- a/src/android/app/src/main/res/values-he/strings.xml +++ b/src/android/app/src/main/res/values-he/strings.xml @@ -127,6 +127,8 @@ טיקים דלג על איפוס מטמון פנימי של המעבד מדלג על איפוסי מטמון מסוימים במהלך עדכוני זיכרון, מפחית שימוש במעבד ומשפר ביצועים. עלול לגרום לתקלות או קריסות בחלק מהמשחקים. + רמת DMA + שולטת בדיוק הדיוק של DMA. דיוק גבוה יותר יכול לתקן בעיות בחלק מהמשחקים, אך הוא עלול גם להשפיע על הביצועים במקרים מסוימים. אם אינך בטוח, השאר ברירת מחדל. 4GB (מומלץ) 6GB (לא בטוח) @@ -749,6 +751,12 @@ גבוה אקסטרים (איטי) + + ברירת מחדל + רגיל + גבוה + קיצוני + 0.25X (180p/270p) 0.5X (360p/540p) 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 6ea078a78d..73ccbd03e0 100644 --- a/src/android/app/src/main/res/values-hu/strings.xml +++ b/src/android/app/src/main/res/values-hu/strings.xml @@ -126,6 +126,8 @@ Tick-ek CPU belső érvénytelenítés kihagyása Kihagy néhány CPU-oldali gyorsítótár-érvénytelenítést memóriafrissítések közben, csökkentve a CPU használatát és javítva a teljesítményt. Néhány játékban hibákat vagy összeomlást okozhat. + DMA szint + Szabályozza a DMA pontosságát. A magasabb pontosság megoldhat néhány játék problémáit, de bizonyos esetekben befolyásolhatja a teljesítményt. Ha bizonytalan, hagyja Alapértelmezett beállításnál. 4GB (Ajánlott) 6GB (Nem biztonságos) @@ -856,6 +858,12 @@ Magas Extrém (Lassú) + + Alapértelmezett + Normál + Magas + Extrém + 0.25X (180p/270p) 0.5X (360p/540p) 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 f37e3bb4c5..44d43b4578 100644 --- a/src/android/app/src/main/res/values-id/strings.xml +++ b/src/android/app/src/main/res/values-id/strings.xml @@ -126,6 +126,8 @@ Ticks Lewati Pembatalan Internal CPU Melewati beberapa pembatalan cache sisi CPU selama pembaruan memori, mengurangi penggunaan CPU dan meningkatkan kinerjanya. Mungkin menyebabkan gangguan atau crash pada beberapa game. + Level DMA + Mengontrol akurasi presisi DMA. Presisi yang lebih tinggi dapat memperbaiki masalah di beberapa game, tetapi juga dapat memengaruhi performa dalam beberapa kasus. Jika tidak yakin, biarkan di Bawaan. 4GB (Direkomendasikan) 6GB (Tidak Aman) @@ -811,6 +813,12 @@ Tinggi Ekstrim (Lambat) + + Bawaan + Normal + Tinggi + Ekstrem + 0.25X (180p/270p) 0.5X (360p/540p) 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 ddce663c7c..4fc29eb597 100644 --- a/src/android/app/src/main/res/values-it/strings.xml +++ b/src/android/app/src/main/res/values-it/strings.xml @@ -126,6 +126,8 @@ Tick Salta invalidamento interno CPU Salta alcuni invalidamenti della cache lato CPU durante gli aggiornamenti di memoria, riducendo l\'uso della CPU e migliorandone le prestazioni. Potrebbe causare glitch o crash in alcuni giochi. + Livello DMA + Controlla la precisione del DMA. Una precisione più alta può risolvere problemi in alcuni giochi, ma in alcuni casi può influire sulle prestazioni. Se non sei sicuro, lascia su Predefinito. 4GB (Consigliato) 6GB (Non sicuro) @@ -780,6 +782,12 @@ Alta Estrema (Lenta) + + Predefinito + Normale + Alto + Estremo + 0.25X (180p/270p) 0.5X (360p/540p) 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 85ac46dd71..d65a32230a 100644 --- a/src/android/app/src/main/res/values-ja/strings.xml +++ b/src/android/app/src/main/res/values-ja/strings.xml @@ -126,6 +126,8 @@ ティック CPU内部無効化をスキップ メモリ更新時のCPU側キャッシュ無効化をスキップし、CPU使用率を減らして性能を向上させます。一部のゲームで不具合やクラッシュが発生する可能性があります。 + DMAレベル + DMAの精度を制御します。精度を高くすると一部のゲームの問題が修正される場合がありますが、場合によってはパフォーマンスに影響を与える可能性もあります。不明な場合は、デフォルトのままにしてください。 4GB (推奨) 6GB (安全でない) @@ -739,6 +741,12 @@ 最高 (低速) + + デフォルト + 標準 + + 最高 + 0.25X (180p/270p) 0.5X (360p/540p) 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 a2974f99fa..7871fa7427 100644 --- a/src/android/app/src/main/res/values-ko/strings.xml +++ b/src/android/app/src/main/res/values-ko/strings.xml @@ -126,6 +126,8 @@ CPU 내부 무효화 건너뛰기 메모리 업데이트 시 일부 CPU 측 캐시 무효화를 건너뛰어 CPU 사용량을 줄이고 성능을 향상시킵니다. 일부 게임에서 오류 또는 충돌을 일으킬 수 있습니다. + DMA 수준 + DMA 정밀도를 제어합니다. 높은 정밀도는 일부 게임의 문제를 해결할 수 있지만 경우에 따라 성능에 영향을 미칠 수도 있습니다. 확실하지 않다면 기본값으로 두세요. 4GB (권장) 6GB (안전하지 않음) @@ -810,6 +812,12 @@ 높음 극한 (느림) + + 기본값 + 보통 + 높음 + 극단적 + 0.25X (180p/270p) 0.5X (360p/540p) 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 3bea2895b5..8717f212d1 100644 --- a/src/android/app/src/main/res/values-nb/strings.xml +++ b/src/android/app/src/main/res/values-nb/strings.xml @@ -126,6 +126,8 @@ Takter Hopp over CPU intern invalidering Hopper over enkelte CPU-side cache-invalideringer under minneoppdateringer, reduserer CPU-bruk og forbedrer ytelsen. Kan forårsake feil eller krasj i noen spill. + DMA-nivå + Styrer DMA-presisjonsnøyaktigheten. Høyere presisjon kan fikse problemer i noen spill, men kan også påvirke ytelsen i noen tilfeller. Hvis du er usikker, la den stå på Standard. 4GB (Anbefalt) 6GB (Usikkert) @@ -698,6 +700,7 @@ Fatal Feil Det oppstod en fatal feil. Sjekk loggen for mer informasjon.\nFortsatt emulering kan føre til krasj og feil. Hvis du slår av denne innstillingen, reduseres emuleringsytelsen betydelig! Vi anbefaler at du lar denne innstillingen være aktivert for å få den beste opplevelsen. + Japan USA @@ -709,6 +712,7 @@ B GB + Vulkan Ingen @@ -718,6 +722,12 @@ Høy Ekstrem (Treg) + + Standard + Normal + Høy + Ekstrem + 0.25X (180p/270p) 0.5X (360p/540p) 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 a87a4eabb5..0c0a3e9012 100644 --- a/src/android/app/src/main/res/values-pl/strings.xml +++ b/src/android/app/src/main/res/values-pl/strings.xml @@ -126,6 +126,8 @@ Takty Pomiń wewnętrzne unieważnienie CPU Pomija niektóre unieważnienia pamięci podręcznej po stronie CPU podczas aktualizacji pamięci, zmniejszając użycie CPU i poprawiając jego wydajność. Może powodować błędy lub awarie w niektórych grach. + Poziom DMA + Kontroluje dokładność precyzji DMA. Wyższy poziom może naprawić problemy w niektórych grach, ale może również wpłynąć na wydajność. Jeśli nie jesteś pewien, pozostaw wartość «Domyślny». 4GB (Zalecane) 6GB (Niebezpieczne) @@ -707,6 +709,7 @@ B GB + Vulkan Żadny @@ -716,6 +719,12 @@ Wysoki Ekstremalny (Wolny) + + 預設 + 普通 + + 極高 + 0.25X (180p/270p) 0.5X (360p/540p) 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 8db231dff0..d9a143921d 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 @@ -126,6 +126,8 @@ Ticks Pular invalidação interna da CPU Ignora algumas invalidações de cache do lado da CPU durante atualizações de memória, reduzindo o uso da CPU e melhorando seu desempenho. Pode causar falhas ou travamentos em alguns jogos. + Nível DMA + Controla a precisão do DMA. Maior precisão pode corrigir problemas em alguns jogos, mas também pode impactar o desempenho em alguns casos. Se não tiver certeza, deixe em Padrão. 4GB (Recomendado) 6GB (Inseguro) @@ -868,6 +870,12 @@ uma tentativa de mapeamento automático Alta Extrema (Lenta) + + Padrão + Normal + Alto + Extremo + 0.25X (180p/270p) 0.5X (360p/540p) 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 3f0248110e..fd3787cb00 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 @@ -126,6 +126,8 @@ Ticks Ignorar invalidação interna da CPU Ignora algumas invalidações de cache do lado da CPU durante atualizações de memória, reduzindo a utilização da CPU e melhorando o desempenho. Pode causar falhas ou crashes em alguns jogos. + Nível DMA + Controla a precisão do DMA. Maior precisão pode corrigir problemas em alguns jogos, mas também pode afetar o desempenho nalguns casos. Se não tiver a certeza, deixe em Predefinido. 4GB (Recomendado) 6GB (Inseguro) @@ -868,6 +870,12 @@ uma tentativa de mapeamento automático Alto Estremo (Lento) + + Predefinido + Normal + Alto + Extremo + 0.25X (180p/270p) 0.5X (360p/540p) 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 955a013e30..787111cde4 100644 --- a/src/android/app/src/main/res/values-ru/strings.xml +++ b/src/android/app/src/main/res/values-ru/strings.xml @@ -126,6 +126,8 @@ Такты Пропустить внутреннюю инвалидацию ЦП Пропускает некоторые инвалидации кэша на стороне ЦП при обновлениях памяти, уменьшая нагрузку на процессор и повышая производительность. Может вызывать сбои в некоторых играх. + Уровень DMA + Управляет точностью DMA. Более высокий уровень может исправить проблемы в некоторых играх, но также может повлиять на производительность. Если не уверены, оставьте значение «По умолчанию». 4 ГБ (Рекомендуется) 6 ГБ (Небезопасно) @@ -869,6 +871,12 @@ Высокая Экстрим (медленный) + + По умолчанию + Нормальный + Высокий + Экстремальный + 0.25X (180p/270p) 0.5X (360p/540p) 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 2f25a95179..1eba9baa16 100644 --- a/src/android/app/src/main/res/values-sr/strings.xml +++ b/src/android/app/src/main/res/values-sr/strings.xml @@ -119,6 +119,8 @@ Тактови Preskoči unutrašnje poništavanje CPU-a Preskače određena poništavanja keša na strani CPU-a tokom ažuriranja memorije, smanjujući opterećenje procesora i poboljšavajući performanse. Može izazvati greške u nekim igrama. + DMA ниво + Контролише тачност DMA прецизности. Виши ниво може да поправи проблеме у неким играма, али може и да утиче на перформансе. Ако нисте сигурни, оставите на «Подразумевано». Схадер Бацкенд @@ -864,6 +866,12 @@ Високо Екстремни (спор) + + Подразумевано + Нормално + Високо + Екстремно + АСТЦ метода декодирања Изаберите како су текстуре са компримираним текстовима декодиране за приказивање: ЦПУ (споро, сигуран), ГПУ (Фаст, Препоручи) или ЦПУ АСИНЦ (без затезача, могу да изазове питања) 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 595d0c7395..7dc9ded033 100644 --- a/src/android/app/src/main/res/values-uk/strings.xml +++ b/src/android/app/src/main/res/values-uk/strings.xml @@ -126,6 +126,8 @@ Такти Пропустити внутрішнє інвалідування CPU Пропускає деякі інвалідації кешу на стороні CPU під час оновлення пам\'яті, зменшуючи навантаження на процесор і покращуючи продуктивність. Може спричинити збої в деяких іграх. + Рівень DMA + Керує точністю DMA. Вищий рівень може виправити проблеми в деяких іграх, але також може вплинути на продуктивність. Якщо не впевнені, залиште значення «Типово». 4 ГБ (Рекомендовано) 6 ГБ (Небезпечно) @@ -735,6 +737,12 @@ Висока Екстрим (повільно) + + Типово + Нормальний + Високий + Екстремальний + 0.25X (180p/270p) 0.5X (360p/540p) 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 a11769ed97..5655f2c745 100644 --- a/src/android/app/src/main/res/values-vi/strings.xml +++ b/src/android/app/src/main/res/values-vi/strings.xml @@ -126,6 +126,8 @@ Tích Bỏ qua vô hiệu hóa bên trong CPU Bỏ qua một số lần vô hiệu hóa bộ nhớ đệm phía CPU trong khi cập nhật bộ nhớ, giảm mức sử dụng CPU và cải thiện hiệu suất. Có thể gây ra lỗi hoặc treo máy trong một số trò chơi. + Cấp độ DMA + Điều khiển độ chính xác của DMA. Độ chính xác cao hơn có thể sửa lỗi trong một số trò chơi, nhưng cũng có thể ảnh hưởng đến hiệu suất trong một số trường hợp. Nếu không chắc chắn, hãy để ở Mặc định. 4GB (Được đề xuất) 6GB (Không an toàn) @@ -701,6 +703,7 @@ Lỗi nghiêm trọng Đã xảy ra lỗi nghiêm trọng. Kiểm tra nhật ký để biết chi tiết.\nViệc tiếp tục giả lập có thể dẫn đến sự cố và lỗi. Tắt cài đặt này sẽ làm giảm đáng kể hiệu suất giả lập! Để có trải nghiệm tốt nhất, bạn nên bật cài này. + Nhật Bản Hoa Kỳ @@ -712,6 +715,7 @@ B GB + Vulkan Trống @@ -721,6 +725,12 @@ Khỏe Tối đa (Chậm) + + Mặc định + Bình thường + Cao + Cực cao + 0.25X (180p/270p) 0.5X (360p/540p) 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 9a1c9e8824..ec519cec56 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 @@ -125,6 +125,8 @@ 时钟 跳过CPU内部无效化 在内存更新期间跳过某些CPU端缓存无效化,减少CPU使用率并提高其性能。可能会导致某些游戏出现故障或崩溃。 + DMA 级别 + 控制 DMA 精度。更高的精度可以修复某些游戏中的问题,但在某些情况下也可能影响性能。如果不确定,请保留为“默认”。 4GB (推荐) 6GB (不安全) @@ -861,6 +863,12 @@ 极高 (慢速) + + 默认 + 普通 + + 极高 + 0.25X (180p/270p) 0.5X (360p/540p) 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 79e2f9ea2f..0d154af67c 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 @@ -118,6 +118,8 @@ 時脈 跳過CPU內部無效化 在記憶體更新期間跳過某些CPU端快取無效化,減少CPU使用率並提高其性能。可能會導致某些遊戲出現故障或崩潰。 + DMA 級別 + 控制 DMA 精確度。更高的精確度可以修復某些遊戲中的問題,但在某些情況下也可能影響效能。如果不確定,請保留為「預設」。 4GB (推薦) @@ -866,6 +868,12 @@ 極高 (慢) + + 預設 + 普通 + + 極高 + 0.25X (180p/270p) 0.5X (360p/540p) diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index 602003cf8a..2f0392675d 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -452,6 +452,19 @@ 2 + + @string/dma_accuracy_default + @string/dma_accuracy_normal + @string/dma_accuracy_high + @string/dma_accuracy_extreme + + + 0 + 1 + 2 + 3 + + @string/applet_hle @string/applet_lle diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index c4e85bde08..975bd1741a 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -113,6 +113,8 @@ Use Boost (1700MHz) to run at the Switch\'s highest native clock, or Fast (2000MHz) to run at 2x clock. Memory Layout (EXPERIMENTAL) Change the emulated memory layout. This setting will not increase performance, but may help with games utilizing high resolutions via mods. Do not use on phones with 8GB of RAM or less. Only works on the Dynarmic (JIT) backend. + DMA Level + Controls the DMA precision accuracy. Higher precision can fix issues in some games, but it can also impact performance in some cases. If unsure, leave it at Default. Shader Backend @@ -932,6 +934,12 @@ High Extreme (Slow) + + Default + Normal + High + Extreme + ASTC Decoding Method Pick how ASTC-compressed textures are decoded for rendering: CPU (slow, safe), GPU (fast, recommended), or CPU Async (no stutters, may cause issues) diff --git a/src/common/settings.h b/src/common/settings.h index 2a1c88c79e..01e391d501 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -427,7 +427,19 @@ struct Values { Specialization::Default, true, true}; + GpuAccuracy current_gpu_accuracy{GpuAccuracy::High}; + + SwitchableSetting dma_accuracy{linkage, + DmaAccuracy::Default, + DmaAccuracy::Default, + DmaAccuracy::Extreme, + "dma_accuracy", + Category::RendererAdvanced, + Specialization::Default, + true, + true}; + SwitchableSetting max_anisotropy{linkage, #ifdef ANDROID AnisotropyMode::Default, diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h index c2347f74d0..52b4a128f7 100644 --- a/src/common/settings_enums.h +++ b/src/common/settings_enums.h @@ -136,6 +136,8 @@ ENUM(ShaderBackend, Glsl, Glasm, SpirV); ENUM(GpuAccuracy, Normal, High, Extreme); +ENUM(DmaAccuracy, Default, Normal, High, Extreme); + ENUM(CpuBackend, Dynarmic, Nce); ENUM(CpuAccuracy, Auto, Accurate, Unsafe, Paranoid); diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp index 8ea4cbd43a..4b9a506cdf 100644 --- a/src/video_core/dma_pusher.cpp +++ b/src/video_core/dma_pusher.cpp @@ -102,9 +102,18 @@ bool DmaPusher::Step() { ProcessCommands(headers); }; - if (Settings::IsGPULevelExtreme()) { + const Settings::DmaAccuracy accuracy = Settings::values.dma_accuracy.GetValue(); + const bool use_gpu_accuracy = accuracy == Settings::DmaAccuracy::Default; + + // reduces eye bleeding but also macros are dumb so idk +#define CHECK_LEVEL(level) use_gpu_accuracy ? Settings::IsGPULevel##level() : accuracy == Settings::DmaAccuracy::level; + const bool force_safe = CHECK_LEVEL(Extreme) + const bool unsafe_compute = CHECK_LEVEL(High) +#undef CHECK_LEVEL + + if (force_safe) { safe_process(); - } else if (Settings::IsGPULevelHigh()) { + } else if (unsafe_compute) { if (dma_state.method >= MacroRegistersStart) { unsafe_process(); } else { diff --git a/src/yuzu/configuration/shared_translation.cpp b/src/yuzu/configuration/shared_translation.cpp index c237015fed..f6d590c0ee 100644 --- a/src/yuzu/configuration/shared_translation.cpp +++ b/src/yuzu/configuration/shared_translation.cpp @@ -288,12 +288,16 @@ std::unique_ptr InitializeTranslations(QWidget* parent) "and safe to set at 16x on most GPUs.")); INSERT(Settings, gpu_accuracy, - tr("Accuracy Level:"), - tr("GPU emulation accuracy.\nMost games render fine with Normal, but High is still " + tr("GPU Level:"), + tr("Controls the GPU emulation accuracy.\nMost games render fine with Normal, but High is still " "required for some.\nParticles tend to only render correctly with High " "accuracy.\nExtreme should only be used for debugging.\nThis option can " "be changed while playing.\nSome games may require booting on high to render " "properly.")); + INSERT(Settings, + dma_accuracy, + tr("DMA Level:"), + tr("Controls the DMA precision accuracy. Higher precision can fix issues in some games, but it can also impact performance in some cases.\nIf unsure, leave it at Default.")); INSERT(Settings, use_asynchronous_shaders, tr("Use asynchronous shader building (Hack)"), @@ -522,6 +526,13 @@ std::unique_ptr ComboboxEnumeration(QWidget* parent) PAIR(GpuAccuracy, High, tr("High")), PAIR(GpuAccuracy, Extreme, tr("Extreme")), }}); + translations->insert({Settings::EnumMetadata::Index(), + { + PAIR(DmaAccuracy, Default, tr("Default")), + PAIR(DmaAccuracy, Normal, tr("Normal")), + PAIR(DmaAccuracy, High, tr("High")), + PAIR(DmaAccuracy, Extreme, tr("Extreme")), + }}); translations->insert( {Settings::EnumMetadata::Index(), { diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h index 0502fe75e4..85de0ae72d 100644 --- a/src/yuzu/uisettings.h +++ b/src/yuzu/uisettings.h @@ -270,6 +270,7 @@ Q_DECLARE_METATYPE(UISettings::GameDir*); // These metatype declarations cannot be in common/settings.h because core is devoid of QT Q_DECLARE_METATYPE(Settings::CpuAccuracy); Q_DECLARE_METATYPE(Settings::GpuAccuracy); +Q_DECLARE_METATYPE(Settings::DmaAccuracy); Q_DECLARE_METATYPE(Settings::FullscreenMode); Q_DECLARE_METATYPE(Settings::NvdecEmulation); Q_DECLARE_METATYPE(Settings::ResolutionSetup);