aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpineappleEA <pineaea@gmail.com>2023-06-13 09:04:01 +0200
committerpineappleEA <pineaea@gmail.com>2023-06-13 09:04:01 +0200
commitfbb35fcc7e453e749b3767e64027ae27780c5f53 (patch)
tree1cf210320da1480472d509d7cd755831e7500ea6
parentabe9c2ff0df0c3ba8d39154526ca00d04cc55000 (diff)
early-access version 3669EA-3669
-rwxr-xr-xREADME.md2
-rwxr-xr-xsrc/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt7
-rwxr-xr-xsrc/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt9
-rwxr-xr-xsrc/android/app/src/main/jni/config.cpp8
-rwxr-xr-xsrc/android/app/src/main/jni/default_ini.h6
-rwxr-xr-xsrc/android/app/src/main/res/values-de/strings.xml3
-rwxr-xr-xsrc/android/app/src/main/res/values-es/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-fr/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-it/strings.xml7
-rwxr-xr-xsrc/android/app/src/main/res/values-ja/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-ko/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-nb/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-pl/strings.xml7
-rwxr-xr-xsrc/android/app/src/main/res/values-pt-rBR/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-pt-rPT/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-ru/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-uk/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-zh-rCN/strings.xml8
-rwxr-xr-xsrc/android/app/src/main/res/values-zh-rTW/strings.xml9
-rwxr-xr-xsrc/android/app/src/main/res/values/strings.xml2
-rwxr-xr-xsrc/core/file_sys/vfs_real.cpp180
-rwxr-xr-xsrc/core/file_sys/vfs_real.h28
-rwxr-xr-xsrc/video_core/texture_cache/image_info.cpp20
23 files changed, 146 insertions, 222 deletions
diff --git a/README.md b/README.md
index bd923fa38..4b9b13897 100755
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
1yuzu emulator early access 1yuzu emulator early access
2============= 2=============
3 3
4This is the source code for early-access 3667. 4This is the source code for early-access 3669.
5 5
6## Legal Notice 6## Legal Notice
7 7
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
index c5722a5a1..fa84f94f5 100755
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
@@ -26,13 +26,18 @@ enum class IntSetting(
26 RENDERER_FORCE_MAX_CLOCK( 26 RENDERER_FORCE_MAX_CLOCK(
27 "force_max_clock", 27 "force_max_clock",
28 Settings.SECTION_RENDERER, 28 Settings.SECTION_RENDERER,
29 1 29 0
30 ), 30 ),
31 RENDERER_ASYNCHRONOUS_SHADERS( 31 RENDERER_ASYNCHRONOUS_SHADERS(
32 "use_asynchronous_shaders", 32 "use_asynchronous_shaders",
33 Settings.SECTION_RENDERER, 33 Settings.SECTION_RENDERER,
34 0 34 0
35 ), 35 ),
36 RENDERER_REACTIVE_FLUSHING(
37 "use_reactive_flushing",
38 Settings.SECTION_RENDERER,
39 0
40 ),
36 RENDERER_DEBUG( 41 RENDERER_DEBUG(
37 "debug", 42 "debug",
38 Settings.SECTION_RENDERER, 43 Settings.SECTION_RENDERER,
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 061046b2e..1ceaa6fb4 100755
--- 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
@@ -321,6 +321,15 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
321 IntSetting.RENDERER_ASYNCHRONOUS_SHADERS.defaultValue 321 IntSetting.RENDERER_ASYNCHRONOUS_SHADERS.defaultValue
322 ) 322 )
323 ) 323 )
324 add(
325 SwitchSetting(
326 IntSetting.RENDERER_REACTIVE_FLUSHING,
327 R.string.renderer_reactive_flushing,
328 R.string.renderer_reactive_flushing_description,
329 IntSetting.RENDERER_REACTIVE_FLUSHING.key,
330 IntSetting.RENDERER_REACTIVE_FLUSHING.defaultValue
331 )
332 )
324 } 333 }
325 } 334 }
326 335
diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp
index 2d622a048..43e8aa72a 100755
--- a/src/android/app/src/main/jni/config.cpp
+++ b/src/android/app/src/main/jni/config.cpp
@@ -235,9 +235,13 @@ void Config::ReadValues() {
235 Settings::values.async_presentation = 235 Settings::values.async_presentation =
236 config->GetBoolean("Renderer", "async_presentation", true); 236 config->GetBoolean("Renderer", "async_presentation", true);
237 237
238 // Enable force_max_clock by default on Android 238 // Disable force_max_clock by default on Android
239 Settings::values.renderer_force_max_clock = 239 Settings::values.renderer_force_max_clock =
240 config->GetBoolean("Renderer", "force_max_clock", true); 240 config->GetBoolean("Renderer", "force_max_clock", false);
241
242 // Disable use_reactive_flushing by default on Android
243 Settings::values.use_reactive_flushing =
244 config->GetBoolean("Renderer", "use_reactive_flushing", false);
241 245
242 // Audio 246 // Audio
243 ReadSetting("Audio", Settings::values.sink_id); 247 ReadSetting("Audio", Settings::values.sink_id);
diff --git a/src/android/app/src/main/jni/default_ini.h b/src/android/app/src/main/jni/default_ini.h
index c5dfaff54..d81422a74 100755
--- a/src/android/app/src/main/jni/default_ini.h
+++ b/src/android/app/src/main/jni/default_ini.h
@@ -251,7 +251,7 @@ backend =
251# 0: Off, 1 (default): On 251# 0: Off, 1 (default): On
252async_presentation = 252async_presentation =
253 253
254# Enable graphics API debugging mode. 254# Forces the GPU to run at the maximum possible clocks (thermal constraints will still be applied).
255# 0 (default): Disabled, 1: Enabled 255# 0 (default): Disabled, 1: Enabled
256force_max_clock = 256force_max_clock =
257 257
@@ -328,6 +328,10 @@ shader_backend =
328# 0 (default): Off, 1: On 328# 0 (default): Off, 1: On
329use_asynchronous_shaders = 329use_asynchronous_shaders =
330 330
331# Uses reactive flushing instead of predictive flushing. Allowing a more accurate syncing of memory.
332# 0 (default): Off, 1: On
333use_reactive_flushing =
334
331# NVDEC emulation. 335# NVDEC emulation.
332# 0: Disabled, 1: CPU Decoding, 2 (default): GPU Decoding 336# 0: Disabled, 1: CPU Decoding, 2 (default): GPU Decoding
333nvdec_emulation = 337nvdec_emulation =
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 795320e3e..969223ef8 100755
--- a/src/android/app/src/main/res/values-de/strings.xml
+++ b/src/android/app/src/main/res/values-de/strings.xml
@@ -176,7 +176,6 @@
176 <string name="installing_driver">Treiber wird installiert...</string> 176 <string name="installing_driver">Treiber wird installiert...</string>
177 177
178 <!-- Preferences Screen --> 178 <!-- Preferences Screen -->
179 <string name="preferences_advanced_settings">Erweiterte Einstellungen</string>
180 <string name="preferences_settings">Einstellungen</string> 179 <string name="preferences_settings">Einstellungen</string>
181 <string name="preferences_general">Allgemein</string> 180 <string name="preferences_general">Allgemein</string>
182 <string name="preferences_system">System</string> 181 <string name="preferences_system">System</string>
@@ -228,7 +227,6 @@
228 <string name="performance_warning">Das Deaktivieren dieser Einstellung führt zu erheblichen Leistungsverlusten! Für ein optimales Erlebnis wird empfohlen, sie aktiviert zu lassen.</string> 227 <string name="performance_warning">Das Deaktivieren dieser Einstellung führt zu erheblichen Leistungsverlusten! Für ein optimales Erlebnis wird empfohlen, sie aktiviert zu lassen.</string>
229 228
230 <!-- Region Names --> 229 <!-- Region Names -->
231 <string name="region_auto">Automatisch auswählen</string>
232 <string name="region_japan">Japan</string> 230 <string name="region_japan">Japan</string>
233 <string name="region_usa">USA</string> 231 <string name="region_usa">USA</string>
234 <string name="region_europe">Europa</string> 232 <string name="region_europe">Europa</string>
@@ -301,7 +299,6 @@
301 <string name="ratio_stretch">Auf Fenster anpassen</string> 299 <string name="ratio_stretch">Auf Fenster anpassen</string>
302 300
303 <!-- CPU Accuracy --> 301 <!-- CPU Accuracy -->
304 <string name="cpu_accuracy_auto">Auto</string>
305 <string name="cpu_accuracy_accurate">Akkurat</string> 302 <string name="cpu_accuracy_accurate">Akkurat</string>
306 <string name="cpu_accuracy_unsafe">Unsicher</string> 303 <string name="cpu_accuracy_unsafe">Unsicher</string>
307 <string name="cpu_accuracy_paranoid">Paranoid (Langsam)</string> 304 <string name="cpu_accuracy_paranoid">Paranoid (Langsam)</string>
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 a7b4ebef4..986e80e50 100755
--- a/src/android/app/src/main/res/values-es/strings.xml
+++ b/src/android/app/src/main/res/values-es/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">Archivo de claves inválido seleccionado</string> 61 <string name="invalid_keys_file">Archivo de claves inválido seleccionado</string>
62 <string name="install_keys_success">Claves instaladas correctamente</string> 62 <string name="install_keys_success">Claves instaladas correctamente</string>
63 <string name="reading_keys_failure">Error al leer las claves de cifrado</string> 63 <string name="reading_keys_failure">Error al leer las claves de cifrado</string>
64 <string name="install_keys_failure_extension_description">
65 1. Verifique que sus claves acaben con la extensión .keys.\n\n
66 2. Las claves no deben de estar almacenadas en la carpeta Descargas.\n\n
67 Resuelva el/los problema(s) y vuelva a intentarlo.
68 </string>
69 <string name="invalid_keys_error">Claves de cifrado no válidas</string> 64 <string name="invalid_keys_error">Claves de cifrado no válidas</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">El archivo seleccionado es incorrecto o está corrupto. Vuelva a redumpear sus claves.</string> 66 <string name="install_keys_failure_description">El archivo seleccionado es incorrecto o está corrupto. Vuelva a redumpear sus claves.</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">Instalando driver...</string> 179 <string name="installing_driver">Instalando driver...</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Configuración avanzada</string>
188 <string name="preferences_settings">Ajustes</string> 182 <string name="preferences_settings">Ajustes</string>
189 <string name="preferences_general">General</string> 183 <string name="preferences_general">General</string>
190 <string name="preferences_system">Sistema</string> 184 <string name="preferences_system">Sistema</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">¡Desactivar esta configuración reducirá significativamente el rendimiento de la emulación! Para obtener la mejor experiencia, se recomienda dejar esta configuración habilitada.</string> 232 <string name="performance_warning">¡Desactivar esta configuración reducirá significativamente el rendimiento de la emulación! Para obtener la mejor experiencia, se recomienda dejar esta configuración habilitada.</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">Auto seleccionar</string>
242 <string name="region_japan">Japón</string> 235 <string name="region_japan">Japón</string>
243 <string name="region_usa">EEUU</string> 236 <string name="region_usa">EEUU</string>
244 <string name="region_europe">Europa</string> 237 <string name="region_europe">Europa</string>
@@ -311,7 +304,6 @@
311 <string name="ratio_stretch">Ajustar a la ventana</string> 304 <string name="ratio_stretch">Ajustar a la ventana</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Auto</string>
315 <string name="cpu_accuracy_accurate">Preciso</string> 307 <string name="cpu_accuracy_accurate">Preciso</string>
316 <string name="cpu_accuracy_unsafe">Impreciso</string> 308 <string name="cpu_accuracy_unsafe">Impreciso</string>
317 <string name="cpu_accuracy_paranoid">Paranoico (Lento)</string> 309 <string name="cpu_accuracy_paranoid">Paranoico (Lento)</string>
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 905ab5c03..14a9b2d5c 100755
--- a/src/android/app/src/main/res/values-fr/strings.xml
+++ b/src/android/app/src/main/res/values-fr/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">Fichier de clés sélectionné invalide</string> 61 <string name="invalid_keys_file">Fichier de clés sélectionné invalide</string>
62 <string name="install_keys_success">Clés installées avec succès</string> 62 <string name="install_keys_success">Clés installées avec succès</string>
63 <string name="reading_keys_failure">Erreur lors de la lecture des clés de chiffrement</string> 63 <string name="reading_keys_failure">Erreur lors de la lecture des clés de chiffrement</string>
64 <string name="install_keys_failure_extension_description">
65 1. Vérifiez que vos clés ont l\'extension .keys.\n\n
66 2. Les clés ne doivent pas être stockées dans le dossier Téléchargements.\n\n
67 Résolvez le(s) problème(s) et réessayez.
68 </string>
69 <string name="invalid_keys_error">Clés de chiffrement invalides</string> 64 <string name="invalid_keys_error">Clés de chiffrement invalides</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">Le fichier sélectionné est incorrect ou corrompu. Veuillez dumper à nouveau vos clés.</string> 66 <string name="install_keys_failure_description">Le fichier sélectionné est incorrect ou corrompu. Veuillez dumper à nouveau vos clés.</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">Installation du pilote...</string> 179 <string name="installing_driver">Installation du pilote...</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Paramètres avancés</string>
188 <string name="preferences_settings">Paramètres</string> 182 <string name="preferences_settings">Paramètres</string>
189 <string name="preferences_general">Général</string> 183 <string name="preferences_general">Général</string>
190 <string name="preferences_system">Système</string> 184 <string name="preferences_system">Système</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">La désactivation de ce paramètre réduira considérablement les performances d\'émulation ! Pour une expérience optimale, il est recommandé de laisser ce paramètre activé.</string> 232 <string name="performance_warning">La désactivation de ce paramètre réduira considérablement les performances d\'émulation ! Pour une expérience optimale, il est recommandé de laisser ce paramètre activé.</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">Sélection automatique</string>
242 <string name="region_japan">Japon</string> 235 <string name="region_japan">Japon</string>
243 <string name="region_usa">É.-U.A.</string> 236 <string name="region_usa">É.-U.A.</string>
244 <string name="region_europe">Europe</string> 237 <string name="region_europe">Europe</string>
@@ -311,7 +304,6 @@
311 <string name="ratio_stretch">Étirer à la fenêtre</string> 304 <string name="ratio_stretch">Étirer à la fenêtre</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Auto</string>
315 <string name="cpu_accuracy_accurate">Précis</string> 307 <string name="cpu_accuracy_accurate">Précis</string>
316 <string name="cpu_accuracy_unsafe">Risqué</string> 308 <string name="cpu_accuracy_unsafe">Risqué</string>
317 <string name="cpu_accuracy_paranoid">Paranoïaque (Lent)</string> 309 <string name="cpu_accuracy_paranoid">Paranoïaque (Lent)</string>
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 fede49650..47a4cfa31 100755
--- a/src/android/app/src/main/res/values-it/strings.xml
+++ b/src/android/app/src/main/res/values-it/strings.xml
@@ -61,10 +61,6 @@
61 <string name="invalid_keys_file">Selezionate chiavi non valide</string> 61 <string name="invalid_keys_file">Selezionate chiavi non valide</string>
62 <string name="install_keys_success">Chiavi installate correttamente</string> 62 <string name="install_keys_success">Chiavi installate correttamente</string>
63 <string name="reading_keys_failure">Errore durante la lettura delle chiavi di crittografia</string> 63 <string name="reading_keys_failure">Errore durante la lettura delle chiavi di crittografia</string>
64 <string name="install_keys_failure_extension_description">
651. Verifica che le tue chiavi abbiano l\'estensione .keys.\n\n
662. Le chiavi non devono essere archiviate nella cartella Download.\n\n
67Risolvi i problemi e riprova.</string>
68 <string name="invalid_keys_error">Chiavi di crittografia non valide</string> 64 <string name="invalid_keys_error">Chiavi di crittografia non valide</string>
69 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
70 <string name="install_keys_failure_description">Il file selezionato è incorretto o corrotto. Per favore riesegui il dump delle tue chiavi.</string> 66 <string name="install_keys_failure_description">Il file selezionato è incorretto o corrotto. Per favore riesegui il dump delle tue chiavi.</string>
@@ -183,7 +179,6 @@ Risolvi i problemi e riprova.</string>
183 <string name="installing_driver">Installando i driver...</string> 179 <string name="installing_driver">Installando i driver...</string>
184 180
185 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
186 <string name="preferences_advanced_settings">Impostazioni Avanzate</string>
187 <string name="preferences_settings">Impostazioni</string> 182 <string name="preferences_settings">Impostazioni</string>
188 <string name="preferences_general">Generali</string> 183 <string name="preferences_general">Generali</string>
189 <string name="preferences_system">Sistema</string> 184 <string name="preferences_system">Sistema</string>
@@ -237,7 +232,6 @@ Risolvi i problemi e riprova.</string>
237 <string name="performance_warning">Disattivare questa impostazione può ridurre significativamente le performance di emulazione! Per una migliore esperienza, è consigliato lasciare questa impostazione attivata.</string> 232 <string name="performance_warning">Disattivare questa impostazione può ridurre significativamente le performance di emulazione! Per una migliore esperienza, è consigliato lasciare questa impostazione attivata.</string>
238 233
239 <!-- Region Names --> 234 <!-- Region Names -->
240 <string name="region_auto">Selezione automatica</string>
241 <string name="region_japan">Giappone</string> 235 <string name="region_japan">Giappone</string>
242 <string name="region_usa">USA</string> 236 <string name="region_usa">USA</string>
243 <string name="region_europe">Europa</string> 237 <string name="region_europe">Europa</string>
@@ -310,7 +304,6 @@ Risolvi i problemi e riprova.</string>
310 <string name="ratio_stretch">Allunga a finestra</string> 304 <string name="ratio_stretch">Allunga a finestra</string>
311 305
312 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
313 <string name="cpu_accuracy_auto">Automatico</string>
314 <string name="cpu_accuracy_accurate">Accurata</string> 307 <string name="cpu_accuracy_accurate">Accurata</string>
315 <string name="cpu_accuracy_unsafe">Non sicura</string> 308 <string name="cpu_accuracy_unsafe">Non sicura</string>
316 <string name="cpu_accuracy_paranoid">Paranoico (Lento)</string> 309 <string name="cpu_accuracy_paranoid">Paranoico (Lento)</string>
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 4a649778e..46eda9ef7 100755
--- a/src/android/app/src/main/res/values-ja/strings.xml
+++ b/src/android/app/src/main/res/values-ja/strings.xml
@@ -60,11 +60,6 @@
60 <string name="invalid_keys_file">無効なキーファイルが選択されました</string> 60 <string name="invalid_keys_file">無効なキーファイルが選択されました</string>
61 <string name="install_keys_success">正常にインストールされました</string> 61 <string name="install_keys_success">正常にインストールされました</string>
62 <string name="reading_keys_failure">暗号化キーの読み取りエラー</string> 62 <string name="reading_keys_failure">暗号化キーの読み取りエラー</string>
63 <string name="install_keys_failure_extension_description">
64 1. キーの拡張子が .keys であることを確認します。\n\n
65 2. キーはダウンロードフォルダに保存しないでください。\n\n
66 問題を解決して、再度お試しください。
67 </string>
68 <string name="invalid_keys_error">暗号化キーが無効です</string> 63 <string name="invalid_keys_error">暗号化キーが無効です</string>
69 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 64 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
70 <string name="install_keys_failure_description">選択されたファイルが不正または破損しています。キーを再ダンプしてください。</string> 65 <string name="install_keys_failure_description">選択されたファイルが不正または破損しています。キーを再ダンプしてください。</string>
@@ -183,7 +178,6 @@
183 <string name="installing_driver">インストール中…</string> 178 <string name="installing_driver">インストール中…</string>
184 179
185 <!-- Preferences Screen --> 180 <!-- Preferences Screen -->
186 <string name="preferences_advanced_settings">詳細設定</string>
187 <string name="preferences_settings">設定</string> 181 <string name="preferences_settings">設定</string>
188 <string name="preferences_general">全般</string> 182 <string name="preferences_general">全般</string>
189 <string name="preferences_system">システム</string> 183 <string name="preferences_system">システム</string>
@@ -236,7 +230,6 @@
236 <string name="performance_warning">この設定をオフにすると、エミュレーションのパフォーマンスが著しく低下します!最高の体験を得るためには、この設定を有効にしておくことをお勧めします。</string> 230 <string name="performance_warning">この設定をオフにすると、エミュレーションのパフォーマンスが著しく低下します!最高の体験を得るためには、この設定を有効にしておくことをお勧めします。</string>
237 231
238 <!-- Region Names --> 232 <!-- Region Names -->
239 <string name="region_auto">自動選択</string>
240 <string name="region_japan">日本</string> 233 <string name="region_japan">日本</string>
241 <string name="region_usa">アメリカ</string> 234 <string name="region_usa">アメリカ</string>
242 <string name="region_europe">ヨーロッパ</string> 235 <string name="region_europe">ヨーロッパ</string>
@@ -309,7 +302,6 @@
309 <string name="ratio_stretch">ウィンドウに合わせる</string> 302 <string name="ratio_stretch">ウィンドウに合わせる</string>
310 303
311 <!-- CPU Accuracy --> 304 <!-- CPU Accuracy -->
312 <string name="cpu_accuracy_auto">自動</string>
313 <string name="cpu_accuracy_accurate">正確</string> 305 <string name="cpu_accuracy_accurate">正確</string>
314 <string name="cpu_accuracy_unsafe">不安定</string> 306 <string name="cpu_accuracy_unsafe">不安定</string>
315 <string name="cpu_accuracy_paranoid">パラノイド (低速)</string> 307 <string name="cpu_accuracy_paranoid">パラノイド (低速)</string>
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 43b00ebc4..5da80ab4b 100755
--- a/src/android/app/src/main/res/values-ko/strings.xml
+++ b/src/android/app/src/main/res/values-ko/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">잘못된 keys 파일 선택</string> 61 <string name="invalid_keys_file">잘못된 keys 파일 선택</string>
62 <string name="install_keys_success">keys가 성공적으로 설치됨</string> 62 <string name="install_keys_success">keys가 성공적으로 설치됨</string>
63 <string name="reading_keys_failure">암호화 keys 읽기 오류</string> 63 <string name="reading_keys_failure">암호화 keys 읽기 오류</string>
64 <string name="install_keys_failure_extension_description">
651. keys의 확장자가 .keys인지 확인하세요.\n\n
662. keys는 다운로드 폴더에 저장하면 안 됩니다.\n\n
67문제를 해결하고 다시 시도하세요.
68</string>
69 <string name="invalid_keys_error">잘못된 암호화 keys</string> 64 <string name="invalid_keys_error">잘못된 암호화 keys</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">선택한 파일이 잘못되었거나 손상되었습니다. keys를 다시 덤프하세요.</string> 66 <string name="install_keys_failure_description">선택한 파일이 잘못되었거나 손상되었습니다. keys를 다시 덤프하세요.</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">드라이버 설치 중...</string> 179 <string name="installing_driver">드라이버 설치 중...</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">고급 설정</string>
188 <string name="preferences_settings">설정</string> 182 <string name="preferences_settings">설정</string>
189 <string name="preferences_general">일반</string> 183 <string name="preferences_general">일반</string>
190 <string name="preferences_system">시스템</string> 184 <string name="preferences_system">시스템</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">이 설정을 끄면 에뮬레이션 성능이 크게 저하됩니다! 최상의 환경을 위해 이 설정을 활성화된 상태로 두는 것이 좋습니다.</string> 232 <string name="performance_warning">이 설정을 끄면 에뮬레이션 성능이 크게 저하됩니다! 최상의 환경을 위해 이 설정을 활성화된 상태로 두는 것이 좋습니다.</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">자동 선택</string>
242 <string name="region_japan">일본</string> 235 <string name="region_japan">일본</string>
243 <string name="region_usa">미국</string> 236 <string name="region_usa">미국</string>
244 <string name="region_europe">유럽</string> 237 <string name="region_europe">유럽</string>
@@ -311,7 +304,6 @@
311 <string name="ratio_stretch">창에 맞게 늘림</string> 304 <string name="ratio_stretch">창에 맞게 늘림</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">자동</string>
315 <string name="cpu_accuracy_accurate">정확함</string> 307 <string name="cpu_accuracy_accurate">정확함</string>
316 <string name="cpu_accuracy_unsafe">안전하지 않음</string> 308 <string name="cpu_accuracy_unsafe">안전하지 않음</string>
317 <string name="cpu_accuracy_paranoid">편집증 (느림)</string> 309 <string name="cpu_accuracy_paranoid">편집증 (느림)</string>
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 80213aed4..3e1f9bce5 100755
--- a/src/android/app/src/main/res/values-nb/strings.xml
+++ b/src/android/app/src/main/res/values-nb/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">Ugyldig nøkkelfil valgt</string> 61 <string name="invalid_keys_file">Ugyldig nøkkelfil valgt</string>
62 <string name="install_keys_success">Nøkler vellykket installert</string> 62 <string name="install_keys_success">Nøkler vellykket installert</string>
63 <string name="reading_keys_failure">Feil ved lesing av krypteringsnøkler</string> 63 <string name="reading_keys_failure">Feil ved lesing av krypteringsnøkler</string>
64 <string name="install_keys_failure_extension_description">
65 1. Kontroller at nøklene har filtypen .keys.\n\n
66 2. Nøkler må ikke lagres i nedlastingsmappen.\n\n
67 Løs problemet/problemene og prøv igjen.
68 </string>
69 <string name="invalid_keys_error">Ugyldige krypteringsnøkler</string> 64 <string name="invalid_keys_error">Ugyldige krypteringsnøkler</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">Den valgte filen er feil eller ødelagt. Vennligst dump nøklene på nytt.</string> 66 <string name="install_keys_failure_description">Den valgte filen er feil eller ødelagt. Vennligst dump nøklene på nytt.</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">Installerer driver...</string> 179 <string name="installing_driver">Installerer driver...</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Avanserte innstillinger</string>
188 <string name="preferences_settings">Innstillinger</string> 182 <string name="preferences_settings">Innstillinger</string>
189 <string name="preferences_general">Generelt</string> 183 <string name="preferences_general">Generelt</string>
190 <string name="preferences_system">System</string> 184 <string name="preferences_system">System</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">Hvis du slår av denne innstillingen, reduseres emuleringsytelsen betydelig! Vi anbefaler at du lar denne innstillingen være aktivert for å få den beste opplevelsen.</string> 232 <string name="performance_warning">Hvis du slår av denne innstillingen, reduseres emuleringsytelsen betydelig! Vi anbefaler at du lar denne innstillingen være aktivert for å få den beste opplevelsen.</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">Automatisk valg</string>
242 <string name="region_japan">Japan</string> 235 <string name="region_japan">Japan</string>
243 <string name="region_usa">USA</string> 236 <string name="region_usa">USA</string>
244 <string name="region_europe">Europa</string> 237 <string name="region_europe">Europa</string>
@@ -311,7 +304,6 @@
311 <string name="ratio_stretch">Strekk til Vindu</string> 304 <string name="ratio_stretch">Strekk til Vindu</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Auto</string>
315 <string name="cpu_accuracy_accurate">Nøyaktig</string> 307 <string name="cpu_accuracy_accurate">Nøyaktig</string>
316 <string name="cpu_accuracy_unsafe">Utrygt</string> 308 <string name="cpu_accuracy_unsafe">Utrygt</string>
317 <string name="cpu_accuracy_paranoid">Paranoid (Langsom)</string> 309 <string name="cpu_accuracy_paranoid">Paranoid (Langsom)</string>
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 fc9f49e0e..1cd1a8f87 100755
--- a/src/android/app/src/main/res/values-pl/strings.xml
+++ b/src/android/app/src/main/res/values-pl/strings.xml
@@ -61,10 +61,6 @@
61 <string name="invalid_keys_file">Wybrano niepoprawne klucze</string> 61 <string name="invalid_keys_file">Wybrano niepoprawne klucze</string>
62 <string name="install_keys_success">Klucze zainstalowane pomyślnie</string> 62 <string name="install_keys_success">Klucze zainstalowane pomyślnie</string>
63 <string name="reading_keys_failure">Błąd podczas odczytu kluczy</string> 63 <string name="reading_keys_failure">Błąd podczas odczytu kluczy</string>
64 <string name="install_keys_failure_extension_description">
651. Upewnij się że klucze mają rozszerzenie .keys. \n\n
662. Klucze nie mogą znajdować się w folderze Pobrane. \n\n
67Rozwiąż te problemy (oba) i spróbuj ponownie.</string>
68 <string name="invalid_keys_error">Niepoprawne klucze</string> 64 <string name="invalid_keys_error">Niepoprawne klucze</string>
69 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
70 <string name="install_keys_failure_description">Wybrany plik jest niepoprawny lub uszkodzony. Zrzuć ponownie swoje klucze.</string> 66 <string name="install_keys_failure_description">Wybrany plik jest niepoprawny lub uszkodzony. Zrzuć ponownie swoje klucze.</string>
@@ -183,7 +179,6 @@ Rozwiąż te problemy (oba) i spróbuj ponownie.</string>
183 <string name="installing_driver">Instalowanie sterownika...</string> 179 <string name="installing_driver">Instalowanie sterownika...</string>
184 180
185 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
186 <string name="preferences_advanced_settings">Zaawansowane</string>
187 <string name="preferences_settings">Ustawienia</string> 182 <string name="preferences_settings">Ustawienia</string>
188 <string name="preferences_general">Ogólne</string> 183 <string name="preferences_general">Ogólne</string>
189 <string name="preferences_system">System</string> 184 <string name="preferences_system">System</string>
@@ -237,7 +232,6 @@ Rozwiąż te problemy (oba) i spróbuj ponownie.</string>
237 <string name="performance_warning">Wyłączenie tej opcji znacząco ograniczy wydajność! Dla najlepszego doświadczenia, zaleca się zostawienie tej opcji włączonej.</string> 232 <string name="performance_warning">Wyłączenie tej opcji znacząco ograniczy wydajność! Dla najlepszego doświadczenia, zaleca się zostawienie tej opcji włączonej.</string>
238 233
239 <!-- Region Names --> 234 <!-- Region Names -->
240 <string name="region_auto">Auto-wybór</string>
241 <string name="region_japan">Japonia</string> 235 <string name="region_japan">Japonia</string>
242 <string name="region_usa">USA</string> 236 <string name="region_usa">USA</string>
243 <string name="region_europe">Europa</string> 237 <string name="region_europe">Europa</string>
@@ -310,7 +304,6 @@ Rozwiąż te problemy (oba) i spróbuj ponownie.</string>
310 <string name="ratio_stretch">Rozciągnij do Okna</string> 304 <string name="ratio_stretch">Rozciągnij do Okna</string>
311 305
312 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
313 <string name="cpu_accuracy_auto">Automatyczny</string>
314 <string name="cpu_accuracy_accurate">Dokładny</string> 307 <string name="cpu_accuracy_accurate">Dokładny</string>
315 <string name="cpu_accuracy_unsafe">Niebezpieczny</string> 308 <string name="cpu_accuracy_unsafe">Niebezpieczny</string>
316 <string name="cpu_accuracy_paranoid">Paranoid (Wolny)</string> 309 <string name="cpu_accuracy_paranoid">Paranoid (Wolny)</string>
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 83185c385..35197c280 100755
--- a/src/android/app/src/main/res/values-pt-rBR/strings.xml
+++ b/src/android/app/src/main/res/values-pt-rBR/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">Ficheiro de chaves inválido</string> 61 <string name="invalid_keys_file">Ficheiro de chaves inválido</string>
62 <string name="install_keys_success">Chaves instaladas com sucesso</string> 62 <string name="install_keys_success">Chaves instaladas com sucesso</string>
63 <string name="reading_keys_failure">Erro ao ler chaves de encriptação</string> 63 <string name="reading_keys_failure">Erro ao ler chaves de encriptação</string>
64 <string name="install_keys_failure_extension_description">
65 1. Verifica se as tuas chaves têm a extensão .keys.\n\n
66 2. As Chaves não podem estar gravadas na pasta Transferências.\n\n
67 Resolve esta(s) questões e tenta novamente.
68 </string>
69 <string name="invalid_keys_error">Chaves de encriptação inválidas</string> 64 <string name="invalid_keys_error">Chaves de encriptação inválidas</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">O ficheiro selecionado está corrompido. Por favor recarrega as tuas chaves.</string> 66 <string name="install_keys_failure_description">O ficheiro selecionado está corrompido. Por favor recarrega as tuas chaves.</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">A instalar o Driver...</string> 179 <string name="installing_driver">A instalar o Driver...</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Configurações avançadas</string>
188 <string name="preferences_settings">Configurações</string> 182 <string name="preferences_settings">Configurações</string>
189 <string name="preferences_general">Geral</string> 183 <string name="preferences_general">Geral</string>
190 <string name="preferences_system">Sistema</string> 184 <string name="preferences_system">Sistema</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">Desligar esta configuração irá reduzir a performance da emulação significantemente! Para a melhor experiência é recomendado que deixes esta configuração ativada.</string> 232 <string name="performance_warning">Desligar esta configuração irá reduzir a performance da emulação significantemente! Para a melhor experiência é recomendado que deixes esta configuração ativada.</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">Auto seleção</string>
242 <string name="region_japan">Japão</string> 235 <string name="region_japan">Japão</string>
243 <string name="region_usa">EUA</string> 236 <string name="region_usa">EUA</string>
244 <string name="region_europe">Europa</string> 237 <string name="region_europe">Europa</string>
@@ -311,7 +304,6 @@
311 <string name="ratio_stretch">Esticar para a janela</string> 304 <string name="ratio_stretch">Esticar para a janela</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Automático</string>
315 <string name="cpu_accuracy_accurate">Preciso</string> 307 <string name="cpu_accuracy_accurate">Preciso</string>
316 <string name="cpu_accuracy_unsafe">Não seguro</string> 308 <string name="cpu_accuracy_unsafe">Não seguro</string>
317 <string name="cpu_accuracy_paranoid">Paranoid (Lento)</string> 309 <string name="cpu_accuracy_paranoid">Paranoid (Lento)</string>
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 3d0851e6f..8761e2374 100755
--- a/src/android/app/src/main/res/values-pt-rPT/strings.xml
+++ b/src/android/app/src/main/res/values-pt-rPT/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">Ficheiro de chaves inválido</string> 61 <string name="invalid_keys_file">Ficheiro de chaves inválido</string>
62 <string name="install_keys_success">Chaves instaladas com sucesso</string> 62 <string name="install_keys_success">Chaves instaladas com sucesso</string>
63 <string name="reading_keys_failure">Erro ao ler chaves de encriptação</string> 63 <string name="reading_keys_failure">Erro ao ler chaves de encriptação</string>
64 <string name="install_keys_failure_extension_description">
65 1. Verifica se as tuas chaves têm a extensão .keys.\n\n
66 2. As Chaves não podem estar gravadas na pasta Transferências.\n\n
67 Resolve esta(s) questões e tenta novamente.
68 </string>
69 <string name="invalid_keys_error">Chaves de encriptação inválidas</string> 64 <string name="invalid_keys_error">Chaves de encriptação inválidas</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">O ficheiro selecionado está corrompido. Por favor recarrega as tuas chaves.</string> 66 <string name="install_keys_failure_description">O ficheiro selecionado está corrompido. Por favor recarrega as tuas chaves.</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">A instalar o Driver...</string> 179 <string name="installing_driver">A instalar o Driver...</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Configurações avançadas</string>
188 <string name="preferences_settings">Configurações</string> 182 <string name="preferences_settings">Configurações</string>
189 <string name="preferences_general">Geral</string> 183 <string name="preferences_general">Geral</string>
190 <string name="preferences_system">Sistema</string> 184 <string name="preferences_system">Sistema</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">Desligar esta configuração irá reduzir a performance da emulação significantemente! Para a melhor experiência é recomendado que deixes esta configuração ativada.</string> 232 <string name="performance_warning">Desligar esta configuração irá reduzir a performance da emulação significantemente! Para a melhor experiência é recomendado que deixes esta configuração ativada.</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">Autosseleção</string>
242 <string name="region_japan">Japão</string> 235 <string name="region_japan">Japão</string>
243 <string name="region_usa">EUA</string> 236 <string name="region_usa">EUA</string>
244 <string name="region_europe">Europa</string> 237 <string name="region_europe">Europa</string>
@@ -311,7 +304,6 @@
311 <string name="ratio_stretch">Esticar à Janela</string> 304 <string name="ratio_stretch">Esticar à Janela</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Automático</string>
315 <string name="cpu_accuracy_accurate">Preciso</string> 307 <string name="cpu_accuracy_accurate">Preciso</string>
316 <string name="cpu_accuracy_unsafe">Inseguro</string> 308 <string name="cpu_accuracy_unsafe">Inseguro</string>
317 <string name="cpu_accuracy_paranoid">Paranoid (Lento)</string> 309 <string name="cpu_accuracy_paranoid">Paranoid (Lento)</string>
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 1401cf6a0..0fb4908f7 100755
--- a/src/android/app/src/main/res/values-ru/strings.xml
+++ b/src/android/app/src/main/res/values-ru/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">Выбран неверный файл ключей</string> 61 <string name="invalid_keys_file">Выбран неверный файл ключей</string>
62 <string name="install_keys_success">Ключи успешно установлены</string> 62 <string name="install_keys_success">Ключи успешно установлены</string>
63 <string name="reading_keys_failure">Ошибка при чтении ключей шифрования</string> 63 <string name="reading_keys_failure">Ошибка при чтении ключей шифрования</string>
64 <string name="install_keys_failure_extension_description">
65 1. Убедитесь, что ваши ключи имеют расширение .keys\n\n
66 2. Ключи не должны находиться в папке Downloads.\n\n
67 Исправьте проблему(-ы) и повторите попытку.
68 </string>
69 <string name="invalid_keys_error">Неверные ключи шифрования</string> 64 <string name="invalid_keys_error">Неверные ключи шифрования</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">Выбранный файл неверен или поврежден. Пожалуйста, пере-дампите ваши ключи.</string> 66 <string name="install_keys_failure_description">Выбранный файл неверен или поврежден. Пожалуйста, пере-дампите ваши ключи.</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">Установка драйвера...</string> 179 <string name="installing_driver">Установка драйвера...</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Расширенные настройки</string>
188 <string name="preferences_settings">Настройки</string> 182 <string name="preferences_settings">Настройки</string>
189 <string name="preferences_general">Общие</string> 183 <string name="preferences_general">Общие</string>
190 <string name="preferences_system">Система</string> 184 <string name="preferences_system">Система</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">Отключение этой настройки значительно снизит производительность эмуляции! Для достижения наилучших результатов рекомендуется оставить эту настройку включенной.</string> 232 <string name="performance_warning">Отключение этой настройки значительно снизит производительность эмуляции! Для достижения наилучших результатов рекомендуется оставить эту настройку включенной.</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">Авто-выбор</string>
242 <string name="region_japan">Япония</string> 235 <string name="region_japan">Япония</string>
243 <string name="region_usa">США</string> 236 <string name="region_usa">США</string>
244 <string name="region_europe">Европа</string> 237 <string name="region_europe">Европа</string>
@@ -311,7 +304,6 @@
311 <string name="ratio_stretch">Растянуть до окна</string> 304 <string name="ratio_stretch">Растянуть до окна</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Авто</string>
315 <string name="cpu_accuracy_accurate">Точно</string> 307 <string name="cpu_accuracy_accurate">Точно</string>
316 <string name="cpu_accuracy_unsafe">Небезопасно</string> 308 <string name="cpu_accuracy_unsafe">Небезопасно</string>
317 <string name="cpu_accuracy_paranoid">Параноик (медленно)</string> 309 <string name="cpu_accuracy_paranoid">Параноик (медленно)</string>
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 86d9c84f0..0d11eb2d2 100755
--- a/src/android/app/src/main/res/values-uk/strings.xml
+++ b/src/android/app/src/main/res/values-uk/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">Вибрано неправильний файл ключів</string> 61 <string name="invalid_keys_file">Вибрано неправильний файл ключів</string>
62 <string name="install_keys_success">Ключі успішно встановлено</string> 62 <string name="install_keys_success">Ключі успішно встановлено</string>
63 <string name="reading_keys_failure">Помилка під час зчитування ключів шифрування</string> 63 <string name="reading_keys_failure">Помилка під час зчитування ключів шифрування</string>
64 <string name="install_keys_failure_extension_description">
65 1. Переконайтеся, що ваші ключі мають розширення .keys\n\n
66 2. Ключі не повинні знаходитися в папці Downloads.\n\n
67 Виправте проблему(-и) та спробуйте ще раз.
68 </string>
69 <string name="invalid_keys_error">Невірні ключі шифрування</string> 64 <string name="invalid_keys_error">Невірні ключі шифрування</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">Обраний файл невірний або пошкоджений. Будь ласка, пере-дампіть ваші ключі.</string> 66 <string name="install_keys_failure_description">Обраний файл невірний або пошкоджений. Будь ласка, пере-дампіть ваші ключі.</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">Встановлення драйвера...</string> 179 <string name="installing_driver">Встановлення драйвера...</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Розширені налаштування</string>
188 <string name="preferences_settings">Налаштування</string> 182 <string name="preferences_settings">Налаштування</string>
189 <string name="preferences_general">Загальні</string> 183 <string name="preferences_general">Загальні</string>
190 <string name="preferences_system">Система</string> 184 <string name="preferences_system">Система</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">Вимкнення цього налаштування значно знизить продуктивність емуляції! Для досягнення найкращих результатів рекомендується залишити це налаштування увімкненим.</string> 232 <string name="performance_warning">Вимкнення цього налаштування значно знизить продуктивність емуляції! Для досягнення найкращих результатів рекомендується залишити це налаштування увімкненим.</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">Авто-вибір</string>
242 <string name="region_japan">Японія</string> 235 <string name="region_japan">Японія</string>
243 <string name="region_usa">США</string> 236 <string name="region_usa">США</string>
244 <string name="region_europe">Європа</string> 237 <string name="region_europe">Європа</string>
@@ -311,7 +304,6 @@
311 <string name="ratio_stretch">Розтягнути до вікна</string> 304 <string name="ratio_stretch">Розтягнути до вікна</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Авто</string>
315 <string name="cpu_accuracy_accurate">Точно</string> 307 <string name="cpu_accuracy_accurate">Точно</string>
316 <string name="cpu_accuracy_unsafe">Небезпечно</string> 308 <string name="cpu_accuracy_unsafe">Небезпечно</string>
317 <string name="cpu_accuracy_paranoid">Параноїк (повільно)</string> 309 <string name="cpu_accuracy_paranoid">Параноїк (повільно)</string>
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 034421c92..e00bbaa2e 100755
--- a/src/android/app/src/main/res/values-zh-rCN/strings.xml
+++ b/src/android/app/src/main/res/values-zh-rCN/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">选择的密钥文件无效</string> 61 <string name="invalid_keys_file">选择的密钥文件无效</string>
62 <string name="install_keys_success">密钥文件已成功安装</string> 62 <string name="install_keys_success">密钥文件已成功安装</string>
63 <string name="reading_keys_failure">读取加密密钥时出错</string> 63 <string name="reading_keys_failure">读取加密密钥时出错</string>
64 <string name="install_keys_failure_extension_description">
65 1. 验证您的密钥文件是否具有 .keys 扩展名。\n\n
66 2. 密钥文件不能放置于 Downloads 文件夹。\n\n
67 解决问题并再试一次。
68 </string>
69 <string name="invalid_keys_error">无效的加密密钥</string> 64 <string name="invalid_keys_error">无效的加密密钥</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">选择的密钥文件不正确或已损坏。请重新转储密钥文件。</string> 66 <string name="install_keys_failure_description">选择的密钥文件不正确或已损坏。请重新转储密钥文件。</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">正在安装驱动程序…</string> 179 <string name="installing_driver">正在安装驱动程序…</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">高级选项</string>
188 <string name="preferences_settings">设置</string> 182 <string name="preferences_settings">设置</string>
189 <string name="preferences_general">通用</string> 183 <string name="preferences_general">通用</string>
190 <string name="preferences_system">系统</string> 184 <string name="preferences_system">系统</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">关闭此项会显著降低模拟性能!建议您将此项保持为启用状态。</string> 232 <string name="performance_warning">关闭此项会显著降低模拟性能!建议您将此项保持为启用状态。</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">自动选择</string>
242 <string name="region_japan">日本</string> 235 <string name="region_japan">日本</string>
243 <string name="region_usa">美国</string> 236 <string name="region_usa">美国</string>
244 <string name="region_europe">欧洲</string> 237 <string name="region_europe">欧洲</string>
@@ -311,7 +304,6 @@
311 <string name="ratio_stretch">拉伸窗口</string> 304 <string name="ratio_stretch">拉伸窗口</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">自动</string>
315 <string name="cpu_accuracy_accurate">高精度</string> 307 <string name="cpu_accuracy_accurate">高精度</string>
316 <string name="cpu_accuracy_unsafe">低精度</string> 308 <string name="cpu_accuracy_unsafe">低精度</string>
317 <string name="cpu_accuracy_paranoid">偏执模式 (慢速)</string> 309 <string name="cpu_accuracy_paranoid">偏执模式 (慢速)</string>
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 85798cc6a..a54d04248 100755
--- a/src/android/app/src/main/res/values-zh-rTW/strings.xml
+++ b/src/android/app/src/main/res/values-zh-rTW/strings.xml
@@ -61,11 +61,6 @@
61 <string name="invalid_keys_file">無效的金鑰檔案已選取</string> 61 <string name="invalid_keys_file">無效的金鑰檔案已選取</string>
62 <string name="install_keys_success">金鑰已成功安裝</string> 62 <string name="install_keys_success">金鑰已成功安裝</string>
63 <string name="reading_keys_failure">讀取加密金鑰時出現錯誤</string> 63 <string name="reading_keys_failure">讀取加密金鑰時出現錯誤</string>
64 <string name="install_keys_failure_extension_description">
65 1. 驗證您的金鑰是否具有 .keys 副檔名。\n\n
66 2. 金鑰不能儲存於 Downloads 資料夾。\n\n
67 解決問題並再試一次。
68 </string>
69 <string name="invalid_keys_error">無效的加密金鑰</string> 64 <string name="invalid_keys_error">無效的加密金鑰</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 65 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">選取的檔案不正確或已損毀,請重新傾印您的金鑰。</string> 66 <string name="install_keys_failure_description">選取的檔案不正確或已損毀,請重新傾印您的金鑰。</string>
@@ -184,7 +179,6 @@
184 <string name="installing_driver">正在安裝驅動程式…</string> 179 <string name="installing_driver">正在安裝驅動程式…</string>
185 180
186 <!-- Preferences Screen --> 181 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">進階設定</string>
188 <string name="preferences_settings">設定</string> 182 <string name="preferences_settings">設定</string>
189 <string name="preferences_general">一般</string> 183 <string name="preferences_general">一般</string>
190 <string name="preferences_system">系統</string> 184 <string name="preferences_system">系統</string>
@@ -238,7 +232,6 @@
238 <string name="performance_warning">關閉此設定會顯著降低模擬效能!如需最佳體驗,建議您將此設定保持為啟用狀態。</string> 232 <string name="performance_warning">關閉此設定會顯著降低模擬效能!如需最佳體驗,建議您將此設定保持為啟用狀態。</string>
239 233
240 <!-- Region Names --> 234 <!-- Region Names -->
241 <string name="region_auto">自動選取</string>
242 <string name="region_japan">日本</string> 235 <string name="region_japan">日本</string>
243 <string name="region_usa">美國</string> 236 <string name="region_usa">美國</string>
244 <string name="region_europe">歐洲</string> 237 <string name="region_europe">歐洲</string>
@@ -311,8 +304,6 @@
311 <string name="ratio_stretch">延伸視窗</string> 304 <string name="ratio_stretch">延伸視窗</string>
312 305
313 <!-- CPU Accuracy --> 306 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">自動</string>
315 <string name="cpu_accuracy_accurate">高精度</string>
316 <string name="cpu_accuracy_unsafe">低精度</string> 307 <string name="cpu_accuracy_unsafe">低精度</string>
317 <string name="cpu_accuracy_paranoid">不合理 (慢)</string> 308 <string name="cpu_accuracy_paranoid">不合理 (慢)</string>
318 309
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 7dae63dcb..c236811fa 100755
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -169,6 +169,8 @@
169 <string name="renderer_force_max_clock_description">Forces the GPU to run at the maximum possible clocks (thermal constraints will still be applied).</string> 169 <string name="renderer_force_max_clock_description">Forces the GPU to run at the maximum possible clocks (thermal constraints will still be applied).</string>
170 <string name="renderer_asynchronous_shaders">Use asynchronous shaders</string> 170 <string name="renderer_asynchronous_shaders">Use asynchronous shaders</string>
171 <string name="renderer_asynchronous_shaders_description">Compiles shaders asynchronously, reducing stutter but may introduce glitches.</string> 171 <string name="renderer_asynchronous_shaders_description">Compiles shaders asynchronously, reducing stutter but may introduce glitches.</string>
172 <string name="renderer_reactive_flushing">Use reactive flushing</string>
173 <string name="renderer_reactive_flushing_description">Improves rendering accuracy in some games at the cost of performance.</string>
172 <string name="renderer_debug">Graphics debugging</string> 174 <string name="renderer_debug">Graphics debugging</string>
173 <string name="renderer_debug_description">Sets the graphics API to a slow debugging mode.</string> 175 <string name="renderer_debug_description">Sets the graphics API to a slow debugging mode.</string>
174 <string name="use_disk_shader_cache">Disk shader cache</string> 176 <string name="use_disk_shader_cache">Disk shader cache</string>
diff --git a/src/core/file_sys/vfs_real.cpp b/src/core/file_sys/vfs_real.cpp
index 2bc656ed0..140c1199a 100755
--- a/src/core/file_sys/vfs_real.cpp
+++ b/src/core/file_sys/vfs_real.cpp
@@ -25,8 +25,6 @@ namespace FS = Common::FS;
25 25
26namespace { 26namespace {
27 27
28constexpr size_t MaxOpenFiles = 512;
29
30constexpr FS::FileAccessMode ModeFlagsToFileAccessMode(Mode mode) { 28constexpr FS::FileAccessMode ModeFlagsToFileAccessMode(Mode mode) {
31 switch (mode) { 29 switch (mode) {
32 case Mode::Read: 30 case Mode::Read:
@@ -75,10 +73,24 @@ VfsEntryType RealVfsFilesystem::GetEntryType(std::string_view path_) const {
75VirtualFile RealVfsFilesystem::OpenFile(std::string_view path_, Mode perms) { 73VirtualFile RealVfsFilesystem::OpenFile(std::string_view path_, Mode perms) {
76 const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault); 74 const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault);
77 75
78 auto reference = std::make_unique<FileReference>(); 76 if (const auto weak_iter = cache.find(path); weak_iter != cache.cend()) {
79 this->InsertReferenceIntoList(*reference); 77 const auto& weak = weak_iter->second;
78
79 if (!weak.expired()) {
80 return std::shared_ptr<RealVfsFile>(new RealVfsFile(*this, weak.lock(), path, perms));
81 }
82 }
80 83
81 return std::shared_ptr<RealVfsFile>(new RealVfsFile(*this, std::move(reference), path, perms)); 84 auto backing = FS::FileOpen(path, ModeFlagsToFileAccessMode(perms), FS::FileType::BinaryFile);
85
86 if (!backing) {
87 return nullptr;
88 }
89
90 cache.insert_or_assign(path, std::move(backing));
91
92 // Cannot use make_shared as RealVfsFile constructor is private
93 return std::shared_ptr<RealVfsFile>(new RealVfsFile(*this, backing, path, perms));
82} 94}
83 95
84VirtualFile RealVfsFilesystem::CreateFile(std::string_view path_, Mode perms) { 96VirtualFile RealVfsFilesystem::CreateFile(std::string_view path_, Mode perms) {
@@ -111,19 +123,51 @@ VirtualFile RealVfsFilesystem::CopyFile(std::string_view old_path_, std::string_
111VirtualFile RealVfsFilesystem::MoveFile(std::string_view old_path_, std::string_view new_path_) { 123VirtualFile RealVfsFilesystem::MoveFile(std::string_view old_path_, std::string_view new_path_) {
112 const auto old_path = FS::SanitizePath(old_path_, FS::DirectorySeparator::PlatformDefault); 124 const auto old_path = FS::SanitizePath(old_path_, FS::DirectorySeparator::PlatformDefault);
113 const auto new_path = FS::SanitizePath(new_path_, FS::DirectorySeparator::PlatformDefault); 125 const auto new_path = FS::SanitizePath(new_path_, FS::DirectorySeparator::PlatformDefault);
114 if (!FS::RenameFile(old_path, new_path)) { 126 const auto cached_file_iter = cache.find(old_path);
127
128 if (cached_file_iter != cache.cend()) {
129 auto file = cached_file_iter->second.lock();
130
131 if (!cached_file_iter->second.expired()) {
132 file->Close();
133 }
134
135 if (!FS::RenameFile(old_path, new_path)) {
136 return nullptr;
137 }
138
139 cache.erase(old_path);
140 file->Open(new_path, FS::FileAccessMode::Read, FS::FileType::BinaryFile);
141 if (file->IsOpen()) {
142 cache.insert_or_assign(new_path, std::move(file));
143 } else {
144 LOG_ERROR(Service_FS, "Failed to open path {} in order to re-cache it", new_path);
145 }
146 } else {
147 ASSERT(false);
115 return nullptr; 148 return nullptr;
116 } 149 }
150
117 return OpenFile(new_path, Mode::ReadWrite); 151 return OpenFile(new_path, Mode::ReadWrite);
118} 152}
119 153
120bool RealVfsFilesystem::DeleteFile(std::string_view path_) { 154bool RealVfsFilesystem::DeleteFile(std::string_view path_) {
121 const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault); 155 const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault);
156 const auto cached_iter = cache.find(path);
157
158 if (cached_iter != cache.cend()) {
159 if (!cached_iter->second.expired()) {
160 cached_iter->second.lock()->Close();
161 }
162 cache.erase(path);
163 }
164
122 return FS::RemoveFile(path); 165 return FS::RemoveFile(path);
123} 166}
124 167
125VirtualDir RealVfsFilesystem::OpenDirectory(std::string_view path_, Mode perms) { 168VirtualDir RealVfsFilesystem::OpenDirectory(std::string_view path_, Mode perms) {
126 const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault); 169 const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault);
170 // Cannot use make_shared as RealVfsDirectory constructor is private
127 return std::shared_ptr<RealVfsDirectory>(new RealVfsDirectory(*this, path, perms)); 171 return std::shared_ptr<RealVfsDirectory>(new RealVfsDirectory(*this, path, perms));
128} 172}
129 173
@@ -132,6 +176,7 @@ VirtualDir RealVfsFilesystem::CreateDirectory(std::string_view path_, Mode perms
132 if (!FS::CreateDirs(path)) { 176 if (!FS::CreateDirs(path)) {
133 return nullptr; 177 return nullptr;
134 } 178 }
179 // Cannot use make_shared as RealVfsDirectory constructor is private
135 return std::shared_ptr<RealVfsDirectory>(new RealVfsDirectory(*this, path, perms)); 180 return std::shared_ptr<RealVfsDirectory>(new RealVfsDirectory(*this, path, perms));
136} 181}
137 182
@@ -149,102 +194,73 @@ VirtualDir RealVfsFilesystem::MoveDirectory(std::string_view old_path_,
149 if (!FS::RenameDir(old_path, new_path)) { 194 if (!FS::RenameDir(old_path, new_path)) {
150 return nullptr; 195 return nullptr;
151 } 196 }
152 return OpenDirectory(new_path, Mode::ReadWrite);
153}
154 197
155bool RealVfsFilesystem::DeleteDirectory(std::string_view path_) { 198 for (auto& kv : cache) {
156 const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault); 199 // If the path in the cache doesn't start with old_path, then bail on this file.
157 return FS::RemoveDirRecursively(path); 200 if (kv.first.rfind(old_path, 0) != 0) {
158} 201 continue;
202 }
159 203
160void RealVfsFilesystem::RefreshReference(const std::string& path, Mode perms, 204 const auto file_old_path =
161 FileReference& reference) { 205 FS::SanitizePath(kv.first, FS::DirectorySeparator::PlatformDefault);
162 // Temporarily remove from list. 206 auto file_new_path = FS::SanitizePath(new_path + '/' + kv.first.substr(old_path.size()),
163 this->RemoveReferenceFromList(reference); 207 FS::DirectorySeparator::PlatformDefault);
208 const auto& cached = cache[file_old_path];
164 209
165 // Restore file if needed. 210 if (cached.expired()) {
166 if (!reference.file) { 211 continue;
167 this->EvictSingleReference(); 212 }
168 213
169 reference.file = 214 auto file = cached.lock();
170 FS::FileOpen(path, ModeFlagsToFileAccessMode(perms), FS::FileType::BinaryFile); 215 cache.erase(file_old_path);
171 if (reference.file) { 216 file->Open(file_new_path, FS::FileAccessMode::Read, FS::FileType::BinaryFile);
172 num_open_files++; 217 if (file->IsOpen()) {
218 cache.insert_or_assign(std::move(file_new_path), std::move(file));
219 } else {
220 LOG_ERROR(Service_FS, "Failed to open path {} in order to re-cache it", file_new_path);
173 } 221 }
174 } 222 }
175 223
176 // Reinsert into list. 224 return OpenDirectory(new_path, Mode::ReadWrite);
177 this->InsertReferenceIntoList(reference);
178}
179
180void RealVfsFilesystem::DropReference(std::unique_ptr<FileReference>&& reference) {
181 // Remove from list.
182 this->RemoveReferenceFromList(*reference);
183
184 // Close the file.
185 if (reference->file) {
186 reference->file.reset();
187 num_open_files--;
188 }
189} 225}
190 226
191void RealVfsFilesystem::EvictSingleReference() { 227bool RealVfsFilesystem::DeleteDirectory(std::string_view path_) {
192 if (num_open_files < MaxOpenFiles || open_references.empty()) { 228 const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault);
193 return;
194 }
195
196 // Get and remove from list.
197 auto& reference = open_references.back();
198 this->RemoveReferenceFromList(reference);
199 229
200 // Close the file. 230 for (auto& kv : cache) {
201 if (reference.file) { 231 // If the path in the cache doesn't start with path, then bail on this file.
202 reference.file.reset(); 232 if (kv.first.rfind(path, 0) != 0) {
203 num_open_files--; 233 continue;
204 } 234 }
205 235
206 // Reinsert into closed list. 236 const auto& entry = cache[kv.first];
207 this->InsertReferenceIntoList(reference); 237 if (!entry.expired()) {
208} 238 entry.lock()->Close();
239 }
209 240
210void RealVfsFilesystem::InsertReferenceIntoList(FileReference& reference) { 241 cache.erase(kv.first);
211 if (reference.file) {
212 open_references.push_front(reference);
213 } else {
214 closed_references.push_front(reference);
215 } 242 }
216}
217 243
218void RealVfsFilesystem::RemoveReferenceFromList(FileReference& reference) { 244 return FS::RemoveDirRecursively(path);
219 if (reference.file) {
220 open_references.erase(open_references.iterator_to(reference));
221 } else {
222 closed_references.erase(closed_references.iterator_to(reference));
223 }
224} 245}
225 246
226RealVfsFile::RealVfsFile(RealVfsFilesystem& base_, std::unique_ptr<FileReference> reference_, 247RealVfsFile::RealVfsFile(RealVfsFilesystem& base_, std::shared_ptr<FS::IOFile> backing_,
227 const std::string& path_, Mode perms_) 248 const std::string& path_, Mode perms_)
228 : base(base_), reference(std::move(reference_)), path(path_), 249 : base(base_), backing(std::move(backing_)), path(path_), parent_path(FS::GetParentPath(path_)),
229 parent_path(FS::GetParentPath(path_)), path_components(FS::SplitPathComponents(path_)), 250 path_components(FS::SplitPathComponents(path_)), perms(perms_) {}
230 perms(perms_) {}
231 251
232RealVfsFile::~RealVfsFile() { 252RealVfsFile::~RealVfsFile() = default;
233 base.DropReference(std::move(reference));
234}
235 253
236std::string RealVfsFile::GetName() const { 254std::string RealVfsFile::GetName() const {
237 return path_components.back(); 255 return path_components.back();
238} 256}
239 257
240std::size_t RealVfsFile::GetSize() const { 258std::size_t RealVfsFile::GetSize() const {
241 base.RefreshReference(path, perms, *reference); 259 return backing->GetSize();
242 return reference->file ? reference->file->GetSize() : 0;
243} 260}
244 261
245bool RealVfsFile::Resize(std::size_t new_size) { 262bool RealVfsFile::Resize(std::size_t new_size) {
246 base.RefreshReference(path, perms, *reference); 263 return backing->SetSize(new_size);
247 return reference->file ? reference->file->SetSize(new_size) : false;
248} 264}
249 265
250VirtualDir RealVfsFile::GetContainingDirectory() const { 266VirtualDir RealVfsFile::GetContainingDirectory() const {
@@ -260,25 +276,27 @@ bool RealVfsFile::IsReadable() const {
260} 276}
261 277
262std::size_t RealVfsFile::Read(u8* data, std::size_t length, std::size_t offset) const { 278std::size_t RealVfsFile::Read(u8* data, std::size_t length, std::size_t offset) const {
263 base.RefreshReference(path, perms, *reference); 279 if (!backing->Seek(static_cast<s64>(offset))) {
264 if (!reference->file || !reference->file->Seek(static_cast<s64>(offset))) {
265 return 0; 280 return 0;
266 } 281 }
267 return reference->file->ReadSpan(std::span{data, length}); 282 return backing->ReadSpan(std::span{data, length});
268} 283}
269 284
270std::size_t RealVfsFile::Write(const u8* data, std::size_t length, std::size_t offset) { 285std::size_t RealVfsFile::Write(const u8* data, std::size_t length, std::size_t offset) {
271 base.RefreshReference(path, perms, *reference); 286 if (!backing->Seek(static_cast<s64>(offset))) {
272 if (!reference->file || !reference->file->Seek(static_cast<s64>(offset))) {
273 return 0; 287 return 0;
274 } 288 }
275 return reference->file->WriteSpan(std::span{data, length}); 289 return backing->WriteSpan(std::span{data, length});
276} 290}
277 291
278bool RealVfsFile::Rename(std::string_view name) { 292bool RealVfsFile::Rename(std::string_view name) {
279 return base.MoveFile(path, parent_path + '/' + std::string(name)) != nullptr; 293 return base.MoveFile(path, parent_path + '/' + std::string(name)) != nullptr;
280} 294}
281 295
296void RealVfsFile::Close() {
297 backing->Close();
298}
299
282// TODO(DarkLordZach): MSVC would not let me combine the following two functions using 'if 300// TODO(DarkLordZach): MSVC would not let me combine the following two functions using 'if
283// constexpr' because there is a compile error in the branch not used. 301// constexpr' because there is a compile error in the branch not used.
284 302
diff --git a/src/core/file_sys/vfs_real.h b/src/core/file_sys/vfs_real.h
index 4c2879fec..ba29857df 100755
--- a/src/core/file_sys/vfs_real.h
+++ b/src/core/file_sys/vfs_real.h
@@ -4,7 +4,7 @@
4#pragma once 4#pragma once
5 5
6#include <string_view> 6#include <string_view>
7#include "common/intrusive_list.h" 7#include <boost/container/flat_map.hpp>
8#include "core/file_sys/mode.h" 8#include "core/file_sys/mode.h"
9#include "core/file_sys/vfs.h" 9#include "core/file_sys/vfs.h"
10 10
@@ -14,11 +14,6 @@ class IOFile;
14 14
15namespace FileSys { 15namespace FileSys {
16 16
17struct FileReference : public Common::IntrusiveListBaseNode<FileReference> {
18 std::shared_ptr<Common::FS::IOFile> file{};
19};
20
21class RealVfsFile;
22class RealVfsFilesystem : public VfsFilesystem { 17class RealVfsFilesystem : public VfsFilesystem {
23public: 18public:
24 RealVfsFilesystem(); 19 RealVfsFilesystem();
@@ -40,20 +35,7 @@ public:
40 bool DeleteDirectory(std::string_view path) override; 35 bool DeleteDirectory(std::string_view path) override;
41 36
42private: 37private:
43 using ReferenceListType = Common::IntrusiveListBaseTraits<FileReference>::ListType; 38 boost::container::flat_map<std::string, std::weak_ptr<Common::FS::IOFile>> cache;
44 ReferenceListType open_references;
45 ReferenceListType closed_references;
46 size_t num_open_files{};
47
48private:
49 friend class RealVfsFile;
50 void RefreshReference(const std::string& path, Mode perms, FileReference& reference);
51 void DropReference(std::unique_ptr<FileReference>&& reference);
52 void EvictSingleReference();
53
54private:
55 void InsertReferenceIntoList(FileReference& reference);
56 void RemoveReferenceFromList(FileReference& reference);
57}; 39};
58 40
59// An implementation of VfsFile that represents a file on the user's computer. 41// An implementation of VfsFile that represents a file on the user's computer.
@@ -75,11 +57,13 @@ public:
75 bool Rename(std::string_view name) override; 57 bool Rename(std::string_view name) override;
76 58
77private: 59private:
78 RealVfsFile(RealVfsFilesystem& base, std::unique_ptr<FileReference> reference, 60 RealVfsFile(RealVfsFilesystem& base, std::shared_ptr<Common::FS::IOFile> backing,
79 const std::string& path, Mode perms = Mode::Read); 61 const std::string& path, Mode perms = Mode::Read);
80 62
63 void Close();
64
81 RealVfsFilesystem& base; 65 RealVfsFilesystem& base;
82 std::unique_ptr<FileReference> reference; 66 std::shared_ptr<Common::FS::IOFile> backing;
83 std::string path; 67 std::string path;
84 std::string parent_path; 68 std::string parent_path;
85 std::vector<std::string> path_components; 69 std::vector<std::string> path_components;
diff --git a/src/video_core/texture_cache/image_info.cpp b/src/video_core/texture_cache/image_info.cpp
index dbe6018d8..22eb7bd00 100755
--- a/src/video_core/texture_cache/image_info.cpp
+++ b/src/video_core/texture_cache/image_info.cpp
@@ -22,6 +22,9 @@ using Tegra::Texture::TICEntry;
22using VideoCore::Surface::PixelFormat; 22using VideoCore::Surface::PixelFormat;
23using VideoCore::Surface::SurfaceType; 23using VideoCore::Surface::SurfaceType;
24 24
25constexpr u32 RescaleHeightThreshold = 288;
26constexpr u32 DownscaleHeightThreshold = 512;
27
25ImageInfo::ImageInfo(const TICEntry& config) noexcept { 28ImageInfo::ImageInfo(const TICEntry& config) noexcept {
26 forced_flushed = config.IsPitchLinear() && !Settings::values.use_reactive_flushing.GetValue(); 29 forced_flushed = config.IsPitchLinear() && !Settings::values.use_reactive_flushing.GetValue();
27 dma_downloaded = forced_flushed; 30 dma_downloaded = forced_flushed;
@@ -113,8 +116,9 @@ ImageInfo::ImageInfo(const TICEntry& config) noexcept {
113 layer_stride = CalculateLayerStride(*this); 116 layer_stride = CalculateLayerStride(*this);
114 maybe_unaligned_layer_stride = CalculateLayerSize(*this); 117 maybe_unaligned_layer_stride = CalculateLayerSize(*this);
115 rescaleable &= (block.depth == 0) && resources.levels == 1; 118 rescaleable &= (block.depth == 0) && resources.levels == 1;
116 rescaleable &= size.height > 256 || GetFormatType(format) != SurfaceType::ColorTexture; 119 rescaleable &= size.height > RescaleHeightThreshold ||
117 downscaleable = size.height > 512; 120 GetFormatType(format) != SurfaceType::ColorTexture;
121 downscaleable = size.height > DownscaleHeightThreshold;
118 } 122 }
119} 123}
120 124
@@ -152,8 +156,8 @@ ImageInfo::ImageInfo(const Maxwell3D::Regs::RenderTargetConfig& ct,
152 size.depth = ct.depth; 156 size.depth = ct.depth;
153 } else { 157 } else {
154 rescaleable = block.depth == 0; 158 rescaleable = block.depth == 0;
155 rescaleable &= size.height > 256; 159 rescaleable &= size.height > RescaleHeightThreshold;
156 downscaleable = size.height > 512; 160 downscaleable = size.height > DownscaleHeightThreshold;
157 type = ImageType::e2D; 161 type = ImageType::e2D;
158 resources.layers = ct.depth; 162 resources.layers = ct.depth;
159 } 163 }
@@ -232,8 +236,8 @@ ImageInfo::ImageInfo(const Fermi2D::Surface& config) noexcept {
232 .height = config.height, 236 .height = config.height,
233 .depth = 1, 237 .depth = 1,
234 }; 238 };
235 rescaleable = block.depth == 0 && size.height > 256; 239 rescaleable = block.depth == 0 && size.height > RescaleHeightThreshold;
236 downscaleable = size.height > 512; 240 downscaleable = size.height > DownscaleHeightThreshold;
237 } 241 }
238} 242}
239 243
@@ -275,8 +279,8 @@ ImageInfo::ImageInfo(const Tegra::DMA::ImageOperand& config) noexcept {
275 resources.layers = 1; 279 resources.layers = 1;
276 layer_stride = CalculateLayerStride(*this); 280 layer_stride = CalculateLayerStride(*this);
277 maybe_unaligned_layer_stride = CalculateLayerSize(*this); 281 maybe_unaligned_layer_stride = CalculateLayerSize(*this);
278 rescaleable = block.depth == 0 && size.height > 256; 282 rescaleable = block.depth == 0 && size.height > RescaleHeightThreshold;
279 downscaleable = size.height > 512; 283 downscaleable = size.height > DownscaleHeightThreshold;
280} 284}
281 285
282} // namespace VideoCommon 286} // namespace VideoCommon