From 0e47f37cf8344da04ac9691db636060d5e35f841 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 16 Aug 2025 12:03:12 +0000 Subject: [PATCH 01/12] [compat] improve thread naming logic Signed-off-by: lizzie --- src/common/thread.cpp | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/common/thread.cpp b/src/common/thread.cpp index 34cc1527bf..8461be25a8 100644 --- a/src/common/thread.cpp +++ b/src/common/thread.cpp @@ -15,9 +15,8 @@ #else #if defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) #include -#else -#include #endif +#include #include #endif #ifndef _WIN32 @@ -90,34 +89,37 @@ void SetCurrentThreadName(const char* name) { #else // !MSVC_VER, so must be POSIX threads // MinGW with the POSIX threading model does not support pthread_setname_np -#if !defined(_WIN32) || defined(_MSC_VER) void SetCurrentThreadName(const char* name) { + // See for reference + // https://gitlab.freedesktop.org/mesa/mesa/-/blame/main/src/util/u_thread.c?ref_type=heads#L75 #ifdef __APPLE__ pthread_setname_np(name); +#elif defined(__HAIKU__) + rename_thread(find_thread(NULL), name); #elif defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) pthread_set_name_np(pthread_self(), name); #elif defined(__NetBSD__) pthread_setname_np(pthread_self(), "%s", (void*)name); -#elif defined(__linux__) - // Linux limits thread names to 15 characters and will outright reject any - // attempt to set a longer name with ERANGE. - std::string truncated(name, std::min(strlen(name), static_cast(15))); - if (int e = pthread_setname_np(pthread_self(), truncated.c_str())) { - errno = e; - LOG_ERROR(Common, "Failed to set thread name to '{}': {}", truncated, GetLastErrorMsg()); +#elif defined(__linux__) || defined(__CYGWIN__) || defined(__sun__) || defined(__glibc__) || defined(__managarm__) + int ret = pthread_setname_np(pthread_self(), name); + if (ret == ERANGE) { + // Linux limits thread names to 15 characters and will outright reject any + // attempt to set a longer name with ERANGE. + char buf[16]; + size_t const len = std::min(std::strlen(name), sizeof(buf) - 1); + std::memcpy(truncated, name, len); + buf[len] = '\0'; + pthread_setname_np(pthread_self(), buf); } +#elif !defined(_WIN32) || defined(_MSC_VER) + // mingw stub + (void)name; #else pthread_setname_np(pthread_self(), name); #endif } #endif -#if defined(_WIN32) -void SetCurrentThreadName(const char* name) { - // Do Nothing on MingW -} -#endif - #endif } // namespace Common From 94dcbadb199751a5cbd27435508b20f48beb4873 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 16 Aug 2025 12:04:18 +0000 Subject: [PATCH 02/12] license header fix Signed-off-by: lizzie --- src/common/thread.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/thread.cpp b/src/common/thread.cpp index 8461be25a8..1e88f1a22d 100644 --- a/src/common/thread.cpp +++ b/src/common/thread.cpp @@ -1,3 +1,5 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2013 Dolphin Emulator Project // SPDX-FileCopyrightText: 2014 Citra Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later From 4cc4d315f00df1c1447b7a5ba3404d3c2000f98c Mon Sep 17 00:00:00 2001 From: Bix Date: Sat, 16 Aug 2025 17:32:18 +0200 Subject: [PATCH 03/12] [Frontend] add X links to About and Help (#272) Based off the recent addition of revolt links. Authored-by: Bix bix@bixed.xyz Signed-off-by: Bix bix@bixed.xyz Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/272 Reviewed-by: crueter Co-authored-by: Bix Co-committed-by: Bix --- README.md | 1 + .../org/yuzu/yuzu_emu/fragments/AboutFragment.kt | 1 + src/android/app/src/main/res/drawable/ic_x.xml | 9 +++++++++ .../src/main/res/layout-w600dp/fragment_about.xml | 11 +++++++++++ .../app/src/main/res/layout/fragment_about.xml | 12 ++++++++++++ src/android/app/src/main/res/values/strings.xml | 1 + src/yuzu/main.cpp | 5 +++++ src/yuzu/main.h | 1 + src/yuzu/main.ui | 12 ++++++++++++ 9 files changed, 53 insertions(+) create mode 100644 src/android/app/src/main/res/drawable/ic_x.xml diff --git a/README.md b/README.md index 6bdd0c0f03..70f2c81296 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ Check out our [website](https://eden-emu.dev) for the latest news on exciting fe ## Development Most of the development happens on our Git server. It is also where [our central repository](https://git.eden-emu.dev/eden-emu/eden) is hosted. For development discussions, please join us on [Discord](https://discord.gg/kXAmGCXBGD) or [Revolt](https://rvlt.gg/qKgFEAbH). +You can also follow us on [X (Twitter)](https://x.com/edenemuofficial) for updates and announcements. If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented. You can also contact any of the developers on Discord or Revolt to learn more about the current state of the emulator. diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt index 6f0493cbf8..88ec13dd4c 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt @@ -96,6 +96,7 @@ class AboutFragment : Fragment() { binding.buttonDiscord.setOnClickListener { openLink(getString(R.string.discord_link)) } binding.buttonRevolt.setOnClickListener { openLink(getString(R.string.revolt_link)) } + binding.buttonX.setOnClickListener { openLink(getString(R.string.x_link)) } binding.buttonWebsite.setOnClickListener { openLink(getString(R.string.website_link)) } binding.buttonGithub.setOnClickListener { openLink(getString(R.string.github_link)) } diff --git a/src/android/app/src/main/res/drawable/ic_x.xml b/src/android/app/src/main/res/drawable/ic_x.xml new file mode 100644 index 0000000000..d93c8d6b63 --- /dev/null +++ b/src/android/app/src/main/res/drawable/ic_x.xml @@ -0,0 +1,9 @@ + + + diff --git a/src/android/app/src/main/res/layout-w600dp/fragment_about.xml b/src/android/app/src/main/res/layout-w600dp/fragment_about.xml index f6de2f590e..9d9cf10bf8 100644 --- a/src/android/app/src/main/res/layout-w600dp/fragment_about.xml +++ b/src/android/app/src/main/res/layout-w600dp/fragment_about.xml @@ -230,6 +230,17 @@ app:iconSize="24dp" app:iconPadding="0dp" /> + + + + Make sure the user data folders are at the root of the zip folder and contain a config file at config/config.ini and try again. https://discord.gg/kXAmGCXBGD https://rvlt.gg/qKgFEAbH + https://x.com/edenemuofficial https://eden-emu.dev https://git.eden-emu.dev/eden-emu diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 4e0ff685bf..2c3c46114d 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1764,6 +1764,7 @@ void GMainWindow::ConnectMenuEvents() { connect_menu(ui->action_Discord, &GMainWindow::OnOpenDiscord); connect_menu(ui->action_Revolt, &GMainWindow::OnOpenRevolt); + connect_menu(ui->action_X, &GMainWindow::OnOpenX); connect_menu(ui->action_Verify_installed_contents, &GMainWindow::OnVerifyInstalledContents); connect_menu(ui->action_Firmware_From_Folder, &GMainWindow::OnInstallFirmware); connect_menu(ui->action_Firmware_From_ZIP, &GMainWindow::OnInstallFirmwareFromZIP); @@ -3750,6 +3751,10 @@ void GMainWindow::OnOpenRevolt() { OpenURL(QUrl(QStringLiteral("https://rvlt.gg/qKgFEAbH"))); } +void GMainWindow::OnOpenX() { + OpenURL(QUrl(QStringLiteral("https://x.com/edenemuofficial"))); +} + void GMainWindow::ToggleFullscreen() { if (!emulation_running) { return; diff --git a/src/yuzu/main.h b/src/yuzu/main.h index c7dd2a45fa..8a34a9f075 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -347,6 +347,7 @@ private slots: void OnOpenFAQ(); void OnOpenDiscord(); void OnOpenRevolt(); + void OnOpenX(); /// Called whenever a user selects a game in the game list widget. void OnGameListLoadFile(QString game_path, u64 program_id); diff --git a/src/yuzu/main.ui b/src/yuzu/main.ui index ac8a2b594e..5f56c9e6d1 100644 --- a/src/yuzu/main.ui +++ b/src/yuzu/main.ui @@ -215,6 +215,7 @@ + @@ -562,6 +563,17 @@ From ZIP + + + &X + + + X (Twitter) + + + + + &Revolt From c97d0c8b5338e61c4ad0eb336393f85d8897867a Mon Sep 17 00:00:00 2001 From: MaranBr Date: Mon, 18 Aug 2025 20:10:34 +0200 Subject: [PATCH 04/12] [desktop] Fix VRAM Usage Mode description (#277) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/277 Co-authored-by: MaranBr Co-committed-by: MaranBr --- src/yuzu/configuration/shared_translation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/yuzu/configuration/shared_translation.cpp b/src/yuzu/configuration/shared_translation.cpp index 6010f5805f..b9884e9442 100644 --- a/src/yuzu/configuration/shared_translation.cpp +++ b/src/yuzu/configuration/shared_translation.cpp @@ -247,7 +247,7 @@ std::unique_ptr InitializeTranslations(QWidget* parent) vram_usage_mode, tr("VRAM Usage Mode:"), tr("Selects whether the emulator should prefer to conserve memory or make maximum usage " - "of available video memory for performance. Has no effect on integrated graphics. " + "of available video memory for performance.\nHas no effect on integrated graphics. " "Aggressive mode may severely impact the performance of other applications such as " "recording software.")); INSERT(Settings, From 77b3f159af532a530d5b7b36b39e1bcc95392670 Mon Sep 17 00:00:00 2001 From: PavelBARABANOV Date: Mon, 18 Aug 2025 20:58:40 +0200 Subject: [PATCH 05/12] updated the translation (#275) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/275 Reviewed-by: Lizzie Reviewed-by: crueter Co-authored-by: PavelBARABANOV Co-committed-by: PavelBARABANOV --- src/android/app/src/main/res/values-ar/strings.xml | 2 ++ src/android/app/src/main/res/values-ckb/strings.xml | 2 ++ src/android/app/src/main/res/values-cs/strings.xml | 2 ++ src/android/app/src/main/res/values-de/strings.xml | 2 ++ src/android/app/src/main/res/values-es/strings.xml | 2 ++ src/android/app/src/main/res/values-fa/strings.xml | 2 ++ src/android/app/src/main/res/values-fr/strings.xml | 2 ++ src/android/app/src/main/res/values-he/strings.xml | 2 ++ src/android/app/src/main/res/values-hu/strings.xml | 2 ++ src/android/app/src/main/res/values-id/strings.xml | 2 ++ src/android/app/src/main/res/values-it/strings.xml | 2 ++ src/android/app/src/main/res/values-ja/strings.xml | 2 ++ src/android/app/src/main/res/values-ko/strings.xml | 2 ++ src/android/app/src/main/res/values-nb/strings.xml | 2 ++ src/android/app/src/main/res/values-pl/strings.xml | 2 ++ src/android/app/src/main/res/values-pt-rBR/strings.xml | 2 ++ src/android/app/src/main/res/values-pt-rPT/strings.xml | 2 ++ src/android/app/src/main/res/values-ru/strings.xml | 2 ++ src/android/app/src/main/res/values-sr/strings.xml | 2 ++ src/android/app/src/main/res/values-uk/strings.xml | 2 ++ src/android/app/src/main/res/values-vi/strings.xml | 2 ++ src/android/app/src/main/res/values-zh-rCN/strings.xml | 2 ++ src/android/app/src/main/res/values-zh-rTW/strings.xml | 2 ++ 23 files changed, 46 insertions(+) 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 16cc577bbc..73c7bdeb9b 100644 --- a/src/android/app/src/main/res/values-ar/strings.xml +++ b/src/android/app/src/main/res/values-ar/strings.xml @@ -108,6 +108,8 @@ (تجريبي) تغيير تخطيط الذاكرة المحاكاة. هذا الإعداد لن يزيد الأداء، ولكن قد يساعد في الألعاب التي تستخدم دقة عالية عبر التعديلات. لا تستخدم على الهواتف التي تحتوي على 8 جيجابايت من الذاكرة العشوائية أو أقل. تظليل العينة يسمح لمُظلل الأجزاء بالتنفيذ لكل عينة في جزء متعدد العينات بدلاً من مرة واحدة لكل جزء. يحسن جودة الرسومات على حساب بعض الأداء. تدعم فقط أجهزة Vulkan 1.1+ هذا الامتداد. + كسر التظليل العيني + شدة تمرير التظليل العيني. القيم الأعلى تحسن الجودة أكثر ولكنها تقلل الأداء بدرجة أكبر. تخصيص دورات المعالج تعيين قيمة مخصصة لدورات المعالج. القيم الأعلى قد تزيد الأداء، ولكن قد تتسبب أيضًا في تجمد اللعبة. يوصى بنطاق 77-21000. دورات 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 4f239cfc17..991a5cf779 100644 --- a/src/android/app/src/main/res/values-ckb/strings.xml +++ b/src/android/app/src/main/res/values-ckb/strings.xml @@ -117,6 +117,8 @@ (تاقیکاری) گۆڕینی ڕێکخستنی بیرگەی شبیهسازیکراو. ئەم ڕێکخستنە کارایی زیاد ناکات، بەڵام لەوانەیە یارمەتی یارییەکان بدات کە بەرزی ڕێزۆلۆشن بەکاردهێنن بە هۆی مۆدەکان. لەسەر مۆبایلەکانی کە 8GB یان کەمتر RAMیان هەیە بەکارمەهێنە. سێبەندی نمونە ڕێگە بە شێدەری پارچە دەدات کە بۆ هەر نمونەیەک لە پارچەی فرە نمونەیدا جێبەجێ بکات لە جیاتی جێبەجێکردنی بۆ هەر پارچەیەک. جۆرایی گرافیک باشتر دەکات بە بەهای هەندێک لە کارایی. تەنها ئامێرەکانی Vulkan 1.1+ پشتگیری ئەم درێژکراوە دەکەن. + پێکهاتەی سێبەرکردنی نموونە + چڕی تێپەڕاندنی سێبەرکردنی نموونە. بەهای زیاتر کوالێتی باشتر دەکات بەڵام کارایی زیاتر کەم دەکاتەوە. تیکی CPU هەڵبژێردراو بەهای هەڵبژێردراوی تیکی CPU دابنێ. بەهای زیاتر دەتوانن کارایی زیاد بکەن، بەڵام لەوانەیە بووەستانی یاریش دروست بکەن. ئامۆژگاری بە نێوان 77-21000 دەکرێت. تیک 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 3ade65f216..727c185843 100644 --- a/src/android/app/src/main/res/values-cs/strings.xml +++ b/src/android/app/src/main/res/values-cs/strings.xml @@ -116,6 +116,8 @@ (EXPERIMENTÁLNÍ) Změna emulovaného rozložení paměti. Toto nastavení nezvyšuje výkon, ale může pomoci hrám využívajícím vysoké rozlišení pomocí modů. Nepoužívejte na telefonech s 8GB RAM nebo méně. Vzorkovací stínování Umožňuje fragment shaderu provádět výpočty pro každý vzorek ve fragmentu s více vzorky namísto jednou pro fragment. Zlepšuje kvalitu grafiky na úkor výkonu. Tuto funkci podporují pouze zařízení s Vulkan 1.1+. + Podíl stínování vzorku + Intenzita průchodu stínování vzorku. Vyšší hodnoty zlepšují kvalitu, ale také výrazněji snižují výkon. Vlastní CPU takty Nastavte vlastní hodnotu CPU taktů. Vyšší hodnoty mohou zvýšit výkon, ale mohou také způsobit zamrznutí hry. Doporučuje se rozsah 77–21000. Takty 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 dd49171005..70f6fe7975 100644 --- a/src/android/app/src/main/res/values-de/strings.xml +++ b/src/android/app/src/main/res/values-de/strings.xml @@ -117,6 +117,8 @@ (EXPERIMENTELL) Ändert das emulierte Speicherlayout. Diese Einstellung erhöht nicht die Leistung, kann aber bei Spielen helfen, die hohe Auflösungen über Mods nutzen. Nicht auf Telefonen mit 8 GB RAM oder weniger verwenden. Sample Shading Ermöglicht dem Fragment-Shader, pro Sample in einem mehrfach gesampleten Fragment ausgeführt zu werden, anstatt einmal pro Fragment. Verbessert die Grafikqualität auf Kosten der Leistung. Nur Vulkan 1.1+-Geräte unterstützen diese Erweiterung. + Sample-Shading-Anteil + Die Intensität des Sample-Shading-Durchgangs. Höhere Werte verbessern die Qualität stärker, beeinträchtigen aber auch die Leistung stärker. Benutzerdefinierte CPU-Ticks Legen Sie einen benutzerdefinierten Wert für CPU-Ticks fest. Höhere Werte können die Leistung steigern, aber auch zum Einfrieren des Spiels führen. Ein Bereich von 77–21000 wird empfohlen. Ticks 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 47b469c875..051ee665eb 100644 --- a/src/android/app/src/main/res/values-es/strings.xml +++ b/src/android/app/src/main/res/values-es/strings.xml @@ -117,6 +117,8 @@ (EXPERIMENTAL) Cambia la distribución de memoria emulada. Esta configuración no aumenta el rendimiento, pero puede ayudar en juegos que utilizan altas resoluciones mediante mods. No usar en teléfonos con 8GB de RAM o menos. Muestreo de sombreado Permite que el fragment shader se ejecute por muestra en un fragmento multisample en lugar de una vez por fragmento. Mejora la calidad gráfica a costa de algo de rendimiento. Solo los dispositivos Vulkan 1.1+ admiten esta extensión. + Fracción de sombreado de muestra + La intensidad del paso de sombreado de muestra. Valores más altos mejoran más la calidad pero también reducen en mayor medida el rendimiento. Ticks de CPU personalizados Establece un valor personalizado de ticks de CPU. Valores más altos pueden aumentar el rendimiento, pero también pueden hacer que el juego se congele. Se recomienda un rango de 77–21000. Ticks 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 7d99d42e86..b3c745fe04 100644 --- a/src/android/app/src/main/res/values-fa/strings.xml +++ b/src/android/app/src/main/res/values-fa/strings.xml @@ -117,6 +117,8 @@ (آزمایشی) چیدمان حافظه شبیه‌سازی شده را تغییر می‌دهد. این تنظیم عملکرد را افزایش نمی‌دهد، اما ممکن است به بازی‌هایی که از رزولوشن بالا با استفاده از مادها استفاده می‌کنند کمک کند. در تلفن‌های با 8 گیگابایت رم یا کمتر استفاده نشود. سایه‌زنی نمونه اجازه می‌دهد شیدر قطعه در هر نمونه از یک قطعه چندنمونه‌ای اجرا شود به جای یک بار برای هر قطعه. کیفیت گرافیک را به بهای کاهش عملکرد بهبود می‌بخشد. فقط دستگاه‌های Vulkan 1.1+ از این افزونه پشتیبانی می‌کنند. + کسر سایه‌زنی نمونه + شدت مرحله سایه‌زنی نمونه. مقادیر بالاتر کیفیت را بیشتر بهبود می‌بخشد اما عملکرد را نیز به میزان بیشتری کاهش می‌دهد. تیک‌های CPU سفارشی مقدار سفارشی برای تیک‌های CPU تنظیم کنید. مقادیر بالاتر ممکن است عملکرد را افزایش دهند، اما ممکن است باعث یخ زدن بازی شوند. محدوده 77-21000 توصیه می‌شود. تیک‌ها 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 ec3d1cb2c6..bd4f2eb13a 100644 --- a/src/android/app/src/main/res/values-fr/strings.xml +++ b/src/android/app/src/main/res/values-fr/strings.xml @@ -117,6 +117,8 @@ (EXPÉRIMENTAL) Change la disposition de la mémoire émulée. Ce paramètre n\'augmente pas les performances, mais peut aider les jeux utilisant des résolutions élevées via des mods. Ne pas utiliser sur les téléphones avec 8 Go de RAM ou moins. Échantillonnage de shading Permet au fragment shader de s\'exécuter par échantillon dans un fragment multi-échantillonné au lieu d\'une fois par fragment. Améliore la qualité graphique au détriment des performances. Seuls les appareils Vulkan 1.1+ prennent en charge cette extension. + Fraction d\'ombrage d\'échantillon + L\'intensité de la passe d\'ombrage d\'échantillon. Des valeurs plus élevées améliorent davantage la qualité mais réduisent aussi plus fortement les performances. Ticks CPU personnalisés Définissez une valeur personnalisée de ticks CPU. Des valeurs plus élevées peuvent améliorer les performances, mais peuvent aussi provoquer des gels du jeu. Une plage de 77 à 21000 est recommandée. Ticks 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 43b15d968b..8131ddae1b 100644 --- a/src/android/app/src/main/res/values-he/strings.xml +++ b/src/android/app/src/main/res/values-he/strings.xml @@ -118,6 +118,8 @@ (ניסיוני) שנה את מבנה הזיכרון המדומה. הגדרה זו לא תגדיל את הביצועים, אך עשויה לעזור במשחקים המשתמשים ברזולוציות גבוהות באמצעות מודים. אל תשתמש בטלפונים עם 8GB זיכרון RAM או פחות. דגימת צל מאפשר לשברי הצללה לרוץ לכל דגימה בקטע רב-דגימות במקום פעם אחת לקטע. משפר את איכות הגרפיקה במחיר של ביצועים. רק מכשירי Vulkan 1.1+ תומכים בהרחבה זו. + שבר הצללה לדוגמה + עוצמת מעבר ההצללה לדוגמה. ערכים גבוהים יותר משפרים את האיכות יותר אך גם מפחיתים את הביצועים במידה רבה יותר. טיקי CPU מותאמים הגדר ערך מותאם לטיקי CPU. ערכים גבוהים יותר עשויים לשפר ביצועים, אך גם עלולים לגרום להקפאת המשחק. מומלץ טווח של 77-21000. טיקים 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 9dbdf5434b..ab64a7afb6 100644 --- a/src/android/app/src/main/res/values-hu/strings.xml +++ b/src/android/app/src/main/res/values-hu/strings.xml @@ -117,6 +117,8 @@ (KÍSÉRLETI) Megváltoztatja az emulált memórialayoutot. Ez a beállítás nem növeli a teljesítményt, de segíthet a magas felbontást használó játékokban modok segítségével. Ne használd 8GB RAM vagy kevesebb rendelkező telefonokon. Mintavételezés árnyékolás Lehetővé teszi, hogy a fragment shader mintánként fusson egy többmintás fragmentben a fragmentenkénti futtatás helyett. Javítja a grafikai minőséget a teljesítmény rovására. Csak Vulkan 1.1+ eszközök támogatják ezt a kiterjesztést. + Mintavételezés árnyékolási hányad + A mintavételezés árnyékolási lépés intenzitása. A magasabb értékek jobb minőséget eredményeznek, de nagyobb mértékben csökkentik a teljesítményt. Egyéni CPU tick-ek Egyéni CPU tick érték beállítása. A magasabb értékek növelhetik a teljesítményt, de a játék befagyását is okozhatják. 77–21000 közötti tartomány ajánlott. Tick-ek 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 6ea922ee0e..4972c9f3d7 100644 --- a/src/android/app/src/main/res/values-id/strings.xml +++ b/src/android/app/src/main/res/values-id/strings.xml @@ -117,6 +117,8 @@ (EKSPERIMENTAL) Ubah tata letak memori emulasi. Pengaturan ini tidak meningkatkan kinerja, tetapi dapat membantu game yang menggunakan resolusi tinggi melalui mod. Jangan gunakan pada ponsel dengan RAM 8GB atau kurang. Pencahayaan Sampel Memungkinkan fragment shader dieksekusi per sampel dalam fragmen multisampel alih-alih sekali per fragmen. Meningkatkan kualitas grafis dengan mengorbankan kinerja. Hanya perangkat Vulkan 1.1+ yang mendukung ekstensi ini. + Fraksi Pencahayaan Sampel + Intensitas proses pencahayaan sampel. Nilai lebih tinggi meningkatkan kualitas lebih baik tetapi juga mengurangi performa lebih besar. Ticks CPU Kustom Atur nilai ticks CPU kustom. Nilai yang lebih tinggi dapat meningkatkan kinerja, tetapi juga dapat menyebabkan game membeku. Kisaran 77–21000 direkomendasikan. Ticks 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 cd7bcc896e..cf52792f4b 100644 --- a/src/android/app/src/main/res/values-it/strings.xml +++ b/src/android/app/src/main/res/values-it/strings.xml @@ -117,6 +117,8 @@ (SPERIMENTALE) Cambia il layout della memoria emulata. Questa impostazione non aumenta le prestazioni, ma può aiutare nei giochi che utilizzano alte risoluzioni tramite mod. Non usare su telefoni con 8GB di RAM o meno. Shading campione Permette al fragment shader di eseguire per campione in un frammento multi-campione invece che una volta per frammento. Migliora la qualità grafica a scapito delle prestazioni. Solo i dispositivi Vulkan 1.1+ supportano questa estensione. + Frazione di ombreggiatura campione + L\'intensità della passata di ombreggiatura campione. Valori più alti migliorano la qualità ma riducono maggiormente le prestazioni. Tick CPU personalizzati Imposta un valore personalizzato per i tick della CPU. Valori più alti possono aumentare le prestazioni, ma possono anche causare il blocco del gioco. Si consiglia un intervallo di 77–21000. Tick 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 3bb126d542..d803d3c6f2 100644 --- a/src/android/app/src/main/res/values-ja/strings.xml +++ b/src/android/app/src/main/res/values-ja/strings.xml @@ -117,6 +117,8 @@ (実験的) エミュレートされたメモリレイアウトを変更します。この設定はパフォーマンスを向上させませんが、modを介して高解像度を利用するゲームに役立つ場合があります。8GB以下のRAMを搭載した電話では使用しないでください。 サンプルシェーディング マルチサンプルフラグメントでフラグメントシェーダーをフラグメントごとではなくサンプルごとに実行できるようにします。パフォーマンスを犠牲にしてグラフィック品質を向上させます。Vulkan 1.1+デバイスのみがこの拡張機能をサポートしています。 + サンプルシェーディング率 + サンプルシェーディング処理の強度。高い値ほど品質は向上しますが、パフォーマンスも大きく低下します。 カスタムCPUティック CPUティックのカスタム値を設定します。高い値はパフォーマンスを向上させる可能性がありますが、ゲームがフリーズする可能性もあります。77〜21000の範囲が推奨されます。 ティック 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 fb952860c5..c6010e76fe 100644 --- a/src/android/app/src/main/res/values-ko/strings.xml +++ b/src/android/app/src/main/res/values-ko/strings.xml @@ -117,6 +117,8 @@ (실험적) 에뮬레이트된 메모리 레이아웃을 변경합니다. 이 설정은 성능을 높이지 않지만 모드를 통해 고해상도를 사용하는 게임에 도움이 될 수 있습니다. 8GB 이하 RAM의 휴대폰에서는 사용하지 마십시오. 샘플 쉐이딩 멀티샘플 프래그먼트에서 프래그먼트 쉐이더가 프래그먼트당 한 번이 아니라 샘플당 실행되도록 합니다. 성능을 희생하여 그래픽 품질을 향상시킵니다. Vulkan 1.1+ 장치만 이 확장을 지원합니다. + 샘플 쉐이딩 비율 + 샘플 쉐이딩 패스의 강도. 값이 높을수록 품질이 더 향상되지만 성능도 더 크게 저하됩니다. 사용자 정의 CPU 틱 CPU 틱의 사용자 정의 값을 설정합니다. 높은 값은 성능을 향상시킬 수 있지만 게임이 멈출 수도 있습니다. 77~21000 범위를 권장합니다. 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 4d13a5308f..79418507b0 100644 --- a/src/android/app/src/main/res/values-nb/strings.xml +++ b/src/android/app/src/main/res/values-nb/strings.xml @@ -117,6 +117,8 @@ (EKSPERIMENTELL) Endre det emulerte minneoppsettet. Denne innstillingen øker ikke ytelsen, men kan hjelpe spill som bruker høy oppløsning via mods. Ikke bruk på telefoner med 8GB RAM eller mindre. Prøvegjengivelse Lar fragment-shaderen kjøres per prøve i et flerprøvefragment i stedet for en gang per fragment. Forbedrer grafikkvaliteten på bekostning av ytelse. Bare Vulkan 1.1+-enheter støtter denne utvidelsen. + Prøveskyggebrøk + Intensiteten til prøveskyggepasseringen. Høyere verdier forbedrer kvaliteten mer, men reduserer også ytelsen i større grad. Egendefinerte CPU-takter Angi en egendefinert verdi for CPU-takter. Høyere verdier kan øke ytelsen, men kan også føre til at spret fryser. Et område på 77–21000 anbefales. Takter 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 d102be11ce..fc54134ee5 100644 --- a/src/android/app/src/main/res/values-pl/strings.xml +++ b/src/android/app/src/main/res/values-pl/strings.xml @@ -117,6 +117,8 @@ (EKSPERYMENTALNY) Zmienia emulowany układ pamięci. To ustawienie nie zwiększa wydajności, ale może pomóc w grach wykorzystujących wysokie rozdzielczości poprzez mody. Nie używaj na telefonach z 8GB RAM lub mniej. Cieniowanie próbek Pozwala shaderowi fragmentów wykonywać się na próbkę w fragmencie wielopróbkowym zamiast raz na fragment. Poprawia jakość grafiki kosztem wydajności. Tylko urządzenia Vulkan 1.1+ obsługują to rozszerzenie. + Ułamek cieniowania próbki + Intensywność przebiegu cieniowania próbki. Wyższe wartości poprawiają jakość, ale także w większym stopniu zmniejszają wydajność. Niestandardowe takty CPU Ustaw niestandardową wartość taktów CPU. Wyższe wartości mogą zwiększyć wydajność, ale mogą też powodować zawieszanie się gry. Zalecany zakres to 77–21000. Takty 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 e3ffc09033..b6d2c8a5bc 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 @@ -117,6 +117,8 @@ (EXPERIMENTAL) Altera o layout de memória emulado. Esta configuração não aumenta o desempenho, mas pode ajudar em jogos que utilizam altas resoluções via mods. Não use em telefones com 8GB de RAM ou menos. Amostragem de sombreamento Permite que o fragment shader seja executado por amostra em um fragmento multi-amostrado em vez de uma vez por fragmento. Melhora a qualidade gráfica às custas de desempenho. Apenas dispositivos Vulkan 1.1+ suportam esta extensão. + Fração de Sombreamento de Amostra + A intensidade da passagem de sombreamento de amostra. Valores mais altos melhoram mais a qualidade, mas também reduzem o desempenho em maior medida. Ticks de CPU personalizados Defina um valor personalizado para ticks de CPU. Valores mais altos podem aumentar o desempenho, mas também podem causar travamentos no jogo. Um intervalo de 77–21000 é recomendado. Ticks 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 93f5c5c79f..5704fbb91c 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 @@ -117,6 +117,8 @@ (EXPERIMENTAL) Altera a disposição de memória emulada. Esta definição não aumenta o desempenho, mas pode ajudar em jogos que utilizam altas resoluções via mods. Não use em telemóveis com 8GB de RAM ou menos. Amostragem de sombreamento Permite que o fragment shader seja executado por amostra num fragmento multi-amostrado em vez de uma vez por fragmento. Melhora a qualidade gráfica à custa de desempenho. Apenas dispositivos Vulkan 1.1+ suportam esta extensão. + Fração de Sombreamento de Amostra + A intensidade da passagem de sombreamento de amostra. Valores mais elevados melhoram a qualidade, mas também reduzem o desempenho numa maior medida. Ticks de CPU personalizados Defina um valor personalizado para ticks de CPU. Valores mais altos podem aumentar o desempenho, mas também podem causar bloqueios no jogo. Um intervalo de 77–21000 é recomendado. Ticks 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 d9d39b2b41..b2a7cdc561 100644 --- a/src/android/app/src/main/res/values-ru/strings.xml +++ b/src/android/app/src/main/res/values-ru/strings.xml @@ -117,6 +117,8 @@ (ЭКСПЕРИМЕНТАЛЬНО) Изменяет эмулируемое распределение памяти. Эта настройка не увеличивает производительность, но может помочь в играх, использующих высокие разрешения через моды. Не используйте на телефонах с 8 ГБ ОЗУ или меньше. Сэмпловый шейдинг Позволяет шейдеру фрагментов выполняться на каждый сэмпл в мультисэмпловом фрагменте вместо одного раза на фрагмент. Улучшает качество графики ценой производительности. Только устройства с Vulkan 1.1+ поддерживают это расширение. + Доля сэмплового затенения + Интенсивность прохода сэмплового затенения. Более высокие значения улучшают качество, но и сильнее снижают производительность. Пользовательские такты ЦП Установите пользовательское значение тактов ЦП. Более высокие значения могут увеличить производительность, но также могут вызвать зависание игры. Рекомендуется диапазон 77–21000. Такты 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 30c5549af2..65a414db20 100644 --- a/src/android/app/src/main/res/values-sr/strings.xml +++ b/src/android/app/src/main/res/values-sr/strings.xml @@ -110,6 +110,8 @@ Семпловање сенчења Омогућава фрагмент шејдеру да се извршава по узорку у вишеузорачном фрагменту уместо једном по фрагменту. Побољшава квалитет графике на рачун перформанси. Само Vulkan 1.1+ уређаји подржавају ову екстензију. + Удео сенчења узорка + Интензитет проласка сенчења узорка. Веће вредности побољшавају квалитет више, али такође више смањују перформансе. Прилагођени CPU тактови Поставите прилагођену вредност CPU тактова. Веће вредности могу повећати перформансе, али могу изазвати залеђивање игре. Препоручује се опсег 77–21000. Тактови 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 dcaaf7cbd6..dccd294a2f 100644 --- a/src/android/app/src/main/res/values-uk/strings.xml +++ b/src/android/app/src/main/res/values-uk/strings.xml @@ -117,6 +117,8 @@ (ЕКСПЕРИМЕНТАЛЬНО) Змінює емульований розподіл пам\'яті. Це налаштування не підвищує продуктивність, але може допомогти в іграх, які використовують високу роздільну здатність через моди. Не використовуйте на телефонах з 8 ГБ ОЗУ або менше. Семплове затінення Дозволяє шейдеру фрагментів виконуватися на кожен семпл у багатосемпловому фрагменті замість одного разу на фрагмент. Покращує якість графіки за рахунок продуктивності. Лише пристрої з Vulkan 1.1+ підтримують це розширення. + Частка затінення зразка + Інтенсивність проходу затінення зразка. Вищі значення покращують якість, але й сильніше знижують продуктивність. Користувацькі такти CPU Встановіть користувацьке значення тактів CPU. Вищі значення можуть покращити продуктивність, але також можуть спричинити зависання гри. Рекомендується діапазон 77–21000. Такти 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 d28f50f377..d70c871daf 100644 --- a/src/android/app/src/main/res/values-vi/strings.xml +++ b/src/android/app/src/main/res/values-vi/strings.xml @@ -117,6 +117,8 @@ (THỬ NGHIỆM) Thay đổi bố cục bộ nhớ mô phỏng. Cài đặt này không tăng hiệu suất, nhưng có thể giúp ích cho các trò chơi sử dụng độ phân giải cao thông qua mod. Không sử dụng trên điện thoại có 8GB RAM trở xuống. Tô bóng mẫu Cho phép fragment shader thực thi trên mỗi mẫu trong một fragment đa mẫu thay vì một lần mỗi fragment. Cải thiện chất lượng đồ họa với chi phí hiệu suất. Chỉ thiết bị Vulkan 1.1+ hỗ trợ tiện ích mở rộng này. + Phần trăm tô bóng mẫu + Cường độ của bước tô bóng mẫu. Giá trị cao hơn cải thiện chất lượng tốt hơn nhưng cũng giảm hiệu suất nhiều hơn. Tích CPU tùy chỉnh Đặt giá trị tích CPU tùy chỉnh. Giá trị cao hơn có thể tăng hiệu suất, nhưng cũng có thể khiến trò chơi bị đơ. Phạm vi 77–21000 được khuyến nghị. Tích 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 a6cfef8754..0d84065577 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 @@ -116,6 +116,8 @@ (实验性) 更改模拟内存布局。此设置不会提高性能,但可能有助于通过模组使用高分辨率的游戏。不要在 RAM 为 8GB 或更少的手机上使用。 采样着色 允许片段着色器在多采样片段中每个样本执行一次,而不是每个片段执行一次。以提高性能为代价改善图形质量。仅Vulkan 1.1+设备支持此扩展。 + 采样着色比例 + 采样着色处理的强度。值越高,质量改善越多,但性能降低也越明显。 自定义CPU时钟 设置自定义的CPU时钟值。更高的值可能提高性能,但也可能导致游戏卡顿。建议范围为77-21000。 时钟 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 ae7050300a..d79514a307 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 @@ -109,6 +109,8 @@ (實驗性) 更改模擬記憶體佈局。此設定不會提高效能,但可能有助於通過模組使用高解析度的遊戲。不要在 RAM 為 8GB 或更少的手機上使用。 取樣著色 允許片段著色器在多取樣片段中每個樣本執行一次,而不是每個片段執行一次。以提高效能為代價改善圖形品質。僅Vulkan 1.1+裝置支援此擴充功能。 + 採樣著色比例 + 採樣著色處理的強度。數值越高,品質改善越多,但效能降低也越明顯。 自訂CPU時脈 設定自訂的CPU時脈值。更高的值可能提高效能,但也可能導致遊戲卡頓。建議範圍為77-21000。 時脈 From 12f5a96f01214a94fc07a6120c940004c4e36e40 Mon Sep 17 00:00:00 2001 From: wildcard Date: Tue, 19 Aug 2025 02:28:17 +0200 Subject: [PATCH 06/12] [Textures] Normalize 1D TICs that use layers to 1DArray; (#274) Some TIC entries are tagged Texture1D but actually use array layers so previously it was marked as simple 1D and hence the assert, this fixes the said issue(Depth > 1 or baseLayer != 0). Games fixed- God Eater 3 Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/274 Reviewed-by: Shinmegumi Co-authored-by: wildcard Co-committed-by: wildcard --- src/video_core/texture_cache/image_info.cpp | 130 ++++++++++-------- .../texture_cache/image_view_info.cpp | 106 +++++++------- 2 files changed, 129 insertions(+), 107 deletions(-) diff --git a/src/video_core/texture_cache/image_info.cpp b/src/video_core/texture_cache/image_info.cpp index 135dd64de3..df01b4ed8a 100644 --- a/src/video_core/texture_cache/image_info.cpp +++ b/src/video_core/texture_cache/image_info.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -48,68 +51,73 @@ ImageInfo::ImageInfo(const TICEntry& config) noexcept { config.texture_type != TextureType::Texture2DNoMipmap) { ASSERT(!config.IsPitchLinear()); } - switch (config.texture_type) { - case TextureType::Texture1D: - ASSERT(config.BaseLayer() == 0); - type = ImageType::e1D; - size.width = config.Width(); - resources.layers = 1; - break; - case TextureType::Texture1DArray: - UNIMPLEMENTED_IF(config.BaseLayer() != 0); - type = ImageType::e1D; - size.width = config.Width(); - resources.layers = config.Depth(); - break; - case TextureType::Texture2D: - case TextureType::Texture2DNoMipmap: - ASSERT(config.Depth() == 1); - type = config.IsPitchLinear() ? ImageType::Linear : ImageType::e2D; - rescaleable = !config.IsPitchLinear(); - size.width = config.Width(); - size.height = config.Height(); - resources.layers = config.BaseLayer() + 1; - break; - case TextureType::Texture2DArray: - type = ImageType::e2D; - rescaleable = true; - size.width = config.Width(); - size.height = config.Height(); - resources.layers = config.BaseLayer() + config.Depth(); - break; - case TextureType::TextureCubemap: - ASSERT(config.Depth() == 1); - type = ImageType::e2D; - size.width = config.Width(); - size.height = config.Height(); - resources.layers = config.BaseLayer() + 6; - break; - case TextureType::TextureCubeArray: - UNIMPLEMENTED_IF(config.load_store_hint != 0); - type = ImageType::e2D; - size.width = config.Width(); - size.height = config.Height(); - resources.layers = config.BaseLayer() + config.Depth() * 6; - break; - case TextureType::Texture3D: - ASSERT(config.BaseLayer() == 0); - type = ImageType::e3D; - size.width = config.Width(); - size.height = config.Height(); - size.depth = config.Depth(); - resources.layers = 1; - break; - case TextureType::Texture1DBuffer: - type = ImageType::Buffer; - size.width = config.Width(); - resources.layers = 1; - break; - default: - ASSERT_MSG(false, "Invalid texture_type={}", static_cast(config.texture_type.Value())); - break; + //Normalize so that the 1D that actually uses layers is treated as 1DArray + TextureType tex_type = config.texture_type; + if (tex_type == TextureType::Texture1D && + (config.Depth() > 1 || config.BaseLayer() != 0)) { + tex_type = TextureType::Texture1DArray; + } + switch (tex_type) { + case TextureType::Texture1D: + ASSERT(config.BaseLayer() == 0); + type = ImageType::e1D; + size.width = config.Width(); + resources.layers = 1; + break; + case TextureType::Texture1DArray: + type = ImageType::e1D; + size.width = config.Width(); + resources.layers = config.BaseLayer() + config.Depth(); + break; + case TextureType::Texture2D: + case TextureType::Texture2DNoMipmap: + ASSERT(config.Depth() == 1); + type = config.IsPitchLinear() ? ImageType::Linear : ImageType::e2D; + rescaleable = !config.IsPitchLinear(); + size.width = config.Width(); + size.height = config.Height(); + resources.layers = config.BaseLayer() + 1; + break; + case TextureType::Texture2DArray: + type = ImageType::e2D; + rescaleable = true; + size.width = config.Width(); + size.height = config.Height(); + resources.layers = config.BaseLayer() + config.Depth(); + break; + case TextureType::TextureCubemap: + ASSERT(config.Depth() == 1); + type = ImageType::e2D; + size.width = config.Width(); + size.height = config.Height(); + resources.layers = config.BaseLayer() + 6; + break; + case TextureType::TextureCubeArray: + UNIMPLEMENTED_IF(config.load_store_hint != 0); + type = ImageType::e2D; + size.width = config.Width(); + size.height = config.Height(); + resources.layers = config.BaseLayer() + config.Depth() * 6; + break; + case TextureType::Texture3D: + ASSERT(config.BaseLayer() == 0); + type = ImageType::e3D; + size.width = config.Width(); + size.height = config.Height(); + size.depth = config.Depth(); + resources.layers = 1; + break; + case TextureType::Texture1DBuffer: + type = ImageType::Buffer; + size.width = config.Width(); + resources.layers = 1; + break; + default: + ASSERT_MSG(false, "Invalid texture_type={}", static_cast(config.texture_type.Value())); + break; } if (num_samples > 1) { - size.width *= NumSamplesX(config.msaa_mode); + size.width *= NumSamplesX(config.msaa_mode); size.height *= NumSamplesY(config.msaa_mode); } if (type != ImageType::Linear) { @@ -118,7 +126,7 @@ ImageInfo::ImageInfo(const TICEntry& config) noexcept { maybe_unaligned_layer_stride = CalculateLayerSize(*this); rescaleable &= (block.depth == 0) && resources.levels == 1; rescaleable &= size.height > RescaleHeightThreshold || - GetFormatType(format) != SurfaceType::ColorTexture; + GetFormatType(format) != SurfaceType::ColorTexture; downscaleable = size.height > DownscaleHeightThreshold; } } diff --git a/src/video_core/texture_cache/image_view_info.cpp b/src/video_core/texture_cache/image_view_info.cpp index f478851473..0766a3b79a 100644 --- a/src/video_core/texture_cache/image_view_info.cpp +++ b/src/video_core/texture_cache/image_view_info.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -27,53 +30,64 @@ constexpr u8 RENDER_TARGET_SWIZZLE = std::numeric_limits::max(); } // Anonymous namespace ImageViewInfo::ImageViewInfo(const TICEntry& config, s32 base_layer) noexcept - : format{PixelFormatFromTIC(config)}, x_source{CastSwizzle(config.x_source)}, - y_source{CastSwizzle(config.y_source)}, z_source{CastSwizzle(config.z_source)}, - w_source{CastSwizzle(config.w_source)} { - range.base = SubresourceBase{ - .level = static_cast(config.res_min_mip_level), - .layer = base_layer, - }; - range.extent.levels = config.res_max_mip_level - config.res_min_mip_level + 1; + : format{PixelFormatFromTIC(config)}, + x_source{CastSwizzle(config.x_source)}, + y_source{CastSwizzle(config.y_source)}, + z_source{CastSwizzle(config.z_source)}, + w_source{CastSwizzle(config.w_source)} { + range.base = SubresourceBase{ + .level = static_cast(config.res_min_mip_level), + .layer = base_layer, + }; + range.extent.levels = config.res_max_mip_level - config.res_min_mip_level + 1; + TextureType tex_type = config.texture_type; + //normalize 1D texture with many layers + if (tex_type == TextureType::Texture1D && + (config.Depth() > 1 || base_layer != 0)) { + tex_type = TextureType::Texture1DArray; + } + switch (tex_type) { + case TextureType::Texture1D: + ASSERT(config.Height() == 1); + ASSERT(config.Depth() == 1); + type = ImageViewType::e1D; + break; + case TextureType::Texture1DArray: + ASSERT(config.Height() == 1); + type = ImageViewType::e1DArray; + range.extent.layers = config.Depth(); + break; + case TextureType::Texture2D: + case TextureType::Texture2DNoMipmap: + ASSERT(config.Depth() == 1); + type = config.normalized_coords ? ImageViewType::e2D : ImageViewType::Rect; + break; + case TextureType::Texture2DArray: + type = ImageViewType::e2DArray; + range.extent.layers = config.Depth(); + break; + case TextureType::Texture3D: + type = ImageViewType::e3D; + break; + case TextureType::TextureCubemap: + ASSERT(config.Depth() == 1); + type = ImageViewType::Cube; + range.extent.layers = 6; + break; - switch (config.texture_type) { - case TextureType::Texture1D: - ASSERT(config.Height() == 1); - ASSERT(config.Depth() == 1); - type = ImageViewType::e1D; - break; - case TextureType::Texture2D: - case TextureType::Texture2DNoMipmap: - ASSERT(config.Depth() == 1); - type = config.normalized_coords ? ImageViewType::e2D : ImageViewType::Rect; - break; - case TextureType::Texture3D: - type = ImageViewType::e3D; - break; - case TextureType::TextureCubemap: - ASSERT(config.Depth() == 1); - type = ImageViewType::Cube; - range.extent.layers = 6; - break; - case TextureType::Texture1DArray: - type = ImageViewType::e1DArray; - range.extent.layers = config.Depth(); - break; - case TextureType::Texture2DArray: - type = ImageViewType::e2DArray; - range.extent.layers = config.Depth(); - break; - case TextureType::Texture1DBuffer: - type = ImageViewType::Buffer; - break; - case TextureType::TextureCubeArray: - type = ImageViewType::CubeArray; - range.extent.layers = config.Depth() * 6; - break; - default: - ASSERT_MSG(false, "Invalid texture_type={}", static_cast(config.texture_type.Value())); - break; - } + case TextureType::TextureCubeArray: + type = ImageViewType::CubeArray; + range.extent.layers = config.Depth() * 6; + break; + + case TextureType::Texture1DBuffer: + type = ImageViewType::Buffer; + break; + + default: + ASSERT_MSG(false, "Invalid texture_type={}", static_cast(config.texture_type.Value())); + break; + } } ImageViewInfo::ImageViewInfo(ImageViewType type_, PixelFormat format_, From 1307f3510d99d8f9279a4f064e5d54362586aab5 Mon Sep 17 00:00:00 2001 From: MaranBr Date: Tue, 19 Aug 2025 17:39:28 +0200 Subject: [PATCH 07/12] [externals] Fix usage of USE_CCACHE for Sirit (#282) This Fixes usage of USE_CCACHE for Sirit. Credit: DraVee Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/282 Reviewed-by: crueter Co-authored-by: MaranBr Co-committed-by: MaranBr --- externals/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 41b973c950..314f414e2e 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -155,6 +155,13 @@ AddPackage( "SIRIT_USE_SYSTEM_SPIRV_HEADERS ON" ) +if(MSVC AND USE_CCACHE AND TARGET sirit) + get_target_property(_opts sirit COMPILE_OPTIONS) + list(FILTER _opts EXCLUDE REGEX "/Zi") + list(APPEND _opts "/Z7") + set_target_properties(sirit PROPERTIES COMPILE_OPTIONS "${_opts}") +endif() + # httplib if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER) AddPackage( From 518003131363ae40377110eb53c96b16807437d5 Mon Sep 17 00:00:00 2001 From: crueter Date: Tue, 19 Aug 2025 21:29:36 +0200 Subject: [PATCH 08/12] [ci, cmake] openssl updates, fix drpc and ci scripts (#283) - Add bundled OpenSSL libs for Solaris, FreeBSD, Linux - Fix CPMUtil default on msvc - Update CI scripts (thanks dravee) - PLATFORM_ helpers for non-ANDROID UNIX Co-authored-by: Caio Oliveira Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/283 Reviewed-by: Lizzie Co-authored-by: crueter Co-committed-by: crueter --- .ci/windows/install-vulkan-sdk.ps1 | 4 +- .ci/windows/package.sh | 15 +- CMakeLists.txt | 219 +++++++++++++++--- CMakeModules/CPMUtil.cmake | 8 +- src/core/CMakeLists.txt | 6 +- .../src/dynarmic/frontend/A32/a32_types.h | 2 +- src/network/CMakeLists.txt | 2 +- src/web_service/CMakeLists.txt | 5 +- src/yuzu/CMakeLists.txt | 4 +- src/yuzu_cmd/CMakeLists.txt | 2 +- 10 files changed, 218 insertions(+), 49 deletions(-) diff --git a/.ci/windows/install-vulkan-sdk.ps1 b/.ci/windows/install-vulkan-sdk.ps1 index ca8c64b5cd..1d4e1b20bf 100755 --- a/.ci/windows/install-vulkan-sdk.ps1 +++ b/.ci/windows/install-vulkan-sdk.ps1 @@ -4,7 +4,7 @@ $ErrorActionPreference = "Stop" $VulkanSDKVer = "1.4.321.1" -$ExeFile = "VulkanSDK-$VulkanSDKVer-Installer.exe" +$ExeFile = "vulkansdk-windows-X64-$VulkanSDKVer.exe" $Uri = "https://sdk.lunarg.com/sdk/download/$VulkanSDKVer/windows/$ExeFile" $Destination = "./$ExeFile" @@ -30,4 +30,4 @@ echo "Finished installing Vulkan SDK $VulkanSDKVer" if ("$env:GITHUB_ACTIONS" -eq "true") { echo "VULKAN_SDK=$VULKAN_SDK" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append echo "$VULKAN_SDK/Bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append -} +} \ No newline at end of file diff --git a/.ci/windows/package.sh b/.ci/windows/package.sh index 090697882f..2d126dc5be 100644 --- a/.ci/windows/package.sh +++ b/.ci/windows/package.sh @@ -3,11 +3,16 @@ GITREV=$(git show -s --format='%h') ZIP_NAME="Eden-Windows-${ARCH}-${GITDATE}-${GITREV}.zip" -mkdir -p artifacts -mkdir -p pack +ARTIFACTS_DIR="artifacts" +PKG_DIR="build/pkg" -cp -r build/pkg/* pack +mkdir -p "$ARTIFACTS_DIR" -cp LICENSE* README* pack/ +TMP_DIR=$(mktemp -d) -7z a -tzip artifacts/$ZIP_NAME pack/* \ No newline at end of file +cp -r "$PKG_DIR"/* "$TMP_DIR"/ +cp LICENSE* README* "$TMP_DIR"/ + +7z a -tzip "$ARTIFACTS_DIR/$ZIP_NAME" "$TMP_DIR"/* + +rm -rf "$TMP_DIR" \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index abaa90575c..0ca88e3c65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,9 +5,19 @@ cmake_minimum_required(VERSION 3.22) project(yuzu) +if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") + set(PLATFORM_SUN ON) +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + set(PLATFORM_FREEBSD ON) +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD") + set(PLATFORM_OPENBSD ON) +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + set(PLATFORM_LINUX ON) +endif() + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules") -if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (PLATFORM_SUN) # Terrific Solaris pkg shenanigans list(APPEND CMAKE_PREFIX_PATH "/usr/lib/qt/6.6/lib/amd64/cmake") list(APPEND CMAKE_MODULE_PATH "/usr/lib/qt/6.6/lib/amd64/cmake") @@ -24,7 +34,7 @@ if (MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-") endif() -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib") endif() @@ -40,7 +50,7 @@ endif() option(ENABLE_SDL2 "Enable the SDL2 frontend" ON) CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" ON "ENABLE_SDL2;MSVC" OFF) -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" OFF "ENABLE_SDL2;NOT MSVC" OFF) else() CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT MSVC" OFF) @@ -62,25 +72,25 @@ option(YUZU_USE_CPM "Use CPM to fetch Eden dependencies if needed" ON) option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF) -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" OFF) else() option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ON) endif() -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" OFF) else() option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON) endif() -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" OFF) else() option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ON) endif() -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" OFF) else() option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ON) @@ -100,7 +110,7 @@ option(ENABLE_MICROPROFILE "Enables microprofile capabilities" OFF) option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}") -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF) else() option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON) @@ -110,6 +120,8 @@ option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" option(FORCE_DOWNLOAD_WIN_BUNDLES "Forcefully download bundled Windows dependencies (useful for CI)" OFF) +option(FORCE_DOWNLOAD_OPENSSL "Forcefully download all bundled OpenSSL builds (useful for CI)" OFF) + CMAKE_DEPENDENT_OPTION(YUZU_ROOM "Enable dedicated room functionality" ON "NOT ANDROID" OFF) CMAKE_DEPENDENT_OPTION(YUZU_ROOM_STANDALONE "Enable standalone room executable" ON "YUZU_ROOM" OFF) @@ -118,7 +130,7 @@ CMAKE_DEPENDENT_OPTION(YUZU_CMD "Compile the eden-cli executable" ON "NOT ANDROI CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR LINUX" OFF) -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_CHECK_SUBMODULES "Check if submodules are present" OFF) else() option(YUZU_CHECK_SUBMODULES "Check if submodules are present" ON) @@ -135,7 +147,7 @@ CMAKE_DEPENDENT_OPTION(YUZU_USE_FASTER_LD "Check if a faster linker is available CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" OFF) set(DEFAULT_ENABLE_OPENSSL ON) -if (ANDROID OR WIN32 OR APPLE OR ${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN) # - Windows defaults to the Schannel backend. # - macOS defaults to the SecureTransport backend. # - Android currently has no SSL backend as the NDK doesn't include any SSL @@ -312,7 +324,7 @@ if (UNIX) add_definitions(-DYUZU_UNIX=1) endif() -if (ARCHITECTURE_arm64 AND (ANDROID OR APPLE OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")) +if (ARCHITECTURE_arm64 AND (ANDROID OR APPLE OR PLATFORM_LINUX)) set(HAS_NCE 1) add_definitions(-DHAS_NCE=1) endif() @@ -322,7 +334,7 @@ if (YUZU_ROOM) endif() # Build/optimization presets -if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") +if (PLATFORM_LINUX) if (ARCHITECTURE_x86_64) set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, v3, zen2, zen4, native") if (${YUZU_BUILD_PRESET} STREQUAL "generic") @@ -380,38 +392,182 @@ if (YUZU_USE_CPM) # openssl funniness if (ENABLE_OPENSSL) - if (MSVC) - set(BUILD_SHARED_LIBS OFF) - AddPackage( - NAME OpenSSL - REPO crueter/OpenSSL-CI - TAG v3.5.2 - VERSION 3.5.2 - ARTIFACT openssl-windows-3.5.2.tar.zst + set(SSL_VERSION 3.5.2) - KEY windows + if ((MSVC AND ARCHITECTURE_x86_64) OR FORCE_DOWNLOAD_OPENSSL) + set(ARTIFACT openssl-windows-amd64-${SSL_VERSION}.tar.zst) + set(KEY windows-amd64) + + if (MSVC AND ARCHITECTURE_x86_64) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-windows-amd64 + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT ${ARTIFACT} + + KEY ${KEY} HASH_SUFFIX sha512sum BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} ) - include(${OpenSSL_SOURCE_DIR}/openssl.cmake) + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-windows-amd64_SOURCE_DIR}) + endif() + message("OPENSSL ${DOWNLOAD_ONLY} ${OPENSSL_DIR}") + endif() - if (ANDROID) - set(BUILD_SHARED_LIBS OFF) + if ((MSVC AND ARCHITECTURE_arm64) OR FORCE_DOWNLOAD_OPENSSL) + set(ARTIFACT openssl-windows-arm64-${SSL_VERSION}.tar.zst) + set(KEY windows-arm64) + + if (MSVC AND ARCHITECTURE_arm64) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + AddPackage( - NAME OpenSSL + NAME OpenSSL-windows-arm64 REPO crueter/OpenSSL-CI - TAG v3.5.2 - VERSION 3.5.2 - ARTIFACT openssl-android-3.5.2.tar.zst + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT ${ARTIFACT} + + KEY ${KEY} + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} + ) + + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-windows-arm64_SOURCE_DIR}) + endif() + endif() + + if (ANDROID OR FORCE_DOWNLOAD_OPENSSL) + if (ANDROID) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-android + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT openssl-android-${SSL_VERSION}.tar.zst KEY android HASH_SUFFIX sha512sum BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} ) - include(${OpenSSL_SOURCE_DIR}/openssl.cmake) + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-android_SOURCE_DIR}) + endif() + endif() + + if(PLATFORM_SUN OR FORCE_DOWNLOAD_OPENSSL) + if (PLATFORM_SUN) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-solaris + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT openssl-solaris-${SSL_VERSION}.tar.zst + + KEY solaris + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} + ) + + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-solaris_SOURCE_DIR}) + endif() + endif() + + if(PLATFORM_FREEBSD OR FORCE_DOWNLOAD_OPENSSL) + if (PLATFORM_FREEBSD) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-freebsd + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT openssl-freebsd-${SSL_VERSION}.tar.zst + + KEY freebsd + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} + ) + + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-freebsd_SOURCE_DIR}) + endif() + endif() + + if(PLATFORM_LINUX OR FORCE_DOWNLOAD_OPENSSL) + if (PLATFORM_LINUX) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-linux + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT openssl-linux-${SSL_VERSION}.tar.zst + + KEY linux + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} + ) + + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-linux_SOURCE_DIR}) + endif() + endif() + + if (DEFINED OPENSSL_DIR) + include(${OPENSSL_DIR}/openssl.cmake) + + # Overrides find package + CPMAddPackage( + NAME OpenSSL + SOURCE_DIR ${OPENSSL_DIR} + ) + else() + find_package(OpenSSL 1.1.1 REQUIRED) endif() endif() @@ -628,7 +784,7 @@ if(NOT TARGET Boost::headers) endif() if (ENABLE_LIBUSB) - if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + if (PLATFORM_FREEBSD) find_package(libusb MODULE) else() find_package(libusb 1.0.24 MODULE) @@ -648,6 +804,7 @@ if (USE_DISCORD_PRESENCE) ${CMAKE_SOURCE_DIR}/.patch/discord-rpc/0001-cmake-version.patch ${CMAKE_SOURCE_DIR}/.patch/discord-rpc/0002-no-clang-format.patch ${CMAKE_SOURCE_DIR}/.patch/discord-rpc/0003-fix-cpp17.patch + EXCLUDE_FROM_ALL ON ) target_include_directories(discord-rpc INTERFACE ${discord-rpc_SOURCE_DIR}/include) @@ -793,7 +950,7 @@ endif() function(set_yuzu_qt_components) # Best practice is to ask for all components at once, so they are from the same version set(YUZU_QT_COMPONENTS2 Core Widgets Concurrent) - if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + if (PLATFORM_LINUX) list(APPEND YUZU_QT_COMPONENTS2 DBus) endif() if (YUZU_USE_QT_MULTIMEDIA) diff --git a/CMakeModules/CPMUtil.cmake b/CMakeModules/CPMUtil.cmake index bd0155f8fb..07393d6ccd 100644 --- a/CMakeModules/CPMUtil.cmake +++ b/CMakeModules/CPMUtil.cmake @@ -6,8 +6,14 @@ # and some cmake magic to allow for runtime viewing of dependency versions include(CMakeDependentOption) +if (MSVC OR ANDROID) + set(SYSTEM_DEFAULT OFF) +else() + set(SYSTEM_DEFAULT ON) +endif() + CMAKE_DEPENDENT_OPTION(CPMUTIL_DEFAULT_SYSTEM - "Allow usage of system packages for CPM dependencies" ON + "Allow usage of system packages for CPM dependencies" ${SYSTEM_DEFAULT} "NOT ANDROID" OFF) cmake_minimum_required(VERSION 3.22) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 03e86b0d99..5f9bfa2214 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1246,10 +1246,12 @@ if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) endif() if(ENABLE_OPENSSL) - find_package(OpenSSL REQUIRED) target_sources(core PRIVATE hle/service/ssl/ssl_backend_openssl.cpp) - if (ANDROID OR MSVC) + + find_package(OpenSSL REQUIRED) + + if (OpenSSL_ADDED) link_openssl(core) else() target_link_libraries(core PRIVATE OpenSSL::SSL) diff --git a/src/dynarmic/src/dynarmic/frontend/A32/a32_types.h b/src/dynarmic/src/dynarmic/frontend/A32/a32_types.h index 5afd82f77f..fdadef8257 100644 --- a/src/dynarmic/src/dynarmic/frontend/A32/a32_types.h +++ b/src/dynarmic/src/dynarmic/frontend/A32/a32_types.h @@ -105,7 +105,7 @@ inline size_t RegNumber(ExtReg reg) { return static_cast(reg) - static_cast(ExtReg::Q0); } - ASSERT_FALSE("Invalid extended register"); + ASSERT_MSG(false, "Invalid extended register"); } inline Reg operator+(Reg reg, size_t number) { diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index d85e8bf1bc..d0787b0936 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -26,7 +26,7 @@ if (ENABLE_WEB_SERVICE) endif() # Solaris uses /lib/amd64/libsocket.so and /lib/amd64/libnsl.so -if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (PLATFORM_SUN) target_link_libraries(network PRIVATE socket nsl) endif() diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt index 510d8bf668..c1d5a84225 100644 --- a/src/web_service/CMakeLists.txt +++ b/src/web_service/CMakeLists.txt @@ -14,15 +14,14 @@ add_library(web_service STATIC web_result.h ) -find_package(OpenSSL REQUIRED) - create_target_directory_groups(web_service) target_include_directories(web_service PUBLIC ${cpp-jwt_SOURCE_DIR}/include) target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann_json httplib::httplib cpp-jwt::cpp-jwt) -if (ANDROID OR MSVC) +if (OpenSSL_ADDED) link_openssl(web_service) else() + find_package(OpenSSL REQUIRED) target_link_libraries(web_service PRIVATE OpenSSL::SSL) endif() diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 2e31f47cd5..4dcce95bb6 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -8,7 +8,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Set the RPATH for Qt Libraries # This must be done before the `yuzu` target is created -if (YUZU_USE_BUNDLED_QT AND (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")) +if (YUZU_USE_BUNDLED_QT AND (PLATFORM_LINUX)) set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}/bin/lib/") endif() @@ -498,7 +498,7 @@ if (YUZU_ROOM) endif() # Explicit linking required -if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (PLATFORM_SUN) target_link_libraries(yuzu PRIVATE X11) endif() diff --git a/src/yuzu_cmd/CMakeLists.txt b/src/yuzu_cmd/CMakeLists.txt index 9d1e08c04c..11f8317f9c 100644 --- a/src/yuzu_cmd/CMakeLists.txt +++ b/src/yuzu_cmd/CMakeLists.txt @@ -41,7 +41,7 @@ target_include_directories(yuzu-cmd PRIVATE ${RESOURCES_DIR}) target_link_libraries(yuzu-cmd PRIVATE SDL2::SDL2 Vulkan::Headers) # In Solaris needs explicit linking for ffmpeg which links to /lib/amd64/libX11.so -if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (PLATFORM_SUN) target_link_libraries(yuzu-cmd PRIVATE X11) endif() From bf7f3e25fca8b73178622dfe2aaaae45f845a923 Mon Sep 17 00:00:00 2001 From: lizzie Date: Wed, 20 Aug 2025 00:21:16 +0200 Subject: [PATCH 09/12] [compat] fix solaris build and update instructions for CPM on solaris (#270) Signed-off-by: lizzie Co-authored-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/270 Co-authored-by: lizzie Co-committed-by: lizzie --- CMakeLists.txt | 6 +++ docs/Development.md | 23 +++++++++-- docs/build/FreeBSD.md | 14 ++++--- docs/build/Linux.md | 2 +- docs/build/Solaris.md | 76 +++++-------------------------------- externals/CMakeLists.txt | 1 + src/yuzu/CMakeLists.txt | 4 +- src/yuzu_cmd/CMakeLists.txt | 2 +- 8 files changed, 49 insertions(+), 79 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ca88e3c65..ecb8a8268d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,12 @@ if (PLATFORM_SUN) # Terrific Solaris pkg shenanigans list(APPEND CMAKE_PREFIX_PATH "/usr/lib/qt/6.6/lib/amd64/cmake") list(APPEND CMAKE_MODULE_PATH "/usr/lib/qt/6.6/lib/amd64/cmake") + # For some mighty reason, doing a normal release build sometimes may not trigger + # the proper -O3 switch to materialize + if (CMAKE_BUILD_TYPE MATCHES "Release") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") + endif() endif() set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm) diff --git a/docs/Development.md b/docs/Development.md index 26a10fd062..0db4131dbb 100644 --- a/docs/Development.md +++ b/docs/Development.md @@ -7,6 +7,16 @@ * **FreeBSD**: [FreeBSD Building Guide](./docs/build/FreeBSD.md) * **macOS**: [macOS Building Guide](./docs/build/macOS.md) +# CPM + +CPM (CMake Package Manager) is the preferred method of managing dependencies within Eden. Documentation on adding dependencies/using CPMUtil is in the works. + +Notes: +- `YUZU_USE_CPM` is set by default on MSVC and Android. Other platforms should use this if certain "required" system dependencies (e.g. OpenSSL) are broken or missing +- `CPMUTIL_DEFAULT_SYSTEM` can be set to `OFF` to force the usage of bundled dependencies. This can marginally decrease the final package size. +- When adding new prebuilt dependencies a la OpenSSL, SDL2, or FFmpeg, there *must* be a CMake option made available to forcefully download this bundle. See the OpenSSL implementation in the root CMakeLists for an example. + * This is necessary to allow for creation of fully-qualified source packs that allow for offline builds after download (some package managers and distros enforce this) + # Guidelines ## License Headers @@ -76,9 +86,16 @@ cmake --build /tmp/ramdisk -- -j32 sudo umount /tmp/ramdisk ``` -# How to test JIT +## Debugging (host code) -## gdb +Ignoring SIGSEGV when debugging in host: + +- **gdb**: `handle all nostop pass`. +- **lldb**: `pro hand -p true -s false -n false SIGSEGV`. + +## Debugging (guest code) + +### gdb Run `./build/bin/eden-cli -c -d -g ` @@ -110,7 +127,7 @@ Expressions can be `variable_names` or `1234` (numbers) or `*var` (dereference o For more information type `info gdb` and read [the man page](https://man7.org/linux/man-pages/man1/gdb.1.html). -## Bisecting older commits +# Bisecting older commits Since going into the past can be tricky (especially due to the dependencies from the project being lost thru time). This should "restore" the URLs for the respective submodules. diff --git a/docs/build/FreeBSD.md b/docs/build/FreeBSD.md index 059f757361..475378125c 100644 --- a/docs/build/FreeBSD.md +++ b/docs/build/FreeBSD.md @@ -1,12 +1,13 @@ ## One word of caution before proceeding. + This is not the usual or preferred way to build programs on FreeBSD. -As of writing there is no official fresh port available for eden-emu, but it is in the works. -After it is available you can find a link to the eden-emu fresh port here and on Escarys github repo. -See this build as an App Image alternative for FreeBSD. +As of writing there is no official fresh port available for Eden, but it is in the works. +After it is available you can find a link to the eden-emu fresh port here and on Escary's github repo. +See this build as an AppImage alternative for FreeBSD. ## Dependencies. Before we start we need some dependencies. -These dependencies are generally needed to build eden-emu on FreeBSD. +These dependencies are generally needed to build Eden on FreeBSD. ``` devel/cmake @@ -56,8 +57,6 @@ Change into that build directory: cd build ``` -Now choose one option either 1 or 2, but not both as one option overwrites the other. - #### 1. Building in Release Mode (usually preferred and the most performant choice): ```sh cmake .. -GNinja -DYUZU_TESTS=OFF @@ -81,3 +80,6 @@ OR ```sh doas -- ninja install ``` + +## OpenSSL +The available OpenSSL port (3.0.17) is out-of-date, and using a bundled static library instead is recommended; to do so, add `-DYUZU_USE_CPM=ON` to your CMake configure command. \ No newline at end of file diff --git a/docs/build/Linux.md b/docs/build/Linux.md index e668c16b5b..ab653dad00 100644 --- a/docs/build/Linux.md +++ b/docs/build/Linux.md @@ -12,7 +12,7 @@ The following are handled by Eden's externals: * [SDL2](https://www.libsdl.org/download-2.0.php) 2.0.18+ * [opus](https://opus-codec.org/downloads/) 1.3+ -All other dependencies will be downloaded and built by [CPM](https://github.com/cpm-cmake/CPM.cmake/) if `YUZU_USE_CPM` is on, but will use system dependencies if available: +All other dependencies will be downloaded and built by [CPM](https://github.com/cpm-cmake/CPM.cmake/) if `YUZU_USE_CPM` is on, but will always use system dependencies if available: * [Boost](https://www.boost.org/users/download/) 1.79.0+ * [Catch2](https://github.com/catchorg/Catch2) 2.13.7 - 2.13.9 diff --git a/docs/build/Solaris.md b/docs/build/Solaris.md index be681d5308..d4cfdbb6a9 100644 --- a/docs/build/Solaris.md +++ b/docs/build/Solaris.md @@ -8,73 +8,12 @@ Run the usual update + install of essential toolings: `sudo pkg update && sudo p - **gcc**: `sudo pkg install developer/gcc-14`. - **clang**: Version 20 is broken, use `sudo pkg install developer/clang-19`. -Then install the libraies: `sudo pkg install qt6 boost glslang libzip library/lz4 nlohmann-json openssl opus sdl2 zlib compress/zstd unzip pkg-config nasm autoconf mesa library/libdrm header-drm`. - -fmtlib is not available on repositories and has to be manually built: -```sh -git clone --recurisve --depth=1 https://github.com/fmtlib/fmt.git -cd fmt -cmake -DCMAKE_BUILD_TYPE=Release -B build -cmake --build build -sudo cmake --install build -``` - -pkg lz4 doesn't provide a proper CMakeFile to find the library, has to also be manually built: -```sh -git clone --depth=1 https://github.com/lz4/lz4.git -cd lz4 -gmake -sudo gmake install -``` - -Same goes for zstd: -```sh -git clone --depth=1 https://github.com/facebook/zstd.git -cd zstd -cmake -DCMAKE_BUILD_TYPE=Release -B build0 -S build/cmake -cmake --build build0 -cd build0 -sudo gmake install -``` - -pkg SDL2 is also not nice to work with on CMake, save yourself some pain and compile it yourself: -```sh -git clone --depth=1 --branch=release-2.32.8 https://github.com/libsdl-org/SDL -cmake -DCMAKE_BUILD_TYPE=Release -B build -cmake --build build -sudo cmake --install build -``` - -Audio is broken in OpenIndiana [see this issue](https://github.com/libsdl-org/SDL/issues/13405), go into `SDL/CMakeLists.txt` and comment out lines 1468: -```diff -+# set(SDL_AUDIO_DRIVER_SUNAUDIO 1) -+# file(GLOB SUN_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sun/*.c) -+# list(APPEND SOURCE_FILES ${SUN_AUDIO_SOURCES}) -+# set(HAVE_SDL_AUDIO TRUE) -``` -For Solaris this issue does not exist - however PulseAudio crashes on Solaris - so use a different backend. - ---- - -### Build preparations: -Run the following command to clone eden with git: -```sh -git clone --recursive https://git.eden-emu.dev/eden-emu/eden -``` -You usually want to add the `--recursive` parameter as it also takes care of the external dependencies for you. - -Now change into the eden directory and create a build directory there: -```sh -cd eden -mkdir build -``` - -Change into that build directory: `cd build` - -Now choose one option either 1 or 2, but not both as one option overwrites the other. +Then install the libraies: `sudo pkg install qt6 boost glslang libzip library/lz4 nlohmann-json openssl opus sdl2 zlib compress/zstd unzip pkg-config nasm autoconf mesa library/libdrm header-drm developer/fmt`. ### Building +Clone eden with git `git clone --recursive https://git.eden-emu.dev/eden-emu/eden` + ```sh # Needed for some dependencies that call cc directly (tz) echo '#!/bin/sh' >cc @@ -83,7 +22,12 @@ chmod +x cc export PATH="$PATH:$PWD" ``` -- **Configure**: `cmake -B build -DYUZU_TESTS=OFF -DYUZU_USE_BUNDLED_SDL2=OFF -DYUZU_USE_EXTERNAL_SDL2=OFF -DYUZU_USE_LLVM_DEMANGLE=OFF -DYUZU_USE_QT_MULTIMEDIA=OFF -DYUZU_USE_QT_WEB_ENGINE=OFF -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_USE_BUNDLED_QT=OFF -DENABLE_QT=OFF -DSDL_AUDIO=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_QT_UPDATE_CHECKER=OFF`. +Patch for FFmpeg: +```sh +sed -i 's/ make / gmake /' externals/ffmpeg/CMakeFiles/ffmpeg-build.dir/build.make +``` + +- **Configure**: `cmake -B build -DYUZU_USE_CPM=ON -DCMAKE_CXX_FLAGS="-I/usr/include/SDL2" -DCMAKE_C_FLAGS="-I/usr/include/SDL2"`. - **Build**: `cmake --build build`. - **Installing**: `sudo cmake --install build`. @@ -104,4 +48,4 @@ export LIBGL_ALWAYS_SOFTWARE=1 - Modify the generated ffmpeg.make (in build dir) if using multiple threads (base system `make` doesn't use `-j4`, so change for `gmake`). - If using OpenIndiana, due to a bug in SDL2 cmake configuration; Audio driver defaults to SunOS ``, which does not exist on OpenIndiana. -- Enabling OpenSSL requires compiling OpenSSL manually instead of using the provided one from repositores. +- System OpenSSL generally does not work. Instead, use `-DYUZU_USE_CPM=ON` to use a bundled static OpenSSL, or build a system dependency from source. \ No newline at end of file diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 314f414e2e..71dd2962e7 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -139,6 +139,7 @@ endif() # Sirit # TODO(crueter): spirv-tools doesn't work w/ system +set(SPIRV_WERROR OFF) AddPackage( NAME SPIRV-Headers REPO "KhronosGroup/SPIRV-Headers" diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 4dcce95bb6..f7ec2985c7 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -8,7 +8,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Set the RPATH for Qt Libraries # This must be done before the `yuzu` target is created -if (YUZU_USE_BUNDLED_QT AND (PLATFORM_LINUX)) +if (YUZU_USE_BUNDLED_QT AND PLATFORM_LINUX) set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}/bin/lib/") endif() @@ -499,7 +499,7 @@ endif() # Explicit linking required if (PLATFORM_SUN) - target_link_libraries(yuzu PRIVATE X11) + target_link_libraries(yuzu PRIVATE X11 "/usr/lib/xorg/amd64/libdrm.so") endif() # Extra deps diff --git a/src/yuzu_cmd/CMakeLists.txt b/src/yuzu_cmd/CMakeLists.txt index 11f8317f9c..afd003a86c 100644 --- a/src/yuzu_cmd/CMakeLists.txt +++ b/src/yuzu_cmd/CMakeLists.txt @@ -42,7 +42,7 @@ target_link_libraries(yuzu-cmd PRIVATE SDL2::SDL2 Vulkan::Headers) # In Solaris needs explicit linking for ffmpeg which links to /lib/amd64/libX11.so if (PLATFORM_SUN) - target_link_libraries(yuzu-cmd PRIVATE X11) + target_link_libraries(yuzu-cmd PRIVATE X11 "/usr/lib/xorg/amd64/libdrm.so") endif() if(UNIX AND NOT APPLE) From 7bfa2404a63d26a0da657e20b11c5c72cbba27ef Mon Sep 17 00:00:00 2001 From: MaranBr Date: Wed, 20 Aug 2025 00:21:25 +0200 Subject: [PATCH 10/12] [video_core] Improve DMA logic and add an option to sync memory operations (#276) This improves DMA logic and add an option to sync memory operations. Thanks to Higgs for the new DMA logic. Co-authored-by: PavelBARABANOV Co-authored-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/276 Reviewed-by: crueter Co-authored-by: MaranBr Co-committed-by: MaranBr --- .../features/settings/model/BooleanSetting.kt | 1 + .../settings/model/view/SettingsItem.kt | 8 ++- .../settings/ui/SettingsFragmentPresenter.kt | 1 + .../app/src/main/res/values-ar/strings.xml | 2 + .../app/src/main/res/values-ckb/strings.xml | 2 + .../app/src/main/res/values-cs/strings.xml | 2 + .../app/src/main/res/values-de/strings.xml | 2 + .../app/src/main/res/values-es/strings.xml | 2 + .../app/src/main/res/values-fa/strings.xml | 2 + .../app/src/main/res/values-fr/strings.xml | 2 + .../app/src/main/res/values-he/strings.xml | 2 + .../app/src/main/res/values-hu/strings.xml | 2 + .../app/src/main/res/values-id/strings.xml | 2 + .../app/src/main/res/values-it/strings.xml | 2 + .../app/src/main/res/values-ja/strings.xml | 2 + .../app/src/main/res/values-ko/strings.xml | 2 + .../app/src/main/res/values-nb/strings.xml | 2 + .../app/src/main/res/values-pl/strings.xml | 2 + .../src/main/res/values-pt-rBR/strings.xml | 2 + .../src/main/res/values-pt-rPT/strings.xml | 2 + .../app/src/main/res/values-ru/strings.xml | 2 + .../app/src/main/res/values-sr/strings.xml | 2 + .../app/src/main/res/values-uk/strings.xml | 2 + .../app/src/main/res/values-vi/strings.xml | 2 + .../src/main/res/values-zh-rCN/strings.xml | 2 + .../src/main/res/values-zh-rTW/strings.xml | 2 + .../app/src/main/res/values/strings.xml | 2 + src/common/settings.h | 2 +- src/video_core/dma_pusher.cpp | 69 +++++++++++-------- src/video_core/dma_pusher.h | 16 ++++- src/yuzu/configuration/shared_translation.cpp | 2 + 31 files changed, 114 insertions(+), 33 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt index 119517d99b..153d464f68 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt @@ -26,6 +26,7 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting { RENDERER_FAST_GPU("use_fast_gpu_time"), RENDERER_REACTIVE_FLUSHING("use_reactive_flushing"), RENDERER_EARLY_RELEASE_FENCES("early_release_fences"), + SYNC_MEMORY_OPERATIONS("sync_memory_operations"), BUFFER_REORDER_DISABLE("disable_buffer_reorder"), RENDERER_DEBUG("debug"), RENDERER_PROVOKING_VERTEX("provoking_vertex"), 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 73834c1184..15fde13bf3 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 @@ -274,7 +274,6 @@ abstract class SettingsItem( descriptionId = R.string.use_sync_core_description ) ) - put( SingleChoiceSetting( IntSetting.REGION_INDEX, @@ -679,6 +678,13 @@ abstract class SettingsItem( descriptionId = R.string.renderer_early_release_fences_description ) ) + put( + SwitchSetting( + BooleanSetting.SYNC_MEMORY_OPERATIONS, + titleId = R.string.sync_memory_operations, + descriptionId = R.string.sync_memory_operations_description + ) + ) put( SwitchSetting( BooleanSetting.BUFFER_REORDER_DISABLE, 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 28411309e6..bcdd65b1a3 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 @@ -467,6 +467,7 @@ class SettingsFragmentPresenter( add(BooleanSetting.SKIP_CPU_INNER_INVALIDATION.key) add(BooleanSetting.USE_LRU_CACHE.key) add(BooleanSetting.CORE_SYNC_CORE_SPEED.key) + add(BooleanSetting.SYNC_MEMORY_OPERATIONS.key) add(IntSetting.MEMORY_LAYOUT.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 73c7bdeb9b..001074baad 100644 --- a/src/android/app/src/main/res/values-ar/strings.xml +++ b/src/android/app/src/main/res/values-ar/strings.xml @@ -77,6 +77,8 @@ يضمن تسليمًا سلسًا ومتناسقًا للإطارات من خلال مزامنة التوقيت بينها، مما يقلل من التقطيع وعدم انتظام الحركة. مثالي للألعاب التي تعاني من عدم استقرار في توقيت الإطارات أو تقطع دقيق أثناء اللعب. إطلاق الأسوار مبكرًا يساعد في إصلاح مشكلة 0 إطار في الثانية في ألعاب مثل DKCR:HD وSubnautica Below Zero وOri 2، ولكن قد يتسبب في تعطيل التحميل أو الأداء في ألعاب Unreal Engine. + مزامنة عمليات الذاكرة + يضمن اتساق البيانات بين عمليات الحوسبة والذاكرة. هذا الخيار قد يحل المشكلات في بعض الألعاب، ولكن قد يقلل الأداء في بعض الحالات. يبدو أن الألعاب التي تستخدم Unreal Engine 4 هي الأكثر تأثرًا. تعطيل إعادة ترتيب المخزن المؤقت عند التحديد، يتم تعطيل إعادة ترتيب تحميل الذاكرة المعينة مما يسمح بربط التحميلات برسومات محددة. قد يقلل الأداء في بعض الحالات. تمكين ذاكرة التخزين المؤقت LRU 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 991a5cf779..9cbd89d886 100644 --- a/src/android/app/src/main/res/values-ckb/strings.xml +++ b/src/android/app/src/main/res/values-ckb/strings.xml @@ -78,6 +78,8 @@ يضمن تسليمًا سلسًا ومتناسقًا للإطارات من خلال مزامنة التوقيت بينها، مما يقلل من التقطيع وعدم انتظام الحركة. مثالي للألعاب التي تعاني من عدم استقرار في توقيت الإطارات أو تقطع دقيق أثناء اللعب. زێدەکردنی پەرستارەکان زووتر یارمەتی دەدات لە چارەسەری 0 FPS لە یارییەکانی وەک DKCR:HD، Subnautica Below Zero و Ori 2، بەڵام ڕەنگە بارکردن یان کارایی لە یارییەکانی Unreal Engine تێکبدات. + هاوبەشیی کردارەکانی بیرگە + دڵنیایی داتا لە نێوان کردارەکانی کۆمپیوتەر و بیرگە. ئەم هەڵبژاردە کێشەکان لە هەندێک یاری چارەسەر دەکات، بەڵام لە هەندێک حاڵەت کارایی کەم دەکاتەوە. وا دیارە یارییەکانی Unreal Engine 4 زۆرترین کاریگەریان هەیە. ڕێکخستنەوەی بافر ناچالاک بکە کە دیاریکرا، ڕێکخستنەوەی بارکردنی بیرگەی نەخشەکراو ناچالاک دەکات کە ڕێگەدەدات بارکردنەکان بە ڕەسمی دیاریکراو ببەسترێت. لە هەندێک حاڵەتدا کاراییمان دەکاتەوە. تمكين ذاكرة التخزين المؤقت LRU 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 727c185843..a7eca41678 100644 --- a/src/android/app/src/main/res/values-cs/strings.xml +++ b/src/android/app/src/main/res/values-cs/strings.xml @@ -77,6 +77,8 @@ Zajišťuje plynulé a konzistentní zobrazování snímků synchronizací jejich časování, čímž snižuje trhání a nerovnoměrné animace. Ideální pro hry, které trpí nestabilitou časování snímků nebo mikrotrháním během hraní. Uvolnit ploty brzy Pomáhá opravit 0 FPS v hrách jako DKCR:HD, Subnautica Below Zero a Ori 2, ale může narušit načítání nebo výkon v hrách na Unreal Engine. + Synchronizace paměťových operací + Zajišťuje konzistenci dat mezi výpočetními a paměťovými operacemi. Tato volba by měla opravit problémy v některých hrách, ale může v některých případech snížit výkon. Nejvíce postižené se zdají být hry s Unreal Engine 4. Zakázat přeřazování vyrovnávací paměti Při zaškrtnutí zakáže přeřazování nahrání mapované paměti, což umožňuje spojit nahrání s konkrétními vykresleními. V některých případech může snížit výkon. Povolit LRU mezipaměť 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 70f6fe7975..fbf9aa31c7 100644 --- a/src/android/app/src/main/res/values-de/strings.xml +++ b/src/android/app/src/main/res/values-de/strings.xml @@ -78,6 +78,8 @@ Sorgt für eine gleichmäßige und konsistente Frame-Wiedergabe durch Synchronisierung der Frame-Zeiten, was Ruckeln und ungleichmäßige Animationen reduziert. Ideal für Spiele, die unter instabilen Frame-Zeiten oder Mikrorucklern leiden. Zäune früher freigeben Behebt 0 FPS in Spielen wie DKCR:HD, Subnautica Below Zero und Ori 2, kann aber Ladezeiten oder Performance in Unreal Engine-Spielen beeinträchtigen. + Speicheroperationen synchronisieren + Stellt die Datenkonsistenz zwischen Compute- und Speicheroperationen sicher. Diese Option sollte Probleme in einigen Spielen beheben, kann aber in einigen Fällen die Leistung verringern. Spiele mit Unreal Engine 4 scheinen am stärksten betroffen zu sein. Puffer-Neuanordnung deaktivieren Wenn aktiviert, wird die Neuanordnung von gemappten Speicher-Uploads deaktiviert, was die Zuordnung von Uploads zu bestimmten Zeichenvorgängen ermöglicht. Kann in einigen Fällen die Leistung verringern. LRU-Cache aktivieren 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 051ee665eb..93b4fe159e 100644 --- a/src/android/app/src/main/res/values-es/strings.xml +++ b/src/android/app/src/main/res/values-es/strings.xml @@ -78,6 +78,8 @@ Garantiza una reproducción suave y consistente de fotogramas sincronizando sus tiempos, reduciendo el tartamudeo y animaciones irregulares. Ideal para juegos con problemas de sincronización de fotogramas o microtartamudeos. Liberar vallas antes Ayuda a solucionar 0 FPS en juegos como DKCR:HD, Subnautica Below Zero y Ori 2, pero puede afectar la carga o rendimiento en juegos de Unreal Engine. + Sincronizar operaciones de memoria + Garantiza la consistencia de datos entre operaciones de computación y memoria. Esta opción debería solucionar problemas en algunos juegos, pero puede reducir el rendimiento en algunos casos. Los juegos con Unreal Engine 4 parecen ser los más afectados. Desactivar reordenamiento de búfer Cuando está marcado, desactiva el reordenamiento de cargas de memoria mapeada, lo que permite asociar cargas con dibujos específicos. Puede reducir el rendimiento en algunos casos. Habilitar caché LRU 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 b3c745fe04..f4793d1e2b 100644 --- a/src/android/app/src/main/res/values-fa/strings.xml +++ b/src/android/app/src/main/res/values-fa/strings.xml @@ -78,6 +78,8 @@ ارسال یکنواخت و پایدار فریم‌ها را با همگام‌سازی زمان بین آن‌ها تضمین می‌کند، که منجر به کاهش لرزش و انیمیشن‌های ناهموار می‌شود. برای بازی‌هایی که ناپایداری در زمان‌بندی فریم‌ها یا میکرو لرزش در حین بازی دارند ایده‌آل است رهاسازی حصارها زودتر به رفع مشکل 0 فریم بر ثانیه در بازی‌هایی مانند DKCR:HD، Subnautica Below Zero و Ori 2 کمک می‌کند، اما ممکن است بارگذاری یا عملکرد بازی‌های Unreal Engine را مختل کند. + همگام‌سازی عملیات حافظه + اطمینان از سازگاری داده‌ها بین عملیات محاسباتی و حافظه. این گزینه ممکن است مشکلات برخی بازی‌ها را رفع کند، اما در برخی موارد ممکن است عملکرد را کاهش دهد. به نظر می‌رسد بازی‌های با Unreal Engine 4 بیشترین تأثیر را داشته باشند. غیرفعال کردن مرتب‌سازی مجدد بافر در صورت انتخاب، مرتب‌سازی مجدد آپلودهای حافظه نگاشت‌شده غیرفعال می‌شود که امکان ارتباط آپلودها با ترسیمات خاص را فراهم می‌کند. ممکن است در برخی موارد عملکرد را کاهش دهد. فعال‌سازی حافظه نهان LRU 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 bd4f2eb13a..7a70aaf022 100644 --- a/src/android/app/src/main/res/values-fr/strings.xml +++ b/src/android/app/src/main/res/values-fr/strings.xml @@ -78,6 +78,8 @@ Assure une diffusion fluide et régulière des frames en synchronisant leur timing, réduisant ainsi les saccades et les animations irrégulières. Idéal pour les jeux souffrant d`instabilité de timing des frames ou de micro-saccades pendant le jeu. Libérer les barrières plus tôt Résout les problèmes de 0 FPS dans des jeux comme DKCR:HD, Subnautica Below Zero et Ori 2, mais peut perturber le chargement ou les performances des jeux Unreal Engine. + Synchroniser les opérations mémoire + Garantit la cohérence des données entre les opérations de calcul et de mémoire. Cette option devrait résoudre les problèmes dans certains jeux, mais peut réduire les performances dans certains cas. Les jeux utilisant Unreal Engine 4 semblent être les plus affectés. Désactiver le réordonnancement du tampon Lorsqu\'il est coché, désactive le réordonnancement des téléchargements de mémoire mappée, permettant d\'associer les téléchargements à des dessins spécifiques. Peut réduire les performances dans certains cas. Activer le cache LRU 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 8131ddae1b..516ac45210 100644 --- a/src/android/app/src/main/res/values-he/strings.xml +++ b/src/android/app/src/main/res/values-he/strings.xml @@ -78,6 +78,8 @@ מבטיח אספקה חלקה ועקבית של פריימים על ידי סנכרון התזמון ביניהם, מפחית קפיצות ואנימציה לא אחידה. אידיאלי למשחקים עם בעיות בתזמון פריימים או מיקרו-קפיצות במהלך המשחק. שחרר גדרות מוקדם עוזר לתקן 0 FPS במשחקים כמו DKCR:HD, Subnautica Below Zero ו-Ori 2, אך עלול לפגוע בטעינה או בביצועים במשחקי Unreal Engine. + סנכרון פעולות זיכרון + מבטיח עקביות נתונים בין פעולות חישוב וזיכרון. אפשרות זו אמורה לתקן בעיות במשחקים מסוימים, אך עלולה להפחית ביצועים במקרים מסוימים. נראה שהמשחקים עם Unreal Engine 4 הם המושפעים ביותר. השבת סידור מחדש של חוצץ כאשר מסומן, מבטל את סידור מחדש של העלאות זיכרון ממופה המאפשר לשייך העלאות עם ציורים ספציפיים. עלול להפחית ביצועים במקרים מסוימים. הפעלת מטמון LRU 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 ab64a7afb6..f43bdf28ac 100644 --- a/src/android/app/src/main/res/values-hu/strings.xml +++ b/src/android/app/src/main/res/values-hu/strings.xml @@ -78,6 +78,8 @@ Biztosítja a képkockák sima és egyenletes kézbesítését azok időzítésének szinkronizálásával, csökkentve a megakadásokat és egyenetlen animációkat. Ideális azokhoz a játékokhoz, amelyek képkocka-időzítési instabilitást vagy mikro-reccsenést tapasztalnak játék közben. Korai kerítés-felszabadítás Segít javítani a 0 FPS-t olyan játékokban, mint a DKCR:HD, Subnautica Below Zero és az Ori 2, de ronthatja az Unreal Engine játékok betöltését vagy teljesítményét. + Memória-műveletek szinkronizálása + Biztosítja az adatok konzisztenciáját a számítási és memória-műveletek között. Ez az opciónak javítania kell néhány játékban előforduló problémát, de bizonyos esetekben csökkentheti a teljesítményt. Az Unreal Engine 4-et használó játékok látszanak a legérintettebbek. Puffer újrarendezés letiltása Ha be van jelölve, letiltja a leképezett memória feltöltéseinek újrarendezését, lehetővé téve a feltöltések összerendelését konkrét rajzolásokkal. Bizonyos esetekben csökkentheti a teljesítményt. LRU gyorsítótár engedélyezése 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 4972c9f3d7..9017c1622f 100644 --- a/src/android/app/src/main/res/values-id/strings.xml +++ b/src/android/app/src/main/res/values-id/strings.xml @@ -78,6 +78,8 @@ Memastikan pengiriman frame yang halus dan konsisten dengan menyinkronkan waktu antar frame, mengurangi stuttering dan animasi tidak rata. Ideal untuk game yang mengalami ketidakstabilan waktu frame atau micro-stutter selama gameplay. Lepas Pagar Lebih Awal Membantu memperbaiki 0 FPS di game seperti DKCR:HD, Subnautica Below Zero dan Ori 2, tapi mungkin mengganggu loading atau performa di game Unreal Engine. + Sinkronisasi Operasi Memori + Memastikan konsistensi data antara operasi komputasi dan memori. Opsi ini seharusnya memperbaiki masalah di beberapa game, tetapi mungkin mengurangi performa dalam beberapa kasus. Game dengan Unreal Engine 4 tampaknya yang paling terpengaruh. Nonaktifkan Penyusunan Ulang Buffer Ketika dicentang, menonaktifkan penyusunan ulang unggahan memori yang dipetakan yang memungkinkan mengaitkan unggahan dengan gambar tertentu. Dapat mengurangi kinerja dalam beberapa kasus. Aktifkan LRU Cache 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 cf52792f4b..b38b1c6c5a 100644 --- a/src/android/app/src/main/res/values-it/strings.xml +++ b/src/android/app/src/main/res/values-it/strings.xml @@ -78,6 +78,8 @@ Garantisce una consegna fluida e costante dei fotogrammi sincronizzandone i tempi, riducendo scatti e animazioni irregolari. Ideale per giochi che presentano instabilità nei tempi dei fotogrammi o micro-scatti durante il gameplay. Rilascia le barriere prima Risolve problemi di 0 FPS in giochi come DKCR:HD, Subnautica Below Zero e Ori 2, ma potrebbe compromettere caricamento o prestazioni in giochi Unreal Engine. + Sincronizza operazioni di memoria + Garantisce la coerenza dei dati tra le operazioni di calcolo e memoria. Questa opzione dovrebbe risolvere problemi in alcuni giochi, ma potrebbe ridurre le prestazioni in alcuni casi. I giochi con Unreal Engine 4 sembrano essere i più colpiti. Disabilita riordino buffer Se selezionato, disabilita il riordino dei caricamenti di memoria mappata consentendo di associare i caricamenti a disegni specifici. Potrebbe ridurre le prestazioni in alcuni casi. Abilita cache LRU 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 d803d3c6f2..c76814e17d 100644 --- a/src/android/app/src/main/res/values-ja/strings.xml +++ b/src/android/app/src/main/res/values-ja/strings.xml @@ -78,6 +78,8 @@ フレーム間のタイミングを同期させることで、スムーズで一貫したフレーム配信を確保し、カクつきや不均一なアニメーションを軽減します。フレームタイミングの不安定さやマイクロスタッターが発生するゲームに最適です。 フェンスを早期に解放 DKCR:HD、Subnautica Below Zero、Ori 2などのゲームで0 FPSを修正しますが、Unreal Engineゲームの読み込みやパフォーマンスに影響する可能性があります。 + メモリ操作の同期 + 計算処理とメモリ操作間のデータ一貫性を保証します。 このオプションは一部のゲームの問題を修正しますが、場合によってはパフォーマンスが低下する可能性があります。 Unreal Engine 4のゲームが最も影響を受けるようです。 バッファの再並べ替えを無効化 チェック時、マップされたメモリのアップロードの再並べ替えを無効化し、特定の描画に関連付けることができます。場合によってはパフォーマンスが低下する可能性があります。 LRUキャッシュを有効化 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 c6010e76fe..1be258d243 100644 --- a/src/android/app/src/main/res/values-ko/strings.xml +++ b/src/android/app/src/main/res/values-ko/strings.xml @@ -78,6 +78,8 @@ 프레임 간 타이밍을 동기화하여 부드럽고 일관된 프레임 전달을 보장하며, 끊김과 불균일한 애니메이션을 줄입니다. 프레임 타이밍 불안정이나 게임 플레이 중 미세 끊김이 발생하는 게임에 이상적입니다. 펜스 조기 해제 DKCR:HD, Subnautica Below Zero, Ori 2 등의 게임에서 0 FPS 현상을 해결하지만, Unreal Engine 게임의 로딩이나 성능에 문제를 일으킬 수 있습니다. + 메모리 작업 동기화 + 컴퓨팅 및 메모리 작업 간 데이터 일관성을 보장합니다. 이 옵션은 일부 게임의 문제를 해결할 수 있지만 경우에 따라 성능이 저하될 수 있습니다. Unreal Engine 4 게임이 가장 큰 영향을 받는 것으로 보입니다. 버퍼 재정렬 비활성화 체크 시, 매핑된 메모리 업로드의 재정렬을 비활성화하여 특정 그리기와 업로드를 연결할 수 있습니다. 경우에 따라 성능이 저하될 수 있습니다. LRU 캐시 사용 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 79418507b0..83bb02f3ff 100644 --- a/src/android/app/src/main/res/values-nb/strings.xml +++ b/src/android/app/src/main/res/values-nb/strings.xml @@ -78,6 +78,8 @@ Sikrer jevn og konsekvent bildelevering ved å synkronisere tiden mellom bilder, noe som reduserer hakking og ujevn animasjon. Ideelt for spill som opplever ustabil bildetid eller mikro-hakk under spilling. Frigjør gjerder tidlig Løser 0 FPS i spill som DKCR:HD, Subnautica Below Zero og Ori 2, men kan forårsake problemer med lasting eller ytelse i Unreal Engine-spill. + Synkroniser minneoperasjoner + Sikrer datakonsistens mellom beregnings- og minneoperasjoner. Dette alternativet bør fikse problemer i noen spill, men kan redusere ytelsen i noen tilfeller. Spill med Unreal Engine 4 ser ut til å være de mest berørte. Deaktiver bufferomorganisering Når merket, deaktiveres omorganisering av kartlagt minneopplasting som tillater å knytte opplastinger til spesifikke tegninger. Kan redusere ytelsen i noen tilfeller. Aktiver LRU-mellomlager 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 fc54134ee5..ec22ae0a4c 100644 --- a/src/android/app/src/main/res/values-pl/strings.xml +++ b/src/android/app/src/main/res/values-pl/strings.xml @@ -78,6 +78,8 @@ Zapewnia płynne i spójne wyświetlanie klatek poprzez synchronizację ich czasu, redukując zacinanie i nierówną animację. Idealne dla gier z niestabilnym czasem klatek lub mikro-zacinaniem podczas rozgrywki. Wcześniejsze zwalnianie zabezpieczeń Pomaga naprawić 0 FPS w grach takich jak DKCR:HD, Subnautica Below Zero i Ori 2, ale może zaburzyć ładowanie lub wydajność w grach Unreal Engine. + Synchronizuj operacje pamięci + Zapewnia spójność danych między operacjami obliczeniowymi i pamięciowymi. Ta opcja powinna naprawiać problemy w niektórych grach, ale może zmniejszyć wydajność w niektórych przypadkach. Gry z Unreal Engine 4 wydają się być najbardziej dotknięte. Wyłącz przestawianie bufora Po zaznaczeniu wyłącza przestawianie załadowań zmapowanej pamięci, umożliwiając powiązanie załadowań z konkretnymi rysunkami. Może zmniejszyć wydajność w niektórych przypadkach. Włącz pamięć podręczną LRU 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 b6d2c8a5bc..d7f528fb2a 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 @@ -78,6 +78,8 @@ Garante entrega suave e consistente de quadros sincronizando seu tempo, reduzindo engasgos e animações irregulares. Ideal para jogos com instabilidade no tempo de quadros ou micro-engasgos durante a jogatina. Liberar cercas antecipadamente Ajuda a corrigir 0 FPS em jogos como DKCR:HD, Subnautica Below Zero e Ori 2, mas pode prejudicar carregamento ou desempenho em jogos Unreal Engine. + Sincronizar Operações de Memória + Garante a consistência dos dados entre operações de computação e memória. Esta opção deve corrigir problemas em alguns jogos, mas pode reduzir o desempenho em alguns casos. Os jogos com Unreal Engine 4 parecem ser os mais afetados. Desativar reorganização de buffer Quando marcado, desativa a reorganização de carregamentos de memória mapeada que permite associar carregamentos a desenhos específicos. Pode reduzir o desempenho em alguns casos. Ativar cache LRU 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 5704fbb91c..f312b0604a 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 @@ -78,6 +78,8 @@ Garante uma entrega suave e consistente de frames sincronizando o seu tempo, reduzindo engasgadelas e animações irregulares. Ideal para jogos que experienciam instabilidade no tempo de frames ou micro-engasgadelas durante o jogo. Libertar barreiras antecipadamente Ajuda a corrigir 0 FPS em jogos como DKCR:HD, Subnautica Below Zero e Ori 2, mas pode afetar carregamento ou desempenho em jogos Unreal Engine. + Sincronizar Operações de Memória + Garante a consistência dos dados entre operações de computação e memória. Esta opção deve corrigir problemas em alguns jogos, mas pode reduzir o desempenho nalguns casos. Os jogos com Unreal Engine 4 parecem ser os mais afectados. Desativar reordenação de buffer Quando assinalado, desativa a reordenação de carregamentos de memória mapeada, permitindo associar carregamentos a desenhos específicos. Pode reduzir o desempenho nalguns casos. Ativar cache LRU 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 b2a7cdc561..285ec49606 100644 --- a/src/android/app/src/main/res/values-ru/strings.xml +++ b/src/android/app/src/main/res/values-ru/strings.xml @@ -78,6 +78,8 @@ Обеспечивает плавную и стабильную подачу кадров за счет синхронизации их времени, уменьшая подтормаживания и неравномерную анимацию. Идеально для игр с нестабильным временем кадров или микро-подтормаживаниями во время игры. Ранний релиз ограждений Помогает исправить 0 FPS в играх типа DKCR:HD, Subnautica Below Zero и Ori 2, но может нарушить загрузку или производительность в играх на Unreal Engine. + Синхронизация операций с памятью + Обеспечивает согласованность данных между вычислительными операциями и операциями с памятью. Эта опция должна исправлять проблемы в некоторых играх, но может снижать производительность в некоторых случаях. Наиболее сильно это затрагивает игры на Unreal Engine 4. Отключить переупорядочивание буфера При включении отключает переупорядочивание загрузки отображенной памяти, позволяя связывать загрузки с конкретными отрисовками. В некоторых случаях может снизить производительность. Включить LRU-кеш 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 65a414db20..d63f8a3f1d 100644 --- a/src/android/app/src/main/res/values-sr/strings.xml +++ b/src/android/app/src/main/res/values-sr/strings.xml @@ -87,6 +87,8 @@ Осигурава глатку и доследан испоруку оквира синхронизацијом времена између оквира, смањење муцања и неуједначене анимације. Идеално за игре које доживљавају временски оквир нестабилност или микро-штитнике током играња. Ranije oslobađanje ograda Pomaže u popravci 0 FPS u igrama kao što su DKCR:HD, Subnautica Below Zero i Ori 2, ali može oštetiti učitavanje ili performanse u Unreal Engine igrama. + Синхронизација меморијских операција + Осигурава конзистентност података између рачунских и меморијских операција. Ова опција би требало да поправи проблеме у неким играма, али може смањити перформансе у неким случајевима. Чини се да су игре са Unreal Engine 4 највише погођене. Онемогући преуређивање бафера Када је означено, онемогућава преуређивање учитавања мапиране меморије што омогућава повезивање учитавања са одређеним цртањима. Може у неким случајевима смањити перформансе. Користите ауто-стуб 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 dccd294a2f..abeefa142e 100644 --- a/src/android/app/src/main/res/values-uk/strings.xml +++ b/src/android/app/src/main/res/values-uk/strings.xml @@ -78,6 +78,8 @@ Забезпечує плавну та стабільну подачу кадрів шляхом синхронізації їх часу, зменшуючи підвисання та нерівномірну анімацію. Ідеально для ігор з нестабільним часом кадрів або мікро-підвисаннями під час гри. Release fences early Це налаштування може бути необхідним для виправлення помилок 0FPS у деяких іграх (зокрема DKCR:HD, Subnautica та Ori 2). Водночас інші ігри, особливо створені на рушії Unreal Engine, можуть працювати некоректно або взагалі не запускатися. + Синхронізація операцій з пам\'яттю + Забезпечує узгодженість даних між обчислювальними операціями та операціями з пам\'яттю. Ця опція має виправляти проблеми в деяких іграх, але може знижувати продуктивність у деяких випадках. Ігри на Unreal Engine 4, здається, найбільш постраждалі. Вимкнути переупорядкування буфера Якщо позначено, вимикає переупорядкування завантажень відображеної пам\'яті, що дозволяє пов\'язувати завантаження з конкретними малюваннями. Може знизити продуктивність у деяких випадках. Увімкнути LRU-кеш 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 d70c871daf..4e6fd8a436 100644 --- a/src/android/app/src/main/res/values-vi/strings.xml +++ b/src/android/app/src/main/res/values-vi/strings.xml @@ -78,6 +78,8 @@ Đảm bảo cung cấp khung hình mượt mà và ổn định bằng cách đồng bộ hóa thời gian giữa các khung hình, giảm giật lag và hoạt ảnh không đồng đều. Lý tưởng cho các trò chơi gặp vấn đề về thời gian khung hình không ổn định hoặc giật lag nhẹ trong khi chơi. Giải phóng rào chắn sớm Giúp sửa lỗi 0 FPS trong các trò chơi như DKCR:HD, Subnautica Below Zero và Ori 2, nhưng có thể ảnh hưởng đến tải hoặc hiệu suất trong trò chơi Unreal Engine. + Đồng bộ hoá thao tác bộ nhớ + Đảm bảo tính nhất quán dữ liệu giữa các thao tác tính toán và bộ nhớ. Tùy chọn này nên khắc phục sự cố trong một số trò chơi, nhưng có thể làm giảm hiệu suất trong một số trường hợp. Các trò chơi với Unreal Engine 4 có vẻ bị ảnh hưởng nhiều nhất. Tắt sắp xếp lại bộ đệm Khi được chọn, sẽ tắt tính năng sắp xếp lại các lần tải lên bộ nhớ đã ánh xạ, cho phép liên kết các lần tải lên với các bản vẽ cụ thể. Có thể làm giảm hiệu suất trong một số trường hợp. Bật bộ nhớ đệm LRU 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 0d84065577..aff8ffbf08 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 @@ -77,6 +77,8 @@ 通过同步帧间时间确保流畅一致的帧交付,减少卡顿和不均匀动画。适合存在帧时间不稳定或游戏过程中出现微卡顿的游戏。 提前释放围栏 可修复《大金刚国度:热带寒流》《深海迷航:零度之下》和《奥日2》等游戏中的0 FPS问题,但可能影响Unreal Engine游戏的加载或性能。 + 同步内存操作 + 确保计算和内存操作之间的数据一致性。 此选项应能修复某些游戏中的问题,但在某些情况下可能会降低性能。 使用Unreal Engine 4的游戏似乎受影响最大。 禁用缓冲重排序 勾选时,禁用映射内存上传的重排序功能,允许将上传与特定绘制关联。在某些情况下可能会降低性能。 启用LRU缓存 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 d79514a307..3a11d83b84 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 @@ -78,6 +78,8 @@ 通過同步幀間時間確保流暢一致的幀交付,減少卡頓和不均勻動畫。適合存在幀時間不穩定或遊戲過程中出現微卡頓的遊戲。 提前釋放圍欄 可修復《大金剛國度:熱帶寒流》《深海迷航:零度之下》和《奧日2》等遊戲中的0 FPS問題,但可能影響Unreal Engine遊戲的載入或效能。 + 同步記憶體操作 + 確保計算和記憶體操作之間的資料一致性。 此選項應能修復某些遊戲中的問題,但在某些情況下可能會降低效能。 使用Unreal Engine 4的遊戲似乎受影響最大。 停用緩衝區重新排序 勾選時,停用映射記憶體上傳的重新排序功能,允許將上傳與特定繪製關聯。某些情況下可能會降低效能。 啟用LRU快取 diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index f1991fee1b..88474faf3c 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -92,6 +92,8 @@ Ensures smooth and consistent frame delivery by synchronizing the timing between frames, reducing stuttering and uneven animation. Ideal for games that experience frame timing instability or micro-stutters during gameplay. Release Fences Early Helps fix 0 FPS in games like DKCR:HD, Subnautica Below Zero and Ori 2, but may break loading or performance in Unreal Engine games. + Sync Memory Operations + Ensures data consistency between compute and memory operations. This option should fix issues in some games, but may also reduce performance in some cases. Unreal Engine 4 games often see the most significant changes thereof. Disable Buffer Reorder When checked, disables reordering of mapped memory uploads which allows to associate uploads with specific draws. May reduce performance in some cases. diff --git a/src/common/settings.h b/src/common/settings.h index faf7210f5d..288a41b369 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -466,7 +466,7 @@ struct Values { true, true}; #endif - + SwitchableSetting sync_memory_operations{linkage, false, "sync_memory_operations", Category::RendererAdvanced, true, true}; SwitchableSetting async_presentation{linkage, #ifdef ANDROID true, diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp index c2c07deb9b..8ea4cbd43a 100644 --- a/src/video_core/dma_pusher.cpp +++ b/src/video_core/dma_pusher.cpp @@ -1,10 +1,9 @@ // SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include "common/cityhash.h" #include "common/settings.h" #include "core/core.h" #include "video_core/dma_pusher.h" @@ -12,26 +11,22 @@ #include "video_core/gpu.h" #include "video_core/guest_memory.h" #include "video_core/memory_manager.h" +#include "video_core/rasterizer_interface.h" namespace Tegra { constexpr u32 MacroRegistersStart = 0xE00; -constexpr u32 ComputeInline = 0x6D; -//start on PR#76 of Eden this is a unused variable in android (need to investigate) - -// Dummy function that uses ComputeInline -constexpr void UseComputeInline() { - static_cast(ComputeInline); // Suppress unused variable error -} +[[maybe_unused]] constexpr u32 ComputeInline = 0x6D; DmaPusher::DmaPusher(Core::System& system_, GPU& gpu_, MemoryManager& memory_manager_, Control::ChannelState& channel_state_) : gpu{gpu_}, system{system_}, memory_manager{memory_manager_}, puller{gpu_, memory_manager_, - *this, channel_state_} {} + *this, channel_state_}, signal_sync{false}, synced{false} {} DmaPusher::~DmaPusher() = default; void DmaPusher::DispatchCalls() { + dma_pushbuffer_subindex = 0; dma_state.is_last_call = true; @@ -69,14 +64,16 @@ bool DmaPusher::Step() { } else { const CommandListHeader command_list_header{ command_list.command_lists[dma_pushbuffer_subindex++]}; - dma_state.dma_get = command_list_header.addr; - if (dma_pushbuffer_subindex >= command_list.command_lists.size()) { - // We've gone through the current list, remove it from the queue - dma_pushbuffer.pop(); - dma_pushbuffer_subindex = 0; + if (signal_sync) { + std::unique_lock lk(sync_mutex); + sync_cv.wait(lk, [this]() { return synced; }); + signal_sync = false; + synced = false; } + dma_state.dma_get = command_list_header.addr; + if (command_list_header.size == 0) { return true; } @@ -88,6 +85,7 @@ bool DmaPusher::Step() { dma_state.dma_get, command_list_header.size * sizeof(u32)); } } + const auto safe_process = [&] { Tegra::Memory::GpuGuestMemory @@ -95,6 +93,7 @@ bool DmaPusher::Step() { &command_headers); ProcessCommands(headers); }; + const auto unsafe_process = [&] { Tegra::Memory::GpuGuestMemory @@ -103,22 +102,33 @@ bool DmaPusher::Step() { ProcessCommands(headers); }; - // Only use unsafe reads for non-compute macro operations - if (Settings::IsGPULevelHigh()) { - const bool is_compute = (subchannel_type[dma_state.subchannel] == - Engines::EngineTypes::KeplerCompute); - - if (dma_state.method >= MacroRegistersStart && !is_compute) { - unsafe_process(); - return true; - } - - // Always use safe reads for compute operations + if (Settings::IsGPULevelExtreme()) { safe_process(); - return true; + } else if (Settings::IsGPULevelHigh()) { + if (dma_state.method >= MacroRegistersStart) { + unsafe_process(); + } else { + safe_process(); + } + } else { + unsafe_process(); } - unsafe_process(); + if (dma_pushbuffer_subindex >= command_list.command_lists.size()) { + // We've gone through the current list, remove it from the queue + dma_pushbuffer.pop(); + dma_pushbuffer_subindex = 0; + } else if (command_list.command_lists[dma_pushbuffer_subindex].sync && Settings::values.sync_memory_operations.GetValue()) { + signal_sync = true; + } + + if (signal_sync) { + rasterizer->SignalFence([this]() { + std::scoped_lock lk(sync_mutex); + synced = true; + sync_cv.notify_all(); + }); + } } return true; } @@ -226,7 +236,8 @@ void DmaPusher::CallMultiMethod(const u32* base_start, u32 num_methods) const { } } -void DmaPusher::BindRasterizer(VideoCore::RasterizerInterface* rasterizer) { +void DmaPusher::BindRasterizer(VideoCore::RasterizerInterface* rasterizer_) { + rasterizer = rasterizer_; puller.BindRasterizer(rasterizer); } diff --git a/src/video_core/dma_pusher.h b/src/video_core/dma_pusher.h index e46a8fa5c6..f850513603 100644 --- a/src/video_core/dma_pusher.h +++ b/src/video_core/dma_pusher.h @@ -1,9 +1,13 @@ -// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include +#include #include #include #include @@ -74,8 +78,10 @@ struct CommandListHeader { union { u64 raw; BitField<0, 40, GPUVAddr> addr; - BitField<41, 1, u64> is_non_main; + BitField<40, 1, u64> allow_flush; + BitField<41, 1, u64> is_push_buffer; BitField<42, 21, u64> size; + BitField<63, 1, u64> sync; }; }; static_assert(sizeof(CommandListHeader) == sizeof(u64), "CommandListHeader is incorrect size"); @@ -178,6 +184,12 @@ private: Core::System& system; MemoryManager& memory_manager; mutable Engines::Puller puller; + + VideoCore::RasterizerInterface* rasterizer; + bool signal_sync; + bool synced; + std::mutex sync_mutex; + std::condition_variable sync_cv; }; } // namespace Tegra diff --git a/src/yuzu/configuration/shared_translation.cpp b/src/yuzu/configuration/shared_translation.cpp index b9884e9442..fd541d4fd7 100644 --- a/src/yuzu/configuration/shared_translation.cpp +++ b/src/yuzu/configuration/shared_translation.cpp @@ -269,6 +269,8 @@ std::unique_ptr InitializeTranslations(QWidget* parent) INSERT(Settings, bg_blue, QString(), QString()); // Renderer (Advanced Graphics) + INSERT(Settings, sync_memory_operations, tr("Sync Memory Operations"), + tr("Ensures data consistency between compute and memory operations.\nThis option should fix issues in some games, but may also reduce performance in some cases.\nUnreal Engine 4 games often see the most significant changes thereof.")); INSERT(Settings, async_presentation, tr("Enable asynchronous presentation (Vulkan only)"), From c271593a4b509bfcc49eac6832bdf039b218c67b Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 16 Aug 2025 12:03:12 +0000 Subject: [PATCH 11/12] [compat] improve thread naming logic Signed-off-by: lizzie --- src/common/thread.cpp | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/common/thread.cpp b/src/common/thread.cpp index 34cc1527bf..8461be25a8 100644 --- a/src/common/thread.cpp +++ b/src/common/thread.cpp @@ -15,9 +15,8 @@ #else #if defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) #include -#else -#include #endif +#include #include #endif #ifndef _WIN32 @@ -90,34 +89,37 @@ void SetCurrentThreadName(const char* name) { #else // !MSVC_VER, so must be POSIX threads // MinGW with the POSIX threading model does not support pthread_setname_np -#if !defined(_WIN32) || defined(_MSC_VER) void SetCurrentThreadName(const char* name) { + // See for reference + // https://gitlab.freedesktop.org/mesa/mesa/-/blame/main/src/util/u_thread.c?ref_type=heads#L75 #ifdef __APPLE__ pthread_setname_np(name); +#elif defined(__HAIKU__) + rename_thread(find_thread(NULL), name); #elif defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) pthread_set_name_np(pthread_self(), name); #elif defined(__NetBSD__) pthread_setname_np(pthread_self(), "%s", (void*)name); -#elif defined(__linux__) - // Linux limits thread names to 15 characters and will outright reject any - // attempt to set a longer name with ERANGE. - std::string truncated(name, std::min(strlen(name), static_cast(15))); - if (int e = pthread_setname_np(pthread_self(), truncated.c_str())) { - errno = e; - LOG_ERROR(Common, "Failed to set thread name to '{}': {}", truncated, GetLastErrorMsg()); +#elif defined(__linux__) || defined(__CYGWIN__) || defined(__sun__) || defined(__glibc__) || defined(__managarm__) + int ret = pthread_setname_np(pthread_self(), name); + if (ret == ERANGE) { + // Linux limits thread names to 15 characters and will outright reject any + // attempt to set a longer name with ERANGE. + char buf[16]; + size_t const len = std::min(std::strlen(name), sizeof(buf) - 1); + std::memcpy(truncated, name, len); + buf[len] = '\0'; + pthread_setname_np(pthread_self(), buf); } +#elif !defined(_WIN32) || defined(_MSC_VER) + // mingw stub + (void)name; #else pthread_setname_np(pthread_self(), name); #endif } #endif -#if defined(_WIN32) -void SetCurrentThreadName(const char* name) { - // Do Nothing on MingW -} -#endif - #endif } // namespace Common From 3c6610d4d793fae15715216fc19692f66ac622d9 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 16 Aug 2025 12:04:18 +0000 Subject: [PATCH 12/12] license header fix Signed-off-by: lizzie --- src/common/thread.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/thread.cpp b/src/common/thread.cpp index 8461be25a8..1e88f1a22d 100644 --- a/src/common/thread.cpp +++ b/src/common/thread.cpp @@ -1,3 +1,5 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2013 Dolphin Emulator Project // SPDX-FileCopyrightText: 2014 Citra Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later