summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/android/app/src/main/res/values-de/strings.xml20
-rw-r--r--src/android/app/src/main/res/values-es/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-fr/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-it/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-ja/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-ko/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-nb/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-pl/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-pt-rBR/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-pt-rPT/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-ru/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-uk/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-zh-rCN/strings.xml18
-rw-r--r--src/android/app/src/main/res/values-zh-rTW/strings.xml18
-rw-r--r--src/android/app/src/main/res/values/strings.xml36
-rw-r--r--src/common/page_table.h12
-rw-r--r--src/core/arm/arm_interface.cpp4
-rw-r--r--src/core/arm/arm_interface.h2
-rw-r--r--src/core/hle/kernel/k_auto_object.cpp4
-rw-r--r--src/core/hle/kernel/k_auto_object.h5
-rw-r--r--src/core/hle/kernel/k_scheduler.cpp3
-rw-r--r--src/core/hle/kernel/k_thread.cpp2
-rw-r--r--src/core/memory.cpp30
-rw-r--r--src/video_core/query_cache.h4
-rw-r--r--src/video_core/rasterizer_accelerated.cpp5
-rw-r--r--src/video_core/rasterizer_accelerated.h3
-rw-r--r--src/video_core/vulkan_common/vulkan_device.cpp8
-rw-r--r--src/yuzu/discord_impl.cpp82
-rw-r--r--src/yuzu/discord_impl.h7
-rw-r--r--src/yuzu/game_list_worker.cpp6
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
220void ARM_Interface::LoadWatchpointArray(const WatchpointArray& wp) { 220void ARM_Interface::LoadWatchpointArray(const WatchpointArray* wp) {
221 watchpoints = &wp; 221 watchpoints = wp;
222} 222}
223 223
224const Kernel::DebugWatchpoint* ARM_Interface::MatchingWatchpoint( 224const 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
18void KAutoObject::UnregisterWithKernel() { 18void 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
167private: 168private:
168 void RegisterWithKernel(); 169 void RegisterWithKernel();
169 void UnregisterWithKernel(); 170 static void UnregisterWithKernel(KernelCore& kernel, KAutoObject* self);
170 171
171protected: 172protected:
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
511void KScheduler::Reload(KThread* thread) { 511void 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
14using namespace Core::Memory; 14using namespace Core::Memory;
15 15
16RasterizerAccelerated::RasterizerAccelerated(Memory& cpu_memory_) : cpu_memory{cpu_memory_} {} 16RasterizerAccelerated::RasterizerAccelerated(Memory& cpu_memory_)
17 : cached_pages(std::make_unique<CachedPages>()), cpu_memory{cpu_memory_} {}
17 18
18RasterizerAccelerated::~RasterizerAccelerated() = default; 19RasterizerAccelerated::~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
34static std::string GetGameString(const std::string& title) { 39std::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
59void DiscordImpl::Update() { 64void 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
83void 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
22private:
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()};