diff options
Diffstat (limited to 'src')
30 files changed, 118 insertions, 349 deletions
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 969223ef8..0c1d91264 100644 --- a/src/android/app/src/main/res/values-de/strings.xml +++ b/src/android/app/src/main/res/values-de/strings.xml | |||
| @@ -235,26 +235,6 @@ | |||
| 235 | <string name="region_korea">Korea</string> | 235 | <string name="region_korea">Korea</string> |
| 236 | <string name="region_taiwan">Taiwan</string> | 236 | <string name="region_taiwan">Taiwan</string> |
| 237 | 237 | ||
| 238 | <!-- Language Names --> | ||
| 239 | <string name="language_japanese">Japanisch (日本語)</string> | ||
| 240 | <string name="language_english">Englisch</string> | ||
| 241 | <string name="language_french">Französisch (Français)</string> | ||
| 242 | <string name="langauge_german">Deutsch (German)</string> | ||
| 243 | <string name="language_italian">Italienisch (Italiano)</string> | ||
| 244 | <string name="language_spanish">Spanisch (Español)</string> | ||
| 245 | <string name="language_chinese">Chinesisch (简体中文)</string> | ||
| 246 | <string name="language_korean">Koreanisch (한국어)</string> | ||
| 247 | <string name="language_dutch">Niederländisch (Nederlands)</string> | ||
| 248 | <string name="language_portuguese">Portugiesisch (Português)</string> | ||
| 249 | <string name="language_russian">Russisch (Русский)</string> | ||
| 250 | <string name="language_taiwanese">Taiwanesisch (台湾)</string> | ||
| 251 | <string name="language_british_english">Britisches Englisch</string> | ||
| 252 | <string name="language_canadian_french">Kanadisches Französisch (Français canadien)</string> | ||
| 253 | <string name="language_latin_american_spanish">Lateinamerikanisches Spanisch (Español latinoamericano)</string> | ||
| 254 | <string name="language_simplified_chinese">Vereinfachtes Chinesisch (简体中文)</string> | ||
| 255 | <string name="language_traditional_chinese">Traditionelles Chinesisch (正體中文)</string> | ||
| 256 | <string name="language_brazilian_portuguese">Brasilianisches Portugiesisch (Português do Brasil)</string> | ||
| 257 | |||
| 258 | <!-- Renderer APIs --> | 238 | <!-- Renderer APIs --> |
| 259 | <string name="renderer_vulkan">Vulkan</string> | 239 | <string name="renderer_vulkan">Vulkan</string> |
| 260 | <string name="renderer_none">Keiner</string> | 240 | <string name="renderer_none">Keiner</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 986e80e50..357f956d1 100644 --- a/src/android/app/src/main/res/values-es/strings.xml +++ b/src/android/app/src/main/res/values-es/strings.xml | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">Taiwán</string> | 241 | <string name="region_taiwan">Taiwán</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">Japonés (日本語)</string> | ||
| 245 | <string name="language_english">Inglés (English)</string> | ||
| 246 | <string name="language_french">Francés (Français)</string> | ||
| 247 | <string name="langauge_german">Alemán (deutsch)</string> | ||
| 248 | <string name="language_italian">Italiano (Italiano)</string> | ||
| 249 | <string name="language_spanish">Español (Español)</string> | ||
| 250 | <string name="language_chinese">Chino (简体中文)</string> | ||
| 251 | <string name="language_korean">Coreano (한국어)</string> | ||
| 252 | <string name="language_dutch">Holandés (nederlands)</string> | ||
| 253 | <string name="language_portuguese">Portugués (Português)</string> | ||
| 254 | <string name="language_russian">Ruso (Русский)</string> | ||
| 255 | <string name="language_taiwanese">Taiwanés (台湾)</string> | ||
| 256 | <string name="language_british_english">Inglés británico</string> | ||
| 257 | <string name="language_canadian_french">Francés Canadiense (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">Español Latinoamericano (Español latinoamericano)</string> | ||
| 259 | <string name="language_simplified_chinese">Chino Simplificado (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">Chino tradicional (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">Portugués Brasileño (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulkan</string> | 246 | <string name="renderer_vulkan">Vulkan</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 14a9b2d5c..dfca1c830 100644 --- a/src/android/app/src/main/res/values-fr/strings.xml +++ b/src/android/app/src/main/res/values-fr/strings.xml | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">Taïwan</string> | 241 | <string name="region_taiwan">Taïwan</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">Japonais (日本語)</string> | ||
| 245 | <string name="language_english">Anglais</string> | ||
| 246 | <string name="language_french">Français (Français)</string> | ||
| 247 | <string name="langauge_german">Allemand (Deutsch)</string> | ||
| 248 | <string name="language_italian">Italien (Italiano)</string> | ||
| 249 | <string name="language_spanish">Espagnol (Español)</string> | ||
| 250 | <string name="language_chinese">Chinois (简体中文)</string> | ||
| 251 | <string name="language_korean">Coréen (한국어)</string> | ||
| 252 | <string name="language_dutch">Néerlandais (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">Portugais (Português)</string> | ||
| 254 | <string name="language_russian">Russe (Русский)</string> | ||
| 255 | <string name="language_taiwanese">Taïwanais (台湾)</string> | ||
| 256 | <string name="language_british_english">Anglais Britannique</string> | ||
| 257 | <string name="language_canadian_french">Français canadien (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">Espagnol latino-américain (Español latinoamericano)</string> | ||
| 259 | <string name="language_simplified_chinese">Chinois simplifié (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">Chinois Traditionnel (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">Portugais brésilien (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulkan</string> | 246 | <string name="renderer_vulkan">Vulkan</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 47a4cfa31..089d93ed6 100644 --- a/src/android/app/src/main/res/values-it/strings.xml +++ b/src/android/app/src/main/res/values-it/strings.xml | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">Taiwan</string> | 241 | <string name="region_taiwan">Taiwan</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">Giapponese (日本語)</string> | ||
| 245 | <string name="language_english">Inglese (English)</string> | ||
| 246 | <string name="language_french">Francese (Français)</string> | ||
| 247 | <string name="langauge_german">Tedesco (Deutsch)</string> | ||
| 248 | <string name="language_italian">Italiano (Italiano)</string> | ||
| 249 | <string name="language_spanish">Spagnolo (Español)</string> | ||
| 250 | <string name="language_chinese">Cinese (简体中文)</string> | ||
| 251 | <string name="language_korean">Coreano (한국어)</string> | ||
| 252 | <string name="language_dutch">Olandese (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">Portoghese (Português)</string> | ||
| 254 | <string name="language_russian">Russo (Русский)</string> | ||
| 255 | <string name="language_taiwanese">Taiwanese (台湾)</string> | ||
| 256 | <string name="language_british_english">Inglese britannico</string> | ||
| 257 | <string name="language_canadian_french">Francese Canadese (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">Spagnolo Latino Americano (Español latinoamericano)</string> | ||
| 259 | <string name="language_simplified_chinese">Cinese Semplificato (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">Cinese tradizionale (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">Portoghese (Português)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulkan</string> | 246 | <string name="renderer_vulkan">Vulkan</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 46eda9ef7..39b590bee 100644 --- a/src/android/app/src/main/res/values-ja/strings.xml +++ b/src/android/app/src/main/res/values-ja/strings.xml | |||
| @@ -239,24 +239,6 @@ | |||
| 239 | <string name="region_taiwan">台湾</string> | 239 | <string name="region_taiwan">台湾</string> |
| 240 | 240 | ||
| 241 | <!-- Language Names --> | 241 | <!-- Language Names --> |
| 242 | <string name="language_japanese">日本語</string> | ||
| 243 | <string name="language_english">英語</string> | ||
| 244 | <string name="language_french">フランス語 (Français)</string> | ||
| 245 | <string name="langauge_german">ドイツ語 (Deutsch)</string> | ||
| 246 | <string name="language_italian">イタリア語 (Italiano)</string> | ||
| 247 | <string name="language_spanish">スペイン語 (Español)</string> | ||
| 248 | <string name="language_chinese">中国語 (简体中文)</string> | ||
| 249 | <string name="language_korean">韓国語 (한국어)</string> | ||
| 250 | <string name="language_dutch">オランダ語 (Nederlands)</string> | ||
| 251 | <string name="language_portuguese">ポルトガル語 (Português)</string> | ||
| 252 | <string name="language_russian">ロシア語 (Русский)</string> | ||
| 253 | <string name="language_taiwanese">台湾語 (台湾)</string> | ||
| 254 | <string name="language_british_english">イギリス英語</string> | ||
| 255 | <string name="language_canadian_french">フランス語(カナダ) (Français canadien)</string> | ||
| 256 | <string name="language_latin_american_spanish">スペイン語(ラテンアメリカ) (Español latinoamericano)</string> | ||
| 257 | <string name="language_simplified_chinese">中国語 (简体中文)</string> | ||
| 258 | <string name="language_traditional_chinese">繁体字中国語 (正體中文)</string> | ||
| 259 | <string name="language_brazilian_portuguese">ポルトガル語(ブラジル) (Português do Brasil)</string> | ||
| 260 | 242 | ||
| 261 | <!-- Renderer APIs --> | 243 | <!-- Renderer APIs --> |
| 262 | <string name="renderer_vulkan">Vulkan</string> | 244 | <string name="renderer_vulkan">Vulkan</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 5da80ab4b..cbcb2873f 100644 --- a/src/android/app/src/main/res/values-ko/strings.xml +++ b/src/android/app/src/main/res/values-ko/strings.xml | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">타이완</string> | 241 | <string name="region_taiwan">타이완</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">일본어 (日本語)</string> | ||
| 245 | <string name="language_english">영어 (English)</string> | ||
| 246 | <string name="language_french">프랑스어 (Français)</string> | ||
| 247 | <string name="langauge_german">독일어(Deutsch)</string> | ||
| 248 | <string name="language_italian">이탈리아어 (Italiano)</string> | ||
| 249 | <string name="language_spanish">스페인어 (Español)</string> | ||
| 250 | <string name="language_chinese">중국어 (简体中文)</string> | ||
| 251 | <string name="language_korean">한국어 (Korean)</string> | ||
| 252 | <string name="language_dutch">네덜란드어 (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">포르투갈어 (Português)</string> | ||
| 254 | <string name="language_russian">러시아어 (Русский)</string> | ||
| 255 | <string name="language_taiwanese">대만어 (台湾)</string> | ||
| 256 | <string name="language_british_english">영어 (British English)</string> | ||
| 257 | <string name="language_canadian_french">캐나다 프랑스어 (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">라틴 아메리카 스페인어 (Español latinoamericano)</string> | ||
| 259 | <string name="language_simplified_chinese">중국어 간체 (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">중국어 번체 (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">브라질 포르투갈어 (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">불칸</string> | 246 | <string name="renderer_vulkan">불칸</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 3e1f9bce5..e48a4be38 100644 --- a/src/android/app/src/main/res/values-nb/strings.xml +++ b/src/android/app/src/main/res/values-nb/strings.xml | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">Taiwan</string> | 241 | <string name="region_taiwan">Taiwan</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">Japansk (日本語)</string> | ||
| 245 | <string name="language_english">Engelsk</string> | ||
| 246 | <string name="language_french">Fransk (Français)</string> | ||
| 247 | <string name="langauge_german">Tysk (Deutsch)</string> | ||
| 248 | <string name="language_italian">Italiensk (Italiano)</string> | ||
| 249 | <string name="language_spanish">Spansk (Español)</string> | ||
| 250 | <string name="language_chinese">Kinesisk (简体中文)</string> | ||
| 251 | <string name="language_korean">Koreansk (한국어)</string> | ||
| 252 | <string name="language_dutch">Nederlandsk (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">Portugisisk (Português)</string> | ||
| 254 | <string name="language_russian">Russisk (Русский)</string> | ||
| 255 | <string name="language_taiwanese">Taiwansk (台湾)</string> | ||
| 256 | <string name="language_british_english">Britisk Engelsk</string> | ||
| 257 | <string name="language_canadian_french">Kanadisk fransk (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">Latinamerikansk spansk (Español latinoamericano)</string> | ||
| 259 | <string name="language_simplified_chinese">Forenklet kinesisk (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">Tradisjonell Kinesisk (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">Brasiliansk portugisisk (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulkan</string> | 246 | <string name="renderer_vulkan">Vulkan</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 1cd1a8f87..bc9c0f7f4 100644 --- a/src/android/app/src/main/res/values-pl/strings.xml +++ b/src/android/app/src/main/res/values-pl/strings.xml | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">Tajwan</string> | 241 | <string name="region_taiwan">Tajwan</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">Japoński (日本語)</string> | ||
| 245 | <string name="language_english">Angielski</string> | ||
| 246 | <string name="language_french">Francuski (Francja)</string> | ||
| 247 | <string name="langauge_german">Niemiecki (Niemcy)</string> | ||
| 248 | <string name="language_italian">Włoski (Włochy)</string> | ||
| 249 | <string name="language_spanish">Hiszpański (Hiszpania)</string> | ||
| 250 | <string name="language_chinese">Chiński (简体中文)</string> | ||
| 251 | <string name="language_korean">Koreański (한국어)</string> | ||
| 252 | <string name="language_dutch">Duński (Holandia)</string> | ||
| 253 | <string name="language_portuguese">Portugalski (Portugalia)</string> | ||
| 254 | <string name="language_russian">Rosyjski (Русский)</string> | ||
| 255 | <string name="language_taiwanese">Tajwański (台湾)</string> | ||
| 256 | <string name="language_british_english">Angielski Brytyjski</string> | ||
| 257 | <string name="language_canadian_french">Francuski (Kanada)</string> | ||
| 258 | <string name="language_latin_american_spanish">Hiszpański (Ameryka Latynoska)</string> | ||
| 259 | <string name="language_simplified_chinese">Chiński uproszczony (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">Chiński tradycyjny (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">Portugalski (Brazylia)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulkan</string> | 246 | <string name="renderer_vulkan">Vulkan</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 35197c280..75fe0edbf 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 | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">Taiwan</string> | 241 | <string name="region_taiwan">Taiwan</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">Japônes (日本語)</string> | ||
| 245 | <string name="language_english">Português do Brasil</string> | ||
| 246 | <string name="language_french">Francês (Français)</string> | ||
| 247 | <string name="langauge_german">Alemão (Deutsch)</string> | ||
| 248 | <string name="language_italian">Italiano (Italiano)</string> | ||
| 249 | <string name="language_spanish">Espanhol (Español)</string> | ||
| 250 | <string name="language_chinese">Mandarim (简体中文)</string> | ||
| 251 | <string name="language_korean">Coreano (한국어)</string> | ||
| 252 | <string name="language_dutch">Holandês (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">Português (Português)</string> | ||
| 254 | <string name="language_russian">Russo (Русский)</string> | ||
| 255 | <string name="language_taiwanese">Taiwanês (台湾)</string> | ||
| 256 | <string name="language_british_english">Inglês britânico (British English)</string> | ||
| 257 | <string name="language_canadian_french">Fracês Canadiano (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">Espanhol da América Latina (Español latino-americano)</string> | ||
| 259 | <string name="language_simplified_chinese">Chinês Simplificado (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">Chinês tradicional (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">Português do Brasil (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulcano</string> | 246 | <string name="renderer_vulkan">Vulcano</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 8761e2374..96b040c66 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 | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">Taiwan</string> | 241 | <string name="region_taiwan">Taiwan</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">Japonês (日本語)</string> | ||
| 245 | <string name="language_english">Inglês</string> | ||
| 246 | <string name="language_french">Francês (Français)</string> | ||
| 247 | <string name="langauge_german">Alemão (Deutsch)</string> | ||
| 248 | <string name="language_italian">Italiano (Italiano)</string> | ||
| 249 | <string name="language_spanish">Espanhol (Español)</string> | ||
| 250 | <string name="language_chinese">Chinês simplificado (简体中文)</string> | ||
| 251 | <string name="language_korean">Coreano (한국어)</string> | ||
| 252 | <string name="language_dutch">Holandês (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">Português (Português)</string> | ||
| 254 | <string name="language_russian">Russo (Русский)</string> | ||
| 255 | <string name="language_taiwanese">Taiwanês (台湾)</string> | ||
| 256 | <string name="language_british_english">Inglês Britânico</string> | ||
| 257 | <string name="language_canadian_french">Fracês Canadiano (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">Espanhol da América Latina (Español latino-americano)</string> | ||
| 259 | <string name="language_simplified_chinese">Chinês Simplificado (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">Chinês Tradicional (正 體 中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">Português do Brasil (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulcano</string> | 246 | <string name="renderer_vulkan">Vulcano</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 0fb4908f7..8d954f59e 100644 --- a/src/android/app/src/main/res/values-ru/strings.xml +++ b/src/android/app/src/main/res/values-ru/strings.xml | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">Тайвань</string> | 241 | <string name="region_taiwan">Тайвань</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">Японский (日本語)</string> | ||
| 245 | <string name="language_english">Английский (English)</string> | ||
| 246 | <string name="language_french">Французский (Français)</string> | ||
| 247 | <string name="langauge_german">Немецкий (Deutsch)</string> | ||
| 248 | <string name="language_italian">Итальянский (Italiano)</string> | ||
| 249 | <string name="language_spanish">Испанский (Español)</string> | ||
| 250 | <string name="language_chinese">Китайский (简体中文)</string> | ||
| 251 | <string name="language_korean">Корейский (한국어)</string> | ||
| 252 | <string name="language_dutch">Голландский (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">Португальский (Português)</string> | ||
| 254 | <string name="language_russian">Русский</string> | ||
| 255 | <string name="language_taiwanese">Тайваньский (台湾)</string> | ||
| 256 | <string name="language_british_english">Британский английский</string> | ||
| 257 | <string name="language_canadian_french">Канадский французский (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">Латиноамериканский испанский (Español latinoamericano)</string> | ||
| 259 | <string name="language_simplified_chinese">Упрощенный китайский (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">Традиционный китайский (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">Бразильский португальский (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulkan</string> | 246 | <string name="renderer_vulkan">Vulkan</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 0d11eb2d2..6c028535b 100644 --- a/src/android/app/src/main/res/values-uk/strings.xml +++ b/src/android/app/src/main/res/values-uk/strings.xml | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">Тайвань</string> | 241 | <string name="region_taiwan">Тайвань</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">Японська (日本語)</string> | ||
| 245 | <string name="language_english">Англійська (English)</string> | ||
| 246 | <string name="language_french">Французька (Français)</string> | ||
| 247 | <string name="langauge_german">Німецька (Deutsch)</string> | ||
| 248 | <string name="language_italian">Італійська (Italiano)</string> | ||
| 249 | <string name="language_spanish">Іспанська (Español)</string> | ||
| 250 | <string name="language_chinese">Китайскька (简体中文)</string> | ||
| 251 | <string name="language_korean">Корейська (한국어)</string> | ||
| 252 | <string name="language_dutch">Голландська (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">Португальська (Português)</string> | ||
| 254 | <string name="language_russian">Російська (Русский)</string> | ||
| 255 | <string name="language_taiwanese">Тайванська (台湾)</string> | ||
| 256 | <string name="language_british_english">Британська англійська</string> | ||
| 257 | <string name="language_canadian_french">Канадська французька (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">Латиноамериканська іспанська (Español latinoamericano)</string> | ||
| 259 | <string name="language_simplified_chinese">Спрощена китайська (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">Традиційна китайська (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">Бразильська португальська (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulkan</string> | 246 | <string name="renderer_vulkan">Vulkan</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 e00bbaa2e..e4ad2ed07 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 | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">中国台湾</string> | 241 | <string name="region_taiwan">中国台湾</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">日语 (日本語)</string> | ||
| 245 | <string name="language_english">英语 (English)</string> | ||
| 246 | <string name="language_french">法语 (Français)</string> | ||
| 247 | <string name="langauge_german">德语 (Deutsch)</string> | ||
| 248 | <string name="language_italian">意大利语 (Italiano)</string> | ||
| 249 | <string name="language_spanish">西班牙语 (Español)</string> | ||
| 250 | <string name="language_chinese">中文 (简体中文)</string> | ||
| 251 | <string name="language_korean">韩语 (한국어)</string> | ||
| 252 | <string name="language_dutch">荷兰语 (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">葡萄牙语 (Português)</string> | ||
| 254 | <string name="language_russian">俄语 (Русский)</string> | ||
| 255 | <string name="language_taiwanese">台湾中文 (台灣)</string> | ||
| 256 | <string name="language_british_english">英式英语</string> | ||
| 257 | <string name="language_canadian_french">加拿大法语 (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">拉丁美洲西班牙语 (Español latinoamericano)</string> | ||
| 259 | <string name="language_simplified_chinese">简体中文 (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">繁体中文 (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">巴西葡萄牙语 (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulkan</string> | 246 | <string name="renderer_vulkan">Vulkan</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 a54d04248..0d32f23df 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 | |||
| @@ -241,24 +241,6 @@ | |||
| 241 | <string name="region_taiwan">台灣</string> | 241 | <string name="region_taiwan">台灣</string> |
| 242 | 242 | ||
| 243 | <!-- Language Names --> | 243 | <!-- Language Names --> |
| 244 | <string name="language_japanese">日文 (日本語)</string> | ||
| 245 | <string name="language_english">英文</string> | ||
| 246 | <string name="language_french">法文 (Français)</string> | ||
| 247 | <string name="langauge_german">德文 (Deutsch)</string> | ||
| 248 | <string name="language_italian">義大利文 (Italiano)</string> | ||
| 249 | <string name="language_spanish">西班牙文 (Español)</string> | ||
| 250 | <string name="language_chinese">中文 (简体中文)</string> | ||
| 251 | <string name="language_korean">韓文 (한국어)</string> | ||
| 252 | <string name="language_dutch">荷蘭文 (Nederlands)</string> | ||
| 253 | <string name="language_portuguese">葡萄牙文 (Português)</string> | ||
| 254 | <string name="language_russian">俄文 (Русский)</string> | ||
| 255 | <string name="language_taiwanese">台文 (台灣)</string> | ||
| 256 | <string name="language_british_english">英式英文</string> | ||
| 257 | <string name="language_canadian_french">加拿大法文 (Français canadien)</string> | ||
| 258 | <string name="language_latin_american_spanish">拉丁美洲西班牙文 (Español latinoamericano)</string> | ||
| 259 | <string name="language_simplified_chinese">簡體中文 (简体中文)</string> | ||
| 260 | <string name="language_traditional_chinese">正體中文 (正體中文)</string> | ||
| 261 | <string name="language_brazilian_portuguese">巴西葡萄牙文 (Português do Brasil)</string> | ||
| 262 | 244 | ||
| 263 | <!-- Renderer APIs --> | 245 | <!-- Renderer APIs --> |
| 264 | <string name="renderer_vulkan">Vulkan</string> | 246 | <string name="renderer_vulkan">Vulkan</string> |
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index bfdebd35b..02e25504d 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml | |||
| @@ -287,24 +287,24 @@ | |||
| 287 | <string name="region_taiwan">Taiwan</string> | 287 | <string name="region_taiwan">Taiwan</string> |
| 288 | 288 | ||
| 289 | <!-- Language Names --> | 289 | <!-- Language Names --> |
| 290 | <string name="language_japanese">Japanese (日本語)</string> | 290 | <string name="language_japanese" translatable="false">日本語</string> |
| 291 | <string name="language_english">English</string> | 291 | <string name="language_english" translatable="false">English</string> |
| 292 | <string name="language_french">French (Français)</string> | 292 | <string name="language_french" translatable="false">Français</string> |
| 293 | <string name="langauge_german">German (Deutsch)</string> | 293 | <string name="langauge_german" translatable="false">Deutsch</string> |
| 294 | <string name="language_italian">Italian (Italiano)</string> | 294 | <string name="language_italian" translatable="false">Italiano</string> |
| 295 | <string name="language_spanish">Spanish (Español)</string> | 295 | <string name="language_spanish" translatable="false">Español</string> |
| 296 | <string name="language_chinese">Chinese (简体中文)</string> | 296 | <string name="language_chinese" translatable="false">简体中文</string> |
| 297 | <string name="language_korean">Korean (한국어)</string> | 297 | <string name="language_korean" translatable="false">한국어</string> |
| 298 | <string name="language_dutch">Dutch (Nederlands)</string> | 298 | <string name="language_dutch" translatable="false">Nederlands</string> |
| 299 | <string name="language_portuguese">Portuguese (Português)</string> | 299 | <string name="language_portuguese" translatable="false">Português</string> |
| 300 | <string name="language_russian">Russian (Русский)</string> | 300 | <string name="language_russian" translatable="false">Русский</string> |
| 301 | <string name="language_taiwanese">Taiwanese (台湾)</string> | 301 | <string name="language_taiwanese" translatable="false">台湾</string> |
| 302 | <string name="language_british_english">British English</string> | 302 | <string name="language_british_english" translatable="false">British English</string> |
| 303 | <string name="language_canadian_french">Canadian French (Français canadien)</string> | 303 | <string name="language_canadian_french" translatable="false">Français canadien</string> |
| 304 | <string name="language_latin_american_spanish">Latin American Spanish (Español latinoamericano)</string> | 304 | <string name="language_latin_american_spanish" translatable="false">Español latinoamericano</string> |
| 305 | <string name="language_simplified_chinese">Simplified Chinese (简体中文)</string> | 305 | <string name="language_simplified_chinese" translatable="false">简体中文</string> |
| 306 | <string name="language_traditional_chinese">Traditional Chinese (正體中文)</string> | 306 | <string name="language_traditional_chinese" translatable="false">正體中文</string> |
| 307 | <string name="language_brazilian_portuguese">Brazilian Portuguese (Português do Brasil)</string> | 307 | <string name="language_brazilian_portuguese" translatable="false">Português do Brasil</string> |
| 308 | 308 | ||
| 309 | <!-- Memory Sizes --> | 309 | <!-- Memory Sizes --> |
| 310 | <string name="memory_byte">Byte</string> | 310 | <string name="memory_byte">Byte</string> |
diff --git a/src/common/page_table.h b/src/common/page_table.h index fec8378f3..e653d52ad 100644 --- a/src/common/page_table.h +++ b/src/common/page_table.h | |||
| @@ -51,7 +51,7 @@ struct PageTable { | |||
| 51 | class PageInfo { | 51 | class PageInfo { |
| 52 | public: | 52 | public: |
| 53 | /// Returns the page pointer | 53 | /// Returns the page pointer |
| 54 | [[nodiscard]] u8* Pointer() const noexcept { | 54 | [[nodiscard]] uintptr_t Pointer() const noexcept { |
| 55 | return ExtractPointer(raw.load(std::memory_order_relaxed)); | 55 | return ExtractPointer(raw.load(std::memory_order_relaxed)); |
| 56 | } | 56 | } |
| 57 | 57 | ||
| @@ -61,7 +61,7 @@ struct PageTable { | |||
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | /// Returns the page pointer and attribute pair, extracted from the same atomic read | 63 | /// Returns the page pointer and attribute pair, extracted from the same atomic read |
| 64 | [[nodiscard]] std::pair<u8*, PageType> PointerType() const noexcept { | 64 | [[nodiscard]] std::pair<uintptr_t, PageType> PointerType() const noexcept { |
| 65 | const uintptr_t non_atomic_raw = raw.load(std::memory_order_relaxed); | 65 | const uintptr_t non_atomic_raw = raw.load(std::memory_order_relaxed); |
| 66 | return {ExtractPointer(non_atomic_raw), ExtractType(non_atomic_raw)}; | 66 | return {ExtractPointer(non_atomic_raw), ExtractType(non_atomic_raw)}; |
| 67 | } | 67 | } |
| @@ -73,13 +73,13 @@ struct PageTable { | |||
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | /// Write a page pointer and type pair atomically | 75 | /// Write a page pointer and type pair atomically |
| 76 | void Store(u8* pointer, PageType type) noexcept { | 76 | void Store(uintptr_t pointer, PageType type) noexcept { |
| 77 | raw.store(reinterpret_cast<uintptr_t>(pointer) | static_cast<uintptr_t>(type)); | 77 | raw.store(pointer | static_cast<uintptr_t>(type)); |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | /// Unpack a pointer from a page info raw representation | 80 | /// Unpack a pointer from a page info raw representation |
| 81 | [[nodiscard]] static u8* ExtractPointer(uintptr_t raw) noexcept { | 81 | [[nodiscard]] static uintptr_t ExtractPointer(uintptr_t raw) noexcept { |
| 82 | return reinterpret_cast<u8*>(raw & (~uintptr_t{0} << ATTRIBUTE_BITS)); | 82 | return raw & (~uintptr_t{0} << ATTRIBUTE_BITS); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | /// Unpack a page type from a page info raw representation | 85 | /// Unpack a page type from a page info raw representation |
diff --git a/src/core/arm/arm_interface.cpp b/src/core/arm/arm_interface.cpp index aa0eb9791..0c012f094 100644 --- a/src/core/arm/arm_interface.cpp +++ b/src/core/arm/arm_interface.cpp | |||
| @@ -217,8 +217,8 @@ void ARM_Interface::Run() { | |||
| 217 | } | 217 | } |
| 218 | } | 218 | } |
| 219 | 219 | ||
| 220 | void ARM_Interface::LoadWatchpointArray(const WatchpointArray& wp) { | 220 | void ARM_Interface::LoadWatchpointArray(const WatchpointArray* wp) { |
| 221 | watchpoints = ℘ | 221 | watchpoints = wp; |
| 222 | } | 222 | } |
| 223 | 223 | ||
| 224 | const Kernel::DebugWatchpoint* ARM_Interface::MatchingWatchpoint( | 224 | const Kernel::DebugWatchpoint* ARM_Interface::MatchingWatchpoint( |
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index d5f2fa09a..3d866ff6f 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h | |||
| @@ -186,7 +186,7 @@ public: | |||
| 186 | virtual void SaveContext(ThreadContext64& ctx) const = 0; | 186 | virtual void SaveContext(ThreadContext64& ctx) const = 0; |
| 187 | virtual void LoadContext(const ThreadContext32& ctx) = 0; | 187 | virtual void LoadContext(const ThreadContext32& ctx) = 0; |
| 188 | virtual void LoadContext(const ThreadContext64& ctx) = 0; | 188 | virtual void LoadContext(const ThreadContext64& ctx) = 0; |
| 189 | void LoadWatchpointArray(const WatchpointArray& wp); | 189 | void LoadWatchpointArray(const WatchpointArray* wp); |
| 190 | 190 | ||
| 191 | /// Clears the exclusive monitor's state. | 191 | /// Clears the exclusive monitor's state. |
| 192 | virtual void ClearExclusiveState() = 0; | 192 | virtual void ClearExclusiveState() = 0; |
diff --git a/src/core/hle/kernel/k_auto_object.cpp b/src/core/hle/kernel/k_auto_object.cpp index 0ae42c95c..9cd7a9fd5 100644 --- a/src/core/hle/kernel/k_auto_object.cpp +++ b/src/core/hle/kernel/k_auto_object.cpp | |||
| @@ -15,8 +15,8 @@ void KAutoObject::RegisterWithKernel() { | |||
| 15 | m_kernel.RegisterKernelObject(this); | 15 | m_kernel.RegisterKernelObject(this); |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | void KAutoObject::UnregisterWithKernel() { | 18 | void KAutoObject::UnregisterWithKernel(KernelCore& kernel, KAutoObject* self) { |
| 19 | m_kernel.UnregisterKernelObject(this); | 19 | kernel.UnregisterKernelObject(self); |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | } // namespace Kernel | 22 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/k_auto_object.h b/src/core/hle/kernel/k_auto_object.h index f384b1568..8d4e0df44 100644 --- a/src/core/hle/kernel/k_auto_object.h +++ b/src/core/hle/kernel/k_auto_object.h | |||
| @@ -159,14 +159,15 @@ public: | |||
| 159 | 159 | ||
| 160 | // If ref count hits zero, destroy the object. | 160 | // If ref count hits zero, destroy the object. |
| 161 | if (cur_ref_count - 1 == 0) { | 161 | if (cur_ref_count - 1 == 0) { |
| 162 | KernelCore& kernel = m_kernel; | ||
| 162 | this->Destroy(); | 163 | this->Destroy(); |
| 163 | this->UnregisterWithKernel(); | 164 | KAutoObject::UnregisterWithKernel(kernel, this); |
| 164 | } | 165 | } |
| 165 | } | 166 | } |
| 166 | 167 | ||
| 167 | private: | 168 | private: |
| 168 | void RegisterWithKernel(); | 169 | void RegisterWithKernel(); |
| 169 | void UnregisterWithKernel(); | 170 | static void UnregisterWithKernel(KernelCore& kernel, KAutoObject* self); |
| 170 | 171 | ||
| 171 | protected: | 172 | protected: |
| 172 | KernelCore& m_kernel; | 173 | KernelCore& m_kernel; |
diff --git a/src/core/hle/kernel/k_scheduler.cpp b/src/core/hle/kernel/k_scheduler.cpp index 75ce5a23c..d8143c650 100644 --- a/src/core/hle/kernel/k_scheduler.cpp +++ b/src/core/hle/kernel/k_scheduler.cpp | |||
| @@ -510,11 +510,12 @@ void KScheduler::Unload(KThread* thread) { | |||
| 510 | 510 | ||
| 511 | void KScheduler::Reload(KThread* thread) { | 511 | void KScheduler::Reload(KThread* thread) { |
| 512 | auto& cpu_core = m_kernel.System().ArmInterface(m_core_id); | 512 | auto& cpu_core = m_kernel.System().ArmInterface(m_core_id); |
| 513 | auto* process = thread->GetOwnerProcess(); | ||
| 513 | cpu_core.LoadContext(thread->GetContext32()); | 514 | cpu_core.LoadContext(thread->GetContext32()); |
| 514 | cpu_core.LoadContext(thread->GetContext64()); | 515 | cpu_core.LoadContext(thread->GetContext64()); |
| 515 | cpu_core.SetTlsAddress(GetInteger(thread->GetTlsAddress())); | 516 | cpu_core.SetTlsAddress(GetInteger(thread->GetTlsAddress())); |
| 516 | cpu_core.SetTPIDR_EL0(thread->GetTpidrEl0()); | 517 | cpu_core.SetTPIDR_EL0(thread->GetTpidrEl0()); |
| 517 | cpu_core.LoadWatchpointArray(thread->GetOwnerProcess()->GetWatchpoints()); | 518 | cpu_core.LoadWatchpointArray(process ? &process->GetWatchpoints() : nullptr); |
| 518 | cpu_core.ClearExclusiveState(); | 519 | cpu_core.ClearExclusiveState(); |
| 519 | } | 520 | } |
| 520 | 521 | ||
diff --git a/src/core/hle/kernel/k_thread.cpp b/src/core/hle/kernel/k_thread.cpp index d88909889..7df8fd7f7 100644 --- a/src/core/hle/kernel/k_thread.cpp +++ b/src/core/hle/kernel/k_thread.cpp | |||
| @@ -129,7 +129,7 @@ Result KThread::Initialize(KThreadFunction func, uintptr_t arg, KProcessAddress | |||
| 129 | case ThreadType::User: | 129 | case ThreadType::User: |
| 130 | ASSERT(((owner == nullptr) || | 130 | ASSERT(((owner == nullptr) || |
| 131 | (owner->GetCoreMask() | (1ULL << virt_core)) == owner->GetCoreMask())); | 131 | (owner->GetCoreMask() | (1ULL << virt_core)) == owner->GetCoreMask())); |
| 132 | ASSERT(((owner == nullptr) || | 132 | ASSERT(((owner == nullptr) || (prio > Svc::LowestThreadPriority) || |
| 133 | (owner->GetPriorityMask() | (1ULL << prio)) == owner->GetPriorityMask())); | 133 | (owner->GetPriorityMask() | (1ULL << prio)) == owner->GetPriorityMask())); |
| 134 | break; | 134 | break; |
| 135 | case ThreadType::Kernel: | 135 | case ThreadType::Kernel: |
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 09c53ea92..fa5273402 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp | |||
| @@ -83,7 +83,7 @@ struct Memory::Impl { | |||
| 83 | return {}; | 83 | return {}; |
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | return system.DeviceMemory().GetPointer<u8>(paddr) + vaddr; | 86 | return system.DeviceMemory().GetPointer<u8>(paddr + vaddr); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | [[nodiscard]] u8* GetPointerFromDebugMemory(u64 vaddr) const { | 89 | [[nodiscard]] u8* GetPointerFromDebugMemory(u64 vaddr) const { |
| @@ -94,7 +94,7 @@ struct Memory::Impl { | |||
| 94 | return {}; | 94 | return {}; |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | return system.DeviceMemory().GetPointer<u8>(paddr) + vaddr; | 97 | return system.DeviceMemory().GetPointer<u8>(paddr + vaddr); |
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | u8 Read8(const Common::ProcessAddress addr) { | 100 | u8 Read8(const Common::ProcessAddress addr) { |
| @@ -220,7 +220,8 @@ struct Memory::Impl { | |||
| 220 | break; | 220 | break; |
| 221 | } | 221 | } |
| 222 | case Common::PageType::Memory: { | 222 | case Common::PageType::Memory: { |
| 223 | u8* mem_ptr = pointer + page_offset + (page_index << YUZU_PAGEBITS); | 223 | u8* mem_ptr = |
| 224 | reinterpret_cast<u8*>(pointer + page_offset + (page_index << YUZU_PAGEBITS)); | ||
| 224 | on_memory(copy_amount, mem_ptr); | 225 | on_memory(copy_amount, mem_ptr); |
| 225 | break; | 226 | break; |
| 226 | } | 227 | } |
| @@ -462,7 +463,7 @@ struct Memory::Impl { | |||
| 462 | break; | 463 | break; |
| 463 | case Common::PageType::Memory: | 464 | case Common::PageType::Memory: |
| 464 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( | 465 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( |
| 465 | nullptr, Common::PageType::DebugMemory); | 466 | 0, Common::PageType::DebugMemory); |
| 466 | break; | 467 | break; |
| 467 | default: | 468 | default: |
| 468 | UNREACHABLE(); | 469 | UNREACHABLE(); |
| @@ -480,7 +481,8 @@ struct Memory::Impl { | |||
| 480 | case Common::PageType::DebugMemory: { | 481 | case Common::PageType::DebugMemory: { |
| 481 | u8* const pointer{GetPointerFromDebugMemory(vaddr & ~YUZU_PAGEMASK)}; | 482 | u8* const pointer{GetPointerFromDebugMemory(vaddr & ~YUZU_PAGEMASK)}; |
| 482 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( | 483 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( |
| 483 | pointer - (vaddr & ~YUZU_PAGEMASK), Common::PageType::Memory); | 484 | reinterpret_cast<uintptr_t>(pointer) - (vaddr & ~YUZU_PAGEMASK), |
| 485 | Common::PageType::Memory); | ||
| 484 | break; | 486 | break; |
| 485 | } | 487 | } |
| 486 | default: | 488 | default: |
| @@ -520,7 +522,7 @@ struct Memory::Impl { | |||
| 520 | case Common::PageType::DebugMemory: | 522 | case Common::PageType::DebugMemory: |
| 521 | case Common::PageType::Memory: | 523 | case Common::PageType::Memory: |
| 522 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( | 524 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( |
| 523 | nullptr, Common::PageType::RasterizerCachedMemory); | 525 | 0, Common::PageType::RasterizerCachedMemory); |
| 524 | break; | 526 | break; |
| 525 | case Common::PageType::RasterizerCachedMemory: | 527 | case Common::PageType::RasterizerCachedMemory: |
| 526 | // There can be more than one GPU region mapped per CPU region, so it's common | 528 | // There can be more than one GPU region mapped per CPU region, so it's common |
| @@ -548,10 +550,11 @@ struct Memory::Impl { | |||
| 548 | // pagetable after unmapping a VMA. In that case the underlying VMA will no | 550 | // pagetable after unmapping a VMA. In that case the underlying VMA will no |
| 549 | // longer exist, and we should just leave the pagetable entry blank. | 551 | // longer exist, and we should just leave the pagetable entry blank. |
| 550 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( | 552 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( |
| 551 | nullptr, Common::PageType::Unmapped); | 553 | 0, Common::PageType::Unmapped); |
| 552 | } else { | 554 | } else { |
| 553 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( | 555 | current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Store( |
| 554 | pointer - (vaddr & ~YUZU_PAGEMASK), Common::PageType::Memory); | 556 | reinterpret_cast<uintptr_t>(pointer) - (vaddr & ~YUZU_PAGEMASK), |
| 557 | Common::PageType::Memory); | ||
| 555 | } | 558 | } |
| 556 | break; | 559 | break; |
| 557 | } | 560 | } |
| @@ -598,7 +601,7 @@ struct Memory::Impl { | |||
| 598 | "Mapping memory page without a pointer @ {:016x}", base * YUZU_PAGESIZE); | 601 | "Mapping memory page without a pointer @ {:016x}", base * YUZU_PAGESIZE); |
| 599 | 602 | ||
| 600 | while (base != end) { | 603 | while (base != end) { |
| 601 | page_table.pointers[base].Store(nullptr, type); | 604 | page_table.pointers[base].Store(0, type); |
| 602 | page_table.backing_addr[base] = 0; | 605 | page_table.backing_addr[base] = 0; |
| 603 | page_table.blocks[base] = 0; | 606 | page_table.blocks[base] = 0; |
| 604 | base += 1; | 607 | base += 1; |
| @@ -607,7 +610,8 @@ struct Memory::Impl { | |||
| 607 | auto orig_base = base; | 610 | auto orig_base = base; |
| 608 | while (base != end) { | 611 | while (base != end) { |
| 609 | auto host_ptr = | 612 | auto host_ptr = |
| 610 | system.DeviceMemory().GetPointer<u8>(target) - (base << YUZU_PAGEBITS); | 613 | reinterpret_cast<uintptr_t>(system.DeviceMemory().GetPointer<u8>(target)) - |
| 614 | (base << YUZU_PAGEBITS); | ||
| 611 | auto backing = GetInteger(target) - (base << YUZU_PAGEBITS); | 615 | auto backing = GetInteger(target) - (base << YUZU_PAGEBITS); |
| 612 | page_table.pointers[base].Store(host_ptr, type); | 616 | page_table.pointers[base].Store(host_ptr, type); |
| 613 | page_table.backing_addr[base] = backing; | 617 | page_table.backing_addr[base] = backing; |
| @@ -633,8 +637,8 @@ struct Memory::Impl { | |||
| 633 | 637 | ||
| 634 | // Avoid adding any extra logic to this fast-path block | 638 | // Avoid adding any extra logic to this fast-path block |
| 635 | const uintptr_t raw_pointer = current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Raw(); | 639 | const uintptr_t raw_pointer = current_page_table->pointers[vaddr >> YUZU_PAGEBITS].Raw(); |
| 636 | if (u8* const pointer = Common::PageTable::PageInfo::ExtractPointer(raw_pointer)) { | 640 | if (const uintptr_t pointer = Common::PageTable::PageInfo::ExtractPointer(raw_pointer)) { |
| 637 | return &pointer[vaddr]; | 641 | return reinterpret_cast<u8*>(pointer + vaddr); |
| 638 | } | 642 | } |
| 639 | switch (Common::PageTable::PageInfo::ExtractType(raw_pointer)) { | 643 | switch (Common::PageTable::PageInfo::ExtractType(raw_pointer)) { |
| 640 | case Common::PageType::Unmapped: | 644 | case Common::PageType::Unmapped: |
| @@ -828,7 +832,7 @@ bool Memory::IsValidVirtualAddress(const Common::ProcessAddress vaddr) const { | |||
| 828 | return false; | 832 | return false; |
| 829 | } | 833 | } |
| 830 | const auto [pointer, type] = page_table.pointers[page].PointerType(); | 834 | const auto [pointer, type] = page_table.pointers[page].PointerType(); |
| 831 | return pointer != nullptr || type == Common::PageType::RasterizerCachedMemory || | 835 | return pointer != 0 || type == Common::PageType::RasterizerCachedMemory || |
| 832 | type == Common::PageType::DebugMemory; | 836 | type == Common::PageType::DebugMemory; |
| 833 | } | 837 | } |
| 834 | 838 | ||
diff --git a/src/video_core/query_cache.h b/src/video_core/query_cache.h index 1528cc1dd..7047e2e63 100644 --- a/src/video_core/query_cache.h +++ b/src/video_core/query_cache.h | |||
| @@ -103,7 +103,9 @@ public: | |||
| 103 | explicit QueryCacheBase(VideoCore::RasterizerInterface& rasterizer_, | 103 | explicit QueryCacheBase(VideoCore::RasterizerInterface& rasterizer_, |
| 104 | Core::Memory::Memory& cpu_memory_) | 104 | Core::Memory::Memory& cpu_memory_) |
| 105 | : rasterizer{rasterizer_}, | 105 | : rasterizer{rasterizer_}, |
| 106 | cpu_memory{cpu_memory_}, streams{{CounterStream{static_cast<QueryCache&>(*this), | 106 | // Use reinterpret_cast instead of static_cast as workaround for |
| 107 | // UBSan bug (https://github.com/llvm/llvm-project/issues/59060) | ||
| 108 | cpu_memory{cpu_memory_}, streams{{CounterStream{reinterpret_cast<QueryCache&>(*this), | ||
| 107 | VideoCore::QueryType::SamplesPassed}}} { | 109 | VideoCore::QueryType::SamplesPassed}}} { |
| 108 | (void)slot_async_jobs.insert(); // Null value | 110 | (void)slot_async_jobs.insert(); // Null value |
| 109 | } | 111 | } |
diff --git a/src/video_core/rasterizer_accelerated.cpp b/src/video_core/rasterizer_accelerated.cpp index 4a197d65d..f200a650f 100644 --- a/src/video_core/rasterizer_accelerated.cpp +++ b/src/video_core/rasterizer_accelerated.cpp | |||
| @@ -13,7 +13,8 @@ namespace VideoCore { | |||
| 13 | 13 | ||
| 14 | using namespace Core::Memory; | 14 | using namespace Core::Memory; |
| 15 | 15 | ||
| 16 | RasterizerAccelerated::RasterizerAccelerated(Memory& cpu_memory_) : cpu_memory{cpu_memory_} {} | 16 | RasterizerAccelerated::RasterizerAccelerated(Memory& cpu_memory_) |
| 17 | : cached_pages(std::make_unique<CachedPages>()), cpu_memory{cpu_memory_} {} | ||
| 17 | 18 | ||
| 18 | RasterizerAccelerated::~RasterizerAccelerated() = default; | 19 | RasterizerAccelerated::~RasterizerAccelerated() = default; |
| 19 | 20 | ||
| @@ -26,7 +27,7 @@ void RasterizerAccelerated::UpdatePagesCachedCount(VAddr addr, u64 size, int del | |||
| 26 | std::atomic_thread_fence(std::memory_order_acquire); | 27 | std::atomic_thread_fence(std::memory_order_acquire); |
| 27 | const u64 page_end = Common::DivCeil(addr + size, YUZU_PAGESIZE); | 28 | const u64 page_end = Common::DivCeil(addr + size, YUZU_PAGESIZE); |
| 28 | for (u64 page = addr >> YUZU_PAGEBITS; page != page_end; ++page) { | 29 | for (u64 page = addr >> YUZU_PAGEBITS; page != page_end; ++page) { |
| 29 | std::atomic_uint16_t& count = cached_pages.at(page >> 2).Count(page); | 30 | std::atomic_uint16_t& count = cached_pages->at(page >> 2).Count(page); |
| 30 | 31 | ||
| 31 | if (delta > 0) { | 32 | if (delta > 0) { |
| 32 | ASSERT_MSG(count.load(std::memory_order::relaxed) < UINT16_MAX, "Count may overflow!"); | 33 | ASSERT_MSG(count.load(std::memory_order::relaxed) < UINT16_MAX, "Count may overflow!"); |
diff --git a/src/video_core/rasterizer_accelerated.h b/src/video_core/rasterizer_accelerated.h index 7118b8aff..e6c0ea87a 100644 --- a/src/video_core/rasterizer_accelerated.h +++ b/src/video_core/rasterizer_accelerated.h | |||
| @@ -41,7 +41,8 @@ private: | |||
| 41 | }; | 41 | }; |
| 42 | static_assert(sizeof(CacheEntry) == 8, "CacheEntry should be 8 bytes!"); | 42 | static_assert(sizeof(CacheEntry) == 8, "CacheEntry should be 8 bytes!"); |
| 43 | 43 | ||
| 44 | std::array<CacheEntry, 0x2000000> cached_pages; | 44 | using CachedPages = std::array<CacheEntry, 0x2000000>; |
| 45 | std::unique_ptr<CachedPages> cached_pages; | ||
| 45 | Core::Memory::Memory& cpu_memory; | 46 | Core::Memory::Memory& cpu_memory; |
| 46 | }; | 47 | }; |
| 47 | 48 | ||
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index e04852e01..9c6fbb918 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp | |||
| @@ -554,14 +554,6 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 554 | } | 554 | } |
| 555 | 555 | ||
| 556 | sets_per_pool = 64; | 556 | sets_per_pool = 64; |
| 557 | if (extensions.extended_dynamic_state3 && is_amd_driver && | ||
| 558 | properties.properties.driverVersion >= VK_MAKE_API_VERSION(0, 2, 0, 270)) { | ||
| 559 | LOG_WARNING(Render_Vulkan, | ||
| 560 | "AMD drivers after 23.5.2 have broken extendedDynamicState3ColorBlendEquation"); | ||
| 561 | features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false; | ||
| 562 | features.extended_dynamic_state3.extendedDynamicState3ColorBlendEquation = false; | ||
| 563 | dynamic_state3_blending = false; | ||
| 564 | } | ||
| 565 | if (is_amd_driver) { | 557 | if (is_amd_driver) { |
| 566 | // AMD drivers need a higher amount of Sets per Pool in certain circumstances like in XC2. | 558 | // AMD drivers need a higher amount of Sets per Pool in certain circumstances like in XC2. |
| 567 | sets_per_pool = 96; | 559 | sets_per_pool = 96; |
diff --git a/src/yuzu/discord_impl.cpp b/src/yuzu/discord_impl.cpp index ac2fc1bcb..57b50abd0 100644 --- a/src/yuzu/discord_impl.cpp +++ b/src/yuzu/discord_impl.cpp | |||
| @@ -3,9 +3,14 @@ | |||
| 3 | 3 | ||
| 4 | #include <chrono> | 4 | #include <chrono> |
| 5 | #include <string> | 5 | #include <string> |
| 6 | |||
| 7 | #include <QEventLoop> | ||
| 8 | #include <QNetworkAccessManager> | ||
| 9 | #include <QNetworkReply> | ||
| 10 | |||
| 6 | #include <discord_rpc.h> | 11 | #include <discord_rpc.h> |
| 7 | #include <fmt/format.h> | 12 | #include <fmt/format.h> |
| 8 | #include <httplib.h> | 13 | |
| 9 | #include "common/common_types.h" | 14 | #include "common/common_types.h" |
| 10 | #include "common/string_util.h" | 15 | #include "common/string_util.h" |
| 11 | #include "core/core.h" | 16 | #include "core/core.h" |
| @@ -31,7 +36,7 @@ void DiscordImpl::Pause() { | |||
| 31 | Discord_ClearPresence(); | 36 | Discord_ClearPresence(); |
| 32 | } | 37 | } |
| 33 | 38 | ||
| 34 | static std::string GetGameString(const std::string& title) { | 39 | std::string DiscordImpl::GetGameString(const std::string& title) { |
| 35 | // Convert to lowercase | 40 | // Convert to lowercase |
| 36 | std::string icon_name = Common::ToLower(title); | 41 | std::string icon_name = Common::ToLower(title); |
| 37 | 42 | ||
| @@ -56,51 +61,56 @@ static std::string GetGameString(const std::string& title) { | |||
| 56 | return icon_name; | 61 | return icon_name; |
| 57 | } | 62 | } |
| 58 | 63 | ||
| 59 | void DiscordImpl::Update() { | 64 | void DiscordImpl::UpdateGameStatus(bool use_default) { |
| 65 | const std::string default_text = "yuzu is an emulator for the Nintendo Switch"; | ||
| 66 | const std::string default_image = "yuzu_logo"; | ||
| 67 | const std::string url = use_default ? default_image : game_url; | ||
| 60 | s64 start_time = std::chrono::duration_cast<std::chrono::seconds>( | 68 | s64 start_time = std::chrono::duration_cast<std::chrono::seconds>( |
| 61 | std::chrono::system_clock::now().time_since_epoch()) | 69 | std::chrono::system_clock::now().time_since_epoch()) |
| 62 | .count(); | 70 | .count(); |
| 71 | DiscordRichPresence presence{}; | ||
| 72 | |||
| 73 | presence.largeImageKey = url.c_str(); | ||
| 74 | presence.largeImageText = game_title.c_str(); | ||
| 75 | presence.smallImageKey = default_image.c_str(); | ||
| 76 | presence.smallImageText = default_text.c_str(); | ||
| 77 | presence.state = game_title.c_str(); | ||
| 78 | presence.details = "Currently in game"; | ||
| 79 | presence.startTimestamp = start_time; | ||
| 80 | Discord_UpdatePresence(&presence); | ||
| 81 | } | ||
| 82 | |||
| 83 | void DiscordImpl::Update() { | ||
| 63 | const std::string default_text = "yuzu is an emulator for the Nintendo Switch"; | 84 | const std::string default_text = "yuzu is an emulator for the Nintendo Switch"; |
| 64 | const std::string default_image = "yuzu_logo"; | 85 | const std::string default_image = "yuzu_logo"; |
| 65 | std::string game_cover_url = "https://yuzu-emu.org"; | ||
| 66 | std::string title; | ||
| 67 | |||
| 68 | DiscordRichPresence presence{}; | ||
| 69 | 86 | ||
| 70 | if (system.IsPoweredOn()) { | 87 | if (system.IsPoweredOn()) { |
| 71 | system.GetAppLoader().ReadTitle(title); | 88 | system.GetAppLoader().ReadTitle(game_title); |
| 72 | 89 | ||
| 73 | // Used to format Icon URL for yuzu website game compatibility page | 90 | // Used to format Icon URL for yuzu website game compatibility page |
| 74 | std::string icon_name = GetGameString(title); | 91 | std::string icon_name = GetGameString(game_title); |
| 75 | 92 | game_url = fmt::format("https://yuzu-emu.org/images/game/boxart/{}.png", icon_name); | |
| 76 | // New Check for game cover | 93 | |
| 77 | httplib::Client cli(game_cover_url); | 94 | QNetworkAccessManager manager; |
| 78 | cli.set_connection_timeout(std::chrono::seconds(3)); | 95 | QNetworkRequest request; |
| 79 | cli.set_read_timeout(std::chrono::seconds(3)); | 96 | request.setUrl(QUrl(QString::fromStdString(game_url))); |
| 80 | 97 | request.setTransferTimeout(3000); | |
| 81 | if (auto res = cli.Head(fmt::format("/images/game/boxart/{}.png", icon_name))) { | 98 | QNetworkReply* reply = manager.head(request); |
| 82 | if (res->status == 200) { | 99 | QEventLoop request_event_loop; |
| 83 | game_cover_url += fmt::format("/images/game/boxart/{}.png", icon_name); | 100 | QObject::connect(reply, &QNetworkReply::finished, &request_event_loop, &QEventLoop::quit); |
| 84 | } else { | 101 | request_event_loop.exec(); |
| 85 | game_cover_url = "yuzu_logo"; | 102 | UpdateGameStatus(reply->error()); |
| 86 | } | 103 | return; |
| 87 | } else { | ||
| 88 | game_cover_url = "yuzu_logo"; | ||
| 89 | } | ||
| 90 | |||
| 91 | presence.largeImageKey = game_cover_url.c_str(); | ||
| 92 | presence.largeImageText = title.c_str(); | ||
| 93 | |||
| 94 | presence.smallImageKey = default_image.c_str(); | ||
| 95 | presence.smallImageText = default_text.c_str(); | ||
| 96 | presence.state = title.c_str(); | ||
| 97 | presence.details = "Currently in game"; | ||
| 98 | } else { | ||
| 99 | presence.largeImageKey = default_image.c_str(); | ||
| 100 | presence.largeImageText = default_text.c_str(); | ||
| 101 | presence.details = "Currently not in game"; | ||
| 102 | } | 104 | } |
| 103 | 105 | ||
| 106 | s64 start_time = std::chrono::duration_cast<std::chrono::seconds>( | ||
| 107 | std::chrono::system_clock::now().time_since_epoch()) | ||
| 108 | .count(); | ||
| 109 | |||
| 110 | DiscordRichPresence presence{}; | ||
| 111 | presence.largeImageKey = default_image.c_str(); | ||
| 112 | presence.largeImageText = default_text.c_str(); | ||
| 113 | presence.details = "Currently not in game"; | ||
| 104 | presence.startTimestamp = start_time; | 114 | presence.startTimestamp = start_time; |
| 105 | Discord_UpdatePresence(&presence); | 115 | Discord_UpdatePresence(&presence); |
| 106 | } | 116 | } |
diff --git a/src/yuzu/discord_impl.h b/src/yuzu/discord_impl.h index 84710b9c6..eb6cf9ae0 100644 --- a/src/yuzu/discord_impl.h +++ b/src/yuzu/discord_impl.h | |||
| @@ -19,6 +19,13 @@ public: | |||
| 19 | void Pause() override; | 19 | void Pause() override; |
| 20 | void Update() override; | 20 | void Update() override; |
| 21 | 21 | ||
| 22 | private: | ||
| 23 | std::string GetGameString(const std::string& title); | ||
| 24 | void UpdateGameStatus(bool use_default); | ||
| 25 | |||
| 26 | std::string game_url{}; | ||
| 27 | std::string game_title{}; | ||
| 28 | |||
| 22 | Core::System& system; | 29 | Core::System& system; |
| 23 | }; | 30 | }; |
| 24 | 31 | ||
diff --git a/src/yuzu/game_list_worker.cpp b/src/yuzu/game_list_worker.cpp index 5c910c9e0..9404365b4 100644 --- a/src/yuzu/game_list_worker.cpp +++ b/src/yuzu/game_list_worker.cpp | |||
| @@ -265,7 +265,11 @@ void GameListWorker::AddTitlesToGameList(GameListDir* parent_dir) { | |||
| 265 | std::vector<u8> icon; | 265 | std::vector<u8> icon; |
| 266 | std::string name; | 266 | std::string name; |
| 267 | u64 program_id = 0; | 267 | u64 program_id = 0; |
| 268 | loader->ReadProgramId(program_id); | 268 | const auto result = loader->ReadProgramId(program_id); |
| 269 | |||
| 270 | if (result != Loader::ResultStatus::Success) { | ||
| 271 | continue; | ||
| 272 | } | ||
| 269 | 273 | ||
| 270 | const PatchManager patch{program_id, system.GetFileSystemController(), | 274 | const PatchManager patch{program_id, system.GetFileSystemController(), |
| 271 | system.GetContentProvider()}; | 275 | system.GetContentProvider()}; |