summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dist/languages/ca.ts4
-rw-r--r--dist/languages/cs.ts2
-rw-r--r--dist/languages/da.ts4
-rw-r--r--dist/languages/de.ts4
-rw-r--r--dist/languages/el.ts4
-rw-r--r--dist/languages/es.ts94
-rw-r--r--dist/languages/fr.ts28
-rw-r--r--dist/languages/id.ts4
-rw-r--r--dist/languages/it.ts14
-rw-r--r--dist/languages/ja_JP.ts4
-rw-r--r--dist/languages/ko_KR.ts4
-rw-r--r--dist/languages/nb.ts4
-rw-r--r--dist/languages/nl.ts1916
-rw-r--r--dist/languages/pl.ts4
-rw-r--r--dist/languages/pt_BR.ts4
-rw-r--r--dist/languages/pt_PT.ts4
-rw-r--r--dist/languages/ru_RU.ts175
-rw-r--r--dist/languages/sv.ts70
-rw-r--r--dist/languages/tr_TR.ts4
-rw-r--r--dist/languages/uk.ts4
-rw-r--r--dist/languages/zh_CN.ts4
-rw-r--r--dist/languages/zh_TW.ts4
-rw-r--r--src/common/intrusive_list.h631
-rw-r--r--src/core/hle/kernel/k_event_info.h5
-rw-r--r--src/core/hle/kernel/k_object_name.h8
-rw-r--r--src/core/hle/kernel/k_server_port.h4
-rw-r--r--src/core/hle/kernel/k_server_session.h7
-rw-r--r--src/core/hle/kernel/k_session_request.h4
-rw-r--r--src/core/hle/kernel/k_shared_memory_info.h4
-rw-r--r--src/core/hle/kernel/k_thread.h13
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp3
-rw-r--r--src/shader_recompiler/backend/spirv/spirv_emit_context.cpp3
-rw-r--r--src/tests/CMakeLists.txt2
-rw-r--r--src/tests/video_core/buffer_base.cpp549
-rw-r--r--src/tests/video_core/memory_tracker.cpp549
-rw-r--r--src/video_core/CMakeLists.txt5
-rw-r--r--src/video_core/buffer_cache/buffer_base.h518
-rw-r--r--src/video_core/buffer_cache/buffer_cache.cpp4
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h1002
-rw-r--r--src/video_core/buffer_cache/buffer_cache_base.h580
-rw-r--r--src/video_core/buffer_cache/memory_tracker_base.h271
-rw-r--r--src/video_core/buffer_cache/word_manager.h462
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.h4
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache_base.cpp9
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.cpp8
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.h10
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache_base.cpp9
47 files changed, 4135 insertions, 2888 deletions
diff --git a/dist/languages/ca.ts b/dist/languages/ca.ts
index b4e77d029..6978a4536 100644
--- a/dist/languages/ca.ts
+++ b/dist/languages/ca.ts
@@ -1372,8 +1372,8 @@ This would ban both their forum username and their IP address.</source>
1372 </message> 1372 </message>
1373 <message> 1373 <message>
1374 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1374 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1375 <source>Extended memory layout (6GB DRAM)</source> 1375 <source>Extended memory layout (8GB DRAM)</source>
1376 <translation>Interfície de memòria ampliada (6GB DRAM)</translation> 1376 <translation type="unfinished"/>
1377 </message> 1377 </message>
1378 <message> 1378 <message>
1379 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1379 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/cs.ts b/dist/languages/cs.ts
index b1b12c019..c7f77b15d 100644
--- a/dist/languages/cs.ts
+++ b/dist/languages/cs.ts
@@ -1364,7 +1364,7 @@ Tato možnost zlepšuje rychlost díky závislosti na sémantice cmpxchg pro zaj
1364 </message> 1364 </message>
1365 <message> 1365 <message>
1366 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1366 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1367 <source>Extended memory layout (6GB DRAM)</source> 1367 <source>Extended memory layout (8GB DRAM)</source>
1368 <translation type="unfinished"/> 1368 <translation type="unfinished"/>
1369 </message> 1369 </message>
1370 <message> 1370 <message>
diff --git a/dist/languages/da.ts b/dist/languages/da.ts
index 7c43ff7df..4bb799f90 100644
--- a/dist/languages/da.ts
+++ b/dist/languages/da.ts
@@ -1380,8 +1380,8 @@ Dette vil bandlyse både vedkommendes forum-brugernavn og IP-adresse.</translati
1380 </message> 1380 </message>
1381 <message> 1381 <message>
1382 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1382 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1383 <source>Extended memory layout (6GB DRAM)</source> 1383 <source>Extended memory layout (8GB DRAM)</source>
1384 <translation>Udvidet hukommelsesopsætning (6GB DRAM)</translation> 1384 <translation type="unfinished"/>
1385 </message> 1385 </message>
1386 <message> 1386 <message>
1387 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1387 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/de.ts b/dist/languages/de.ts
index a455a3e78..47def0166 100644
--- a/dist/languages/de.ts
+++ b/dist/languages/de.ts
@@ -1360,8 +1360,8 @@ This would ban both their forum username and their IP address.</source>
1360 </message> 1360 </message>
1361 <message> 1361 <message>
1362 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1362 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1363 <source>Extended memory layout (6GB DRAM)</source> 1363 <source>Extended memory layout (8GB DRAM)</source>
1364 <translation>Erweitertes Speicherlayout (6GB DRAM)</translation> 1364 <translation type="unfinished"/>
1365 </message> 1365 </message>
1366 <message> 1366 <message>
1367 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1367 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/el.ts b/dist/languages/el.ts
index 023cf4825..19abc7939 100644
--- a/dist/languages/el.ts
+++ b/dist/languages/el.ts
@@ -1364,8 +1364,8 @@ This would ban both their forum username and their IP address.</source>
1364 </message> 1364 </message>
1365 <message> 1365 <message>
1366 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1366 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1367 <source>Extended memory layout (6GB DRAM)</source> 1367 <source>Extended memory layout (8GB DRAM)</source>
1368 <translation>Διάταξη εκτεταμένης μνήμης (6GB DRAM)</translation> 1368 <translation type="unfinished"/>
1369 </message> 1369 </message>
1370 <message> 1370 <message>
1371 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1371 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/es.ts b/dist/languages/es.ts
index fb5ade667..7c7f97397 100644
--- a/dist/languages/es.ts
+++ b/dist/languages/es.ts
@@ -381,17 +381,17 @@ Esto banearía su nombre del foro y su dirección IP.</translation>
381 <message> 381 <message>
382 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> 382 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/>
383 <source>Output Device:</source> 383 <source>Output Device:</source>
384 <translation type="unfinished"/> 384 <translation>Dispositivo de salida:</translation>
385 </message> 385 </message>
386 <message> 386 <message>
387 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> 387 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/>
388 <source>Input Device:</source> 388 <source>Input Device:</source>
389 <translation type="unfinished"/> 389 <translation>Dispositivo de entrada:</translation>
390 </message> 390 </message>
391 <message> 391 <message>
392 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> 392 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/>
393 <source>Sound Output Mode:</source> 393 <source>Sound Output Mode:</source>
394 <translation type="unfinished"/> 394 <translation>Método de salida de sonido:</translation>
395 </message> 395 </message>
396 <message> 396 <message>
397 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> 397 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/>
@@ -1383,8 +1383,8 @@ Esto banearía su nombre del foro y su dirección IP.</translation>
1383 </message> 1383 </message>
1384 <message> 1384 <message>
1385 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1385 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1386 <source>Extended memory layout (6GB DRAM)</source> 1386 <source>Extended memory layout (8GB DRAM)</source>
1387 <translation>Interfaz de memoria extendida (6GB DRAM)</translation> 1387 <translation>Interfaz de memoria extendida (8GB DRAM)</translation>
1388 </message> 1388 </message>
1389 <message> 1389 <message>
1390 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1390 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
@@ -1638,7 +1638,7 @@ Esto banearía su nombre del foro y su dirección IP.</translation>
1638 <message> 1638 <message>
1639 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="463"/> 1639 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="463"/>
1640 <source>AMD FidelityFX™️ Super Resolution</source> 1640 <source>AMD FidelityFX™️ Super Resolution</source>
1641 <translation type="unfinished"/> 1641 <translation>AMD FidelityFX™️ Super Resolution</translation>
1642 </message> 1642 </message>
1643 <message> 1643 <message>
1644 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="489"/> 1644 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="489"/>
@@ -1753,12 +1753,12 @@ Esto banearía su nombre del foro y su dirección IP.</translation>
1753 <message> 1753 <message>
1754 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/> 1754 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/>
1755 <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source> 1755 <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source>
1756 <translation type="unfinished"/> 1756 <translation>Activa la decodificación de texturas asíncrona de ASTC, lo cuál podría reducir la duración de los parones. Esta función es experimental.</translation>
1757 </message> 1757 </message>
1758 <message> 1758 <message>
1759 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/> 1759 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/>
1760 <source>Decode ASTC textures asynchronously (Hack)</source> 1760 <source>Decode ASTC textures asynchronously (Hack)</source>
1761 <translation type="unfinished"/> 1761 <translation>Decodificar texturas ASTC de manera asíncrona (Hack)</translation>
1762 </message> 1762 </message>
1763 <message> 1763 <message>
1764 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/> 1764 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/>
@@ -2268,12 +2268,12 @@ Esto banearía su nombre del foro y su dirección IP.</translation>
2268 <message> 2268 <message>
2269 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2710"/> 2269 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2710"/>
2270 <source>Enable direct JoyCon driver</source> 2270 <source>Enable direct JoyCon driver</source>
2271 <translation type="unfinished"/> 2271 <translation>Activar driver directo JoyCon</translation>
2272 </message> 2272 </message>
2273 <message> 2273 <message>
2274 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2726"/> 2274 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2726"/>
2275 <source>Enable direct Pro Controller driver [EXPERIMENTAL]</source> 2275 <source>Enable direct Pro Controller driver [EXPERIMENTAL]</source>
2276 <translation type="unfinished"/> 2276 <translation>Activar driver directo Pro Controller [EXPERIMENTAL]</translation>
2277 </message> 2277 </message>
2278 <message> 2278 <message>
2279 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2739"/> 2279 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2739"/>
@@ -2637,7 +2637,7 @@ Esto banearía su nombre del foro y su dirección IP.</translation>
2637 <message> 2637 <message>
2638 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="399"/> 2638 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="399"/>
2639 <source>Turbo button</source> 2639 <source>Turbo button</source>
2640 <translation type="unfinished"/> 2640 <translation>Botón Turbo</translation>
2641 </message> 2641 </message>
2642 <message> 2642 <message>
2643 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="407"/> 2643 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="407"/>
@@ -3339,7 +3339,7 @@ UUID: %2</translation>
3339 <message> 3339 <message>
3340 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="52"/> 3340 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="52"/>
3341 <source>Virtual Ring Sensor Parameters</source> 3341 <source>Virtual Ring Sensor Parameters</source>
3342 <translation type="unfinished"/> 3342 <translation>Parámetros del sensor Ring virtual</translation>
3343 </message> 3343 </message>
3344 <message> 3344 <message>
3345 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="84"/> 3345 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="84"/>
@@ -3361,29 +3361,29 @@ UUID: %2</translation>
3361 <message> 3361 <message>
3362 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="233"/> 3362 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="233"/>
3363 <source>Direct Joycon Driver</source> 3363 <source>Direct Joycon Driver</source>
3364 <translation type="unfinished"/> 3364 <translation>Driver directo del JoyCon</translation>
3365 </message> 3365 </message>
3366 <message> 3366 <message>
3367 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="293"/> 3367 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="293"/>
3368 <source>Enable Ring Input</source> 3368 <source>Enable Ring Input</source>
3369 <translation type="unfinished"/> 3369 <translation>Activar entrada del Ring</translation>
3370 </message> 3370 </message>
3371 <message> 3371 <message>
3372 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="300"/> 3372 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="300"/>
3373 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="314"/> 3373 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="314"/>
3374 <source>Enable</source> 3374 <source>Enable</source>
3375 <translation type="unfinished"/> 3375 <translation>Activar</translation>
3376 </message> 3376 </message>
3377 <message> 3377 <message>
3378 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="307"/> 3378 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="307"/>
3379 <source>Ring Sensor Value</source> 3379 <source>Ring Sensor Value</source>
3380 <translation type="unfinished"/> 3380 <translation>Valor del sensor Ring</translation>
3381 </message> 3381 </message>
3382 <message> 3382 <message>
3383 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="314"/> 3383 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="314"/>
3384 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="282"/> 3384 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="282"/>
3385 <source>Not connected</source> 3385 <source>Not connected</source>
3386 <translation type="unfinished"/> 3386 <translation>No conectado</translation>
3387 </message> 3387 </message>
3388 <message> 3388 <message>
3389 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="344"/> 3389 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="344"/>
@@ -3414,12 +3414,12 @@ UUID: %2</translation>
3414 <message> 3414 <message>
3415 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="279"/> 3415 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="279"/>
3416 <source>Error enabling ring input</source> 3416 <source>Error enabling ring input</source>
3417 <translation type="unfinished"/> 3417 <translation>Error al activar la entrada del Ring</translation>
3418 </message> 3418 </message>
3419 <message> 3419 <message>
3420 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="285"/> 3420 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="285"/>
3421 <source>Direct Joycon driver is not enabled</source> 3421 <source>Direct Joycon driver is not enabled</source>
3422 <translation type="unfinished"/> 3422 <translation>El driver directo JoyCon no está activo.</translation>
3423 </message> 3423 </message>
3424 <message> 3424 <message>
3425 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="290"/> 3425 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="290"/>
@@ -3429,17 +3429,17 @@ UUID: %2</translation>
3429 <message> 3429 <message>
3430 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="302"/> 3430 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="302"/>
3431 <source>The current mapped device doesn&apos;t support the ring controller</source> 3431 <source>The current mapped device doesn&apos;t support the ring controller</source>
3432 <translation type="unfinished"/> 3432 <translation>El dispositivo de entrada actual no soporta el control Ring.</translation>
3433 </message> 3433 </message>
3434 <message> 3434 <message>
3435 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="306"/> 3435 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="306"/>
3436 <source>The current mapped device doesn&apos;t have a ring attached</source> 3436 <source>The current mapped device doesn&apos;t have a ring attached</source>
3437 <translation type="unfinished"/> 3437 <translation>El dispositivo de entrada actual no tiene puesto el Ring</translation>
3438 </message> 3438 </message>
3439 <message> 3439 <message>
3440 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="310"/> 3440 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="310"/>
3441 <source>Unexpected driver result %1</source> 3441 <source>Unexpected driver result %1</source>
3442 <translation type="unfinished"/> 3442 <translation>Resultado inesperado del driver %1</translation>
3443 </message> 3443 </message>
3444 <message> 3444 <message>
3445 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="333"/> 3445 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="333"/>
@@ -4498,12 +4498,12 @@ Arrastra los puntos para cambiar de posición, o haz doble clic en las celdas de
4498 <message> 4498 <message>
4499 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="47"/> 4499 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="47"/>
4500 <source>Server Address</source> 4500 <source>Server Address</source>
4501 <translation type="unfinished"/> 4501 <translation>Dirección del Servidor</translation>
4502 </message> 4502 </message>
4503 <message> 4503 <message>
4504 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="54"/> 4504 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="54"/>
4505 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Server address of the host&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 4505 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Server address of the host&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
4506 <translation type="unfinished"/> 4506 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Dirección del servidor del anfitrión&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
4507 </message> 4507 </message>
4508 <message> 4508 <message>
4509 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="64"/> 4509 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="64"/>
@@ -4617,12 +4617,12 @@ Arrastra los puntos para cambiar de posición, o haz doble clic en las celdas de
4617 <message> 4617 <message>
4618 <location filename="../../src/yuzu/main.cpp" line="1230"/> 4618 <location filename="../../src/yuzu/main.cpp" line="1230"/>
4619 <source>Emulated mouse is enabled</source> 4619 <source>Emulated mouse is enabled</source>
4620 <translation type="unfinished"/> 4620 <translation>El ratón emulado está activado</translation>
4621 </message> 4621 </message>
4622 <message> 4622 <message>
4623 <location filename="../../src/yuzu/main.cpp" line="1231"/> 4623 <location filename="../../src/yuzu/main.cpp" line="1231"/>
4624 <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> 4624 <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source>
4625 <translation type="unfinished"/> 4625 <translation>La entrada de un ratón real y la panoramización del ratón son incompatibles. Por favor, desactive el ratón emulado en la configuración avanzada de entrada para permitir así la panoramización del ratón.</translation>
4626 </message> 4626 </message>
4627 <message> 4627 <message>
4628 <location filename="../../src/yuzu/main.cpp" line="1453"/> 4628 <location filename="../../src/yuzu/main.cpp" line="1453"/>
@@ -5489,13 +5489,13 @@ Por favor, utiliza esta función sólo para instalar actualizaciones y DLCs.</tr
5489 <message> 5489 <message>
5490 <location filename="../../src/yuzu/main.cpp" line="4069"/> 5490 <location filename="../../src/yuzu/main.cpp" line="4069"/>
5491 <source>VOLUME: MUTE</source> 5491 <source>VOLUME: MUTE</source>
5492 <translation type="unfinished"/> 5492 <translation>VOLUMEN: SILENCIO</translation>
5493 </message> 5493 </message>
5494 <message> 5494 <message>
5495 <location filename="../../src/yuzu/main.cpp" line="4072"/> 5495 <location filename="../../src/yuzu/main.cpp" line="4072"/>
5496 <source>VOLUME: %1%</source> 5496 <source>VOLUME: %1%</source>
5497 <comment>Volume percentage (e.g. 50%)</comment> 5497 <comment>Volume percentage (e.g. 50%)</comment>
5498 <translation type="unfinished"/> 5498 <translation>VOLUMEN: %1%</translation>
5499 </message> 5499 </message>
5500 <message> 5500 <message>
5501 <location filename="../../src/yuzu/main.cpp" line="4153"/> 5501 <location filename="../../src/yuzu/main.cpp" line="4153"/>
@@ -6227,7 +6227,7 @@ Mensaje de depuración: </translation>
6227 <message> 6227 <message>
6228 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="83"/> 6228 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="83"/>
6229 <source>Hide Empty Rooms</source> 6229 <source>Hide Empty Rooms</source>
6230 <translation type="unfinished"/> 6230 <translation>Ocultar salas vacías</translation>
6231 </message> 6231 </message>
6232 <message> 6232 <message>
6233 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="90"/> 6233 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="90"/>
@@ -7152,12 +7152,12 @@ p, li { white-space: pre-wrap; }
7152 <message> 7152 <message>
7153 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="78"/> 7153 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="78"/>
7154 <source>Stick L</source> 7154 <source>Stick L</source>
7155 <translation type="unfinished"/> 7155 <translation>Palanca L</translation>
7156 </message> 7156 </message>
7157 <message> 7157 <message>
7158 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="80"/> 7158 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="80"/>
7159 <source>Stick R</source> 7159 <source>Stick R</source>
7160 <translation type="unfinished"/> 7160 <translation>Palanca R</translation>
7161 </message> 7161 </message>
7162 <message> 7162 <message>
7163 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="92"/> 7163 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="92"/>
@@ -7214,19 +7214,19 @@ p, li { white-space: pre-wrap; }
7214 <message> 7214 <message>
7215 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="191"/> 7215 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="191"/>
7216 <source>%1%2%3%4</source> 7216 <source>%1%2%3%4</source>
7217 <translation type="unfinished"/> 7217 <translation>%1%2%3%4</translation>
7218 </message> 7218 </message>
7219 <message> 7219 <message>
7220 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="205"/> 7220 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="205"/>
7221 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="229"/> 7221 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="229"/>
7222 <source>%1%2%3Hat %4</source> 7222 <source>%1%2%3Hat %4</source>
7223 <translation type="unfinished"/> 7223 <translation>%1%2%3Rotación %4</translation>
7224 </message> 7224 </message>
7225 <message> 7225 <message>
7226 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/> 7226 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
7227 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="238"/> 7227 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="238"/>
7228 <source>%1%2%3Button %4</source> 7228 <source>%1%2%3Button %4</source>
7229 <translation type="unfinished"/> 7229 <translation>%1%2%3Botón %4</translation>
7230 </message> 7230 </message>
7231</context> 7231</context>
7232<context> 7232<context>
@@ -7647,7 +7647,7 @@ Por favor, inténtalo de nuevo o contacta con el desarrollador del software.</tr
7647 <message> 7647 <message>
7648 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> 7648 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/>
7649 <source>Profile Creator</source> 7649 <source>Profile Creator</source>
7650 <translation type="unfinished"/> 7650 <translation>Creador de perfil</translation>
7651 </message> 7651 </message>
7652 <message> 7652 <message>
7653 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> 7653 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/>
@@ -7658,57 +7658,57 @@ Por favor, inténtalo de nuevo o contacta con el desarrollador del software.</tr
7658 <message> 7658 <message>
7659 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> 7659 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/>
7660 <source>Profile Icon Editor</source> 7660 <source>Profile Icon Editor</source>
7661 <translation type="unfinished"/> 7661 <translation>Editor de icono de perfil</translation>
7662 </message> 7662 </message>
7663 <message> 7663 <message>
7664 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> 7664 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/>
7665 <source>Profile Nickname Editor</source> 7665 <source>Profile Nickname Editor</source>
7666 <translation type="unfinished"/> 7666 <translation>Editor de nombre de perfil</translation>
7667 </message> 7667 </message>
7668 <message> 7668 <message>
7669 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> 7669 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/>
7670 <source>Who will receive the points?</source> 7670 <source>Who will receive the points?</source>
7671 <translation type="unfinished"/> 7671 <translation>¿Quién recibirá los puntos?</translation>
7672 </message> 7672 </message>
7673 <message> 7673 <message>
7674 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> 7674 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/>
7675 <source>Who is using Nintendo eShop?</source> 7675 <source>Who is using Nintendo eShop?</source>
7676 <translation type="unfinished"/> 7676 <translation>¿Quién va a utilizar Nintendo eShop?</translation>
7677 </message> 7677 </message>
7678 <message> 7678 <message>
7679 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> 7679 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/>
7680 <source>Who is making this purchase?</source> 7680 <source>Who is making this purchase?</source>
7681 <translation type="unfinished"/> 7681 <translation>¿Quién eshaciendo la compra?</translation>
7682 </message> 7682 </message>
7683 <message> 7683 <message>
7684 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> 7684 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/>
7685 <source>Who is posting?</source> 7685 <source>Who is posting?</source>
7686 <translation type="unfinished"/> 7686 <translation>¿Quién está publicando esto?</translation>
7687 </message> 7687 </message>
7688 <message> 7688 <message>
7689 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> 7689 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/>
7690 <source>Select a user to link to a Nintendo Account.</source> 7690 <source>Select a user to link to a Nintendo Account.</source>
7691 <translation type="unfinished"/> 7691 <translation>Elige un usuario para vincularlo a una Cuenta Nintendo.</translation>
7692 </message> 7692 </message>
7693 <message> 7693 <message>
7694 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> 7694 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/>
7695 <source>Change settings for which user?</source> 7695 <source>Change settings for which user?</source>
7696 <translation type="unfinished"/> 7696 <translation>¿Para qué usuario desea cambiar la configuración?</translation>
7697 </message> 7697 </message>
7698 <message> 7698 <message>
7699 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> 7699 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/>
7700 <source>Format data for which user?</source> 7700 <source>Format data for which user?</source>
7701 <translation type="unfinished"/> 7701 <translation>¿Para qué usuario se borrarán sus datos?</translation>
7702 </message> 7702 </message>
7703 <message> 7703 <message>
7704 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> 7704 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/>
7705 <source>Which user will be transferred to another console?</source> 7705 <source>Which user will be transferred to another console?</source>
7706 <translation type="unfinished"/> 7706 <translation>¿Qué usuario será transferido a otra consola?</translation>
7707 </message> 7707 </message>
7708 <message> 7708 <message>
7709 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> 7709 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/>
7710 <source>Send save data for which user?</source> 7710 <source>Send save data for which user?</source>
7711 <translation type="unfinished"/> 7711 <translation>¿A qué usuario se le enviarán los datos de guardado?</translation>
7712 </message> 7712 </message>
7713 <message> 7713 <message>
7714 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> 7714 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/>
@@ -7774,7 +7774,7 @@ p, li { white-space: pre-wrap; }
7774 <message> 7774 <message>
7775 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> 7775 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/>
7776 <source>[%1] %2</source> 7776 <source>[%1] %2</source>
7777 <translation type="unfinished"/> 7777 <translation>[%1] %2</translation>
7778 </message> 7778 </message>
7779 <message> 7779 <message>
7780 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> 7780 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/>
diff --git a/dist/languages/fr.ts b/dist/languages/fr.ts
index 7730208b7..606a8816e 100644
--- a/dist/languages/fr.ts
+++ b/dist/languages/fr.ts
@@ -1382,8 +1382,8 @@ Cette option améliore la vitesse en réduisant la précision des instructions f
1382 </message> 1382 </message>
1383 <message> 1383 <message>
1384 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1384 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1385 <source>Extended memory layout (6GB DRAM)</source> 1385 <source>Extended memory layout (8GB DRAM)</source>
1386 <translation>Disposition de la mémoire étendue (6GB DRAM)</translation> 1386 <translation>Disposition de la mémoire étendue (8 Go de DRAM)</translation>
1387 </message> 1387 </message>
1388 <message> 1388 <message>
1389 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1389 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
@@ -7637,7 +7637,7 @@ Veuillez essayer à nouveau ou contactez le développeur du logiciel.</translati
7637 <message> 7637 <message>
7638 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> 7638 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/>
7639 <source>Profile Creator</source> 7639 <source>Profile Creator</source>
7640 <translation type="unfinished"/> 7640 <translation>Créateur de profil</translation>
7641 </message> 7641 </message>
7642 <message> 7642 <message>
7643 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> 7643 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/>
@@ -7648,57 +7648,57 @@ Veuillez essayer à nouveau ou contactez le développeur du logiciel.</translati
7648 <message> 7648 <message>
7649 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> 7649 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/>
7650 <source>Profile Icon Editor</source> 7650 <source>Profile Icon Editor</source>
7651 <translation type="unfinished"/> 7651 <translation>Éditeur d&apos;ines de profil</translation>
7652 </message> 7652 </message>
7653 <message> 7653 <message>
7654 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> 7654 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/>
7655 <source>Profile Nickname Editor</source> 7655 <source>Profile Nickname Editor</source>
7656 <translation type="unfinished"/> 7656 <translation>Éditeur de surnom de profil</translation>
7657 </message> 7657 </message>
7658 <message> 7658 <message>
7659 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> 7659 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/>
7660 <source>Who will receive the points?</source> 7660 <source>Who will receive the points?</source>
7661 <translation type="unfinished"/> 7661 <translation>Qui recevra les points ?</translation>
7662 </message> 7662 </message>
7663 <message> 7663 <message>
7664 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> 7664 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/>
7665 <source>Who is using Nintendo eShop?</source> 7665 <source>Who is using Nintendo eShop?</source>
7666 <translation type="unfinished"/> 7666 <translation>Qui utilise le Nintendo eShop ?</translation>
7667 </message> 7667 </message>
7668 <message> 7668 <message>
7669 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> 7669 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/>
7670 <source>Who is making this purchase?</source> 7670 <source>Who is making this purchase?</source>
7671 <translation type="unfinished"/> 7671 <translation>Qui effectue cet achat ?</translation>
7672 </message> 7672 </message>
7673 <message> 7673 <message>
7674 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> 7674 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/>
7675 <source>Who is posting?</source> 7675 <source>Who is posting?</source>
7676 <translation type="unfinished"/> 7676 <translation>Qui publie ?</translation>
7677 </message> 7677 </message>
7678 <message> 7678 <message>
7679 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> 7679 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/>
7680 <source>Select a user to link to a Nintendo Account.</source> 7680 <source>Select a user to link to a Nintendo Account.</source>
7681 <translation type="unfinished"/> 7681 <translation>Sélectionnez un utilisateur à associer à un compte Nintendo.</translation>
7682 </message> 7682 </message>
7683 <message> 7683 <message>
7684 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> 7684 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/>
7685 <source>Change settings for which user?</source> 7685 <source>Change settings for which user?</source>
7686 <translation type="unfinished"/> 7686 <translation>Modifier les paramètres pour quel utilisateur ?</translation>
7687 </message> 7687 </message>
7688 <message> 7688 <message>
7689 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> 7689 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/>
7690 <source>Format data for which user?</source> 7690 <source>Format data for which user?</source>
7691 <translation type="unfinished"/> 7691 <translation>Formater les données pour quel utilisateur ?</translation>
7692 </message> 7692 </message>
7693 <message> 7693 <message>
7694 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> 7694 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/>
7695 <source>Which user will be transferred to another console?</source> 7695 <source>Which user will be transferred to another console?</source>
7696 <translation type="unfinished"/> 7696 <translation>Quel utilisateur sera transféré sur une autre console ?</translation>
7697 </message> 7697 </message>
7698 <message> 7698 <message>
7699 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> 7699 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/>
7700 <source>Send save data for which user?</source> 7700 <source>Send save data for which user?</source>
7701 <translation type="unfinished"/> 7701 <translation>Envoyer les données de sauvegarde pour quel utilisateur ?</translation>
7702 </message> 7702 </message>
7703 <message> 7703 <message>
7704 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> 7704 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/>
diff --git a/dist/languages/id.ts b/dist/languages/id.ts
index 15054a333..a6831d7e5 100644
--- a/dist/languages/id.ts
+++ b/dist/languages/id.ts
@@ -1339,8 +1339,8 @@ Memungkinkan berbagai macam optimasi IR.</translation>
1339 </message> 1339 </message>
1340 <message> 1340 <message>
1341 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1341 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1342 <source>Extended memory layout (6GB DRAM)</source> 1342 <source>Extended memory layout (8GB DRAM)</source>
1343 <translation>Tata letak memori yang diperluas (6GB DRAM)</translation> 1343 <translation type="unfinished"/>
1344 </message> 1344 </message>
1345 <message> 1345 <message>
1346 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1346 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/it.ts b/dist/languages/it.ts
index 688a071e7..8c76842b5 100644
--- a/dist/languages/it.ts
+++ b/dist/languages/it.ts
@@ -1368,8 +1368,8 @@ Questo bannerà sia il suo nome utente del forum che il suo indirizzo IP.</trans
1368 </message> 1368 </message>
1369 <message> 1369 <message>
1370 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1370 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1371 <source>Extended memory layout (6GB DRAM)</source> 1371 <source>Extended memory layout (8GB DRAM)</source>
1372 <translation>Layout di memoria esteso (6GB DRAM)</translation> 1372 <translation type="unfinished"/>
1373 </message> 1373 </message>
1374 <message> 1374 <message>
1375 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1375 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
@@ -1846,7 +1846,7 @@ Questo bannerà sia il suo nome utente del forum che il suo indirizzo IP.</trans
1846 <message> 1846 <message>
1847 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="52"/> 1847 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="52"/>
1848 <source>Restore Defaults</source> 1848 <source>Restore Defaults</source>
1849 <translation>Ripristina predefiniti</translation> 1849 <translation>Ripristina predefinite</translation>
1850 </message> 1850 </message>
1851 <message> 1851 <message>
1852 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="98"/> 1852 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="98"/>
@@ -1894,7 +1894,7 @@ Questo bannerà sia il suo nome utente del forum che il suo indirizzo IP.</trans
1894 <message> 1894 <message>
1895 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="343"/> 1895 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="343"/>
1896 <source>Restore Default</source> 1896 <source>Restore Default</source>
1897 <translation>Ripristina predefinito</translation> 1897 <translation>Ripristina predefinita</translation>
1898 </message> 1898 </message>
1899 <message> 1899 <message>
1900 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="344"/> 1900 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="344"/>
@@ -3886,7 +3886,7 @@ UUID: %2</translation>
3886 <message> 3886 <message>
3887 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="77"/> 3887 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="77"/>
3888 <source>Pause execution during loads</source> 3888 <source>Pause execution during loads</source>
3889 <translation type="unfinished"/> 3889 <translation>Metti in pausa l&apos;esecuzione durante i caricamenti</translation>
3890 </message> 3890 </message>
3891 <message> 3891 <message>
3892 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="91"/> 3892 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="91"/>
@@ -5352,7 +5352,7 @@ Configurazione &amp;gt; Web.</translation>
5352 <location filename="../../src/yuzu/main.cpp" line="3949"/> 5352 <location filename="../../src/yuzu/main.cpp" line="3949"/>
5353 <source>Scale: %1x</source> 5353 <source>Scale: %1x</source>
5354 <comment>%1 is the resolution scaling factor</comment> 5354 <comment>%1 is the resolution scaling factor</comment>
5355 <translation type="unfinished"/> 5355 <translation>Risoluzione: %1x</translation>
5356 </message> 5356 </message>
5357 <message> 5357 <message>
5358 <location filename="../../src/yuzu/main.cpp" line="3952"/> 5358 <location filename="../../src/yuzu/main.cpp" line="3952"/>
@@ -5601,7 +5601,7 @@ Desideri uscire comunque?</translation>
5601 <message> 5601 <message>
5602 <location filename="../../src/yuzu/bootmanager.cpp" line="992"/> 5602 <location filename="../../src/yuzu/bootmanager.cpp" line="992"/>
5603 <source>yuzu has not been compiled with OpenGL support.</source> 5603 <source>yuzu has not been compiled with OpenGL support.</source>
5604 <translation>yuzu non è stato compilato con il supporto OpenGL.</translation> 5604 <translation>yuzu è stato compilato senza il supporto a OpenGL.</translation>
5605 </message> 5605 </message>
5606 <message> 5606 <message>
5607 <location filename="../../src/yuzu/bootmanager.cpp" line="1016"/> 5607 <location filename="../../src/yuzu/bootmanager.cpp" line="1016"/>
diff --git a/dist/languages/ja_JP.ts b/dist/languages/ja_JP.ts
index 66c09d493..e61137ac7 100644
--- a/dist/languages/ja_JP.ts
+++ b/dist/languages/ja_JP.ts
@@ -1383,8 +1383,8 @@ This would ban both their forum username and their IP address.</source>
1383 </message> 1383 </message>
1384 <message> 1384 <message>
1385 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1385 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1386 <source>Extended memory layout (6GB DRAM)</source> 1386 <source>Extended memory layout (8GB DRAM)</source>
1387 <translation>拡張メモリレイアウト(6GB DRAM)</translation> 1387 <translation type="unfinished"/>
1388 </message> 1388 </message>
1389 <message> 1389 <message>
1390 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1390 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/ko_KR.ts b/dist/languages/ko_KR.ts
index bd5e8fa18..ed0a9334b 100644
--- a/dist/languages/ko_KR.ts
+++ b/dist/languages/ko_KR.ts
@@ -1384,8 +1384,8 @@ This would ban both their forum username and their IP address.</source>
1384 </message> 1384 </message>
1385 <message> 1385 <message>
1386 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1386 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1387 <source>Extended memory layout (6GB DRAM)</source> 1387 <source>Extended memory layout (8GB DRAM)</source>
1388 <translation>확장 메모리 레이아웃(6GB DRAM)</translation> 1388 <translation type="unfinished"/>
1389 </message> 1389 </message>
1390 <message> 1390 <message>
1391 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1391 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/nb.ts b/dist/languages/nb.ts
index 5aec4a1cc..86cd4ea85 100644
--- a/dist/languages/nb.ts
+++ b/dist/languages/nb.ts
@@ -1355,8 +1355,8 @@ This would ban both their forum username and their IP address.</source>
1355 </message> 1355 </message>
1356 <message> 1356 <message>
1357 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1357 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1358 <source>Extended memory layout (6GB DRAM)</source> 1358 <source>Extended memory layout (8GB DRAM)</source>
1359 <translation>Utvidet minneutforming (6GB DRAM)</translation> 1359 <translation type="unfinished"/>
1360 </message> 1360 </message>
1361 <message> 1361 <message>
1362 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1362 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/nl.ts b/dist/languages/nl.ts
index 074742e39..7f7ba6da2 100644
--- a/dist/languages/nl.ts
+++ b/dist/languages/nl.ts
@@ -25,7 +25,13 @@ p, li { white-space: pre-wrap; }
25&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:12pt;&quot;&gt;yuzu is an experimental open-source emulator for the Nintendo Switch licensed under GPLv3.0+.&lt;/span&gt;&lt;/p&gt; 25&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:12pt;&quot;&gt;yuzu is an experimental open-source emulator for the Nintendo Switch licensed under GPLv3.0+.&lt;/span&gt;&lt;/p&gt;
26&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt; 26&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
27&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:12pt;&quot;&gt;This software should not be used to play games you have not legally obtained.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 27&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:12pt;&quot;&gt;This software should not be used to play games you have not legally obtained.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
28 <translation type="unfinished"/> 28 <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
29&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
30p, li { white-space: pre-wrap; }
31&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
32&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:12pt;&quot;&gt;yuzu is een experimentele open-source emulator voor de Nintendo Switch met een licentie onder GPLv3.0+.&lt;/span&gt;&lt;/p&gt;
33&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
34&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:12pt;&quot;&gt;Deze software mag niet worden gebruikt om spellen te spelen die je niet legaal hebt verkregen.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
29 </message> 35 </message>
30 <message> 36 <message>
31 <location filename="../../src/yuzu/aboutdialog.ui" line="130"/> 37 <location filename="../../src/yuzu/aboutdialog.ui" line="130"/>
@@ -48,17 +54,17 @@ p, li { white-space: pre-wrap; }
48 <message> 54 <message>
49 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="24"/> 55 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="24"/>
50 <source>Cancel</source> 56 <source>Cancel</source>
51 <translation>Annuleren</translation> 57 <translation>Annuleer</translation>
52 </message> 58 </message>
53 <message> 59 <message>
54 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="43"/> 60 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="43"/>
55 <source>Touch the top left corner &lt;br&gt;of your touchpad.</source> 61 <source>Touch the top left corner &lt;br&gt;of your touchpad.</source>
56 <translation>Raak de linkerbovenhoek &lt;br&gt; van uw touchpad aan.</translation> 62 <translation>Raak de linkerbovenhoek &lt;br&gt; van je touchpad aan.</translation>
57 </message> 63 </message>
58 <message> 64 <message>
59 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="46"/> 65 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="46"/>
60 <source>Now touch the bottom right corner &lt;br&gt;of your touchpad.</source> 66 <source>Now touch the bottom right corner &lt;br&gt;of your touchpad.</source>
61 <translation>klik nu op toets &lt;br&gt; op je toetsenbord</translation> 67 <translation>Raak nu de rechterbenedenhoek &lt;br&gt;van je touchpad aan.</translation>
62 </message> 68 </message>
63 <message> 69 <message>
64 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="49"/> 70 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="49"/>
@@ -76,17 +82,17 @@ p, li { white-space: pre-wrap; }
76 <message> 82 <message>
77 <location filename="../../src/yuzu/multiplayer/chat_room.ui" line="14"/> 83 <location filename="../../src/yuzu/multiplayer/chat_room.ui" line="14"/>
78 <source>Room Window</source> 84 <source>Room Window</source>
79 <translation type="unfinished"/> 85 <translation>Kamerraam</translation>
80 </message> 86 </message>
81 <message> 87 <message>
82 <location filename="../../src/yuzu/multiplayer/chat_room.ui" line="40"/> 88 <location filename="../../src/yuzu/multiplayer/chat_room.ui" line="40"/>
83 <source>Send Chat Message</source> 89 <source>Send Chat Message</source>
84 <translation>Stuur Chatbericht</translation> 90 <translation>Verzend Chatbericht</translation>
85 </message> 91 </message>
86 <message> 92 <message>
87 <location filename="../../src/yuzu/multiplayer/chat_room.ui" line="47"/> 93 <location filename="../../src/yuzu/multiplayer/chat_room.ui" line="47"/>
88 <source>Send Message</source> 94 <source>Send Message</source>
89 <translation>Stuur Bericht</translation> 95 <translation>Verzend Bericht</translation>
90 </message> 96 </message>
91 <message> 97 <message>
92 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="181"/> 98 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="181"/>
@@ -106,7 +112,7 @@ p, li { white-space: pre-wrap; }
106 <message> 112 <message>
107 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="324"/> 113 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="324"/>
108 <source>%1 has been kicked</source> 114 <source>%1 has been kicked</source>
109 <translation>%1 is verwijderd</translation> 115 <translation>%1 is kicked</translation>
110 </message> 116 </message>
111 <message> 117 <message>
112 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="327"/> 118 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="327"/>
@@ -116,55 +122,57 @@ p, li { white-space: pre-wrap; }
116 <message> 122 <message>
117 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="330"/> 123 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="330"/>
118 <source>%1 has been unbanned</source> 124 <source>%1 has been unbanned</source>
119 <translation>%1&apos;s ban is ongedaan gemaakt</translation> 125 <translation>Ban van %1 is ongedaan gemaakt</translation>
120 </message> 126 </message>
121 <message> 127 <message>
122 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="446"/> 128 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="446"/>
123 <source>View Profile</source> 129 <source>View Profile</source>
124 <translation>Profiel Bekijken</translation> 130 <translation>Bekijk Profiel</translation>
125 </message> 131 </message>
126 <message> 132 <message>
127 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="459"/> 133 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="459"/>
128 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="469"/> 134 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="469"/>
129 <source>Block Player</source> 135 <source>Block Player</source>
130 <translation>Speler Blokkeren</translation> 136 <translation>Blokkeer Speler</translation>
131 </message> 137 </message>
132 <message> 138 <message>
133 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="470"/> 139 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="470"/>
134 <source>When you block a player, you will no longer receive chat messages from them.&lt;br&gt;&lt;br&gt;Are you sure you would like to block %1?</source> 140 <source>When you block a player, you will no longer receive chat messages from them.&lt;br&gt;&lt;br&gt;Are you sure you would like to block %1?</source>
135 <translation type="unfinished"/> 141 <translation>Als je een speler blokkeert, ontvang je geen chatberichten meer van ze.&lt;br&gt;&lt;br&gt;Weet je zeker dat je %1 wilt blokkeren?</translation>
136 </message> 142 </message>
137 <message> 143 <message>
138 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="483"/> 144 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="483"/>
139 <source>Kick</source> 145 <source>Kick</source>
140 <translation>Verwijderen</translation> 146 <translation>Kick</translation>
141 </message> 147 </message>
142 <message> 148 <message>
143 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="484"/> 149 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="484"/>
144 <source>Ban</source> 150 <source>Ban</source>
145 <translation>Verwijderen</translation> 151 <translation>Ban</translation>
146 </message> 152 </message>
147 <message> 153 <message>
148 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="488"/> 154 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="488"/>
149 <source>Kick Player</source> 155 <source>Kick Player</source>
150 <translation>Speler verwijderen</translation> 156 <translation>Kick Speler</translation>
151 </message> 157 </message>
152 <message> 158 <message>
153 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="489"/> 159 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="489"/>
154 <source>Are you sure you would like to &lt;b&gt;kick&lt;/b&gt; %1?</source> 160 <source>Are you sure you would like to &lt;b&gt;kick&lt;/b&gt; %1?</source>
155 <translation>Weet je zeker dat je %1 wil &lt;b&gt;verwijderen&lt;/b&gt;?</translation> 161 <translation>Weet je zeker dat je %1 wil &lt;b&gt;kicken&lt;/b&gt;?</translation>
156 </message> 162 </message>
157 <message> 163 <message>
158 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="497"/> 164 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="497"/>
159 <source>Ban Player</source> 165 <source>Ban Player</source>
160 <translation>Speler Verbannen</translation> 166 <translation>Ban Speler</translation>
161 </message> 167 </message>
162 <message> 168 <message>
163 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="498"/> 169 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="498"/>
164 <source>Are you sure you would like to &lt;b&gt;kick and ban&lt;/b&gt; %1? 170 <source>Are you sure you would like to &lt;b&gt;kick and ban&lt;/b&gt; %1?
165 171
166This would ban both their forum username and their IP address.</source> 172This would ban both their forum username and their IP address.</source>
167 <translation type="unfinished"/> 173 <translation>Weet je zeker dat je %1 wilt &lt;b&gt;kicken en bannen&lt;/b&gt;?
174
175Dit zou zowel hun forum gebruikersnaam als hun IP-adres verbannen.</translation>
168 </message> 176 </message>
169</context> 177</context>
170<context> 178<context>
@@ -172,12 +180,12 @@ This would ban both their forum username and their IP address.</source>
172 <message> 180 <message>
173 <location filename="../../src/yuzu/multiplayer/client_room.ui" line="14"/> 181 <location filename="../../src/yuzu/multiplayer/client_room.ui" line="14"/>
174 <source>Room Window</source> 182 <source>Room Window</source>
175 <translation type="unfinished"/> 183 <translation>Kamervenster</translation>
176 </message> 184 </message>
177 <message> 185 <message>
178 <location filename="../../src/yuzu/multiplayer/client_room.ui" line="27"/> 186 <location filename="../../src/yuzu/multiplayer/client_room.ui" line="27"/>
179 <source>Room Description</source> 187 <source>Room Description</source>
180 <translation>Kamer Beschrijving</translation> 188 <translation>Kamerbeschrijving</translation>
181 </message> 189 </message>
182 <message> 190 <message>
183 <location filename="../../src/yuzu/multiplayer/client_room.ui" line="47"/> 191 <location filename="../../src/yuzu/multiplayer/client_room.ui" line="47"/>
@@ -187,7 +195,7 @@ This would ban both their forum username and their IP address.</source>
187 <message> 195 <message>
188 <location filename="../../src/yuzu/multiplayer/client_room.ui" line="57"/> 196 <location filename="../../src/yuzu/multiplayer/client_room.ui" line="57"/>
189 <source>Leave Room</source> 197 <source>Leave Room</source>
190 <translation type="unfinished"/> 198 <translation>Verlaat Kamer</translation>
191 </message> 199 </message>
192</context> 200</context>
193<context> 201<context>
@@ -200,12 +208,12 @@ This would ban both their forum username and their IP address.</source>
200 <message> 208 <message>
201 <location filename="../../src/yuzu/multiplayer/client_room.cpp" line="87"/> 209 <location filename="../../src/yuzu/multiplayer/client_room.cpp" line="87"/>
202 <source>Disconnected</source> 210 <source>Disconnected</source>
203 <translation type="unfinished"/> 211 <translation>Verbinding verbroken</translation>
204 </message> 212 </message>
205 <message> 213 <message>
206 <location filename="../../src/yuzu/multiplayer/client_room.cpp" line="100"/> 214 <location filename="../../src/yuzu/multiplayer/client_room.cpp" line="100"/>
207 <source>%1 - %2 (%3/%4 members) - connected</source> 215 <source>%1 - %2 (%3/%4 members) - connected</source>
208 <translation type="unfinished"/> 216 <translation>%1 - %2 (%3/%4 leden) - verbonden</translation>
209 </message> 217 </message>
210</context> 218</context>
211<context> 219<context>
@@ -224,112 +232,112 @@ This would ban both their forum username and their IP address.</source>
224 <location filename="../../src/yuzu/compatdb.ui" line="271"/> 232 <location filename="../../src/yuzu/compatdb.ui" line="271"/>
225 <location filename="../../src/yuzu/compatdb.ui" line="330"/> 233 <location filename="../../src/yuzu/compatdb.ui" line="330"/>
226 <source>Report Game Compatibility</source> 234 <source>Report Game Compatibility</source>
227 <translation>Rapporteer Game Compatibiliteit</translation> 235 <translation>Rapporteer Spelcompatibiliteit</translation>
228 </message> 236 </message>
229 <message> 237 <message>
230 <location filename="../../src/yuzu/compatdb.ui" line="36"/> 238 <location filename="../../src/yuzu/compatdb.ui" line="36"/>
231 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Should you choose to submit a test case to the &lt;/span&gt;&lt;a href=&quot;https://yuzu-emu.org/game/&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;yuzu Compatibility List&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;, The following information will be collected and displayed on the site:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;&quot;&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Hardware Information (CPU / GPU / Operating System)&lt;/li&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Which version of yuzu you are running&lt;/li&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;The connected yuzu account&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</source> 239 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Should you choose to submit a test case to the &lt;/span&gt;&lt;a href=&quot;https://yuzu-emu.org/game/&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;yuzu Compatibility List&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;, The following information will be collected and displayed on the site:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;&quot;&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Hardware Information (CPU / GPU / Operating System)&lt;/li&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Which version of yuzu you are running&lt;/li&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;The connected yuzu account&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</source>
232 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Als je kiest een test case op te sturen naar de &lt;/span&gt;&lt;a href=&quot;https://yuzu-emu.org/game/&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;yuzu compatibiliteitslijst&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;, zal de volgende informatie worden verzameld en getoond op de site:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;&quot;&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Hardware Informatie (CPU / GPU / Besturingssysteem)&lt;/li&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Welke versie van yuzu je draait&lt;/li&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Het verbonden yuzu account&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</translation> 240 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Als je kiest een test case op te sturen naar de &lt;/span&gt;&lt;a href=&quot;https://yuzu-emu.org/game/&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;yuzu-compatibiliteitslijst&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;, zal de volgende informatie worden verzameld en getoond op de site:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;&quot;&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Hardware-informatie (CPU / GPU / Besturingssysteem)&lt;/li&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Welke versie van yuzu je draait&lt;/li&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Het verbonden yuzu-account&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</translation>
233 </message> 241 </message>
234 <message> 242 <message>
235 <location filename="../../src/yuzu/compatdb.ui" line="77"/> 243 <location filename="../../src/yuzu/compatdb.ui" line="77"/>
236 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game boot?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 244 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game boot?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
237 <translation type="unfinished"/> 245 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Start het spel op?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
238 </message> 246 </message>
239 <message> 247 <message>
240 <location filename="../../src/yuzu/compatdb.ui" line="100"/> 248 <location filename="../../src/yuzu/compatdb.ui" line="100"/>
241 <source>Yes The game starts to output video or audio</source> 249 <source>Yes The game starts to output video or audio</source>
242 <translation type="unfinished"/> 250 <translation>Ja Het spel begint video of audio te produceren</translation>
243 </message> 251 </message>
244 <message> 252 <message>
245 <location filename="../../src/yuzu/compatdb.ui" line="107"/> 253 <location filename="../../src/yuzu/compatdb.ui" line="107"/>
246 <source>No The game doesn&apos;t get past the &quot;Launching...&quot; screen</source> 254 <source>No The game doesn&apos;t get past the &quot;Launching...&quot; screen</source>
247 <translation type="unfinished"/> 255 <translation>Nee Het spel komt niet voorbij het &quot;Starten...&quot; scherm</translation>
248 </message> 256 </message>
249 <message> 257 <message>
250 <location filename="../../src/yuzu/compatdb.ui" line="124"/> 258 <location filename="../../src/yuzu/compatdb.ui" line="124"/>
251 <source>Yes The game gets past the intro/menu and into gameplay</source> 259 <source>Yes The game gets past the intro/menu and into gameplay</source>
252 <translation type="unfinished"/> 260 <translation>Ja Het spel komt voorbij het intro/menu en begint met het spel</translation>
253 </message> 261 </message>
254 <message> 262 <message>
255 <location filename="../../src/yuzu/compatdb.ui" line="131"/> 263 <location filename="../../src/yuzu/compatdb.ui" line="131"/>
256 <source>No The game crashes or freezes while loading or using the menu</source> 264 <source>No The game crashes or freezes while loading or using the menu</source>
257 <translation type="unfinished"/> 265 <translation>Nee Het spel loopt vast tijdens het laden of gebruik van het menu</translation>
258 </message> 266 </message>
259 <message> 267 <message>
260 <location filename="../../src/yuzu/compatdb.ui" line="143"/> 268 <location filename="../../src/yuzu/compatdb.ui" line="143"/>
261 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game reach gameplay?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 269 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game reach gameplay?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
262 <translation type="unfinished"/> 270 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Bereikt het spel de gameplay?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
263 </message> 271 </message>
264 <message> 272 <message>
265 <location filename="../../src/yuzu/compatdb.ui" line="176"/> 273 <location filename="../../src/yuzu/compatdb.ui" line="176"/>
266 <source>Yes The game works without crashes</source> 274 <source>Yes The game works without crashes</source>
267 <translation type="unfinished"/> 275 <translation>Ja Het spel werkt zonder crashes</translation>
268 </message> 276 </message>
269 <message> 277 <message>
270 <location filename="../../src/yuzu/compatdb.ui" line="183"/> 278 <location filename="../../src/yuzu/compatdb.ui" line="183"/>
271 <source>No The game crashes or freezes during gameplay</source> 279 <source>No The game crashes or freezes during gameplay</source>
272 <translation type="unfinished"/> 280 <translation>Nee Het spel loopt vast of loopt vast tijdens het spelen</translation>
273 </message> 281 </message>
274 <message> 282 <message>
275 <location filename="../../src/yuzu/compatdb.ui" line="195"/> 283 <location filename="../../src/yuzu/compatdb.ui" line="195"/>
276 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game work without crashing, freezing or locking up during gameplay?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 284 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game work without crashing, freezing or locking up during gameplay?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
277 <translation type="unfinished"/> 285 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Werkt het spel zonder te crashen, te bevriezen of vast te lopen tijdens het spelen?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
278 </message> 286 </message>
279 <message> 287 <message>
280 <location filename="../../src/yuzu/compatdb.ui" line="228"/> 288 <location filename="../../src/yuzu/compatdb.ui" line="228"/>
281 <source>Yes The game can be finished without any workarounds</source> 289 <source>Yes The game can be finished without any workarounds</source>
282 <translation type="unfinished"/> 290 <translation>Ja Het spel kan zonder omwegen worden uitgespeeld</translation>
283 </message> 291 </message>
284 <message> 292 <message>
285 <location filename="../../src/yuzu/compatdb.ui" line="235"/> 293 <location filename="../../src/yuzu/compatdb.ui" line="235"/>
286 <source>No The game can&apos;t progress past a certain area</source> 294 <source>No The game can&apos;t progress past a certain area</source>
287 <translation type="unfinished"/> 295 <translation>Nee Het spel kan niet verder dan een bepaald gebied</translation>
288 </message> 296 </message>
289 <message> 297 <message>
290 <location filename="../../src/yuzu/compatdb.ui" line="247"/> 298 <location filename="../../src/yuzu/compatdb.ui" line="247"/>
291 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Is the game completely playable from start to finish?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 299 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Is the game completely playable from start to finish?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
292 <translation type="unfinished"/> 300 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Is het spel volledig speelbaar van begin tot eind?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
293 </message> 301 </message>
294 <message> 302 <message>
295 <location filename="../../src/yuzu/compatdb.ui" line="280"/> 303 <location filename="../../src/yuzu/compatdb.ui" line="280"/>
296 <source>Major The game has major graphical errors</source> 304 <source>Major The game has major graphical errors</source>
297 <translation type="unfinished"/> 305 <translation>Major Het spel heeft aanzienlijke grafische fouten</translation>
298 </message> 306 </message>
299 <message> 307 <message>
300 <location filename="../../src/yuzu/compatdb.ui" line="287"/> 308 <location filename="../../src/yuzu/compatdb.ui" line="287"/>
301 <source>Minor The game has minor graphical errors</source> 309 <source>Minor The game has minor graphical errors</source>
302 <translation type="unfinished"/> 310 <translation>Minor Het spel heeft lichte grafische fouten</translation>
303 </message> 311 </message>
304 <message> 312 <message>
305 <location filename="../../src/yuzu/compatdb.ui" line="294"/> 313 <location filename="../../src/yuzu/compatdb.ui" line="294"/>
306 <source>None Everything is rendered as it looks on the Nintendo Switch</source> 314 <source>None Everything is rendered as it looks on the Nintendo Switch</source>
307 <translation type="unfinished"/> 315 <translation>Geen Alles wordt weergegeven zoals het eruit ziet op de Nintendo Switch</translation>
308 </message> 316 </message>
309 <message> 317 <message>
310 <location filename="../../src/yuzu/compatdb.ui" line="306"/> 318 <location filename="../../src/yuzu/compatdb.ui" line="306"/>
311 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game have any graphical glitches?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 319 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game have any graphical glitches?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
312 <translation type="unfinished"/> 320 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Heeft het spel grafische glitches?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
313 </message> 321 </message>
314 <message> 322 <message>
315 <location filename="../../src/yuzu/compatdb.ui" line="339"/> 323 <location filename="../../src/yuzu/compatdb.ui" line="339"/>
316 <source>Major The game has major audio errors</source> 324 <source>Major The game has major audio errors</source>
317 <translation type="unfinished"/> 325 <translation>Major Het spel heeft aanzienlijke audiofouten</translation>
318 </message> 326 </message>
319 <message> 327 <message>
320 <location filename="../../src/yuzu/compatdb.ui" line="346"/> 328 <location filename="../../src/yuzu/compatdb.ui" line="346"/>
321 <source>Minor The game has minor audio errors</source> 329 <source>Minor The game has minor audio errors</source>
322 <translation type="unfinished"/> 330 <translation>Minor Het spel heeft lichte audiofouten</translation>
323 </message> 331 </message>
324 <message> 332 <message>
325 <location filename="../../src/yuzu/compatdb.ui" line="353"/> 333 <location filename="../../src/yuzu/compatdb.ui" line="353"/>
326 <source>None Audio is played perfectly</source> 334 <source>None Audio is played perfectly</source>
327 <translation type="unfinished"/> 335 <translation>Geen Audio wordt perfect afgespeeld</translation>
328 </message> 336 </message>
329 <message> 337 <message>
330 <location filename="../../src/yuzu/compatdb.ui" line="365"/> 338 <location filename="../../src/yuzu/compatdb.ui" line="365"/>
331 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game have any audio glitches / missing effects?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 339 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game have any audio glitches / missing effects?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
332 <translation type="unfinished"/> 340 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Heeft het spel audio-glitches / ontbrekende effecten?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
333 </message> 341 </message>
334 <message> 342 <message>
335 <location filename="../../src/yuzu/compatdb.ui" line="389"/> 343 <location filename="../../src/yuzu/compatdb.ui" line="389"/>
@@ -363,27 +371,27 @@ This would ban both their forum username and their IP address.</source>
363 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="14"/> 371 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="14"/>
364 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="20"/> 372 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="20"/>
365 <source>Audio</source> 373 <source>Audio</source>
366 <translation>Geluid</translation> 374 <translation>Audio</translation>
367 </message> 375 </message>
368 <message> 376 <message>
369 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="28"/> 377 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="28"/>
370 <source>Output Engine:</source> 378 <source>Output Engine:</source>
371 <translation>Output Engine:</translation> 379 <translation>Uitvoer-engine:</translation>
372 </message> 380 </message>
373 <message> 381 <message>
374 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> 382 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/>
375 <source>Output Device:</source> 383 <source>Output Device:</source>
376 <translation type="unfinished"/> 384 <translation>Uitvoerapparaat:</translation>
377 </message> 385 </message>
378 <message> 386 <message>
379 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> 387 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/>
380 <source>Input Device:</source> 388 <source>Input Device:</source>
381 <translation type="unfinished"/> 389 <translation>Invoerapparaat:</translation>
382 </message> 390 </message>
383 <message> 391 <message>
384 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> 392 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/>
385 <source>Sound Output Mode:</source> 393 <source>Sound Output Mode:</source>
386 <translation type="unfinished"/> 394 <translation>Geluidsuitvoermodus:</translation>
387 </message> 395 </message>
388 <message> 396 <message>
389 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> 397 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/>
@@ -408,7 +416,7 @@ This would ban both their forum username and their IP address.</source>
408 <message> 416 <message>
409 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> 417 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/>
410 <source>Set volume:</source> 418 <source>Set volume:</source>
411 <translation>stel volume in:</translation> 419 <translation>Stel volume in:</translation>
412 </message> 420 </message>
413 <message> 421 <message>
414 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> 422 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/>
@@ -423,7 +431,7 @@ This would ban both their forum username and their IP address.</source>
423 <message> 431 <message>
424 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> 432 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/>
425 <source>Mute audio when in background</source> 433 <source>Mute audio when in background</source>
426 <translation type="unfinished"/> 434 <translation>Demp audio op de achtergrond</translation>
427 </message> 435 </message>
428 <message> 436 <message>
429 <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> 437 <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/>
@@ -437,37 +445,37 @@ This would ban both their forum username and their IP address.</source>
437 <message> 445 <message>
438 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="14"/> 446 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="14"/>
439 <source>Configure Infrared Camera</source> 447 <source>Configure Infrared Camera</source>
440 <translation type="unfinished"/> 448 <translation>Configureer Infraroodcamera</translation>
441 </message> 449 </message>
442 <message> 450 <message>
443 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="26"/> 451 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="26"/>
444 <source>Select where the image of the emulated camera comes from. It may be a virtual camera or a real camera.</source> 452 <source>Select where the image of the emulated camera comes from. It may be a virtual camera or a real camera.</source>
445 <translation type="unfinished"/> 453 <translation>Selecteer waar het beeld van de geëmuleerde camera vandaan komt. Het kan een virtuele camera of een echte camera zijn.</translation>
446 </message> 454 </message>
447 <message> 455 <message>
448 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="52"/> 456 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="52"/>
449 <source>Camera Image Source:</source> 457 <source>Camera Image Source:</source>
450 <translation type="unfinished"/> 458 <translation>Camera Beeldbron:</translation>
451 </message> 459 </message>
452 <message> 460 <message>
453 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="71"/> 461 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="71"/>
454 <source>Input device:</source> 462 <source>Input device:</source>
455 <translation type="unfinished"/> 463 <translation>Invoerapparaat:</translation>
456 </message> 464 </message>
457 <message> 465 <message>
458 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="96"/> 466 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="96"/>
459 <source>Preview</source> 467 <source>Preview</source>
460 <translation type="unfinished"/> 468 <translation>Preview</translation>
461 </message> 469 </message>
462 <message> 470 <message>
463 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="108"/> 471 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="108"/>
464 <source>Resolution: 320*240</source> 472 <source>Resolution: 320*240</source>
465 <translation type="unfinished"/> 473 <translation>Resolutie: 320*240</translation>
466 </message> 474 </message>
467 <message> 475 <message>
468 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="115"/> 476 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="115"/>
469 <source>Click to preview</source> 477 <source>Click to preview</source>
470 <translation type="unfinished"/> 478 <translation>Klik om een preview te zien</translation>
471 </message> 479 </message>
472 <message> 480 <message>
473 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="140"/> 481 <location filename="../../src/yuzu/configuration/configure_camera.ui" line="140"/>
@@ -500,7 +508,7 @@ This would ban both their forum username and their IP address.</source>
500 <message> 508 <message>
501 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="34"/> 509 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="34"/>
502 <source>Accuracy:</source> 510 <source>Accuracy:</source>
503 <translation>Accuratie:</translation> 511 <translation>Nauwkeurigheid:</translation>
504 </message> 512 </message>
505 <message> 513 <message>
506 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="42"/> 514 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="42"/>
@@ -520,7 +528,7 @@ This would ban both their forum username and their IP address.</source>
520 <message> 528 <message>
521 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="57"/> 529 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="57"/>
522 <source>Paranoid (disables most optimizations)</source> 530 <source>Paranoid (disables most optimizations)</source>
523 <translation type="unfinished"/> 531 <translation>Paranoid (schakelt de meeste optimalisaties uit)</translation>
524 </message> 532 </message>
525 <message> 533 <message>
526 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="68"/> 534 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="68"/>
@@ -530,7 +538,7 @@ This would ban both their forum username and their IP address.</source>
530 <message> 538 <message>
531 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="85"/> 539 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="85"/>
532 <source>Unsafe CPU Optimization Settings</source> 540 <source>Unsafe CPU Optimization Settings</source>
533 <translation>Onveilige CPU optimalisatie instellingen</translation> 541 <translation>Onveilige CPU-optimalisatie-instellingen</translation>
534 </message> 542 </message>
535 <message> 543 <message>
536 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="91"/> 544 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="91"/>
@@ -543,8 +551,7 @@ This would ban both their forum username and their IP address.</source>
543 &lt;div&gt;This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.&lt;/div&gt; 551 &lt;div&gt;This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.&lt;/div&gt;
544 </source> 552 </source>
545 <translation> 553 <translation>
546&lt;div&gt;Deze optie verbeterd de prestatie door de accuratie van fused-multiply-add instructies te verminderen op CPU&apos;s zonder native FMA support.&lt;/div&gt; 554&lt;div&gt;Deze optie verbeterd de prestatie door de accuratie van fused-multiply-add-instructies te verminderen op CPU&apos;s zonder native FMA support.&lt;/div&gt;</translation>
547</translation>
548 </message> 555 </message>
549 <message> 556 <message>
550 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="106"/> 557 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="106"/>
@@ -570,13 +577,12 @@ This would ban both their forum username and their IP address.</source>
570 &lt;div&gt;This option improves the speed of 32 bits ASIMD floating-point functions by running with incorrect rounding modes.&lt;/div&gt; 577 &lt;div&gt;This option improves the speed of 32 bits ASIMD floating-point functions by running with incorrect rounding modes.&lt;/div&gt;
571 </source> 578 </source>
572 <translation> 579 <translation>
573&lt;div&gt;Deze optie verbetert de snelheid of 32-bit ASIMD floating-point functies door incorrecte afronding modellen te gebruiken.&lt;/div&gt; 580&lt;div&gt;Deze optie verbetert de snelheid of 32-bit ASIMD floating-point functies door incorrecte afronding modellen te gebruiken.&lt;/div&gt;</translation>
574</translation>
575 </message> 581 </message>
576 <message> 582 <message>
577 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="130"/> 583 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="130"/>
578 <source>Faster ASIMD instructions (32 bits only)</source> 584 <source>Faster ASIMD instructions (32 bits only)</source>
579 <translation type="unfinished"/> 585 <translation>Snellere ASIMD-instructies (alleen 32-bits)</translation>
580 </message> 586 </message>
581 <message> 587 <message>
582 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="137"/> 588 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="137"/>
@@ -589,36 +595,38 @@ This would ban both their forum username and their IP address.</source>
589 <message> 595 <message>
590 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="142"/> 596 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="142"/>
591 <source>Inaccurate NaN handling</source> 597 <source>Inaccurate NaN handling</source>
592 <translation>Onnauwkeurige verwerking van NaN</translation> 598 <translation>Onnauwkeurige NaN-verwerking</translation>
593 </message> 599 </message>
594 <message> 600 <message>
595 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="149"/> 601 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="149"/>
596 <source> 602 <source>
597 &lt;div&gt;This option improves speed by eliminating a safety check before every memory read/write in guest. Disabling it may allow a game to read/write the emulator's memory.&lt;/div&gt; 603 &lt;div&gt;This option improves speed by eliminating a safety check before every memory read/write in guest. Disabling it may allow a game to read/write the emulator's memory.&lt;/div&gt;
598 </source> 604 </source>
599 <translation type="unfinished"/> 605 <translation>
606&lt;div&gt;Deze optie verbetert de snelheid door het elimineren van een veiligheidscontrole voor elk geheugen lezen/schrijven in de gast. Door deze optie uit te schakelen kan een spel het geheugen van de emulator lezen/schrijven.&lt;/div&gt;</translation>
600 </message> 607 </message>
601 <message> 608 <message>
602 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="154"/> 609 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="154"/>
603 <source>Disable address space checks</source> 610 <source>Disable address space checks</source>
604 <translation type="unfinished"/> 611 <translation>Schakel adresruimtecontroles uit</translation>
605 </message> 612 </message>
606 <message> 613 <message>
607 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="161"/> 614 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="161"/>
608 <source> 615 <source>
609 &lt;div&gt;This option improves speed by relying only on the semantics of cmpxchg to ensure safety of exclusive access instructions. Please note this may result in deadlocks and other race conditions.&lt;/div&gt; 616 &lt;div&gt;This option improves speed by relying only on the semantics of cmpxchg to ensure safety of exclusive access instructions. Please note this may result in deadlocks and other race conditions.&lt;/div&gt;
610 </source> 617 </source>
611 <translation type="unfinished"/> 618 <translation>
619&lt;div&gt;Deze optie verbetert de snelheid door alleen de semantiek van cmpxchg te gebruiken om de veiligheid van exclusieve toegangsinstructies te garanderen. Dit kan resulteren in deadlocks en andere &quot;race conditions&quot;.&lt;/div&gt;</translation>
612 </message> 620 </message>
613 <message> 621 <message>
614 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="166"/> 622 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="166"/>
615 <source>Ignore global monitor</source> 623 <source>Ignore global monitor</source>
616 <translation type="unfinished"/> 624 <translation>Negeer globale monitor</translation>
617 </message> 625 </message>
618 <message> 626 <message>
619 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="191"/> 627 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="191"/>
620 <source>CPU settings are available only when game is not running.</source> 628 <source>CPU settings are available only when game is not running.</source>
621 <translation>CPU settings zijn alleen toegankelijk als er geen spel draait</translation> 629 <translation>CPU-instellingen zijn alleen toegankelijk als er geen spel draait.</translation>
622 </message> 630 </message>
623</context> 631</context>
624<context> 632<context>
@@ -626,13 +634,12 @@ This would ban both their forum username and their IP address.</source>
626 <message> 634 <message>
627 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="14"/> 635 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="14"/>
628 <source>Form</source> 636 <source>Form</source>
629 <translation>Formulier</translation> 637 <translation>Vorm</translation>
630 </message> 638 </message>
631 <message> 639 <message>
632 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="17"/> 640 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="17"/>
633 <source>CPU</source> 641 <source>CPU</source>
634 <translation>CPU 642 <translation>CPU</translation>
635</translation>
636 </message> 643 </message>
637 <message> 644 <message>
638 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="25"/> 645 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="25"/>
@@ -642,7 +649,7 @@ This would ban both their forum username and their IP address.</source>
642 <message> 649 <message>
643 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="31"/> 650 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="31"/>
644 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;For debugging only.&lt;/span&gt;&lt;br/&gt;If you&apos;re not sure what these do, keep all of these enabled. &lt;br/&gt;These settings, when disabled, only take effect when CPU Debugging is enabled. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 651 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;For debugging only.&lt;/span&gt;&lt;br/&gt;If you&apos;re not sure what these do, keep all of these enabled. &lt;br/&gt;These settings, when disabled, only take effect when CPU Debugging is enabled. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
645 <translation type="unfinished"/> 652 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Alleen voor debugging.&lt;/span&gt;&lt;br/&gt; Als u niet zeker weet wat deze doen, laat ze dan allemaal ingeschakeld. &lt;br/&gt;Deze instellingen, indien uitgeschakeld, hebben alleen effect wanneer CPU Debugging is ingeschakeld.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
646 </message> 653 </message>
647 <message> 654 <message>
648 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="41"/> 655 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="41"/>
@@ -652,14 +659,14 @@ This would ban both their forum username and their IP address.</source>
652 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to go through the Memory::Read/Memory::Write functions.&lt;/div&gt; 659 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to go through the Memory::Read/Memory::Write functions.&lt;/div&gt;
653 </source> 660 </source>
654 <translation> 661 <translation>
655&lt;div style=&quot;white-space: nowrap&quot;&gt;Deze optimazie versneld geheugen toegang door het gastprogramma.&lt;/div&gt; 662&lt;div style=&quot;white-space: nowrap&quot;&gt;Deze optimalisatie versnelt exclusieve geheugentoegang door het gastprogramma.&lt;/div&gt;
656&lt;div style=&quot;white-space: nowrap&quot;&gt;Door dit aan te leggen geeft toegang tot PageTable::pointers in uitgezonden code.&lt;/div&gt; 663&lt;div style=&quot;white-space: nowrap&quot;&gt;Inschakelen zorgt ervoor dat exclusieve geheugenlees/schrijfacties van de gast rechtstreeks in het geheugen plaatsvinden en gebruik maken van de MMU van de host.&lt;/div&gt;
657&lt;div style=&quot;white-space: nowrap&quot;&gt;Door dit uit te leggen forceerd u alle geheugen toegang door Memory::Read/Memory::Write functies te gaan.&lt;/div&gt;</translation> 664&lt;div style=&quot;white-space: nowrap&quot;&gt;Uitschakelen forceert het gebruik van Software MMU-emulatie voor alle exclusieve geheugentoepassingen.&lt;/div&gt;</translation>
658 </message> 665 </message>
659 <message> 666 <message>
660 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="48"/> 667 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="48"/>
661 <source>Enable inline page tables</source> 668 <source>Enable inline page tables</source>
662 <translation>Schakel inlijne pagina tafles in</translation> 669 <translation>Schakel inline paginatabellen in</translation>
663 </message> 670 </message>
664 <message> 671 <message>
665 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="55"/> 672 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="55"/>
@@ -672,7 +679,7 @@ This would ban both their forum username and their IP address.</source>
672 <message> 679 <message>
673 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="60"/> 680 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="60"/>
674 <source>Enable block linking</source> 681 <source>Enable block linking</source>
675 <translation>Schakel block linking in</translation> 682 <translation>Schakel blocklinking in</translation>
676 </message> 683 </message>
677 <message> 684 <message>
678 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="67"/> 685 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="67"/>
@@ -680,13 +687,12 @@ This would ban both their forum username and their IP address.</source>
680 &lt;div&gt;This optimization avoids dispatcher lookups by keeping track potential return addresses of BL instructions. This approximates what happens with a return stack buffer on a real CPU.&lt;/div&gt; 687 &lt;div&gt;This optimization avoids dispatcher lookups by keeping track potential return addresses of BL instructions. This approximates what happens with a return stack buffer on a real CPU.&lt;/div&gt;
681 </source> 688 </source>
682 <translation> 689 <translation>
683&lt;div&gt;Deze optimalisatie vermijdt het opzoeken van dispatchers door potentiële retouradressen van BL-instructies bij te houden. Dit benadert wat er gebeurt met een retourstackbuffer op een echte CPU.&lt;/div&gt;</translation> 690&lt;div&gt;Deze optimalisatie vermijdt dispatcher lookups door potentiële terugkeeradressen van BL-instructies bij te houden. Dit benadert wat er gebeurt met een return stack buffer op een echte CPU.&lt;/div&gt;</translation>
684 </message> 691 </message>
685 <message> 692 <message>
686 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="72"/> 693 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="72"/>
687 <source>Enable return stack buffer</source> 694 <source>Enable return stack buffer</source>
688 <translation>Return-stackbuffer inschakelen 695 <translation>Schakel return-stackbuffer in</translation>
689 </translation>
690 </message> 696 </message>
691 <message> 697 <message>
692 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="79"/> 698 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="79"/>
@@ -699,7 +705,7 @@ This would ban both their forum username and their IP address.</source>
699 <message> 705 <message>
700 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="84"/> 706 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="84"/>
701 <source>Enable fast dispatcher</source> 707 <source>Enable fast dispatcher</source>
702 <translation>Shakel snelle dispatcher in</translation> 708 <translation>Schakel snelle dispatcher in</translation>
703 </message> 709 </message>
704 <message> 710 <message>
705 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="91"/> 711 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="91"/>
@@ -712,7 +718,7 @@ This would ban both their forum username and their IP address.</source>
712 <message> 718 <message>
713 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="96"/> 719 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="96"/>
714 <source>Enable context elimination</source> 720 <source>Enable context elimination</source>
715 <translation>Shakel context eliminatie in</translation> 721 <translation>Schakel context eliminatie in</translation>
716 </message> 722 </message>
717 <message> 723 <message>
718 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="103"/> 724 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="103"/>
@@ -725,7 +731,7 @@ This would ban both their forum username and their IP address.</source>
725 <message> 731 <message>
726 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="108"/> 732 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="108"/>
727 <source>Enable constant propagation</source> 733 <source>Enable constant propagation</source>
728 <translation>Constante verspreiding inschakelen</translation> 734 <translation>Schakel constante verspreiding in</translation>
729 </message> 735 </message>
730 <message> 736 <message>
731 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="115"/> 737 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="115"/>
@@ -738,7 +744,7 @@ This would ban both their forum username and their IP address.</source>
738 <message> 744 <message>
739 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="120"/> 745 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="120"/>
740 <source>Enable miscellaneous optimizations</source> 746 <source>Enable miscellaneous optimizations</source>
741 <translation>Diverse optimalisaties inschakelen</translation> 747 <translation>Schakel diverse optimalisaties in</translation>
742 </message> 748 </message>
743 <message> 749 <message>
744 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="127"/> 750 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="127"/>
@@ -753,7 +759,7 @@ This would ban both their forum username and their IP address.</source>
753 <message> 759 <message>
754 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="133"/> 760 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="133"/>
755 <source>Enable misalignment check reduction</source> 761 <source>Enable misalignment check reduction</source>
756 <translation>Schakel verkeerde uitlijning vermindering in</translation> 762 <translation>Schakel verkeerde uitlijningsvermindering in</translation>
757 </message> 763 </message>
758 <message> 764 <message>
759 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="140"/> 765 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="140"/>
@@ -763,14 +769,14 @@ This would ban both their forum username and their IP address.</source>
763 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to use Software MMU Emulation.&lt;/div&gt; 769 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to use Software MMU Emulation.&lt;/div&gt;
764 </source> 770 </source>
765 <translation> 771 <translation>
766&lt;div style=&quot;white-space: nowrap&quot;&gt;Deze optimazie versneld geheugen toegang door het gastprogramma.&lt;/div&gt; 772&lt;div style=&quot;white-space: nowrap&quot;&gt;Deze optimalisatie versnelt exclusieve geheugentoegang door het gastprogramma.&lt;/div&gt;
767&lt;div style=&quot;white-space: nowrap&quot;&gt;Door dit aan te leggen geeft toegang tot PageTable::pointers in uitgezonden code.&lt;/div&gt; 773&lt;div style=&quot;white-space: nowrap&quot;&gt;Inschakelen zorgt ervoor dat geheugenlees/schrijfacties rechtstreeks in het geheugen plaatsvinden en gebruik maken van de MMU van de host.&lt;/div&gt;
768&lt;div style=&quot;white-space: nowrap&quot;&gt;Door dit uit te leggen forceerd u alle geheugen toegang door Memory::Read/Memory::Write functies te gaan.&lt;/div&gt;</translation> 774&lt;div style=&quot;white-space: nowrap&quot;&gt;Uitschakelen forceert het gebruik van Software MMU-emulatie voor alle exclusieve geheugentoepassingen.&lt;/div&gt;</translation>
769 </message> 775 </message>
770 <message> 776 <message>
771 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="147"/> 777 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="147"/>
772 <source>Enable Host MMU Emulation (general memory instructions)</source> 778 <source>Enable Host MMU Emulation (general memory instructions)</source>
773 <translation type="unfinished"/> 779 <translation>Schakel Host MMU-emulatie in (algemene geheugeninstructies)</translation>
774 </message> 780 </message>
775 <message> 781 <message>
776 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="154"/> 782 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="154"/>
@@ -779,12 +785,15 @@ This would ban both their forum username and their IP address.</source>
779 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it causes guest exclusive memory reads/writes to be done directly into memory and make use of Host's MMU.&lt;/div&gt; 785 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it causes guest exclusive memory reads/writes to be done directly into memory and make use of Host's MMU.&lt;/div&gt;
780 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all exclusive memory accesses to use Software MMU Emulation.&lt;/div&gt; 786 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all exclusive memory accesses to use Software MMU Emulation.&lt;/div&gt;
781 </source> 787 </source>
782 <translation type="unfinished"/> 788 <translation>
789&lt;div style=&quot;white-space: nowrap&quot;&gt;Deze optimalisatie versnelt exclusieve geheugentoegang door het gastprogramma.&lt;/div&gt;
790&lt;div style=&quot;white-space: nowrap&quot;&gt;Inschakelen zorgt ervoor dat exclusieve geheugenlees/schrijfacties van de gast rechtstreeks in het geheugen plaatsvinden en gebruik maken van de MMU van de host.&lt;/div&gt;
791&lt;div style=&quot;white-space: nowrap&quot;&gt;Uitschakelen forceert het gebruik van Software MMU-emulatie voor alle exclusieve geheugentoepassingen.&lt;/div&gt;</translation>
783 </message> 792 </message>
784 <message> 793 <message>
785 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="161"/> 794 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="161"/>
786 <source>Enable Host MMU Emulation (exclusive memory instructions)</source> 795 <source>Enable Host MMU Emulation (exclusive memory instructions)</source>
787 <translation type="unfinished"/> 796 <translation>Schakel Host MMU-emulatie in (exclusieve geheugeninstructies)</translation>
788 </message> 797 </message>
789 <message> 798 <message>
790 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="168"/> 799 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="168"/>
@@ -792,12 +801,14 @@ This would ban both their forum username and their IP address.</source>
792 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up exclusive memory accesses by the guest program.&lt;/div&gt; 801 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up exclusive memory accesses by the guest program.&lt;/div&gt;
793 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it reduces the overhead of fastmem failure of exclusive memory accesses.&lt;/div&gt; 802 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it reduces the overhead of fastmem failure of exclusive memory accesses.&lt;/div&gt;
794 </source> 803 </source>
795 <translation type="unfinished"/> 804 <translation>
805&lt;div style=&quot;white-space: nowrap&quot;&gt;Deze optimalisatie versnelt exclusieve geheugentoegang door het gastprogramma.&lt;/div&gt;
806&lt;div style=&quot;white-space: nowrap&quot;&gt;Het inschakelen ervan vermindert de overhead van fastmem falen van exclusieve geheugentoegang.&lt;/div&gt;</translation>
796 </message> 807 </message>
797 <message> 808 <message>
798 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="174"/> 809 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="174"/>
799 <source>Enable recompilation of exclusive memory instructions</source> 810 <source>Enable recompilation of exclusive memory instructions</source>
800 <translation type="unfinished"/> 811 <translation>Schakel hercompilatie van exclusieve geheugeninstructies in</translation>
801 </message> 812 </message>
802 <message> 813 <message>
803 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="181"/> 814 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="181"/>
@@ -805,12 +816,14 @@ This would ban both their forum username and their IP address.</source>
805 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up memory accesses by allowing invalid memory accesses to succeed.&lt;/div&gt; 816 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up memory accesses by allowing invalid memory accesses to succeed.&lt;/div&gt;
806 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it reduces the overhead of all memory accesses and has no impact on programs that don't access invalid memory.&lt;/div&gt; 817 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it reduces the overhead of all memory accesses and has no impact on programs that don't access invalid memory.&lt;/div&gt;
807 </source> 818 </source>
808 <translation type="unfinished"/> 819 <translation>
820&lt;div style=&quot;white-space: nowrap&quot;&gt;Deze optimalisering versnelt geheugentoepassingen door ongeldige geheugentoepassingen te laten slagen.&lt;/div&gt;
821&lt;div style=&quot;white-space: nowrap&quot;&gt;Het inschakelen ervan vermindert de overhead van alle geheugentoepassingen en heeft geen invloed op programma&apos;s die geen ongeldig geheugen gebruiken.&lt;/div&gt;</translation>
809 </message> 822 </message>
810 <message> 823 <message>
811 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="187"/> 824 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="187"/>
812 <source>Enable fallbacks for invalid memory accesses</source> 825 <source>Enable fallbacks for invalid memory accesses</source>
813 <translation type="unfinished"/> 826 <translation>Schakel fallbacks in voor ongeldige geheugentoegang</translation>
814 </message> 827 </message>
815 <message> 828 <message>
816 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="212"/> 829 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="212"/>
@@ -823,12 +836,12 @@ This would ban both their forum username and their IP address.</source>
823 <message> 836 <message>
824 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="15"/> 837 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="15"/>
825 <source>Debugger</source> 838 <source>Debugger</source>
826 <translation type="unfinished"/> 839 <translation>Debugger</translation>
827 </message> 840 </message>
828 <message> 841 <message>
829 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="23"/> 842 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="23"/>
830 <source>Enable GDB Stub</source> 843 <source>Enable GDB Stub</source>
831 <translation>GDB Stub Aanzetten</translation> 844 <translation>Schakel GDB Stub in</translation>
832 </message> 845 </message>
833 <message> 846 <message>
834 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="43"/> 847 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="43"/>
@@ -848,12 +861,12 @@ This would ban both their forum username and their IP address.</source>
848 <message> 861 <message>
849 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="87"/> 862 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="87"/>
850 <source>Show Log in Console</source> 863 <source>Show Log in Console</source>
851 <translation>Laat Log Venster Zien</translation> 864 <translation>Toon Login-console</translation>
852 </message> 865 </message>
853 <message> 866 <message>
854 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="94"/> 867 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="94"/>
855 <source>Open Log Location</source> 868 <source>Open Log Location</source>
856 <translation>Open Log Locatie</translation> 869 <translation>Open Loglocatie</translation>
857 </message> 870 </message>
858 <message> 871 <message>
859 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="104"/> 872 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="104"/>
@@ -863,7 +876,7 @@ This would ban both their forum username and their IP address.</source>
863 <message> 876 <message>
864 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="107"/> 877 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="107"/>
865 <source>Enable Extended Logging**</source> 878 <source>Enable Extended Logging**</source>
866 <translation>Activeer Uitgebreid Loggen**</translation> 879 <translation>Schakel Uitgebreid Loggen** in</translation>
867 </message> 880 </message>
868 <message> 881 <message>
869 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="117"/> 882 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="117"/>
@@ -873,7 +886,7 @@ This would ban both their forum username and their IP address.</source>
873 <message> 886 <message>
874 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="125"/> 887 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="125"/>
875 <source>Arguments String</source> 888 <source>Arguments String</source>
876 <translation>Argumenten Rij</translation> 889 <translation>Argumentenrij</translation>
877 </message> 890 </message>
878 <message> 891 <message>
879 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="140"/> 892 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="140"/>
@@ -888,42 +901,42 @@ This would ban both their forum username and their IP address.</source>
888 <message> 901 <message>
889 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="152"/> 902 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="152"/>
890 <source>Enable Graphics Debugging</source> 903 <source>Enable Graphics Debugging</source>
891 <translation>Grafische foutopsporing inschakelen</translation> 904 <translation>Schakel Graphics Foutopsporing in</translation>
892 </message> 905 </message>
893 <message> 906 <message>
894 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="159"/> 907 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="159"/>
895 <source>When checked, it enables Nsight Aftermath crash dumps</source> 908 <source>When checked, it enables Nsight Aftermath crash dumps</source>
896 <translation type="unfinished"/> 909 <translation>Indien aangevinkt schakelt het Nsight Aftermath crashdumps in</translation>
897 </message> 910 </message>
898 <message> 911 <message>
899 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="162"/> 912 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="162"/>
900 <source>Enable Nsight Aftermath</source> 913 <source>Enable Nsight Aftermath</source>
901 <translation type="unfinished"/> 914 <translation>Schakel Nsight Aftermath in</translation>
902 </message> 915 </message>
903 <message> 916 <message>
904 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="172"/> 917 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="172"/>
905 <source>When checked, it will dump all the original assembler shaders from the disk shader cache or game as found</source> 918 <source>When checked, it will dump all the original assembler shaders from the disk shader cache or game as found</source>
906 <translation type="unfinished"/> 919 <translation>Indien aangevinkt, zal het alle originele assembler shaders van de disk shader cache of het gevonden spel dumpen</translation>
907 </message> 920 </message>
908 <message> 921 <message>
909 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="175"/> 922 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="175"/>
910 <source>Dump Game Shaders</source> 923 <source>Dump Game Shaders</source>
911 <translation type="unfinished"/> 924 <translation>Dump Spel-shaders</translation>
912 </message> 925 </message>
913 <message> 926 <message>
914 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="185"/> 927 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="185"/>
915 <source>When checked, it will dump all the macro programs of the GPU</source> 928 <source>When checked, it will dump all the macro programs of the GPU</source>
916 <translation type="unfinished"/> 929 <translation>Indien aangevinkt, worden alle macroprogramma&apos;s van de GPU gedumpt</translation>
917 </message> 930 </message>
918 <message> 931 <message>
919 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="188"/> 932 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="188"/>
920 <source>Dump Maxwell Macros</source> 933 <source>Dump Maxwell Macros</source>
921 <translation type="unfinished"/> 934 <translation>Dump Maxwell-macro&apos;s</translation>
922 </message> 935 </message>
923 <message> 936 <message>
924 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="198"/> 937 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="198"/>
925 <source>When checked, it disables the macro Just In Time compiler. Enabling this makes games run slower</source> 938 <source>When checked, it disables the macro Just In Time compiler. Enabling this makes games run slower</source>
926 <translation>Indien aangevinkt, wordt de macro Just In Time-compiler uitgeschakeld. Als u dit inschakelt, worden games langzamer</translation> 939 <translation>Indien aangevinkt, wordt de macro Just In Time-compiler uitgeschakeld. Als je dit inschakelt, worden spellen langzamer</translation>
927 </message> 940 </message>
928 <message> 941 <message>
929 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="201"/> 942 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="201"/>
@@ -933,32 +946,32 @@ This would ban both their forum username and their IP address.</source>
933 <message> 946 <message>
934 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="211"/> 947 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="211"/>
935 <source>When checked, it disables the macro HLE functions. Enabling this makes games run slower</source> 948 <source>When checked, it disables the macro HLE functions. Enabling this makes games run slower</source>
936 <translation type="unfinished"/> 949 <translation>Indien aangevinkt, schakelt het de macro HLE functies uit. Inschakelen maakt spellen langzamer</translation>
937 </message> 950 </message>
938 <message> 951 <message>
939 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="214"/> 952 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="214"/>
940 <source>Disable Macro HLE</source> 953 <source>Disable Macro HLE</source>
941 <translation type="unfinished"/> 954 <translation>Schakel Macro HLE uit</translation>
942 </message> 955 </message>
943 <message> 956 <message>
944 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="221"/> 957 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="221"/>
945 <source>When checked, yuzu will log statistics about the compiled pipeline cache</source> 958 <source>When checked, yuzu will log statistics about the compiled pipeline cache</source>
946 <translation type="unfinished"/> 959 <translation>Indien aangevinkt, zal yuzu statistieken registreren over de gecompileerde pijplijn-cache</translation>
947 </message> 960 </message>
948 <message> 961 <message>
949 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="224"/> 962 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="224"/>
950 <source>Enable Shader Feedback</source> 963 <source>Enable Shader Feedback</source>
951 <translation type="unfinished"/> 964 <translation>Schakel Shader Feedback in</translation>
952 </message> 965 </message>
953 <message> 966 <message>
954 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="231"/> 967 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="231"/>
955 <source>When checked, it executes shaders without loop logic changes</source> 968 <source>When checked, it executes shaders without loop logic changes</source>
956 <translation type="unfinished"/> 969 <translation>Indien aangevinkt, voert het shaders uit zonder wijzigingen in de luslogica</translation>
957 </message> 970 </message>
958 <message> 971 <message>
959 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="234"/> 972 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="234"/>
960 <source>Disable Loop safety checks</source> 973 <source>Disable Loop safety checks</source>
961 <translation type="unfinished"/> 974 <translation>Schakel Lusveiligheidscontroles uit</translation>
962 </message> 975 </message>
963 <message> 976 <message>
964 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="244"/> 977 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="244"/>
@@ -968,27 +981,27 @@ This would ban both their forum username and their IP address.</source>
968 <message> 981 <message>
969 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="250"/> 982 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="250"/>
970 <source>Enable Verbose Reporting Services**</source> 983 <source>Enable Verbose Reporting Services**</source>
971 <translation type="unfinished"/> 984 <translation>Schakel Verbose Reporting Services** in</translation>
972 </message> 985 </message>
973 <message> 986 <message>
974 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="257"/> 987 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="257"/>
975 <source>Enable FS Access Log</source> 988 <source>Enable FS Access Log</source>
976 <translation type="unfinished"/> 989 <translation>Schakel FS-toegangslogboek in</translation>
977 </message> 990 </message>
978 <message> 991 <message>
979 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="264"/> 992 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="264"/>
980 <source>Enable this to output the latest generated audio command list to the console. Only affects games using the audio renderer.</source> 993 <source>Enable this to output the latest generated audio command list to the console. Only affects games using the audio renderer.</source>
981 <translation type="unfinished"/> 994 <translation>Zet dit aan om de laatst gegenereerde audio commandolijst naar de console te sturen. Alleen van invloed op spellen die de audio renderer gebruiken.</translation>
982 </message> 995 </message>
983 <message> 996 <message>
984 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="267"/> 997 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="267"/>
985 <source>Dump Audio Commands To Console**</source> 998 <source>Dump Audio Commands To Console**</source>
986 <translation type="unfinished"/> 999 <translation>Dump Audio-opdrachten naar Console**</translation>
987 </message> 1000 </message>
988 <message> 1001 <message>
989 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="274"/> 1002 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="274"/>
990 <source>Create Minidump After Crash</source> 1003 <source>Create Minidump After Crash</source>
991 <translation type="unfinished"/> 1004 <translation>Maak Minidump na Crash</translation>
992 </message> 1005 </message>
993 <message> 1006 <message>
994 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="284"/> 1007 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="284"/>
@@ -998,42 +1011,42 @@ This would ban both their forum username and their IP address.</source>
998 <message> 1011 <message>
999 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="290"/> 1012 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="290"/>
1000 <source>Kiosk (Quest) Mode</source> 1013 <source>Kiosk (Quest) Mode</source>
1001 <translation>Kiosk (Quest) Modus</translation> 1014 <translation>Kiosk-modus (Quest)</translation>
1002 </message> 1015 </message>
1003 <message> 1016 <message>
1004 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="297"/> 1017 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="297"/>
1005 <source>Enable CPU Debugging</source> 1018 <source>Enable CPU Debugging</source>
1006 <translation type="unfinished"/> 1019 <translation>Schakel CPU-foutopsporing in</translation>
1007 </message> 1020 </message>
1008 <message> 1021 <message>
1009 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="304"/> 1022 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="304"/>
1010 <source>Enable Debug Asserts</source> 1023 <source>Enable Debug Asserts</source>
1011 <translation>Schakel Debug asserties in</translation> 1024 <translation>Schakel Debug-asserts in</translation>
1012 </message> 1025 </message>
1013 <message> 1026 <message>
1014 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="311"/> 1027 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="311"/>
1015 <source>Enable Auto-Stub**</source> 1028 <source>Enable Auto-Stub**</source>
1016 <translation type="unfinished"/> 1029 <translation>Schakel Auto-Stub** in</translation>
1017 </message> 1030 </message>
1018 <message> 1031 <message>
1019 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="318"/> 1032 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="318"/>
1020 <source>Enable All Controller Types</source> 1033 <source>Enable All Controller Types</source>
1021 <translation type="unfinished"/> 1034 <translation>Schakel Alle Controler-soorten in</translation>
1022 </message> 1035 </message>
1023 <message> 1036 <message>
1024 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="325"/> 1037 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="325"/>
1025 <source>Disable Web Applet</source> 1038 <source>Disable Web Applet</source>
1026 <translation type="unfinished"/> 1039 <translation>Schakel Webapplet uit</translation>
1027 </message> 1040 </message>
1028 <message> 1041 <message>
1029 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="332"/> 1042 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="332"/>
1030 <source>Enables yuzu to check for a working Vulkan environment when the program starts up. Disable this if this is causing issues with external programs seeing yuzu.</source> 1043 <source>Enables yuzu to check for a working Vulkan environment when the program starts up. Disable this if this is causing issues with external programs seeing yuzu.</source>
1031 <translation type="unfinished"/> 1044 <translation>Laat yuzu controleren op een werkende Vulkan-omgeving wanneer het programma opstart. Schakel dit uit als dit problemen veroorzaakt met externe programma&apos;s die yuzu zien.</translation>
1032 </message> 1045 </message>
1033 <message> 1046 <message>
1034 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="335"/> 1047 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="335"/>
1035 <source>Perform Startup Vulkan Check</source> 1048 <source>Perform Startup Vulkan Check</source>
1036 <translation type="unfinished"/> 1049 <translation>Voer Vulkan-controle bij het opstarten uit</translation>
1037 </message> 1050 </message>
1038 <message> 1051 <message>
1039 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="350"/> 1052 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="350"/>
@@ -1043,22 +1056,22 @@ This would ban both their forum username and their IP address.</source>
1043 <message> 1056 <message>
1044 <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="35"/> 1057 <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="35"/>
1045 <source>Restart Required</source> 1058 <source>Restart Required</source>
1046 <translation type="unfinished"/> 1059 <translation>Herstart Vereist</translation>
1047 </message> 1060 </message>
1048 <message> 1061 <message>
1049 <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="36"/> 1062 <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="36"/>
1050 <source>yuzu is required to restart in order to apply this setting.</source> 1063 <source>yuzu is required to restart in order to apply this setting.</source>
1051 <translation type="unfinished"/> 1064 <translation>yuzu moet opnieuw opstarten om deze instelling toe te passen.</translation>
1052 </message> 1065 </message>
1053 <message> 1066 <message>
1054 <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="88"/> 1067 <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="88"/>
1055 <source>Web applet not compiled</source> 1068 <source>Web applet not compiled</source>
1056 <translation type="unfinished"/> 1069 <translation>Webapplet niet gecompileerd</translation>
1057 </message> 1070 </message>
1058 <message> 1071 <message>
1059 <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="95"/> 1072 <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="95"/>
1060 <source>MiniDump creation not compiled</source> 1073 <source>MiniDump creation not compiled</source>
1061 <translation type="unfinished"/> 1074 <translation>MiniDump-creatie niet gecompileerd</translation>
1062 </message> 1075 </message>
1063</context> 1076</context>
1064<context> 1077<context>
@@ -1066,12 +1079,12 @@ This would ban both their forum username and their IP address.</source>
1066 <message> 1079 <message>
1067 <location filename="../../src/yuzu/configuration/configure_debug_controller.ui" line="14"/> 1080 <location filename="../../src/yuzu/configuration/configure_debug_controller.ui" line="14"/>
1068 <source>Configure Debug Controller</source> 1081 <source>Configure Debug Controller</source>
1069 <translation>Debug-controller configureren</translation> 1082 <translation>Configureer Debug-controller</translation>
1070 </message> 1083 </message>
1071 <message> 1084 <message>
1072 <location filename="../../src/yuzu/configuration/configure_debug_controller.ui" line="40"/> 1085 <location filename="../../src/yuzu/configuration/configure_debug_controller.ui" line="40"/>
1073 <source>Clear</source> 1086 <source>Clear</source>
1074 <translation>Verwijder</translation> 1087 <translation>Wis</translation>
1075 </message> 1088 </message>
1076 <message> 1089 <message>
1077 <location filename="../../src/yuzu/configuration/configure_debug_controller.ui" line="47"/> 1090 <location filename="../../src/yuzu/configuration/configure_debug_controller.ui" line="47"/>
@@ -1084,7 +1097,7 @@ This would ban both their forum username and their IP address.</source>
1084 <message> 1097 <message>
1085 <location filename="../../src/yuzu/configuration/configure_debug_tab.ui" line="14"/> 1098 <location filename="../../src/yuzu/configuration/configure_debug_tab.ui" line="14"/>
1086 <source>Form</source> 1099 <source>Form</source>
1087 <translation>Formulier</translation> 1100 <translation>Vorm</translation>
1088 </message> 1101 </message>
1089 <message> 1102 <message>
1090 <location filename="../../src/yuzu/configuration/configure_debug_tab.ui" line="17"/> 1103 <location filename="../../src/yuzu/configuration/configure_debug_tab.ui" line="17"/>
@@ -1095,8 +1108,7 @@ This would ban both their forum username and their IP address.</source>
1095 <message> 1108 <message>
1096 <location filename="../../src/yuzu/configuration/configure_debug_tab.cpp" line="17"/> 1109 <location filename="../../src/yuzu/configuration/configure_debug_tab.cpp" line="17"/>
1097 <source>CPU</source> 1110 <source>CPU</source>
1098 <translation>CPU 1111 <translation>CPU</translation>
1099</translation>
1100 </message> 1112 </message>
1101</context> 1113</context>
1102<context> 1114<context>
@@ -1104,13 +1116,13 @@ This would ban both their forum username and their IP address.</source>
1104 <message> 1116 <message>
1105 <location filename="../../src/yuzu/configuration/configure.ui" line="20"/> 1117 <location filename="../../src/yuzu/configuration/configure.ui" line="20"/>
1106 <source>yuzu Configuration</source> 1118 <source>yuzu Configuration</source>
1107 <translation>yuzu Configuratie</translation> 1119 <translation>yuzu-configuratie</translation>
1108 </message> 1120 </message>
1109 <message> 1121 <message>
1110 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="52"/> 1122 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="52"/>
1111 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="155"/> 1123 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="155"/>
1112 <source>Audio</source> 1124 <source>Audio</source>
1113 <translation>Geluid</translation> 1125 <translation>Audio</translation>
1114 </message> 1126 </message>
1115 <message> 1127 <message>
1116 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="53"/> 1128 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="53"/>
@@ -1138,12 +1150,12 @@ This would ban both their forum username and their IP address.</source>
1138 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="57"/> 1150 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="57"/>
1139 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="154"/> 1151 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="154"/>
1140 <source>Graphics</source> 1152 <source>Graphics</source>
1141 <translation>Grafisch</translation> 1153 <translation>Graphics</translation>
1142 </message> 1154 </message>
1143 <message> 1155 <message>
1144 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="58"/> 1156 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="58"/>
1145 <source>GraphicsAdvanced</source> 1157 <source>GraphicsAdvanced</source>
1146 <translation>GeAdvanceerdeGrafisch</translation> 1158 <translation>Geavanceerde Graphics</translation>
1147 </message> 1159 </message>
1148 <message> 1160 <message>
1149 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="59"/> 1161 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="59"/>
@@ -1164,7 +1176,7 @@ This would ban both their forum username and their IP address.</source>
1164 <message> 1176 <message>
1165 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="62"/> 1177 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="62"/>
1166 <source>Network</source> 1178 <source>Network</source>
1167 <translation type="unfinished"/> 1179 <translation>Netwerk</translation>
1168 </message> 1180 </message>
1169 <message> 1181 <message>
1170 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="63"/> 1182 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="63"/>
@@ -1175,7 +1187,7 @@ This would ban both their forum username and their IP address.</source>
1175 <message> 1187 <message>
1176 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="64"/> 1188 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="64"/>
1177 <source>Game List</source> 1189 <source>Game List</source>
1178 <translation>Game Lijst</translation> 1190 <translation>Spellijst</translation>
1179 </message> 1191 </message>
1180 <message> 1192 <message>
1181 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="65"/> 1193 <location filename="../../src/yuzu/configuration/configure_dialog.cpp" line="65"/>
@@ -1198,7 +1210,7 @@ This would ban both their forum username and their IP address.</source>
1198 <message> 1210 <message>
1199 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="25"/> 1211 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="25"/>
1200 <source>Storage Directories</source> 1212 <source>Storage Directories</source>
1201 <translation>Opslag Folders</translation> 1213 <translation>Opslagmappen</translation>
1202 </message> 1214 </message>
1203 <message> 1215 <message>
1204 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="31"/> 1216 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="31"/>
@@ -1217,12 +1229,12 @@ This would ban both their forum username and their IP address.</source>
1217 <message> 1229 <message>
1218 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="51"/> 1230 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="51"/>
1219 <source>SD Card</source> 1231 <source>SD Card</source>
1220 <translation>SD Kaart</translation> 1232 <translation>SD-kaart</translation>
1221 </message> 1233 </message>
1222 <message> 1234 <message>
1223 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="84"/> 1235 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="84"/>
1224 <source>Gamecard</source> 1236 <source>Gamecard</source>
1225 <translation>Gamekaart</translation> 1237 <translation>Spelkaart</translation>
1226 </message> 1238 </message>
1227 <message> 1239 <message>
1228 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="90"/> 1240 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="90"/>
@@ -1232,7 +1244,7 @@ This would ban both their forum username and their IP address.</source>
1232 <message> 1244 <message>
1233 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="100"/> 1245 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="100"/>
1234 <source>Inserted</source> 1246 <source>Inserted</source>
1235 <translation>Ingevoerd</translation> 1247 <translation>Geplaatst</translation>
1236 </message> 1248 </message>
1237 <message> 1249 <message>
1238 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="107"/> 1250 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="107"/>
@@ -1242,7 +1254,7 @@ This would ban both their forum username and their IP address.</source>
1242 <message> 1254 <message>
1243 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="124"/> 1255 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="124"/>
1244 <source>Patch Manager</source> 1256 <source>Patch Manager</source>
1245 <translation>Patch Beheer</translation> 1257 <translation>Patch-beheer</translation>
1246 </message> 1258 </message>
1247 <message> 1259 <message>
1248 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="152"/> 1260 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="152"/>
@@ -1272,7 +1284,7 @@ This would ban both their forum username and their IP address.</source>
1272 <message> 1284 <message>
1273 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="209"/> 1285 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="209"/>
1274 <source>Cache Game List Metadata</source> 1286 <source>Cache Game List Metadata</source>
1275 <translation>Cache Spel Lijst Metadata</translation> 1287 <translation>Cache Metagegevens van Spellijst</translation>
1276 </message> 1288 </message>
1277 <message> 1289 <message>
1278 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="216"/> 1290 <location filename="../../src/yuzu/configuration/configure_filesystem.ui" line="216"/>
@@ -1280,37 +1292,37 @@ This would ban both their forum username and their IP address.</source>
1280 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="135"/> 1292 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="135"/>
1281 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="140"/> 1293 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="140"/>
1282 <source>Reset Metadata Cache</source> 1294 <source>Reset Metadata Cache</source>
1283 <translation>Herstel Metadata Cache</translation> 1295 <translation>Herstel Metagegevenscache</translation>
1284 </message> 1296 </message>
1285 <message> 1297 <message>
1286 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="93"/> 1298 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="93"/>
1287 <source>Select Emulated NAND Directory...</source> 1299 <source>Select Emulated NAND Directory...</source>
1288 <translation>Selecteer Geëmuleerde NAND Folder</translation> 1300 <translation>Selecteer Geëmuleerde NAND-map...</translation>
1289 </message> 1301 </message>
1290 <message> 1302 <message>
1291 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="96"/> 1303 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="96"/>
1292 <source>Select Emulated SD Directory...</source> 1304 <source>Select Emulated SD Directory...</source>
1293 <translation>Selecteer Geëmuleerde SD Folder</translation> 1305 <translation>Selecteer Geëmuleerde SD-map...</translation>
1294 </message> 1306 </message>
1295 <message> 1307 <message>
1296 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="99"/> 1308 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="99"/>
1297 <source>Select Gamecard Path...</source> 1309 <source>Select Gamecard Path...</source>
1298 <translation>Selecteer Gamekaart Pad</translation> 1310 <translation>Selecteer Spelkaartpad...</translation>
1299 </message> 1311 </message>
1300 <message> 1312 <message>
1301 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="102"/> 1313 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="102"/>
1302 <source>Select Dump Directory...</source> 1314 <source>Select Dump Directory...</source>
1303 <translation>Selecteer Dump Folder</translation> 1315 <translation>Selecteer Dump-map...</translation>
1304 </message> 1316 </message>
1305 <message> 1317 <message>
1306 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="105"/> 1318 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="105"/>
1307 <source>Select Mod Load Directory...</source> 1319 <source>Select Mod Load Directory...</source>
1308 <translation>Selecteer Mod Laad Folder</translation> 1320 <translation>Selecteer Mod-laadmap...</translation>
1309 </message> 1321 </message>
1310 <message> 1322 <message>
1311 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="132"/> 1323 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="132"/>
1312 <source>The metadata cache is already empty.</source> 1324 <source>The metadata cache is already empty.</source>
1313 <translation>De metadata cache is al leeg.</translation> 1325 <translation>De metagegevenscache is al leeg.</translation>
1314 </message> 1326 </message>
1315 <message> 1327 <message>
1316 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="136"/> 1328 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="136"/>
@@ -1320,7 +1332,7 @@ This would ban both their forum username and their IP address.</source>
1320 <message> 1332 <message>
1321 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="141"/> 1333 <location filename="../../src/yuzu/configuration/configure_filesystem.cpp" line="141"/>
1322 <source>The metadata cache couldn&apos;t be deleted. It might be in use or non-existent.</source> 1334 <source>The metadata cache couldn&apos;t be deleted. It might be in use or non-existent.</source>
1323 <translation>De metadata cache kon niet worden verwijderd. Het wordt mogelijk gebruikt of bestaat niet.</translation> 1335 <translation>De metagegevenscache kon niet worden verwijderd. Het wordt mogelijk gebruikt of bestaat niet.</translation>
1324 </message> 1336 </message>
1325</context> 1337</context>
1326<context> 1338<context>
@@ -1339,7 +1351,7 @@ This would ban both their forum username and their IP address.</source>
1339 <message> 1351 <message>
1340 <location filename="../../src/yuzu/configuration/configure_general.ui" line="35"/> 1352 <location filename="../../src/yuzu/configuration/configure_general.ui" line="35"/>
1341 <source>Limit Speed Percent</source> 1353 <source>Limit Speed Percent</source>
1342 <translation>Limiteer Snelheid Percentage</translation> 1354 <translation>Beperk Snelheidspercentage</translation>
1343 </message> 1355 </message>
1344 <message> 1356 <message>
1345 <location filename="../../src/yuzu/configuration/configure_general.ui" line="42"/> 1357 <location filename="../../src/yuzu/configuration/configure_general.ui" line="42"/>
@@ -1349,12 +1361,12 @@ This would ban both their forum username and their IP address.</source>
1349 <message> 1361 <message>
1350 <location filename="../../src/yuzu/configuration/configure_general.ui" line="60"/> 1362 <location filename="../../src/yuzu/configuration/configure_general.ui" line="60"/>
1351 <source>Multicore CPU Emulation</source> 1363 <source>Multicore CPU Emulation</source>
1352 <translation>Multicore CPU Emulatie</translation> 1364 <translation>Multicore CPU-emulatie</translation>
1353 </message> 1365 </message>
1354 <message> 1366 <message>
1355 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1367 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1356 <source>Extended memory layout (6GB DRAM)</source> 1368 <source>Extended memory layout (8GB DRAM)</source>
1357 <translation type="unfinished"/> 1369 <translation>Uitgebreide geheugenindeling (8 GB DRAM)</translation>
1358 </message> 1370 </message>
1359 <message> 1371 <message>
1360 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1372 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
@@ -1364,22 +1376,22 @@ This would ban both their forum username and their IP address.</source>
1364 <message> 1376 <message>
1365 <location filename="../../src/yuzu/configuration/configure_general.ui" line="81"/> 1377 <location filename="../../src/yuzu/configuration/configure_general.ui" line="81"/>
1366 <source>Prompt for user on game boot</source> 1378 <source>Prompt for user on game boot</source>
1367 <translation>Vraag voor gebruiker bij het opstartten van het spel.</translation> 1379 <translation>Vraag aan gebruiker bij opstarten van het spel</translation>
1368 </message> 1380 </message>
1369 <message> 1381 <message>
1370 <location filename="../../src/yuzu/configuration/configure_general.ui" line="88"/> 1382 <location filename="../../src/yuzu/configuration/configure_general.ui" line="88"/>
1371 <source>Pause emulation when in background</source> 1383 <source>Pause emulation when in background</source>
1372 <translation>Pauzeer Emulatie wanneer yuzu op de achtergrond openstaat</translation> 1384 <translation>Emulatie onderbreken op de achtergrond</translation>
1373 </message> 1385 </message>
1374 <message> 1386 <message>
1375 <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> 1387 <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/>
1376 <source>Hide mouse on inactivity</source> 1388 <source>Hide mouse on inactivity</source>
1377 <translation>Verstop muis wanneer inactief</translation> 1389 <translation>Verberg muis wanneer inactief</translation>
1378 </message> 1390 </message>
1379 <message> 1391 <message>
1380 <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> 1392 <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/>
1381 <source>Reset All Settings</source> 1393 <source>Reset All Settings</source>
1382 <translation>Reset alle instellingen</translation> 1394 <translation>Reset Alle Instellingen</translation>
1383 </message> 1395 </message>
1384 <message> 1396 <message>
1385 <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> 1397 <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/>
@@ -1402,17 +1414,17 @@ This would ban both their forum username and their IP address.</source>
1402 <message> 1414 <message>
1403 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="17"/> 1415 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="17"/>
1404 <source>Graphics</source> 1416 <source>Graphics</source>
1405 <translation>Grafisch</translation> 1417 <translation>Graphics</translation>
1406 </message> 1418 </message>
1407 <message> 1419 <message>
1408 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="25"/> 1420 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="25"/>
1409 <source>API Settings</source> 1421 <source>API Settings</source>
1410 <translation>API instellingen</translation> 1422 <translation>API-instellingen</translation>
1411 </message> 1423 </message>
1412 <message> 1424 <message>
1413 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="64"/> 1425 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="64"/>
1414 <source>Shader Backend:</source> 1426 <source>Shader Backend:</source>
1415 <translation type="unfinished"/> 1427 <translation>Shader Backend:</translation>
1416 </message> 1428 </message>
1417 <message> 1429 <message>
1418 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="92"/> 1430 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="92"/>
@@ -1438,37 +1450,37 @@ This would ban both their forum username and their IP address.</source>
1438 <message> 1450 <message>
1439 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="173"/> 1451 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="173"/>
1440 <source>Use disk pipeline cache</source> 1452 <source>Use disk pipeline cache</source>
1441 <translation type="unfinished"/> 1453 <translation>Gebruik schijfpijplijn-cache</translation>
1442 </message> 1454 </message>
1443 <message> 1455 <message>
1444 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="180"/> 1456 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="180"/>
1445 <source>Use asynchronous GPU emulation</source> 1457 <source>Use asynchronous GPU emulation</source>
1446 <translation>Gebruik asynchroon GPU emulatie</translation> 1458 <translation>Gebruik asynchrone GPU-emulatie</translation>
1447 </message> 1459 </message>
1448 <message> 1460 <message>
1449 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="187"/> 1461 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="187"/>
1450 <source>Accelerate ASTC texture decoding</source> 1462 <source>Accelerate ASTC texture decoding</source>
1451 <translation type="unfinished"/> 1463 <translation>Versnel ASTC-textuurdecodering</translation>
1452 </message> 1464 </message>
1453 <message> 1465 <message>
1454 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="209"/> 1466 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="209"/>
1455 <source>NVDEC emulation:</source> 1467 <source>NVDEC emulation:</source>
1456 <translation type="unfinished"/> 1468 <translation>NVDEC-emulatie:</translation>
1457 </message> 1469 </message>
1458 <message> 1470 <message>
1459 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="217"/> 1471 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="217"/>
1460 <source>No Video Output</source> 1472 <source>No Video Output</source>
1461 <translation type="unfinished"/> 1473 <translation>Geen Video-uitvoer</translation>
1462 </message> 1474 </message>
1463 <message> 1475 <message>
1464 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="222"/> 1476 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="222"/>
1465 <source>CPU Video Decoding</source> 1477 <source>CPU Video Decoding</source>
1466 <translation type="unfinished"/> 1478 <translation>CPU Videodecodering</translation>
1467 </message> 1479 </message>
1468 <message> 1480 <message>
1469 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="227"/> 1481 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="227"/>
1470 <source>GPU Video Decoding (Default)</source> 1482 <source>GPU Video Decoding (Default)</source>
1471 <translation type="unfinished"/> 1483 <translation>GPU Videodecodering (Standaard)</translation>
1472 </message> 1484 </message>
1473 <message> 1485 <message>
1474 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="253"/> 1486 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="253"/>
@@ -1478,7 +1490,7 @@ This would ban both their forum username and their IP address.</source>
1478 <message> 1490 <message>
1479 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="261"/> 1491 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="261"/>
1480 <source>Borderless Windowed</source> 1492 <source>Borderless Windowed</source>
1481 <translation>BoordLoos Venster</translation> 1493 <translation>Randloos Venster</translation>
1482 </message> 1494 </message>
1483 <message> 1495 <message>
1484 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="266"/> 1496 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="266"/>
@@ -1508,142 +1520,142 @@ This would ban both their forum username and their IP address.</source>
1508 <message> 1520 <message>
1509 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="315"/> 1521 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="315"/>
1510 <source>Force 16:10</source> 1522 <source>Force 16:10</source>
1511 <translation type="unfinished"/> 1523 <translation>Forceer 16:10</translation>
1512 </message> 1524 </message>
1513 <message> 1525 <message>
1514 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="320"/> 1526 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="320"/>
1515 <source>Stretch to Window</source> 1527 <source>Stretch to Window</source>
1516 <translation>Rek naar Venster</translation> 1528 <translation>Uitrekken naar Venster</translation>
1517 </message> 1529 </message>
1518 <message> 1530 <message>
1519 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="346"/> 1531 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="346"/>
1520 <source>Resolution:</source> 1532 <source>Resolution:</source>
1521 <translation type="unfinished"/> 1533 <translation>Resolutie:</translation>
1522 </message> 1534 </message>
1523 <message> 1535 <message>
1524 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="354"/> 1536 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="354"/>
1525 <source>0.5X (360p/540p) [EXPERIMENTAL]</source> 1537 <source>0.5X (360p/540p) [EXPERIMENTAL]</source>
1526 <translation type="unfinished"/> 1538 <translation>0.5X (360p/540p) [EXPERIMENTEEL]</translation>
1527 </message> 1539 </message>
1528 <message> 1540 <message>
1529 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="359"/> 1541 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="359"/>
1530 <source>0.75X (540p/810p) [EXPERIMENTAL]</source> 1542 <source>0.75X (540p/810p) [EXPERIMENTAL]</source>
1531 <translation type="unfinished"/> 1543 <translation>0.75X (540p/810p) [EXPERIMENTEEL]</translation>
1532 </message> 1544 </message>
1533 <message> 1545 <message>
1534 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="364"/> 1546 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="364"/>
1535 <source>1X (720p/1080p)</source> 1547 <source>1X (720p/1080p)</source>
1536 <translation type="unfinished"/> 1548 <translation>1X (720p/1080p)</translation>
1537 </message> 1549 </message>
1538 <message> 1550 <message>
1539 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="369"/> 1551 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="369"/>
1540 <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source> 1552 <source>1.5X (1080p/1620p) [EXPERIMENTAL]</source>
1541 <translation type="unfinished"/> 1553 <translation>1.5X (1080p/1620p) [EXPERIMENTEEL]</translation>
1542 </message> 1554 </message>
1543 <message> 1555 <message>
1544 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="374"/> 1556 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="374"/>
1545 <source>2X (1440p/2160p)</source> 1557 <source>2X (1440p/2160p)</source>
1546 <translation type="unfinished"/> 1558 <translation>2X (1440p/2160p)</translation>
1547 </message> 1559 </message>
1548 <message> 1560 <message>
1549 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="379"/> 1561 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="379"/>
1550 <source>3X (2160p/3240p)</source> 1562 <source>3X (2160p/3240p)</source>
1551 <translation type="unfinished"/> 1563 <translation>3X (2160p/3240p)</translation>
1552 </message> 1564 </message>
1553 <message> 1565 <message>
1554 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="384"/> 1566 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="384"/>
1555 <source>4X (2880p/4320p)</source> 1567 <source>4X (2880p/4320p)</source>
1556 <translation type="unfinished"/> 1568 <translation>4X (2880p/4320p)</translation>
1557 </message> 1569 </message>
1558 <message> 1570 <message>
1559 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="389"/> 1571 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="389"/>
1560 <source>5X (3600p/5400p)</source> 1572 <source>5X (3600p/5400p)</source>
1561 <translation type="unfinished"/> 1573 <translation>5X (3600p/5400p)</translation>
1562 </message> 1574 </message>
1563 <message> 1575 <message>
1564 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="394"/> 1576 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="394"/>
1565 <source>6X (4320p/6480p)</source> 1577 <source>6X (4320p/6480p)</source>
1566 <translation type="unfinished"/> 1578 <translation>6X (4320p/6480p)</translation>
1567 </message> 1579 </message>
1568 <message> 1580 <message>
1569 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="399"/> 1581 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="399"/>
1570 <source>7X (5040p/7560p)</source> 1582 <source>7X (5040p/7560p)</source>
1571 <translation type="unfinished"/> 1583 <translation>7X (5040p/7560p)</translation>
1572 </message> 1584 </message>
1573 <message> 1585 <message>
1574 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="404"/> 1586 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="404"/>
1575 <source>8X (5760p/8640p)</source> 1587 <source>8X (5760p/8640p)</source>
1576 <translation type="unfinished"/> 1588 <translation>8X (5760p/8640p)</translation>
1577 </message> 1589 </message>
1578 <message> 1590 <message>
1579 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="430"/> 1591 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="430"/>
1580 <source>Window Adapting Filter:</source> 1592 <source>Window Adapting Filter:</source>
1581 <translation type="unfinished"/> 1593 <translation>Window Adapting Filter:</translation>
1582 </message> 1594 </message>
1583 <message> 1595 <message>
1584 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="438"/> 1596 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="438"/>
1585 <source>Nearest Neighbor</source> 1597 <source>Nearest Neighbor</source>
1586 <translation type="unfinished"/> 1598 <translation>Nearest Neighbor</translation>
1587 </message> 1599 </message>
1588 <message> 1600 <message>
1589 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="443"/> 1601 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="443"/>
1590 <source>Bilinear</source> 1602 <source>Bilinear</source>
1591 <translation type="unfinished"/> 1603 <translation>Bilinear</translation>
1592 </message> 1604 </message>
1593 <message> 1605 <message>
1594 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="448"/> 1606 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="448"/>
1595 <source>Bicubic</source> 1607 <source>Bicubic</source>
1596 <translation type="unfinished"/> 1608 <translation>Bicubic</translation>
1597 </message> 1609 </message>
1598 <message> 1610 <message>
1599 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="453"/> 1611 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="453"/>
1600 <source>Gaussian</source> 1612 <source>Gaussian</source>
1601 <translation type="unfinished"/> 1613 <translation>Gaussian</translation>
1602 </message> 1614 </message>
1603 <message> 1615 <message>
1604 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="458"/> 1616 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="458"/>
1605 <source>ScaleForce</source> 1617 <source>ScaleForce</source>
1606 <translation type="unfinished"/> 1618 <translation>ScaleForce</translation>
1607 </message> 1619 </message>
1608 <message> 1620 <message>
1609 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="463"/> 1621 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="463"/>
1610 <source>AMD FidelityFX™️ Super Resolution</source> 1622 <source>AMD FidelityFX™️ Super Resolution</source>
1611 <translation type="unfinished"/> 1623 <translation>AMD FidelityFX™️ Super Resolution</translation>
1612 </message> 1624 </message>
1613 <message> 1625 <message>
1614 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="489"/> 1626 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="489"/>
1615 <source>Anti-Aliasing Method:</source> 1627 <source>Anti-Aliasing Method:</source>
1616 <translation type="unfinished"/> 1628 <translation>Antialiasing-methode:</translation>
1617 </message> 1629 </message>
1618 <message> 1630 <message>
1619 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="502"/> 1631 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="502"/>
1620 <source>FXAA</source> 1632 <source>FXAA</source>
1621 <translation type="unfinished"/> 1633 <translation>FXAA</translation>
1622 </message> 1634 </message>
1623 <message> 1635 <message>
1624 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="507"/> 1636 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="507"/>
1625 <source>SMAA</source> 1637 <source>SMAA</source>
1626 <translation type="unfinished"/> 1638 <translation>SMAA</translation>
1627 </message> 1639 </message>
1628 <message> 1640 <message>
1629 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="563"/> 1641 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="563"/>
1630 <source>Use global FSR Sharpness</source> 1642 <source>Use global FSR Sharpness</source>
1631 <translation type="unfinished"/> 1643 <translation>Gebruik globale FSR-scherpte</translation>
1632 </message> 1644 </message>
1633 <message> 1645 <message>
1634 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="568"/> 1646 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="568"/>
1635 <source>Set FSR Sharpness</source> 1647 <source>Set FSR Sharpness</source>
1636 <translation type="unfinished"/> 1648 <translation>Stel FSR-scherpte in</translation>
1637 </message> 1649 </message>
1638 <message> 1650 <message>
1639 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="582"/> 1651 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="582"/>
1640 <source>FSR Sharpness:</source> 1652 <source>FSR Sharpness:</source>
1641 <translation type="unfinished"/> 1653 <translation>FSR-scherpte:</translation>
1642 </message> 1654 </message>
1643 <message> 1655 <message>
1644 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="649"/> 1656 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="649"/>
1645 <source>100%</source> 1657 <source>100%</source>
1646 <translation type="unfinished"/> 1658 <translation>100%</translation>
1647 </message> 1659 </message>
1648 <message> 1660 <message>
1649 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="688"/> 1661 <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="688"/>
@@ -1664,12 +1676,12 @@ This would ban both their forum username and their IP address.</source>
1664 <message> 1676 <message>
1665 <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="33"/> 1677 <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="33"/>
1666 <source>GLASM (Assembly Shaders, NVIDIA Only)</source> 1678 <source>GLASM (Assembly Shaders, NVIDIA Only)</source>
1667 <translation type="unfinished"/> 1679 <translation>GLASM (Assembly Shaders, alleen NVIDIA)</translation>
1668 </message> 1680 </message>
1669 <message> 1681 <message>
1670 <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="34"/> 1682 <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="34"/>
1671 <source>SPIR-V (Experimental, Mesa Only)</source> 1683 <source>SPIR-V (Experimental, Mesa Only)</source>
1672 <translation type="unfinished"/> 1684 <translation>SPIR-V (Experimenteel, alleen Mesa)</translation>
1673 </message> 1685 </message>
1674 <message> 1686 <message>
1675 <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="178"/> 1687 <location filename="../../src/yuzu/configuration/configure_graphics.cpp" line="178"/>
@@ -1683,12 +1695,12 @@ This would ban both their forum username and their IP address.</source>
1683 <message> 1695 <message>
1684 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="14"/> 1696 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="14"/>
1685 <source>Form</source> 1697 <source>Form</source>
1686 <translation>Formulier</translation> 1698 <translation>Vorm</translation>
1687 </message> 1699 </message>
1688 <message> 1700 <message>
1689 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="17"/> 1701 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="17"/>
1690 <source>Advanced</source> 1702 <source>Advanced</source>
1691 <translation>Gedadvanceerd</translation> 1703 <translation>Geavanceerd</translation>
1692 </message> 1704 </message>
1693 <message> 1705 <message>
1694 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="25"/> 1706 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="25"/>
@@ -1703,12 +1715,12 @@ This would ban both their forum username and their IP address.</source>
1703 <message> 1715 <message>
1704 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="75"/> 1716 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="75"/>
1705 <source>Runs work in the background while waiting for graphics commands to keep the GPU from lowering its clock speed.</source> 1717 <source>Runs work in the background while waiting for graphics commands to keep the GPU from lowering its clock speed.</source>
1706 <translation type="unfinished"/> 1718 <translation>Werkt op de achtergrond terwijl er wordt gewacht op grafische opdrachten om te voorkomen dat de GPU zijn kloksnelheid verlaagt.</translation>
1707 </message> 1719 </message>
1708 <message> 1720 <message>
1709 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="78"/> 1721 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="78"/>
1710 <source>Force maximum clocks (Vulkan only)</source> 1722 <source>Force maximum clocks (Vulkan only)</source>
1711 <translation type="unfinished"/> 1723 <translation>Forceer maximale klokken (alleen Vulkan)</translation>
1712 </message> 1724 </message>
1713 <message> 1725 <message>
1714 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="85"/> 1726 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="85"/>
@@ -1718,17 +1730,17 @@ This would ban both their forum username and their IP address.</source>
1718 <message> 1730 <message>
1719 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="88"/> 1731 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="88"/>
1720 <source>Use VSync</source> 1732 <source>Use VSync</source>
1721 <translation type="unfinished"/> 1733 <translation>Gebruik VSync</translation>
1722 </message> 1734 </message>
1723 <message> 1735 <message>
1724 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/> 1736 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/>
1725 <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source> 1737 <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source>
1726 <translation type="unfinished"/> 1738 <translation>Maakt asynchrone ASTC-textuurdecodering mogelijk, waardoor de laadtijd minder stottert. Deze functie is experimenteel.</translation>
1727 </message> 1739 </message>
1728 <message> 1740 <message>
1729 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/> 1741 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/>
1730 <source>Decode ASTC textures asynchronously (Hack)</source> 1742 <source>Decode ASTC textures asynchronously (Hack)</source>
1731 <translation type="unfinished"/> 1743 <translation>Decodeer ASTC-texturen asynchroon (Hack)</translation>
1732 </message> 1744 </message>
1733 <message> 1745 <message>
1734 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/> 1746 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/>
@@ -1738,37 +1750,37 @@ This would ban both their forum username and their IP address.</source>
1738 <message> 1750 <message>
1739 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="108"/> 1751 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="108"/>
1740 <source>Use asynchronous shader building (Hack)</source> 1752 <source>Use asynchronous shader building (Hack)</source>
1741 <translation type="unfinished"/> 1753 <translation>Gebruik asynchrone shaderbouw (Hack)</translation>
1742 </message> 1754 </message>
1743 <message> 1755 <message>
1744 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="115"/> 1756 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="115"/>
1745 <source>Enables Fast GPU Time. This option will force most games to run at their highest native resolution.</source> 1757 <source>Enables Fast GPU Time. This option will force most games to run at their highest native resolution.</source>
1746 <translation type="unfinished"/> 1758 <translation>Schakelt Snelle GPU-tijd in. Deze optie forceert de meeste games om op hun hoogste native resolutie te draaien.</translation>
1747 </message> 1759 </message>
1748 <message> 1760 <message>
1749 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="118"/> 1761 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="118"/>
1750 <source>Use Fast GPU Time (Hack)</source> 1762 <source>Use Fast GPU Time (Hack)</source>
1751 <translation type="unfinished"/> 1763 <translation>Gebruik Snelle GPU-tijd (Hack)</translation>
1752 </message> 1764 </message>
1753 <message> 1765 <message>
1754 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="125"/> 1766 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="125"/>
1755 <source>Enables pessimistic buffer flushes. This option will force unmodified buffers to be flushed, which can cost performance.</source> 1767 <source>Enables pessimistic buffer flushes. This option will force unmodified buffers to be flushed, which can cost performance.</source>
1756 <translation type="unfinished"/> 1768 <translation>Schakelt pessimistische bufferschoonmaakacties in. Deze optie forceert het schoonmaken van ongewijzigde buffers, wat prestaties kan kosten.</translation>
1757 </message> 1769 </message>
1758 <message> 1770 <message>
1759 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="128"/> 1771 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="128"/>
1760 <source>Use pessimistic buffer flushes (Hack)</source> 1772 <source>Use pessimistic buffer flushes (Hack)</source>
1761 <translation type="unfinished"/> 1773 <translation>Gebruik pessimistische bufferleegmaakacties (Hack)</translation>
1762 </message> 1774 </message>
1763 <message> 1775 <message>
1764 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="135"/> 1776 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="135"/>
1765 <source>Enables GPU vendor-specific pipeline cache. This option can improve shader loading time significantly in cases where the Vulkan driver does not store pipeline cache files internally.</source> 1777 <source>Enables GPU vendor-specific pipeline cache. This option can improve shader loading time significantly in cases where the Vulkan driver does not store pipeline cache files internally.</source>
1766 <translation type="unfinished"/> 1778 <translation>Schakelt GPU-leverancier-specifieke pijplijn-cache in. Deze optie kan de laadtijd van shaders aanzienlijk verbeteren in gevallen waarin het Vulkan-stuurprogramma de pijplijncachebestanden niet intern opslaat.</translation>
1767 </message> 1779 </message>
1768 <message> 1780 <message>
1769 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="138"/> 1781 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="138"/>
1770 <source>Use Vulkan pipeline cache</source> 1782 <source>Use Vulkan pipeline cache</source>
1771 <translation type="unfinished"/> 1783 <translation>Gebruik Vulkan-pijplijn-cache</translation>
1772 </message> 1784 </message>
1773 <message> 1785 <message>
1774 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="160"/> 1786 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="160"/>
@@ -1778,7 +1790,7 @@ This would ban both their forum username and their IP address.</source>
1778 <message> 1790 <message>
1779 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="168"/> 1791 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="168"/>
1780 <source>Automatic</source> 1792 <source>Automatic</source>
1781 <translation type="unfinished"/> 1793 <translation>Automatisch</translation>
1782 </message> 1794 </message>
1783 <message> 1795 <message>
1784 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="173"/> 1796 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="173"/>
@@ -1811,7 +1823,7 @@ This would ban both their forum username and their IP address.</source>
1811 <message> 1823 <message>
1812 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="14"/> 1824 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="14"/>
1813 <source>Hotkey Settings</source> 1825 <source>Hotkey Settings</source>
1814 <translation>Sneltoets Instellingen</translation> 1826 <translation>Sneltoets-instellingen</translation>
1815 </message> 1827 </message>
1816 <message> 1828 <message>
1817 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="17"/> 1829 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="17"/>
@@ -1821,7 +1833,7 @@ This would ban both their forum username and their IP address.</source>
1821 <message> 1833 <message>
1822 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="25"/> 1834 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="25"/>
1823 <source>Double-click on a binding to change it.</source> 1835 <source>Double-click on a binding to change it.</source>
1824 <translation>Dubbel-klik op een binding om het te veranderen.</translation> 1836 <translation>Dubbelklik op een instelling om deze te wijzigen.</translation>
1825 </message> 1837 </message>
1826 <message> 1838 <message>
1827 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="45"/> 1839 <location filename="../../src/yuzu/configuration/configure_hotkeys.ui" line="45"/>
@@ -1846,14 +1858,14 @@ This would ban both their forum username and their IP address.</source>
1846 <message> 1858 <message>
1847 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="98"/> 1859 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="98"/>
1848 <source>Controller Hotkey</source> 1860 <source>Controller Hotkey</source>
1849 <translation type="unfinished"/> 1861 <translation>Controller-sneltoets</translation>
1850 </message> 1862 </message>
1851 <message> 1863 <message>
1852 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="138"/> 1864 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="138"/>
1853 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="164"/> 1865 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="164"/>
1854 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="379"/> 1866 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="379"/>
1855 <source>Conflicting Key Sequence</source> 1867 <source>Conflicting Key Sequence</source>
1856 <translation>Ongeldige Toets Volgorde</translation> 1868 <translation>Ongeldige Toetsvolgorde</translation>
1857 </message> 1869 </message>
1858 <message> 1870 <message>
1859 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="139"/> 1871 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="139"/>
@@ -1864,7 +1876,7 @@ This would ban both their forum username and their IP address.</source>
1864 <message> 1876 <message>
1865 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="158"/> 1877 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="158"/>
1866 <source>Home+%1</source> 1878 <source>Home+%1</source>
1867 <translation type="unfinished"/> 1879 <translation>Home+%1</translation>
1868 </message> 1880 </message>
1869 <message> 1881 <message>
1870 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="172"/> 1882 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="172"/>
@@ -1874,7 +1886,7 @@ This would ban both their forum username and their IP address.</source>
1874 <message> 1886 <message>
1875 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="242"/> 1887 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="242"/>
1876 <source>Invalid</source> 1888 <source>Invalid</source>
1877 <translation type="unfinished"/> 1889 <translation>Ongeldig</translation>
1878 </message> 1890 </message>
1879 <message> 1891 <message>
1880 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="343"/> 1892 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="343"/>
@@ -1884,17 +1896,17 @@ This would ban both their forum username and their IP address.</source>
1884 <message> 1896 <message>
1885 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="344"/> 1897 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="344"/>
1886 <source>Clear</source> 1898 <source>Clear</source>
1887 <translation>Verwijder</translation> 1899 <translation>Wis</translation>
1888 </message> 1900 </message>
1889 <message> 1901 <message>
1890 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="365"/> 1902 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="365"/>
1891 <source>Conflicting Button Sequence</source> 1903 <source>Conflicting Button Sequence</source>
1892 <translation type="unfinished"/> 1904 <translation>Conflicterende Knoppencombinatie</translation>
1893 </message> 1905 </message>
1894 <message> 1906 <message>
1895 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="366"/> 1907 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="366"/>
1896 <source>The default button sequence is already assigned to: %1</source> 1908 <source>The default button sequence is already assigned to: %1</source>
1897 <translation type="unfinished"/> 1909 <translation>De standaard knoppencombinatie is al toegewezen aan: %1</translation>
1898 </message> 1910 </message>
1899 <message> 1911 <message>
1900 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="380"/> 1912 <location filename="../../src/yuzu/configuration/configure_hotkeys.cpp" line="380"/>
@@ -1966,17 +1978,17 @@ This would ban both their forum username and their IP address.</source>
1966 <message> 1978 <message>
1967 <location filename="../../src/yuzu/configuration/configure_input.ui" line="138"/> 1979 <location filename="../../src/yuzu/configuration/configure_input.ui" line="138"/>
1968 <source>Console Mode</source> 1980 <source>Console Mode</source>
1969 <translation>Console ID:</translation> 1981 <translation>Console-modus:</translation>
1970 </message> 1982 </message>
1971 <message> 1983 <message>
1972 <location filename="../../src/yuzu/configuration/configure_input.ui" line="159"/> 1984 <location filename="../../src/yuzu/configuration/configure_input.ui" line="159"/>
1973 <source>Docked</source> 1985 <source>Docked</source>
1974 <translation>GeDocked</translation> 1986 <translation>Docked</translation>
1975 </message> 1987 </message>
1976 <message> 1988 <message>
1977 <location filename="../../src/yuzu/configuration/configure_input.ui" line="169"/> 1989 <location filename="../../src/yuzu/configuration/configure_input.ui" line="169"/>
1978 <source>Handheld</source> 1990 <source>Handheld</source>
1979 <translation>Mobiel</translation> 1991 <translation>Handheld</translation>
1980 </message> 1992 </message>
1981 <message> 1993 <message>
1982 <location filename="../../src/yuzu/configuration/configure_input.ui" line="179"/> 1994 <location filename="../../src/yuzu/configuration/configure_input.ui" line="179"/>
@@ -2052,7 +2064,7 @@ This would ban both their forum username and their IP address.</source>
2052 <message> 2064 <message>
2053 <location filename="../../src/yuzu/configuration/configure_input.ui" line="537"/> 2065 <location filename="../../src/yuzu/configuration/configure_input.ui" line="537"/>
2054 <source>Clear</source> 2066 <source>Clear</source>
2055 <translation>Verwijder</translation> 2067 <translation>Wis</translation>
2056 </message> 2068 </message>
2057</context> 2069</context>
2058<context> 2070<context>
@@ -2065,7 +2077,7 @@ This would ban both their forum username and their IP address.</source>
2065 <message> 2077 <message>
2066 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="74"/> 2078 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="74"/>
2067 <source>Joycon Colors</source> 2079 <source>Joycon Colors</source>
2068 <translation>Joycon Kleuren</translation> 2080 <translation>Joycon-kleuren</translation>
2069 </message> 2081 </message>
2070 <message> 2082 <message>
2071 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="125"/> 2083 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="125"/>
@@ -2082,7 +2094,7 @@ This would ban both their forum username and their IP address.</source>
2082 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="1955"/> 2094 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="1955"/>
2083 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2241"/> 2095 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2241"/>
2084 <source>L Body</source> 2096 <source>L Body</source>
2085 <translation>L lichaam</translation> 2097 <translation>L-lichaam</translation>
2086 </message> 2098 </message>
2087 <message> 2099 <message>
2088 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="219"/> 2100 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="219"/>
@@ -2094,7 +2106,7 @@ This would ban both their forum username and their IP address.</source>
2094 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2010"/> 2106 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2010"/>
2095 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2296"/> 2107 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2296"/>
2096 <source>L Button</source> 2108 <source>L Button</source>
2097 <translation>L Knop</translation> 2109 <translation>L-knop</translation>
2098 </message> 2110 </message>
2099 <message> 2111 <message>
2100 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="295"/> 2112 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="295"/>
@@ -2106,7 +2118,7 @@ This would ban both their forum username and their IP address.</source>
2106 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2086"/> 2118 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2086"/>
2107 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2372"/> 2119 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2372"/>
2108 <source>R Body</source> 2120 <source>R Body</source>
2109 <translation>R lichaam</translation> 2121 <translation>R-lichaam</translation>
2110 </message> 2122 </message>
2111 <message> 2123 <message>
2112 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="350"/> 2124 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="350"/>
@@ -2118,7 +2130,7 @@ This would ban both their forum username and their IP address.</source>
2118 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2141"/> 2130 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2141"/>
2119 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2427"/> 2131 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2427"/>
2120 <source>R Button</source> 2132 <source>R Button</source>
2121 <translation>R Knop</translation> 2133 <translation>R-knop</translation>
2122 </message> 2134 </message>
2123 <message> 2135 <message>
2124 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="411"/> 2136 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="411"/>
@@ -2158,7 +2170,7 @@ This would ban both their forum username and their IP address.</source>
2158 <message> 2170 <message>
2159 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2533"/> 2171 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2533"/>
2160 <source>Emulated Devices</source> 2172 <source>Emulated Devices</source>
2161 <translation type="unfinished"/> 2173 <translation>Geëmuleerde Apparaten</translation>
2162 </message> 2174 </message>
2163 <message> 2175 <message>
2164 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2545"/> 2176 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2545"/>
@@ -2178,12 +2190,12 @@ This would ban both their forum username and their IP address.</source>
2178 <message> 2190 <message>
2179 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2588"/> 2191 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2588"/>
2180 <source>Advanced</source> 2192 <source>Advanced</source>
2181 <translation>Gedadvanceerd</translation> 2193 <translation>Geavanceerd</translation>
2182 </message> 2194 </message>
2183 <message> 2195 <message>
2184 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2595"/> 2196 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2595"/>
2185 <source>Debug Controller</source> 2197 <source>Debug Controller</source>
2186 <translation>Debug Controller</translation> 2198 <translation>Debug-controller</translation>
2187 </message> 2199 </message>
2188 <message> 2200 <message>
2189 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2602"/> 2201 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2602"/>
@@ -2196,12 +2208,12 @@ This would ban both their forum username and their IP address.</source>
2196 <message> 2208 <message>
2197 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2609"/> 2209 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2609"/>
2198 <source>Ring Controller</source> 2210 <source>Ring Controller</source>
2199 <translation type="unfinished"/> 2211 <translation>Ring Controller</translation>
2200 </message> 2212 </message>
2201 <message> 2213 <message>
2202 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2623"/> 2214 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2623"/>
2203 <source>Infrared Camera</source> 2215 <source>Infrared Camera</source>
2204 <translation type="unfinished"/> 2216 <translation>Infraroodcamera</translation>
2205 </message> 2217 </message>
2206 <message> 2218 <message>
2207 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2640"/> 2219 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2640"/>
@@ -2211,49 +2223,49 @@ This would ban both their forum username and their IP address.</source>
2211 <message> 2223 <message>
2212 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2652"/> 2224 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2652"/>
2213 <source>Emulate Analog with Keyboard Input</source> 2225 <source>Emulate Analog with Keyboard Input</source>
2214 <translation>Emuleer Anolooge invoer met toetsenbord</translation> 2226 <translation>Emuleer Analoog met Toetsenbordinvoer</translation>
2215 </message> 2227 </message>
2216 <message> 2228 <message>
2217 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2659"/> 2229 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2659"/>
2218 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2701"/> 2230 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2701"/>
2219 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2717"/> 2231 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2717"/>
2220 <source>Requires restarting yuzu</source> 2232 <source>Requires restarting yuzu</source>
2221 <translation type="unfinished"/> 2233 <translation>Vereist het herstarten van yuzu</translation>
2222 </message> 2234 </message>
2223 <message> 2235 <message>
2224 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2668"/> 2236 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2668"/>
2225 <source>Enable XInput 8 player support (disables web applet)</source> 2237 <source>Enable XInput 8 player support (disables web applet)</source>
2226 <translation type="unfinished"/> 2238 <translation>Schakel ondersteuning voor XInput 8-speler in (schakelt webapplet uit)</translation>
2227 </message> 2239 </message>
2228 <message> 2240 <message>
2229 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2681"/> 2241 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2681"/>
2230 <source>Enable UDP controllers (not needed for motion)</source> 2242 <source>Enable UDP controllers (not needed for motion)</source>
2231 <translation type="unfinished"/> 2243 <translation>Schakel UDP-controllers in (niet nodig voor beweging)</translation>
2232 </message> 2244 </message>
2233 <message> 2245 <message>
2234 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2694"/> 2246 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2694"/>
2235 <source>Controller navigation</source> 2247 <source>Controller navigation</source>
2236 <translation type="unfinished"/> 2248 <translation>Controller-navigering</translation>
2237 </message> 2249 </message>
2238 <message> 2250 <message>
2239 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2710"/> 2251 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2710"/>
2240 <source>Enable direct JoyCon driver</source> 2252 <source>Enable direct JoyCon driver</source>
2241 <translation type="unfinished"/> 2253 <translation>Schakel JoyCon-stuurprogramma in</translation>
2242 </message> 2254 </message>
2243 <message> 2255 <message>
2244 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2726"/> 2256 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2726"/>
2245 <source>Enable direct Pro Controller driver [EXPERIMENTAL]</source> 2257 <source>Enable direct Pro Controller driver [EXPERIMENTAL]</source>
2246 <translation type="unfinished"/> 2258 <translation>Schakel Pro Controller-stuurprogramma in [EXPERIMENTEEL]</translation>
2247 </message> 2259 </message>
2248 <message> 2260 <message>
2249 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2739"/> 2261 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2739"/>
2250 <source>Enable mouse panning</source> 2262 <source>Enable mouse panning</source>
2251 <translation>Schakel muis panning in</translation> 2263 <translation>Schakel muispanning in</translation>
2252 </message> 2264 </message>
2253 <message> 2265 <message>
2254 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2746"/> 2266 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2746"/>
2255 <source>Mouse sensitivity</source> 2267 <source>Mouse sensitivity</source>
2256 <translation>Muis Gevoeligheid</translation> 2268 <translation>Muisgevoeligheid</translation>
2257 </message> 2269 </message>
2258 <message> 2270 <message>
2259 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2752"/> 2271 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2752"/>
@@ -2271,67 +2283,67 @@ This would ban both their forum username and their IP address.</source>
2271 <message> 2283 <message>
2272 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="14"/> 2284 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="14"/>
2273 <source>Form</source> 2285 <source>Form</source>
2274 <translation>Formulier</translation> 2286 <translation>Vorm</translation>
2275 </message> 2287 </message>
2276 <message> 2288 <message>
2277 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="17"/> 2289 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="17"/>
2278 <source>Graphics</source> 2290 <source>Graphics</source>
2279 <translation>Grafisch</translation> 2291 <translation>Graphics</translation>
2280 </message> 2292 </message>
2281 <message> 2293 <message>
2282 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="28"/> 2294 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="28"/>
2283 <source>Input Profiles</source> 2295 <source>Input Profiles</source>
2284 <translation type="unfinished"/> 2296 <translation>Invoerprofielen</translation>
2285 </message> 2297 </message>
2286 <message> 2298 <message>
2287 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="49"/> 2299 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="49"/>
2288 <source>Player 1 Profile</source> 2300 <source>Player 1 Profile</source>
2289 <translation type="unfinished"/> 2301 <translation>Profiel Speler 1 </translation>
2290 </message> 2302 </message>
2291 <message> 2303 <message>
2292 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="84"/> 2304 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="84"/>
2293 <source>Player 2 Profile</source> 2305 <source>Player 2 Profile</source>
2294 <translation type="unfinished"/> 2306 <translation>Profiel Speler 2</translation>
2295 </message> 2307 </message>
2296 <message> 2308 <message>
2297 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="119"/> 2309 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="119"/>
2298 <source>Player 3 Profile</source> 2310 <source>Player 3 Profile</source>
2299 <translation type="unfinished"/> 2311 <translation>Profiel Speler 3</translation>
2300 </message> 2312 </message>
2301 <message> 2313 <message>
2302 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="154"/> 2314 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="154"/>
2303 <source>Player 4 Profile</source> 2315 <source>Player 4 Profile</source>
2304 <translation type="unfinished"/> 2316 <translation>Profiel Speler 4</translation>
2305 </message> 2317 </message>
2306 <message> 2318 <message>
2307 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="189"/> 2319 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="189"/>
2308 <source>Player 5 Profile</source> 2320 <source>Player 5 Profile</source>
2309 <translation type="unfinished"/> 2321 <translation>Profiel Speler 5</translation>
2310 </message> 2322 </message>
2311 <message> 2323 <message>
2312 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="224"/> 2324 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="224"/>
2313 <source>Player 6 Profile</source> 2325 <source>Player 6 Profile</source>
2314 <translation type="unfinished"/> 2326 <translation>Profiel Speler 6</translation>
2315 </message> 2327 </message>
2316 <message> 2328 <message>
2317 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="259"/> 2329 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="259"/>
2318 <source>Player 7 Profile</source> 2330 <source>Player 7 Profile</source>
2319 <translation type="unfinished"/> 2331 <translation>Profiel Speler 7</translation>
2320 </message> 2332 </message>
2321 <message> 2333 <message>
2322 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="294"/> 2334 <location filename="../../src/yuzu/configuration/configure_input_per_game.ui" line="294"/>
2323 <source>Player 8 Profile</source> 2335 <source>Player 8 Profile</source>
2324 <translation type="unfinished"/> 2336 <translation>Profiel Speler 8</translation>
2325 </message> 2337 </message>
2326 <message> 2338 <message>
2327 <location filename="../../src/yuzu/configuration/configure_input_per_game.cpp" line="35"/> 2339 <location filename="../../src/yuzu/configuration/configure_input_per_game.cpp" line="35"/>
2328 <source>Use global input configuration</source> 2340 <source>Use global input configuration</source>
2329 <translation type="unfinished"/> 2341 <translation>Gebruik globale invoerconfiguratie</translation>
2330 </message> 2342 </message>
2331 <message> 2343 <message>
2332 <location filename="../../src/yuzu/configuration/configure_input_per_game.cpp" line="47"/> 2344 <location filename="../../src/yuzu/configuration/configure_input_per_game.cpp" line="47"/>
2333 <source>Player %1 profile</source> 2345 <source>Player %1 profile</source>
2334 <translation type="unfinished"/> 2346 <translation>Profiel Speler %1 </translation>
2335 </message> 2347 </message>
2336</context> 2348</context>
2337<context> 2349<context>
@@ -2344,12 +2356,12 @@ This would ban both their forum username and their IP address.</source>
2344 <message> 2356 <message>
2345 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="63"/> 2357 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="63"/>
2346 <source>Connect Controller</source> 2358 <source>Connect Controller</source>
2347 <translation>Verbindt Controller</translation> 2359 <translation>Verbind Controller</translation>
2348 </message> 2360 </message>
2349 <message> 2361 <message>
2350 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="100"/> 2362 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="100"/>
2351 <source>Input Device</source> 2363 <source>Input Device</source>
2352 <translation>Invoer Apparaat</translation> 2364 <translation>Invoerapparaat</translation>
2353 </message> 2365 </message>
2354 <message> 2366 <message>
2355 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="137"/> 2367 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="137"/>
@@ -2385,7 +2397,7 @@ This would ban both their forum username and their IP address.</source>
2385 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2564"/> 2397 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2564"/>
2386 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2603"/> 2398 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2603"/>
2387 <source>Up</source> 2399 <source>Up</source>
2388 <translation>Boven:</translation> 2400 <translation>Omhoog</translation>
2389 </message> 2401 </message>
2390 <message> 2402 <message>
2391 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="403"/> 2403 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="403"/>
@@ -2396,7 +2408,7 @@ This would ban both their forum username and their IP address.</source>
2396 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2634"/> 2408 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2634"/>
2397 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2673"/> 2409 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2673"/>
2398 <source>Left</source> 2410 <source>Left</source>
2399 <translation>Links:</translation> 2411 <translation>Links</translation>
2400 </message> 2412 </message>
2401 <message> 2413 <message>
2402 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="452"/> 2414 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="452"/>
@@ -2407,7 +2419,7 @@ This would ban both their forum username and their IP address.</source>
2407 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2683"/> 2419 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2683"/>
2408 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2722"/> 2420 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2722"/>
2409 <source>Right</source> 2421 <source>Right</source>
2410 <translation>Rechts:</translation> 2422 <translation>Rechts</translation>
2411 </message> 2423 </message>
2412 <message> 2424 <message>
2413 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="534"/> 2425 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="534"/>
@@ -2417,7 +2429,7 @@ This would ban both their forum username and their IP address.</source>
2417 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2765"/> 2429 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2765"/>
2418 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2804"/> 2430 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2804"/>
2419 <source>Down</source> 2431 <source>Down</source>
2420 <translation>Beneden:</translation> 2432 <translation>Omlaag</translation>
2421 </message> 2433 </message>
2422 <message> 2434 <message>
2423 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="604"/> 2435 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="604"/>
@@ -2425,7 +2437,7 @@ This would ban both their forum username and their IP address.</source>
2425 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2835"/> 2437 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2835"/>
2426 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2874"/> 2438 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2874"/>
2427 <source>Pressed</source> 2439 <source>Pressed</source>
2428 <translation>Ingedrukt:</translation> 2440 <translation>Ingedrukt</translation>
2429 </message> 2441 </message>
2430 <message> 2442 <message>
2431 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="653"/> 2443 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="653"/>
@@ -2433,13 +2445,13 @@ This would ban both their forum username and their IP address.</source>
2433 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2884"/> 2445 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2884"/>
2434 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2923"/> 2446 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2923"/>
2435 <source>Modifier</source> 2447 <source>Modifier</source>
2436 <translation>Modificatie:</translation> 2448 <translation>Modificator</translation>
2437 </message> 2449 </message>
2438 <message> 2450 <message>
2439 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="702"/> 2451 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="702"/>
2440 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2933"/> 2452 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2933"/>
2441 <source>Range</source> 2453 <source>Range</source>
2442 <translation>Berijk</translation> 2454 <translation>Bereik</translation>
2443 </message> 2455 </message>
2444 <message> 2456 <message>
2445 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="735"/> 2457 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="735"/>
@@ -2457,7 +2469,7 @@ This would ban both their forum username and their IP address.</source>
2457 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="802"/> 2469 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="802"/>
2458 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="3030"/> 2470 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="3030"/>
2459 <source>Modifier Range: 0%</source> 2471 <source>Modifier Range: 0%</source>
2460 <translation>Bewerk Range: 0%</translation> 2472 <translation>Modificatorbereik: 0%</translation>
2461 </message> 2473 </message>
2462 <message> 2474 <message>
2463 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="848"/> 2475 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="848"/>
@@ -2495,13 +2507,13 @@ This would ban both their forum username and their IP address.</source>
2495 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1565"/> 2507 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1565"/>
2496 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1310"/> 2508 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1310"/>
2497 <source>Plus</source> 2509 <source>Plus</source>
2498 <translation>Plus:</translation> 2510 <translation>Plus</translation>
2499 </message> 2511 </message>
2500 <message> 2512 <message>
2501 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1575"/> 2513 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1575"/>
2502 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1614"/> 2514 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1614"/>
2503 <source>Home</source> 2515 <source>Home</source>
2504 <translation>Home:</translation> 2516 <translation>Home</translation>
2505 </message> 2517 </message>
2506 <message> 2518 <message>
2507 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1679"/> 2519 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1679"/>
@@ -2509,7 +2521,7 @@ This would ban both their forum username and their IP address.</source>
2509 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1313"/> 2521 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1313"/>
2510 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1320"/> 2522 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1320"/>
2511 <source>R</source> 2523 <source>R</source>
2512 <translation>R:</translation> 2524 <translation>R</translation>
2513 </message> 2525 </message>
2514 <message> 2526 <message>
2515 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1734"/> 2527 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="1734"/>
@@ -2543,7 +2555,7 @@ This would ban both their forum username and their IP address.</source>
2543 <message> 2555 <message>
2544 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2151"/> 2556 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2151"/>
2545 <source>Face Buttons</source> 2557 <source>Face Buttons</source>
2546 <translation>Gezicht Knoppen</translation> 2558 <translation>Gezichtsknoppen</translation>
2547 </message> 2559 </message>
2548 <message> 2560 <message>
2549 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2209"/> 2561 <location filename="../../src/yuzu/configuration/configure_input_player.ui" line="2209"/>
@@ -2581,7 +2593,7 @@ This would ban both their forum username and their IP address.</source>
2581 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="556"/> 2593 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="556"/>
2582 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="651"/> 2594 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="651"/>
2583 <source>Clear</source> 2595 <source>Clear</source>
2584 <translation>Verwijder</translation> 2596 <translation>Wis</translation>
2585 </message> 2597 </message>
2586 <message> 2598 <message>
2587 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="384"/> 2599 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="384"/>
@@ -2596,64 +2608,64 @@ This would ban both their forum username and their IP address.</source>
2596 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="387"/> 2608 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="387"/>
2597 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="665"/> 2609 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="665"/>
2598 <source>Invert button</source> 2610 <source>Invert button</source>
2599 <translation type="unfinished"/> 2611 <translation>Knop omkeren</translation>
2600 </message> 2612 </message>
2601 <message> 2613 <message>
2602 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="393"/> 2614 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="393"/>
2603 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="656"/> 2615 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="656"/>
2604 <source>Toggle button</source> 2616 <source>Toggle button</source>
2605 <translation>Shakel Knop</translation> 2617 <translation>Schakel-knop</translation>
2606 </message> 2618 </message>
2607 <message> 2619 <message>
2608 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="399"/> 2620 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="399"/>
2609 <source>Turbo button</source> 2621 <source>Turbo button</source>
2610 <translation type="unfinished"/> 2622 <translation>Turbo-knop</translation>
2611 </message> 2623 </message>
2612 <message> 2624 <message>
2613 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="407"/> 2625 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="407"/>
2614 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="607"/> 2626 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="607"/>
2615 <source>Invert axis</source> 2627 <source>Invert axis</source>
2616 <translation>Spiegel As</translation> 2628 <translation>Spiegel as</translation>
2617 </message> 2629 </message>
2618 <message> 2630 <message>
2619 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="413"/> 2631 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="413"/>
2620 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="417"/> 2632 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="417"/>
2621 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="470"/> 2633 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="470"/>
2622 <source>Set threshold</source> 2634 <source>Set threshold</source>
2623 <translation type="unfinished"/> 2635 <translation>Stel drempel in</translation>
2624 </message> 2636 </message>
2625 <message> 2637 <message>
2626 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="417"/> 2638 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="417"/>
2627 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="470"/> 2639 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="470"/>
2628 <source>Choose a value between 0% and 100%</source> 2640 <source>Choose a value between 0% and 100%</source>
2629 <translation type="unfinished"/> 2641 <translation>Kies een waarde tussen 0% en 100%</translation>
2630 </message> 2642 </message>
2631 <message> 2643 <message>
2632 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="429"/> 2644 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="429"/>
2633 <source>Toggle axis</source> 2645 <source>Toggle axis</source>
2634 <translation type="unfinished"/> 2646 <translation>Schakel as</translation>
2635 </message> 2647 </message>
2636 <message> 2648 <message>
2637 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="466"/> 2649 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="466"/>
2638 <source>Set gyro threshold</source> 2650 <source>Set gyro threshold</source>
2639 <translation type="unfinished"/> 2651 <translation>Stel gyro-drempel in</translation>
2640 </message> 2652 </message>
2641 <message> 2653 <message>
2642 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="512"/> 2654 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="512"/>
2643 <source>Map Analog Stick</source> 2655 <source>Map Analog Stick</source>
2644 <translation>Zet Analoge Stick</translation> 2656 <translation> Analoge Stick Toewijzen</translation>
2645 </message> 2657 </message>
2646 <message> 2658 <message>
2647 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="513"/> 2659 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="513"/>
2648 <source>After pressing OK, first move your joystick horizontally, and then vertically. 2660 <source>After pressing OK, first move your joystick horizontally, and then vertically.
2649To invert the axes, first move your joystick vertically, and then horizontally.</source> 2661To invert the axes, first move your joystick vertically, and then horizontally.</source>
2650 <translation>Na OK in te drukken, beweeg je joystick eerst horizontaal en dan verticaal. 2662 <translation>Nadat je op OK hebt gedrukt, beweeg je de joystick eerst horizontaal en vervolgens verticaal.
2651Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.</translation> 2663Om de assen om te keren, beweeg je de joystick eerst verticaal en vervolgens horizontaal.</translation>
2652 </message> 2664 </message>
2653 <message> 2665 <message>
2654 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="581"/> 2666 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="581"/>
2655 <source>Center axis</source> 2667 <source>Center axis</source>
2656 <translation type="unfinished"/> 2668 <translation>Midden as</translation>
2657 </message> 2669 </message>
2658 <message> 2670 <message>
2659 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="689"/> 2671 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="689"/>
@@ -2665,7 +2677,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2665 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="698"/> 2677 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="698"/>
2666 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1044"/> 2678 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1044"/>
2667 <source>Modifier Range: %1%</source> 2679 <source>Modifier Range: %1%</source>
2668 <translation>Bewerk Range: %1%</translation> 2680 <translation>Modificatorbereik: %1%</translation>
2669 </message> 2681 </message>
2670 <message> 2682 <message>
2671 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="724"/> 2683 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="724"/>
@@ -2691,42 +2703,42 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2691 <message> 2703 <message>
2692 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1085"/> 2704 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1085"/>
2693 <source>Handheld</source> 2705 <source>Handheld</source>
2694 <translation>Mobiel</translation> 2706 <translation>Handheld</translation>
2695 </message> 2707 </message>
2696 <message> 2708 <message>
2697 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1089"/> 2709 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1089"/>
2698 <source>GameCube Controller</source> 2710 <source>GameCube Controller</source>
2699 <translation>GameCube Controller</translation> 2711 <translation>GameCube-controller</translation>
2700 </message> 2712 </message>
2701 <message> 2713 <message>
2702 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1098"/> 2714 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1098"/>
2703 <source>Poke Ball Plus</source> 2715 <source>Poke Ball Plus</source>
2704 <translation type="unfinished"/> 2716 <translation>Poke Ball Plus</translation>
2705 </message> 2717 </message>
2706 <message> 2718 <message>
2707 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1102"/> 2719 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1102"/>
2708 <source>NES Controller</source> 2720 <source>NES Controller</source>
2709 <translation type="unfinished"/> 2721 <translation>NES-controller</translation>
2710 </message> 2722 </message>
2711 <message> 2723 <message>
2712 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1106"/> 2724 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1106"/>
2713 <source>SNES Controller</source> 2725 <source>SNES Controller</source>
2714 <translation type="unfinished"/> 2726 <translation>SNES-controller</translation>
2715 </message> 2727 </message>
2716 <message> 2728 <message>
2717 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1110"/> 2729 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1110"/>
2718 <source>N64 Controller</source> 2730 <source>N64 Controller</source>
2719 <translation type="unfinished"/> 2731 <translation>N64-controller</translation>
2720 </message> 2732 </message>
2721 <message> 2733 <message>
2722 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1114"/> 2734 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1114"/>
2723 <source>Sega Genesis</source> 2735 <source>Sega Genesis</source>
2724 <translation type="unfinished"/> 2736 <translation>Sega Genesis</translation>
2725 </message> 2737 </message>
2726 <message> 2738 <message>
2727 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1318"/> 2739 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1318"/>
2728 <source>Start / Pause</source> 2740 <source>Start / Pause</source>
2729 <translation>Start / Pauze</translation> 2741 <translation>Begin / Onderbreken</translation>
2730 </message> 2742 </message>
2731 <message> 2743 <message>
2732 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1321"/> 2744 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1321"/>
@@ -2746,7 +2758,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2746 <message> 2758 <message>
2747 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1424"/> 2759 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1424"/>
2748 <source>Shake!</source> 2760 <source>Shake!</source>
2749 <translation>Shudden!</translation> 2761 <translation>Schud!</translation>
2750 </message> 2762 </message>
2751 <message> 2763 <message>
2752 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1426"/> 2764 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1426"/>
@@ -2761,53 +2773,53 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2761 <message> 2773 <message>
2762 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1521"/> 2774 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1521"/>
2763 <source>Enter a profile name:</source> 2775 <source>Enter a profile name:</source>
2764 <translation>Voer nieuwe gebruikersnaam in:</translation> 2776 <translation>Voer een profielnaam in:</translation>
2765 </message> 2777 </message>
2766 <message> 2778 <message>
2767 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1529"/> 2779 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1529"/>
2768 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1537"/> 2780 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1537"/>
2769 <source>Create Input Profile</source> 2781 <source>Create Input Profile</source>
2770 <translation>Creëer een nieuw Invoer Profiel</translation> 2782 <translation>Maak Invoerprofiel</translation>
2771 </message> 2783 </message>
2772 <message> 2784 <message>
2773 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1530"/> 2785 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1530"/>
2774 <source>The given profile name is not valid!</source> 2786 <source>The given profile name is not valid!</source>
2775 <translation>De ingevoerde Profiel naam is niet geldig</translation> 2787 <translation>De ingevoerde profielnaam is niet geldig!</translation>
2776 </message> 2788 </message>
2777 <message> 2789 <message>
2778 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1538"/> 2790 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1538"/>
2779 <source>Failed to create the input profile &quot;%1&quot;</source> 2791 <source>Failed to create the input profile &quot;%1&quot;</source>
2780 <translation>Het is mislukt om Invoer Profiel &quot;%1 te Creëer</translation> 2792 <translation>Kon invoerprofiel &quot;%1&quot; niet maken</translation>
2781 </message> 2793 </message>
2782 <message> 2794 <message>
2783 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1558"/> 2795 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1558"/>
2784 <source>Delete Input Profile</source> 2796 <source>Delete Input Profile</source>
2785 <translation>Verwijder invoer profiel</translation> 2797 <translation>Verwijder Invoerprofiel</translation>
2786 </message> 2798 </message>
2787 <message> 2799 <message>
2788 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1559"/> 2800 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1559"/>
2789 <source>Failed to delete the input profile &quot;%1&quot;</source> 2801 <source>Failed to delete the input profile &quot;%1&quot;</source>
2790 <translation>Het is mislukt om Invoer Profiel &quot;%1 te Verwijderen</translation> 2802 <translation>Kon invoerprofiel &quot;%1&quot; niet verwijderen</translation>
2791 </message> 2803 </message>
2792 <message> 2804 <message>
2793 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1581"/> 2805 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1581"/>
2794 <source>Load Input Profile</source> 2806 <source>Load Input Profile</source>
2795 <translation>Laad invoer profiel</translation> 2807 <translation>Laad Invoerprofiel</translation>
2796 </message> 2808 </message>
2797 <message> 2809 <message>
2798 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1582"/> 2810 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1582"/>
2799 <source>Failed to load the input profile &quot;%1&quot;</source> 2811 <source>Failed to load the input profile &quot;%1&quot;</source>
2800 <translation>Het is mislukt om Invoer Profiel &quot;%1 te Laden</translation> 2812 <translation>Kon invoerprofiel &quot;%1&quot; niet laden</translation>
2801 </message> 2813 </message>
2802 <message> 2814 <message>
2803 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1607"/> 2815 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1607"/>
2804 <source>Save Input Profile</source> 2816 <source>Save Input Profile</source>
2805 <translation>Sla Invoer profiel op</translation> 2817 <translation>Sla Invoerprofiel op</translation>
2806 </message> 2818 </message>
2807 <message> 2819 <message>
2808 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1608"/> 2820 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1608"/>
2809 <source>Failed to save the input profile &quot;%1&quot;</source> 2821 <source>Failed to save the input profile &quot;%1&quot;</source>
2810 <translation>Het is mislukt om Invoer Profiel &quot;%1 Op te slaan</translation> 2822 <translation>Kon invoerprofiel &quot;%1&quot; niet opslaan</translation>
2811 </message> 2823 </message>
2812</context> 2824</context>
2813<context> 2825<context>
@@ -2815,12 +2827,12 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2815 <message> 2827 <message>
2816 <location filename="../../src/yuzu/configuration/configure_input_profile_dialog.ui" line="14"/> 2828 <location filename="../../src/yuzu/configuration/configure_input_profile_dialog.ui" line="14"/>
2817 <source>Create Input Profile</source> 2829 <source>Create Input Profile</source>
2818 <translation>Maak Invoer Profiel</translation> 2830 <translation>Maak Invoerprofiel</translation>
2819 </message> 2831 </message>
2820 <message> 2832 <message>
2821 <location filename="../../src/yuzu/configuration/configure_input_profile_dialog.ui" line="40"/> 2833 <location filename="../../src/yuzu/configuration/configure_input_profile_dialog.ui" line="40"/>
2822 <source>Clear</source> 2834 <source>Clear</source>
2823 <translation>Verwijder</translation> 2835 <translation>Wis</translation>
2824 </message> 2836 </message>
2825 <message> 2837 <message>
2826 <location filename="../../src/yuzu/configuration/configure_input_profile_dialog.ui" line="47"/> 2838 <location filename="../../src/yuzu/configuration/configure_input_profile_dialog.ui" line="47"/>
@@ -2843,7 +2855,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2843 <message> 2855 <message>
2844 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="23"/> 2856 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="23"/>
2845 <source>UDP Calibration:</source> 2857 <source>UDP Calibration:</source>
2846 <translation>UDP Calibratie:</translation> 2858 <translation>UDP-calibratie:</translation>
2847 </message> 2859 </message>
2848 <message> 2860 <message>
2849 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="30"/> 2861 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="30"/>
@@ -2860,17 +2872,17 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2860 <message> 2872 <message>
2861 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="57"/> 2873 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="57"/>
2862 <source>Touch from button profile:</source> 2874 <source>Touch from button profile:</source>
2863 <translation type="unfinished"/> 2875 <translation>Raak van knop-profiel:</translation>
2864 </message> 2876 </message>
2865 <message> 2877 <message>
2866 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="85"/> 2878 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="85"/>
2867 <source>CemuhookUDP Config</source> 2879 <source>CemuhookUDP Config</source>
2868 <translation>CemuhookUDP Configuratie</translation> 2880 <translation>CemuhookUDP-configuratie</translation>
2869 </message> 2881 </message>
2870 <message> 2882 <message>
2871 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="91"/> 2883 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="91"/>
2872 <source>You may use any Cemuhook compatible UDP input source to provide motion and touch input.</source> 2884 <source>You may use any Cemuhook compatible UDP input source to provide motion and touch input.</source>
2873 <translation>U kunt elke Cemuhook-compatibele UDP-invoerbron gebruiken voor bewegings- en aanraakinvoer.</translation> 2885 <translation>Je kunt elke Cemuhook-compatibele UDP-invoerbron gebruiken om beweging en aanraking in te voeren.</translation>
2874 </message> 2886 </message>
2875 <message> 2887 <message>
2876 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="134"/> 2888 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="134"/>
@@ -2885,7 +2897,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2885 <message> 2897 <message>
2886 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="188"/> 2898 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="188"/>
2887 <source>Learn More</source> 2899 <source>Learn More</source>
2888 <translation>Leer Meer</translation> 2900 <translation>Meer Info</translation>
2889 </message> 2901 </message>
2890 <message> 2902 <message>
2891 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="201"/> 2903 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="201"/>
@@ -2901,12 +2913,12 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2901 <message> 2913 <message>
2902 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="247"/> 2914 <location filename="../../src/yuzu/configuration/configure_motion_touch.ui" line="247"/>
2903 <source>Remove Server</source> 2915 <source>Remove Server</source>
2904 <translation>Externe Server</translation> 2916 <translation>Verwijder Server</translation>
2905 </message> 2917 </message>
2906 <message> 2918 <message>
2907 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="87"/> 2919 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="87"/>
2908 <source>&lt;a href=&apos;https://yuzu-emu.org/wiki/using-a-controller-or-android-phone-for-motion-or-touch-input&apos;&gt;&lt;span style=&quot;text-decoration: underline; color:#039be5;&quot;&gt;Learn More&lt;/span&gt;&lt;/a&gt;</source> 2920 <source>&lt;a href=&apos;https://yuzu-emu.org/wiki/using-a-controller-or-android-phone-for-motion-or-touch-input&apos;&gt;&lt;span style=&quot;text-decoration: underline; color:#039be5;&quot;&gt;Learn More&lt;/span&gt;&lt;/a&gt;</source>
2909 <translation>&lt;a href=&apos;https://yuzu-emu.org/wiki/using-a-controller-or-android-phone-for-motion-or-touch-input&apos;&gt;&lt;span style=&quot;text-decoration: underline; color:#039be5;&quot;&gt;Leer Meer&lt;/span&gt;&lt;/a&gt;</translation> 2921 <translation>&lt;a href=&apos;https://yuzu-emu.org/wiki/using-a-controller-or-android-phone-for-motion-or-touch-input&apos;&gt;&lt;span style=&quot;text-decoration: underline; color:#039be5;&quot;&gt;Meer Info&lt;/span&gt;&lt;/a&gt;</translation>
2910 </message> 2922 </message>
2911 <message> 2923 <message>
2912 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="168"/> 2924 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="168"/>
@@ -2921,7 +2933,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2921 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="193"/> 2933 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="193"/>
2922 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="287"/> 2934 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="287"/>
2923 <source>yuzu</source> 2935 <source>yuzu</source>
2924 <translation>Yuzu</translation> 2936 <translation>yuzu</translation>
2925 </message> 2937 </message>
2926 <message> 2938 <message>
2927 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="173"/> 2939 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="173"/>
@@ -2936,12 +2948,12 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2936 <message> 2948 <message>
2937 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="181"/> 2949 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="181"/>
2938 <source>IP address is not valid</source> 2950 <source>IP address is not valid</source>
2939 <translation>IP adress is niet geldig</translation> 2951 <translation>IP-adress is niet geldig</translation>
2940 </message> 2952 </message>
2941 <message> 2953 <message>
2942 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="187"/> 2954 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="187"/>
2943 <source>This UDP server already exists</source> 2955 <source>This UDP server already exists</source>
2944 <translation>Deze UDP server bestaat al</translation> 2956 <translation>Deze UDP-server bestaat al</translation>
2945 </message> 2957 </message>
2946 <message> 2958 <message>
2947 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="193"/> 2959 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="193"/>
@@ -2961,7 +2973,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2961 <message> 2973 <message>
2962 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="256"/> 2974 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="256"/>
2963 <source>Test Successful</source> 2975 <source>Test Successful</source>
2964 <translation>Test Succesvol</translation> 2976 <translation>Test Succesvol</translation>
2965 </message> 2977 </message>
2966 <message> 2978 <message>
2967 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="257"/> 2979 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="257"/>
@@ -2976,12 +2988,12 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2976 <message> 2988 <message>
2977 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="260"/> 2989 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="260"/>
2978 <source>Could not receive valid data from the server.&lt;br&gt;Please verify that the server is set up correctly and the address and port are correct.</source> 2990 <source>Could not receive valid data from the server.&lt;br&gt;Please verify that the server is set up correctly and the address and port are correct.</source>
2979 <translation>Kan niet de juiste data van de server ontvangen.&lt;br&gt;Verifieer dat de server is goed opgezet en dat het adres en poort correct zijn.</translation> 2991 <translation>Kan niet de juiste data van de server ontvangen.&lt;br&gt;Controleer of de server correct is ingesteld en of het adres en de poort correct zijn.</translation>
2980 </message> 2992 </message>
2981 <message> 2993 <message>
2982 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="288"/> 2994 <location filename="../../src/yuzu/configuration/configure_motion_touch.cpp" line="288"/>
2983 <source>UDP Test or calibration configuration is in progress.&lt;br&gt;Please wait for them to finish.</source> 2995 <source>UDP Test or calibration configuration is in progress.&lt;br&gt;Please wait for them to finish.</source>
2984 <translation>UDP Test of calibratie configuratie is bezig.&lt;br&gt;Wacht alstublieft totdat het voltooid is.</translation> 2996 <translation>UDP-test of kalibratieconfiguratie is bezig.&lt;br&gt;Wacht tot ze klaar zijn.</translation>
2985 </message> 2997 </message>
2986</context> 2998</context>
2987<context> 2999<context>
@@ -2989,12 +3001,12 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
2989 <message> 3001 <message>
2990 <location filename="../../src/yuzu/configuration/configure_network.ui" line="14"/> 3002 <location filename="../../src/yuzu/configuration/configure_network.ui" line="14"/>
2991 <source>Form</source> 3003 <source>Form</source>
2992 <translation>Formulier</translation> 3004 <translation>Vorm</translation>
2993 </message> 3005 </message>
2994 <message> 3006 <message>
2995 <location filename="../../src/yuzu/configuration/configure_network.ui" line="17"/> 3007 <location filename="../../src/yuzu/configuration/configure_network.ui" line="17"/>
2996 <source>Network</source> 3008 <source>Network</source>
2997 <translation type="unfinished"/> 3009 <translation>Netwerk</translation>
2998 </message> 3010 </message>
2999 <message> 3011 <message>
3000 <location filename="../../src/yuzu/configuration/configure_network.ui" line="25"/> 3012 <location filename="../../src/yuzu/configuration/configure_network.ui" line="25"/>
@@ -3004,7 +3016,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3004 <message> 3016 <message>
3005 <location filename="../../src/yuzu/configuration/configure_network.ui" line="34"/> 3017 <location filename="../../src/yuzu/configuration/configure_network.ui" line="34"/>
3006 <source>Network Interface</source> 3018 <source>Network Interface</source>
3007 <translation type="unfinished"/> 3019 <translation>Netwerkinterface</translation>
3008 </message> 3020 </message>
3009 <message> 3021 <message>
3010 <location filename="../../src/yuzu/configuration/configure_network.cpp" line="15"/> 3022 <location filename="../../src/yuzu/configuration/configure_network.cpp" line="15"/>
@@ -3032,7 +3044,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3032 <message> 3044 <message>
3033 <location filename="../../src/yuzu/configuration/configure_per_game.ui" line="92"/> 3045 <location filename="../../src/yuzu/configuration/configure_per_game.ui" line="92"/>
3034 <source>Title ID</source> 3046 <source>Title ID</source>
3035 <translation>Titel ID</translation> 3047 <translation>Titel-ID</translation>
3036 </message> 3048 </message>
3037 <message> 3049 <message>
3038 <location filename="../../src/yuzu/configuration/configure_per_game.ui" line="129"/> 3050 <location filename="../../src/yuzu/configuration/configure_per_game.ui" line="129"/>
@@ -3082,22 +3094,22 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3082 <message> 3094 <message>
3083 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="62"/> 3095 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="62"/>
3084 <source>Graphics</source> 3096 <source>Graphics</source>
3085 <translation>Grafisch</translation> 3097 <translation>Graphics</translation>
3086 </message> 3098 </message>
3087 <message> 3099 <message>
3088 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="63"/> 3100 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="63"/>
3089 <source>Adv. Graphics</source> 3101 <source>Adv. Graphics</source>
3090 <translation>Adv. Grafisch</translation> 3102 <translation>Adv. Graphics</translation>
3091 </message> 3103 </message>
3092 <message> 3104 <message>
3093 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="64"/> 3105 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="64"/>
3094 <source>Audio</source> 3106 <source>Audio</source>
3095 <translation>Geluid</translation> 3107 <translation>Audio</translation>
3096 </message> 3108 </message>
3097 <message> 3109 <message>
3098 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="65"/> 3110 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="65"/>
3099 <source>Input Profiles</source> 3111 <source>Input Profiles</source>
3100 <translation type="unfinished"/> 3112 <translation>Invoerprofielen</translation>
3101 </message> 3113 </message>
3102 <message> 3114 <message>
3103 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/> 3115 <location filename="../../src/yuzu/configuration/configure_per_game.cpp" line="68"/>
@@ -3115,7 +3127,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3115 <message> 3127 <message>
3116 <location filename="../../src/yuzu/configuration/configure_per_game_addons.ui" line="14"/> 3128 <location filename="../../src/yuzu/configuration/configure_per_game_addons.ui" line="14"/>
3117 <source>Form</source> 3129 <source>Form</source>
3118 <translation>Formulier</translation> 3130 <translation>Vorm</translation>
3119 </message> 3131 </message>
3120 <message> 3132 <message>
3121 <location filename="../../src/yuzu/configuration/configure_per_game_addons.ui" line="17"/> 3133 <location filename="../../src/yuzu/configuration/configure_per_game_addons.ui" line="17"/>
@@ -3125,7 +3137,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3125 <message> 3137 <message>
3126 <location filename="../../src/yuzu/configuration/configure_per_game_addons.cpp" line="46"/> 3138 <location filename="../../src/yuzu/configuration/configure_per_game_addons.cpp" line="46"/>
3127 <source>Patch Name</source> 3139 <source>Patch Name</source>
3128 <translation>Patch Naam</translation> 3140 <translation>Patch-naam</translation>
3129 </message> 3141 </message>
3130 <message> 3142 <message>
3131 <location filename="../../src/yuzu/configuration/configure_per_game_addons.cpp" line="47"/> 3143 <location filename="../../src/yuzu/configuration/configure_per_game_addons.cpp" line="47"/>
@@ -3148,7 +3160,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3148 <message> 3160 <message>
3149 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="25"/> 3161 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="25"/>
3150 <source>Profile Manager</source> 3162 <source>Profile Manager</source>
3151 <translation>Profiel Beheer</translation> 3163 <translation>Profielbeheer</translation>
3152 </message> 3164 </message>
3153 <message> 3165 <message>
3154 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="42"/> 3166 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="42"/>
@@ -3163,12 +3175,12 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3163 <message> 3175 <message>
3164 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="116"/> 3176 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="116"/>
3165 <source>Set Image</source> 3177 <source>Set Image</source>
3166 <translation>Selecteer Afbeelding</translation> 3178 <translation>Stel Afbeelding In</translation>
3167 </message> 3179 </message>
3168 <message> 3180 <message>
3169 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="136"/> 3181 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="136"/>
3170 <source>Add</source> 3182 <source>Add</source>
3171 <translation>Voeg Toe</translation> 3183 <translation>Toevoegen</translation>
3172 </message> 3184 </message>
3173 <message> 3185 <message>
3174 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="146"/> 3186 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="146"/>
@@ -3183,7 +3195,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3183 <message> 3195 <message>
3184 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="168"/> 3196 <location filename="../../src/yuzu/configuration/configure_profile_manager.ui" line="168"/>
3185 <source>Profile management is available only when game is not running.</source> 3197 <source>Profile management is available only when game is not running.</source>
3186 <translation>Profiel beheer is alleen beschikbaar wanneer het spel niet bezig is.</translation> 3198 <translation>Profielbeheer is alleen beschikbaar wanneer het spel niet bezig is.</translation>
3187 </message> 3199 </message>
3188 <message> 3200 <message>
3189 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="55"/> 3201 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="55"/>
@@ -3196,7 +3208,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3196 <message> 3208 <message>
3197 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="73"/> 3209 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="73"/>
3198 <source>Enter Username</source> 3210 <source>Enter Username</source>
3199 <translation>Voer een Gebruikersnaam in</translation> 3211 <translation>Voer Gebruikersnaam in</translation>
3200 </message> 3212 </message>
3201 <message> 3213 <message>
3202 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="139"/> 3214 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="139"/>
@@ -3216,12 +3228,12 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3216 <message> 3228 <message>
3217 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/> 3229 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="271"/>
3218 <source>Select User Image</source> 3230 <source>Select User Image</source>
3219 <translation>Selecteer gebruiker&apos;s foto</translation> 3231 <translation>Selecteer Gebruikersfoto</translation>
3220 </message> 3232 </message>
3221 <message> 3233 <message>
3222 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/> 3234 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="272"/>
3223 <source>JPEG Images (*.jpg *.jpeg)</source> 3235 <source>JPEG Images (*.jpg *.jpeg)</source>
3224 <translation>JPEG foto&apos;s (*.jpg *.jpeg)</translation> 3236 <translation>JPEG-foto&apos;s (*.jpg *.jpeg)</translation>
3225 </message> 3237 </message>
3226 <message> 3238 <message>
3227 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/> 3239 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="281"/>
@@ -3266,12 +3278,12 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3266 <message> 3278 <message>
3267 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/> 3279 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="314"/>
3268 <source>Error resizing user image</source> 3280 <source>Error resizing user image</source>
3269 <translation type="unfinished"/> 3281 <translation>Fout bij het aanpassen van grootte van gebruikersafbeelding</translation>
3270 </message> 3282 </message>
3271 <message> 3283 <message>
3272 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/> 3284 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="315"/>
3273 <source>Unable to resize image</source> 3285 <source>Unable to resize image</source>
3274 <translation type="unfinished"/> 3286 <translation>Kon de grootte van de afbeelding niet wijzigen</translation>
3275 </message> 3287 </message>
3276</context> 3288</context>
3277<context> 3289<context>
@@ -3279,7 +3291,7 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3279 <message> 3291 <message>
3280 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/> 3292 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="332"/>
3281 <source>Delete this user? All of the user&apos;s save data will be deleted.</source> 3293 <source>Delete this user? All of the user&apos;s save data will be deleted.</source>
3282 <translation type="unfinished"/> 3294 <translation>Deze gebruiker verwijderen? Alle opgeslagen gegevens van de gebruiker worden verwijderd.</translation>
3283 </message> 3295 </message>
3284 <message> 3296 <message>
3285 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/> 3297 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="344"/>
@@ -3290,7 +3302,8 @@ Om de assen te spiegelen, beweek je joystick eerst verticaal en dan horizontaal.
3290 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/> 3302 <location filename="../../src/yuzu/configuration/configure_profile_manager.cpp" line="360"/>
3291 <source>Name: %1 3303 <source>Name: %1
3292UUID: %2</source> 3304UUID: %2</source>
3293 <translation type="unfinished"/> 3305 <translation>Naam: %1
3306UUID: %2</translation>
3294 </message> 3307 </message>
3295</context> 3308</context>
3296<context> 3309<context>
@@ -3298,29 +3311,29 @@ UUID: %2</source>
3298 <message> 3311 <message>
3299 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="14"/> 3312 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="14"/>
3300 <source>Configure Ring Controller</source> 3313 <source>Configure Ring Controller</source>
3301 <translation type="unfinished"/> 3314 <translation>Configureer Ring-controller</translation>
3302 </message> 3315 </message>
3303 <message> 3316 <message>
3304 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="26"/> 3317 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="26"/>
3305 <source>If you want to use this controller configure player 1 as right controller and player 2 as dual joycon before starting the game to allow this controller to be detected properly.</source> 3318 <source>If you want to use this controller configure player 1 as right controller and player 2 as dual joycon before starting the game to allow this controller to be detected properly.</source>
3306 <translation type="unfinished"/> 3319 <translation>Als je deze controller wilt gebruiken, configureer dan speler 1 als rechter controller en speler 2 als dual joycon voordat je het spel start, zodat deze controller goed wordt gedetecteerd.</translation>
3307 </message> 3320 </message>
3308 <message> 3321 <message>
3309 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="52"/> 3322 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="52"/>
3310 <source>Virtual Ring Sensor Parameters</source> 3323 <source>Virtual Ring Sensor Parameters</source>
3311 <translation type="unfinished"/> 3324 <translation>Parameters Virtuele Ringsensor</translation>
3312 </message> 3325 </message>
3313 <message> 3326 <message>
3314 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="84"/> 3327 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="84"/>
3315 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="123"/> 3328 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="123"/>
3316 <source>Pull</source> 3329 <source>Pull</source>
3317 <translation type="unfinished"/> 3330 <translation>Trek</translation>
3318 </message> 3331 </message>
3319 <message> 3332 <message>
3320 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="133"/> 3333 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="133"/>
3321 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="172"/> 3334 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="172"/>
3322 <source>Push</source> 3335 <source>Push</source>
3323 <translation type="unfinished"/> 3336 <translation>Duw</translation>
3324 </message> 3337 </message>
3325 <message> 3338 <message>
3326 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="206"/> 3339 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="206"/>
@@ -3330,29 +3343,29 @@ UUID: %2</source>
3330 <message> 3343 <message>
3331 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="233"/> 3344 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="233"/>
3332 <source>Direct Joycon Driver</source> 3345 <source>Direct Joycon Driver</source>
3333 <translation type="unfinished"/> 3346 <translation>Direct Joycon-driver</translation>
3334 </message> 3347 </message>
3335 <message> 3348 <message>
3336 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="293"/> 3349 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="293"/>
3337 <source>Enable Ring Input</source> 3350 <source>Enable Ring Input</source>
3338 <translation type="unfinished"/> 3351 <translation>Schakel Ringinvoer in</translation>
3339 </message> 3352 </message>
3340 <message> 3353 <message>
3341 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="300"/> 3354 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="300"/>
3342 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="314"/> 3355 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="314"/>
3343 <source>Enable</source> 3356 <source>Enable</source>
3344 <translation type="unfinished"/> 3357 <translation>Inschakelen</translation>
3345 </message> 3358 </message>
3346 <message> 3359 <message>
3347 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="307"/> 3360 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="307"/>
3348 <source>Ring Sensor Value</source> 3361 <source>Ring Sensor Value</source>
3349 <translation type="unfinished"/> 3362 <translation>Ringsensorwaarde</translation>
3350 </message> 3363 </message>
3351 <message> 3364 <message>
3352 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="314"/> 3365 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="314"/>
3353 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="282"/> 3366 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="282"/>
3354 <source>Not connected</source> 3367 <source>Not connected</source>
3355 <translation type="unfinished"/> 3368 <translation>Niet verbonden</translation>
3356 </message> 3369 </message>
3357 <message> 3370 <message>
3358 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="344"/> 3371 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="344"/>
@@ -3362,7 +3375,7 @@ UUID: %2</source>
3362 <message> 3375 <message>
3363 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="168"/> 3376 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="168"/>
3364 <source>Clear</source> 3377 <source>Clear</source>
3365 <translation>Verwijder</translation> 3378 <translation>Wis</translation>
3366 </message> 3379 </message>
3367 <message> 3380 <message>
3368 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="170"/> 3381 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="170"/>
@@ -3372,7 +3385,7 @@ UUID: %2</source>
3372 <message> 3385 <message>
3373 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="172"/> 3386 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="172"/>
3374 <source>Invert axis</source> 3387 <source>Invert axis</source>
3375 <translation>Spiegel As</translation> 3388 <translation>Spiegel as</translation>
3376 </message> 3389 </message>
3377 <message> 3390 <message>
3378 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="191"/> 3391 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="191"/>
@@ -3383,12 +3396,12 @@ UUID: %2</source>
3383 <message> 3396 <message>
3384 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="279"/> 3397 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="279"/>
3385 <source>Error enabling ring input</source> 3398 <source>Error enabling ring input</source>
3386 <translation type="unfinished"/> 3399 <translation>Fout tijdens inschakelen van ringinvoer</translation>
3387 </message> 3400 </message>
3388 <message> 3401 <message>
3389 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="285"/> 3402 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="285"/>
3390 <source>Direct Joycon driver is not enabled</source> 3403 <source>Direct Joycon driver is not enabled</source>
3391 <translation type="unfinished"/> 3404 <translation>Direct Joycon-driver niet ingeschakeld</translation>
3392 </message> 3405 </message>
3393 <message> 3406 <message>
3394 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="290"/> 3407 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="290"/>
@@ -3398,17 +3411,17 @@ UUID: %2</source>
3398 <message> 3411 <message>
3399 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="302"/> 3412 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="302"/>
3400 <source>The current mapped device doesn&apos;t support the ring controller</source> 3413 <source>The current mapped device doesn&apos;t support the ring controller</source>
3401 <translation type="unfinished"/> 3414 <translation>Het huidige apparaat ondersteunt de ringcontroller niet</translation>
3402 </message> 3415 </message>
3403 <message> 3416 <message>
3404 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="306"/> 3417 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="306"/>
3405 <source>The current mapped device doesn&apos;t have a ring attached</source> 3418 <source>The current mapped device doesn&apos;t have a ring attached</source>
3406 <translation type="unfinished"/> 3419 <translation>Het huidige apparaat heeft geen ring</translation>
3407 </message> 3420 </message>
3408 <message> 3421 <message>
3409 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="310"/> 3422 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="310"/>
3410 <source>Unexpected driver result %1</source> 3423 <source>Unexpected driver result %1</source>
3411 <translation type="unfinished"/> 3424 <translation>Onverwacht driverresultaat %1</translation>
3412 </message> 3425 </message>
3413 <message> 3426 <message>
3414 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="333"/> 3427 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="333"/>
@@ -3441,7 +3454,7 @@ UUID: %2</source>
3441 <message> 3454 <message>
3442 <location filename="../../src/yuzu/configuration/configure_system.ui" line="41"/> 3455 <location filename="../../src/yuzu/configuration/configure_system.ui" line="41"/>
3443 <source>Auto</source> 3456 <source>Auto</source>
3444 <translation>Automatisch</translation> 3457 <translation>Auto</translation>
3445 </message> 3458 </message>
3446 <message> 3459 <message>
3447 <location filename="../../src/yuzu/configuration/configure_system.ui" line="46"/> 3460 <location filename="../../src/yuzu/configuration/configure_system.ui" line="46"/>
@@ -3702,12 +3715,12 @@ UUID: %2</source>
3702 <message> 3715 <message>
3703 <location filename="../../src/yuzu/configuration/configure_system.ui" line="313"/> 3716 <location filename="../../src/yuzu/configuration/configure_system.ui" line="313"/>
3704 <source>Time Zone:</source> 3717 <source>Time Zone:</source>
3705 <translation>Tijd Zone:</translation> 3718 <translation>Tijdzone:</translation>
3706 </message> 3719 </message>
3707 <message> 3720 <message>
3708 <location filename="../../src/yuzu/configuration/configure_system.ui" line="320"/> 3721 <location filename="../../src/yuzu/configuration/configure_system.ui" line="320"/>
3709 <source>Note: this can be overridden when region setting is auto-select</source> 3722 <source>Note: this can be overridden when region setting is auto-select</source>
3710 <translation>Noot: dit kan worden overschreven wanneer de regio instelling op automatisch selecteren staat.</translation> 3723 <translation>Opmerking: dit kan worden overschreven wanneer de regio-instelling automatisch wordt geselecteerd</translation>
3711 </message> 3724 </message>
3712 <message> 3725 <message>
3713 <location filename="../../src/yuzu/configuration/configure_system.ui" line="324"/> 3726 <location filename="../../src/yuzu/configuration/configure_system.ui" line="324"/>
@@ -3717,7 +3730,7 @@ UUID: %2</source>
3717 <message> 3730 <message>
3718 <location filename="../../src/yuzu/configuration/configure_system.ui" line="329"/> 3731 <location filename="../../src/yuzu/configuration/configure_system.ui" line="329"/>
3719 <source>American English</source> 3732 <source>American English</source>
3720 <translation type="unfinished"/> 3733 <translation>Amerikaans-Engels</translation>
3721 </message> 3734 </message>
3722 <message> 3735 <message>
3723 <location filename="../../src/yuzu/configuration/configure_system.ui" line="334"/> 3736 <location filename="../../src/yuzu/configuration/configure_system.ui" line="334"/>
@@ -3742,7 +3755,7 @@ UUID: %2</source>
3742 <message> 3755 <message>
3743 <location filename="../../src/yuzu/configuration/configure_system.ui" line="354"/> 3756 <location filename="../../src/yuzu/configuration/configure_system.ui" line="354"/>
3744 <source>Chinese</source> 3757 <source>Chinese</source>
3745 <translation>Chinees (正體中文 / 简体中文)</translation> 3758 <translation>Chinees</translation>
3746 </message> 3759 </message>
3747 <message> 3760 <message>
3748 <location filename="../../src/yuzu/configuration/configure_system.ui" line="359"/> 3761 <location filename="../../src/yuzu/configuration/configure_system.ui" line="359"/>
@@ -3772,17 +3785,17 @@ UUID: %2</source>
3772 <message> 3785 <message>
3773 <location filename="../../src/yuzu/configuration/configure_system.ui" line="384"/> 3786 <location filename="../../src/yuzu/configuration/configure_system.ui" line="384"/>
3774 <source>British English</source> 3787 <source>British English</source>
3775 <translation>Brits Engels</translation> 3788 <translation>Brits-Engels</translation>
3776 </message> 3789 </message>
3777 <message> 3790 <message>
3778 <location filename="../../src/yuzu/configuration/configure_system.ui" line="389"/> 3791 <location filename="../../src/yuzu/configuration/configure_system.ui" line="389"/>
3779 <source>Canadian French</source> 3792 <source>Canadian French</source>
3780 <translation>Canadees Frans</translation> 3793 <translation>Canadees-Frans</translation>
3781 </message> 3794 </message>
3782 <message> 3795 <message>
3783 <location filename="../../src/yuzu/configuration/configure_system.ui" line="394"/> 3796 <location filename="../../src/yuzu/configuration/configure_system.ui" line="394"/>
3784 <source>Latin American Spanish</source> 3797 <source>Latin American Spanish</source>
3785 <translation>Latijns Amerikaans Spaans</translation> 3798 <translation>Latijns-Amerikaans Spaans</translation>
3786 </message> 3799 </message>
3787 <message> 3800 <message>
3788 <location filename="../../src/yuzu/configuration/configure_system.ui" line="399"/> 3801 <location filename="../../src/yuzu/configuration/configure_system.ui" line="399"/>
@@ -3797,12 +3810,12 @@ UUID: %2</source>
3797 <message> 3810 <message>
3798 <location filename="../../src/yuzu/configuration/configure_system.ui" line="409"/> 3811 <location filename="../../src/yuzu/configuration/configure_system.ui" line="409"/>
3799 <source>Brazilian Portuguese (português do Brasil)</source> 3812 <source>Brazilian Portuguese (português do Brasil)</source>
3800 <translation type="unfinished"/> 3813 <translation>Braziliaans-Portugees (português do Brasil)</translation>
3801 </message> 3814 </message>
3802 <message> 3815 <message>
3803 <location filename="../../src/yuzu/configuration/configure_system.ui" line="417"/> 3816 <location filename="../../src/yuzu/configuration/configure_system.ui" line="417"/>
3804 <source>Custom RTC</source> 3817 <source>Custom RTC</source>
3805 <translation>Handmatige RTC</translation> 3818 <translation>Aangepaste RTC</translation>
3806 </message> 3819 </message>
3807 <message> 3820 <message>
3808 <location filename="../../src/yuzu/configuration/configure_system.ui" line="424"/> 3821 <location filename="../../src/yuzu/configuration/configure_system.ui" line="424"/>
@@ -3817,7 +3830,7 @@ UUID: %2</source>
3817 <message> 3830 <message>
3818 <location filename="../../src/yuzu/configuration/configure_system.ui" line="438"/> 3831 <location filename="../../src/yuzu/configuration/configure_system.ui" line="438"/>
3819 <source>Device Name</source> 3832 <source>Device Name</source>
3820 <translation type="unfinished"/> 3833 <translation>Apparaatnaam</translation>
3821 </message> 3834 </message>
3822 <message> 3835 <message>
3823 <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> 3836 <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/>
@@ -3827,7 +3840,7 @@ UUID: %2</source>
3827 <message> 3840 <message>
3828 <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> 3841 <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/>
3829 <source>Warning: &quot;%1&quot; is not a valid language for region &quot;%2&quot;</source> 3842 <source>Warning: &quot;%1&quot; is not a valid language for region &quot;%2&quot;</source>
3830 <translation type="unfinished"/> 3843 <translation>Waarschuwing: &quot;%1&quot; is geen geldige taal voor regio &quot;%2&quot;</translation>
3831 </message> 3844 </message>
3832</context> 3845</context>
3833<context> 3846<context>
@@ -3835,47 +3848,47 @@ UUID: %2</source>
3835 <message> 3848 <message>
3836 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="11"/> 3849 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="11"/>
3837 <source>TAS</source> 3850 <source>TAS</source>
3838 <translation type="unfinished"/> 3851 <translation>TAS</translation>
3839 </message> 3852 </message>
3840 <message> 3853 <message>
3841 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="17"/> 3854 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="17"/>
3842 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reads controller input from scripts in the same format as TAS-nx scripts.&lt;br/&gt;For a more detailed explanation, please consult the &lt;a href=&quot;https://yuzu-emu.org/help/feature/tas/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#039be5;&quot;&gt;help page&lt;/span&gt;&lt;/a&gt; on the yuzu website.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 3855 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reads controller input from scripts in the same format as TAS-nx scripts.&lt;br/&gt;For a more detailed explanation, please consult the &lt;a href=&quot;https://yuzu-emu.org/help/feature/tas/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#039be5;&quot;&gt;help page&lt;/span&gt;&lt;/a&gt; on the yuzu website.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
3843 <translation type="unfinished"/> 3856 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Leest controller-invoer van scripts in hetzelfde formaat als TAS-nx-scripts.&lt;br/&gt;Voor een meer gedetailleerde uitleg kunt u de&lt;a href=&quot;https://yuzu-emu.org/help/feature/tas/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#039be5;&quot;&gt;help-pagina&lt;/span&gt;&lt;/a&gt;op de yuzu-website raadplegen.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
3844 </message> 3857 </message>
3845 <message> 3858 <message>
3846 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="27"/> 3859 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="27"/>
3847 <source>To check which hotkeys control the playback/recording, please refer to the Hotkey settings (Configure -&gt; General -&gt; Hotkeys).</source> 3860 <source>To check which hotkeys control the playback/recording, please refer to the Hotkey settings (Configure -&gt; General -&gt; Hotkeys).</source>
3848 <translation type="unfinished"/> 3861 <translation>Om te controleren welke sneltoetsen het afspelen/opnemen regelen, raadpleeg de sneltoetsinstellingen (Configuratie -&gt; Algemeen -&gt; Sneltoetsen).</translation>
3849 </message> 3862 </message>
3850 <message> 3863 <message>
3851 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="37"/> 3864 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="37"/>
3852 <source>WARNING: This is an experimental feature.&lt;br/&gt;It will not play back scripts frame perfectly with the current, imperfect syncing method.</source> 3865 <source>WARNING: This is an experimental feature.&lt;br/&gt;It will not play back scripts frame perfectly with the current, imperfect syncing method.</source>
3853 <translation type="unfinished"/> 3866 <translation>WAARSCHUWING: Dit is een experimentele functie.&lt;br/&gt;Met de huidige, onvolmaakte synchronisatiemethode worden scripts niet perfect afgespeeld.</translation>
3854 </message> 3867 </message>
3855 <message> 3868 <message>
3856 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="54"/> 3869 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="54"/>
3857 <source>Settings</source> 3870 <source>Settings</source>
3858 <translation type="unfinished"/> 3871 <translation>Instellingen</translation>
3859 </message> 3872 </message>
3860 <message> 3873 <message>
3861 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="60"/> 3874 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="60"/>
3862 <source>Enable TAS features</source> 3875 <source>Enable TAS features</source>
3863 <translation type="unfinished"/> 3876 <translation>Schakel TAS-functies in</translation>
3864 </message> 3877 </message>
3865 <message> 3878 <message>
3866 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="67"/> 3879 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="67"/>
3867 <source>Loop script</source> 3880 <source>Loop script</source>
3868 <translation type="unfinished"/> 3881 <translation>Lus script</translation>
3869 </message> 3882 </message>
3870 <message> 3883 <message>
3871 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="77"/> 3884 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="77"/>
3872 <source>Pause execution during loads</source> 3885 <source>Pause execution during loads</source>
3873 <translation type="unfinished"/> 3886 <translation>Onderbreek de uitvoering tijdens ladingen</translation>
3874 </message> 3887 </message>
3875 <message> 3888 <message>
3876 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="91"/> 3889 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="91"/>
3877 <source>Script Directory</source> 3890 <source>Script Directory</source>
3878 <translation type="unfinished"/> 3891 <translation>Script-map</translation>
3879 </message> 3892 </message>
3880 <message> 3893 <message>
3881 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="97"/> 3894 <location filename="../../src/yuzu/configuration/configure_tas.ui" line="97"/>
@@ -3893,12 +3906,12 @@ UUID: %2</source>
3893 <message> 3906 <message>
3894 <location filename="../../src/yuzu/configuration/configure_tas.cpp" line="19"/> 3907 <location filename="../../src/yuzu/configuration/configure_tas.cpp" line="19"/>
3895 <source>TAS Configuration</source> 3908 <source>TAS Configuration</source>
3896 <translation type="unfinished"/> 3909 <translation>TAS-configuratie</translation>
3897 </message> 3910 </message>
3898 <message> 3911 <message>
3899 <location filename="../../src/yuzu/configuration/configure_tas.cpp" line="49"/> 3912 <location filename="../../src/yuzu/configuration/configure_tas.cpp" line="49"/>
3900 <source>Select TAS Load Directory...</source> 3913 <source>Select TAS Load Directory...</source>
3901 <translation type="unfinished"/> 3914 <translation>Selecteer TAS-laadmap...</translation>
3902 </message> 3915 </message>
3903</context> 3916</context>
3904<context> 3917<context>
@@ -3906,12 +3919,12 @@ UUID: %2</source>
3906 <message> 3919 <message>
3907 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="14"/> 3920 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="14"/>
3908 <source>Configure Touchscreen Mappings</source> 3921 <source>Configure Touchscreen Mappings</source>
3909 <translation>Touchscreen Mappings Configureren</translation> 3922 <translation>Configureer Touchscreen-toewijzingen</translation>
3910 </message> 3923 </message>
3911 <message> 3924 <message>
3912 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="22"/> 3925 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="22"/>
3913 <source>Mapping:</source> 3926 <source>Mapping:</source>
3914 <translation>Mapping:</translation> 3927 <translation>Toewijzing:</translation>
3915 </message> 3928 </message>
3916 <message> 3929 <message>
3917 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="48"/> 3930 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="48"/>
@@ -3926,14 +3939,14 @@ UUID: %2</source>
3926 <message> 3939 <message>
3927 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="74"/> 3940 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="74"/>
3928 <source>Rename</source> 3941 <source>Rename</source>
3929 <translation>Hernoemen</translation> 3942 <translation>Hernoem</translation>
3930 </message> 3943 </message>
3931 <message> 3944 <message>
3932 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="92"/> 3945 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="92"/>
3933 <source>Click the bottom area to add a point, then press a button to bind. 3946 <source>Click the bottom area to add a point, then press a button to bind.
3934Drag points to change position, or double-click table cells to edit values.</source> 3947Drag points to change position, or double-click table cells to edit values.</source>
3935 <translation>Klik in de onderste vlakte op een punt toe te voegen, daarna druk op een knop om het te verbinden. 3948 <translation>Klik op het onderste gebied om een punt toe te voegen en druk vervolgens op een knop om toe te wijzen.
3936Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen om de waardes te veranderen.</translation> 3949Versleep punten om de positie te veranderen, of dubbelklik op tabelcellen om waarden te bewerken.</translation>
3937 </message> 3950 </message>
3938 <message> 3951 <message>
3939 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="116"/> 3952 <location filename="../../src/yuzu/configuration/configure_touch_from_button.ui" line="116"/>
@@ -3975,7 +3988,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
3975 <message> 3988 <message>
3976 <location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="206"/> 3989 <location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="206"/>
3977 <source>Delete profile %1?</source> 3990 <source>Delete profile %1?</source>
3978 <translation>Verwijder Profiel %1?</translation> 3991 <translation>Verwijder profiel %1?</translation>
3979 </message> 3992 </message>
3980 <message> 3993 <message>
3981 <location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="219"/> 3994 <location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="219"/>
@@ -4003,22 +4016,22 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4003 <message> 4016 <message>
4004 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="26"/> 4017 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="26"/>
4005 <source>Warning: The settings in this page affect the inner workings of yuzu&apos;s emulated touchscreen. Changing them may result in undesirable behavior, such as the touchscreen partially or not working. You should only use this page if you know what you are doing.</source> 4018 <source>Warning: The settings in this page affect the inner workings of yuzu&apos;s emulated touchscreen. Changing them may result in undesirable behavior, such as the touchscreen partially or not working. You should only use this page if you know what you are doing.</source>
4006 <translation>Waarschuwing: Instellingen in deze pagina hebben invloed op de interne werking van yuzu&apos;s geemuleerde touchscreen. Veranderingen kunnen ongewenste resultaten hebben, zoals ervoor zorgen dat het touchscreen half of niet werkt. Gebruik deze pagina enkel als je weet wat je doet.</translation> 4019 <translation>Waarschuwing: De instellingen in deze pagina beïnvloeden de innerlijke werking van yuzu&apos;s geëmuleerde touchscreen. Het veranderen ervan kan leiden tot ongewenst gedrag, zoals het gedeeltelijk of niet werken van het touchscreen. Je moet deze pagina alleen gebruiken als je weet wat je doet.</translation>
4007 </message> 4020 </message>
4008 <message> 4021 <message>
4009 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="52"/> 4022 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="52"/>
4010 <source>Touch Parameters</source> 4023 <source>Touch Parameters</source>
4011 <translation>Touch Parameters</translation> 4024 <translation>Aanraakparameters</translation>
4012 </message> 4025 </message>
4013 <message> 4026 <message>
4014 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="71"/> 4027 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="71"/>
4015 <source>Touch Diameter Y</source> 4028 <source>Touch Diameter Y</source>
4016 <translation>Touch Diameter Y</translation> 4029 <translation>Aanraakdiameter Y</translation>
4017 </message> 4030 </message>
4018 <message> 4031 <message>
4019 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="91"/> 4032 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="91"/>
4020 <source>Touch Diameter X</source> 4033 <source>Touch Diameter X</source>
4021 <translation>Touch Diameter X</translation> 4034 <translation>Aanraakdiameter X</translation>
4022 </message> 4035 </message>
4023 <message> 4036 <message>
4024 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="98"/> 4037 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="98"/>
@@ -4028,7 +4041,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4028 <message> 4041 <message>
4029 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="132"/> 4042 <location filename="../../src/yuzu/configuration/configure_touchscreen_advanced.ui" line="132"/>
4030 <source>Restore Defaults</source> 4043 <source>Restore Defaults</source>
4031 <translation>Herstel Standaardwaardes</translation> 4044 <translation>Herstel Standaardwaarden</translation>
4032 </message> 4045 </message>
4033</context> 4046</context>
4034<context> 4047<context>
@@ -4043,37 +4056,37 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4043 <message> 4056 <message>
4044 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="21"/> 4057 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="21"/>
4045 <source>Small (32x32)</source> 4058 <source>Small (32x32)</source>
4046 <translation type="unfinished"/> 4059 <translation>Klein (32x32)</translation>
4047 </message> 4060 </message>
4048 <message> 4061 <message>
4049 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="22"/> 4062 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="22"/>
4050 <source>Standard (64x64)</source> 4063 <source>Standard (64x64)</source>
4051 <translation type="unfinished"/> 4064 <translation>Standaard (64x64)</translation>
4052 </message> 4065 </message>
4053 <message> 4066 <message>
4054 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="23"/> 4067 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="23"/>
4055 <source>Large (128x128)</source> 4068 <source>Large (128x128)</source>
4056 <translation type="unfinished"/> 4069 <translation>Groot (128x128)</translation>
4057 </message> 4070 </message>
4058 <message> 4071 <message>
4059 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="24"/> 4072 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="24"/>
4060 <source>Full Size (256x256)</source> 4073 <source>Full Size (256x256)</source>
4061 <translation type="unfinished"/> 4074 <translation>Volledige Grootte (256x256)</translation>
4062 </message> 4075 </message>
4063 <message> 4076 <message>
4064 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="29"/> 4077 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="29"/>
4065 <source>Small (24x24)</source> 4078 <source>Small (24x24)</source>
4066 <translation type="unfinished"/> 4079 <translation>Klein (24x24)</translation>
4067 </message> 4080 </message>
4068 <message> 4081 <message>
4069 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="30"/> 4082 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="30"/>
4070 <source>Standard (48x48)</source> 4083 <source>Standard (48x48)</source>
4071 <translation type="unfinished"/> 4084 <translation>Standaard (48x48)</translation>
4072 </message> 4085 </message>
4073 <message> 4086 <message>
4074 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="31"/> 4087 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="31"/>
4075 <source>Large (72x72)</source> 4088 <source>Large (72x72)</source>
4076 <translation type="unfinished"/> 4089 <translation>Groot (72x72)</translation>
4077 </message> 4090 </message>
4078 <message> 4091 <message>
4079 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="36"/> 4092 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="36"/>
@@ -4083,17 +4096,17 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4083 <message> 4096 <message>
4084 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="37"/> 4097 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="37"/>
4085 <source>Filetype</source> 4098 <source>Filetype</source>
4086 <translation type="unfinished"/> 4099 <translation>Bestandstype</translation>
4087 </message> 4100 </message>
4088 <message> 4101 <message>
4089 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="38"/> 4102 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="38"/>
4090 <source>Title ID</source> 4103 <source>Title ID</source>
4091 <translation>Titel ID</translation> 4104 <translation>Titel-ID</translation>
4092 </message> 4105 </message>
4093 <message> 4106 <message>
4094 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="39"/> 4107 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="39"/>
4095 <source>Title Name</source> 4108 <source>Title Name</source>
4096 <translation type="unfinished"/> 4109 <translation>Titelnaam</translation>
4097 </message> 4110 </message>
4098</context> 4111</context>
4099<context> 4112<context>
@@ -4116,12 +4129,12 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4116 <message> 4129 <message>
4117 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="31"/> 4130 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="31"/>
4118 <source>Note: Changing language will apply your configuration.</source> 4131 <source>Note: Changing language will apply your configuration.</source>
4119 <translation>Notitie: De taal veranderen past uw configuratie toe.</translation> 4132 <translation>Opmerking: Als je de taal wijzigt, wordt je configuratie toegepast.</translation>
4120 </message> 4133 </message>
4121 <message> 4134 <message>
4122 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="43"/> 4135 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="43"/>
4123 <source>Interface language:</source> 4136 <source>Interface language:</source>
4124 <translation>Interface taal:</translation> 4137 <translation>Interfacetaal:</translation>
4125 </message> 4138 </message>
4126 <message> 4139 <message>
4127 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="57"/> 4140 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="57"/>
@@ -4131,47 +4144,47 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4131 <message> 4144 <message>
4132 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="74"/> 4145 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="74"/>
4133 <source>Game List</source> 4146 <source>Game List</source>
4134 <translation>Game Lijst</translation> 4147 <translation>Spellijst</translation>
4135 </message> 4148 </message>
4136 <message> 4149 <message>
4137 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="82"/> 4150 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="82"/>
4138 <source>Show Compatibility List</source> 4151 <source>Show Compatibility List</source>
4139 <translation type="unfinished"/> 4152 <translation>Toon Compatibiliteitslijst</translation>
4140 </message> 4153 </message>
4141 <message> 4154 <message>
4142 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="89"/> 4155 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="89"/>
4143 <source>Show Add-Ons Column</source> 4156 <source>Show Add-Ons Column</source>
4144 <translation>Toon Add-Ons Kolom</translation> 4157 <translation>Toon Kolom Add-Ons</translation>
4145 </message> 4158 </message>
4146 <message> 4159 <message>
4147 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="96"/> 4160 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="96"/>
4148 <source>Show Size Column</source> 4161 <source>Show Size Column</source>
4149 <translation type="unfinished"/> 4162 <translation>Toon Kolomgrootte</translation>
4150 </message> 4163 </message>
4151 <message> 4164 <message>
4152 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="103"/> 4165 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="103"/>
4153 <source>Show File Types Column</source> 4166 <source>Show File Types Column</source>
4154 <translation type="unfinished"/> 4167 <translation>Toon Kolom Bestandstypen</translation>
4155 </message> 4168 </message>
4156 <message> 4169 <message>
4157 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="112"/> 4170 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="112"/>
4158 <source>Game Icon Size:</source> 4171 <source>Game Icon Size:</source>
4159 <translation type="unfinished"/> 4172 <translation>Grootte Spelicoon:</translation>
4160 </message> 4173 </message>
4161 <message> 4174 <message>
4162 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="126"/> 4175 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="126"/>
4163 <source>Folder Icon Size:</source> 4176 <source>Folder Icon Size:</source>
4164 <translation type="unfinished"/> 4177 <translation>Grootte Mapicoon:</translation>
4165 </message> 4178 </message>
4166 <message> 4179 <message>
4167 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="140"/> 4180 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="140"/>
4168 <source>Row 1 Text:</source> 4181 <source>Row 1 Text:</source>
4169 <translation>Rij 1 Text:</translation> 4182 <translation>Rij 1 Tekst:</translation>
4170 </message> 4183 </message>
4171 <message> 4184 <message>
4172 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="154"/> 4185 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="154"/>
4173 <source>Row 2 Text:</source> 4186 <source>Row 2 Text:</source>
4174 <translation>Rij 2 Text:</translation> 4187 <translation>Rij 2 Tekst:</translation>
4175 </message> 4188 </message>
4176 <message> 4189 <message>
4177 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="171"/> 4190 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="171"/>
@@ -4181,12 +4194,12 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4181 <message> 4194 <message>
4182 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="179"/> 4195 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="179"/>
4183 <source>Ask Where To Save Screenshots (Windows Only)</source> 4196 <source>Ask Where To Save Screenshots (Windows Only)</source>
4184 <translation type="unfinished"/> 4197 <translation>Vraag waar schermafbeeldingen moeten worden opgeslagen (alleen Windows)</translation>
4185 </message> 4198 </message>
4186 <message> 4199 <message>
4187 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="188"/> 4200 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="188"/>
4188 <source>Screenshots Path: </source> 4201 <source>Screenshots Path: </source>
4189 <translation type="unfinished"/> 4202 <translation>Schermafbeeldingspad:</translation>
4190 </message> 4203 </message>
4191 <message> 4204 <message>
4192 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="198"/> 4205 <location filename="../../src/yuzu/configuration/configure_ui.ui" line="198"/>
@@ -4196,7 +4209,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4196 <message> 4209 <message>
4197 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="96"/> 4210 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="96"/>
4198 <source>Select Screenshots Path...</source> 4211 <source>Select Screenshots Path...</source>
4199 <translation type="unfinished"/> 4212 <translation>Selecteer Schermafbeeldingspad...</translation>
4200 </message> 4213 </message>
4201 <message> 4214 <message>
4202 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="225"/> 4215 <location filename="../../src/yuzu/configuration/configure_ui.cpp" line="225"/>
@@ -4209,12 +4222,12 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4209 <message> 4222 <message>
4210 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="14"/> 4223 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="14"/>
4211 <source>Configure Vibration</source> 4224 <source>Configure Vibration</source>
4212 <translation type="unfinished"/> 4225 <translation>Configureer Trilling</translation>
4213 </message> 4226 </message>
4214 <message> 4227 <message>
4215 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="23"/> 4228 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="23"/>
4216 <source>Press any controller button to vibrate the controller.</source> 4229 <source>Press any controller button to vibrate the controller.</source>
4217 <translation type="unfinished"/> 4230 <translation>Druk op een willekeurige knop om de controller te laten trillen.</translation>
4218 </message> 4231 </message>
4219 <message> 4232 <message>
4220 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="30"/> 4233 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="30"/>
@@ -4276,12 +4289,12 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4276 <message> 4289 <message>
4277 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="503"/> 4290 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="503"/>
4278 <source>Settings</source> 4291 <source>Settings</source>
4279 <translation type="unfinished"/> 4292 <translation>Instellingen</translation>
4280 </message> 4293 </message>
4281 <message> 4294 <message>
4282 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="509"/> 4295 <location filename="../../src/yuzu/configuration/configure_vibration.ui" line="509"/>
4283 <source>Enable Accurate Vibration</source> 4296 <source>Enable Accurate Vibration</source>
4284 <translation type="unfinished"/> 4297 <translation>Schakel Nauwkeurige Trillingen In</translation>
4285 </message> 4298 </message>
4286</context> 4299</context>
4287<context> 4300<context>
@@ -4299,12 +4312,12 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4299 <message> 4312 <message>
4300 <location filename="../../src/yuzu/configuration/configure_web.ui" line="25"/> 4313 <location filename="../../src/yuzu/configuration/configure_web.ui" line="25"/>
4301 <source>yuzu Web Service</source> 4314 <source>yuzu Web Service</source>
4302 <translation>yuzu Web Service</translation> 4315 <translation>yuzu-webservice</translation>
4303 </message> 4316 </message>
4304 <message> 4317 <message>
4305 <location filename="../../src/yuzu/configuration/configure_web.ui" line="31"/> 4318 <location filename="../../src/yuzu/configuration/configure_web.ui" line="31"/>
4306 <source>By providing your username and token, you agree to allow yuzu to collect additional usage data, which may include user identifying information.</source> 4319 <source>By providing your username and token, you agree to allow yuzu to collect additional usage data, which may include user identifying information.</source>
4307 <translation>Door je gebruikersnaam en token te geven, ga je akkoord dat yuzu extra gebruiksdata verzameld, waaronder mogelijk gebruikersidentificatie-informatie.</translation> 4320 <translation>Door je gebruikersnaam en token op te geven, ga je ermee akkoord dat yuzu aanvullende gebruiksgegevens verzamelt, die informatie ter identificatie van de gebruiker kunnen bevatten.</translation>
4308 </message> 4321 </message>
4309 <message> 4322 <message>
4310 <location filename="../../src/yuzu/configuration/configure_web.ui" line="49"/> 4323 <location filename="../../src/yuzu/configuration/configure_web.ui" line="49"/>
@@ -4335,7 +4348,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4335 <message> 4348 <message>
4336 <location filename="../../src/yuzu/configuration/configure_web.ui" line="118"/> 4349 <location filename="../../src/yuzu/configuration/configure_web.ui" line="118"/>
4337 <source>Web Service configuration can only be changed when a public room isn&apos;t being hosted.</source> 4350 <source>Web Service configuration can only be changed when a public room isn&apos;t being hosted.</source>
4338 <translation type="unfinished"/> 4351 <translation>De configuratie van de webservice kan alleen worden gewijzigd als er geen openbare ruimte wordt gehost.</translation>
4339 </message> 4352 </message>
4340 <message> 4353 <message>
4341 <location filename="../../src/yuzu/configuration/configure_web.ui" line="128"/> 4354 <location filename="../../src/yuzu/configuration/configure_web.ui" line="128"/>
@@ -4345,17 +4358,17 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4345 <message> 4358 <message>
4346 <location filename="../../src/yuzu/configuration/configure_web.ui" line="134"/> 4359 <location filename="../../src/yuzu/configuration/configure_web.ui" line="134"/>
4347 <source>Share anonymous usage data with the yuzu team</source> 4360 <source>Share anonymous usage data with the yuzu team</source>
4348 <translation>Deel anonieme gebruiksdata met het yuzu team</translation> 4361 <translation>Deel anonieme gebruiksdata met het yuzu-team</translation>
4349 </message> 4362 </message>
4350 <message> 4363 <message>
4351 <location filename="../../src/yuzu/configuration/configure_web.ui" line="141"/> 4364 <location filename="../../src/yuzu/configuration/configure_web.ui" line="141"/>
4352 <source>Learn more</source> 4365 <source>Learn more</source>
4353 <translation>Leer meer</translation> 4366 <translation>Meer info</translation>
4354 </message> 4367 </message>
4355 <message> 4368 <message>
4356 <location filename="../../src/yuzu/configuration/configure_web.ui" line="150"/> 4369 <location filename="../../src/yuzu/configuration/configure_web.ui" line="150"/>
4357 <source>Telemetry ID:</source> 4370 <source>Telemetry ID:</source>
4358 <translation>Telemetrie ID:</translation> 4371 <translation>Telemetrie-ID:</translation>
4359 </message> 4372 </message>
4360 <message> 4373 <message>
4361 <location filename="../../src/yuzu/configuration/configure_web.ui" line="166"/> 4374 <location filename="../../src/yuzu/configuration/configure_web.ui" line="166"/>
@@ -4365,17 +4378,17 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4365 <message> 4378 <message>
4366 <location filename="../../src/yuzu/configuration/configure_web.ui" line="180"/> 4379 <location filename="../../src/yuzu/configuration/configure_web.ui" line="180"/>
4367 <source>Discord Presence</source> 4380 <source>Discord Presence</source>
4368 <translation>Discord Presence</translation> 4381 <translation>Aanwezigheid in Discord</translation>
4369 </message> 4382 </message>
4370 <message> 4383 <message>
4371 <location filename="../../src/yuzu/configuration/configure_web.ui" line="186"/> 4384 <location filename="../../src/yuzu/configuration/configure_web.ui" line="186"/>
4372 <source>Show Current Game in your Discord Status</source> 4385 <source>Show Current Game in your Discord Status</source>
4373 <translation>Toon huidige game in je Discord status</translation> 4386 <translation>Toon huidige game in uw Discord-status</translation>
4374 </message> 4387 </message>
4375 <message> 4388 <message>
4376 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="68"/> 4389 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="68"/>
4377 <source>&lt;a href=&apos;https://yuzu-emu.org/help/feature/telemetry/&apos;&gt;&lt;span style=&quot;text-decoration: underline; color:#039be5;&quot;&gt;Learn more&lt;/span&gt;&lt;/a&gt;</source> 4390 <source>&lt;a href=&apos;https://yuzu-emu.org/help/feature/telemetry/&apos;&gt;&lt;span style=&quot;text-decoration: underline; color:#039be5;&quot;&gt;Learn more&lt;/span&gt;&lt;/a&gt;</source>
4378 <translation>&lt;a href=&apos;https://yuzu-emu.org/help/feature/telemetry/&apos;&gt;&lt;span style=&quot;text-decoration: underline; color:#039be5;&quot;&gt;Leer meer&lt;/span&gt;&lt;/a&gt;</translation> 4391 <translation>&lt;a href=&apos;https://yuzu-emu.org/help/feature/telemetry/&apos;&gt;&lt;span style=&quot;text-decoration: underline; color:#039be5;&quot;&gt;Meer info&lt;/span&gt;&lt;/a&gt;</translation>
4379 </message> 4392 </message>
4380 <message> 4393 <message>
4381 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="72"/> 4394 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="72"/>
@@ -4391,7 +4404,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4391 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="80"/> 4404 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="80"/>
4392 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="125"/> 4405 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="125"/>
4393 <source>Telemetry ID: 0x%1</source> 4406 <source>Telemetry ID: 0x%1</source>
4394 <translation>Telemetrie ID: 0x%1</translation> 4407 <translation>Telemetrie-ID: 0x%1</translation>
4395 </message> 4408 </message>
4396 <message> 4409 <message>
4397 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="91"/> 4410 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="91"/>
@@ -4413,7 +4426,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4413 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="141"/> 4426 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="141"/>
4414 <source>Unverified, please click Verify before saving configuration</source> 4427 <source>Unverified, please click Verify before saving configuration</source>
4415 <comment>Tooltip</comment> 4428 <comment>Tooltip</comment>
4416 <translation type="unfinished"/> 4429 <translation>Niet geverifieerd, klik op Verifiëren voordat je de configuratie opslaat</translation>
4417 </message> 4430 </message>
4418 <message> 4431 <message>
4419 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="147"/> 4432 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="147"/>
@@ -4425,7 +4438,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4425 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="164"/> 4438 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="164"/>
4426 <source>Verified</source> 4439 <source>Verified</source>
4427 <comment>Tooltip</comment> 4440 <comment>Tooltip</comment>
4428 <translation type="unfinished"/> 4441 <translation>Geverifiëerd</translation>
4429 </message> 4442 </message>
4430 <message> 4443 <message>
4431 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="169"/> 4444 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="169"/>
@@ -4441,7 +4454,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4441 <message> 4454 <message>
4442 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="172"/> 4455 <location filename="../../src/yuzu/configuration/configure_web.cpp" line="172"/>
4443 <source>Verification failed. Check that you have entered your token correctly, and that your internet connection is working.</source> 4456 <source>Verification failed. Check that you have entered your token correctly, and that your internet connection is working.</source>
4444 <translation>Verificatie mislukt. Check dat uw token correct is en dat uw internet werkt.</translation> 4457 <translation>Verificatie mislukt. Controleer of je je token correct hebt ingevoerd en of je internetverbinding werkt.</translation>
4445 </message> 4458 </message>
4446</context> 4459</context>
4447<context> 4460<context>
@@ -4449,12 +4462,12 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4449 <message> 4462 <message>
4450 <location filename="../../src/yuzu/debugger/controller.cpp" line="20"/> 4463 <location filename="../../src/yuzu/debugger/controller.cpp" line="20"/>
4451 <source>Controller P1</source> 4464 <source>Controller P1</source>
4452 <translation type="unfinished"/> 4465 <translation>Controller P1</translation>
4453 </message> 4466 </message>
4454 <message> 4467 <message>
4455 <location filename="../../src/yuzu/debugger/controller.cpp" line="58"/> 4468 <location filename="../../src/yuzu/debugger/controller.cpp" line="58"/>
4456 <source>&amp;Controller P1</source> 4469 <source>&amp;Controller P1</source>
4457 <translation type="unfinished"/> 4470 <translation>&amp;Controller P1</translation>
4458 </message> 4471 </message>
4459</context> 4472</context>
4460<context> 4473<context>
@@ -4462,42 +4475,42 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4462 <message> 4475 <message>
4463 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="14"/> 4476 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="14"/>
4464 <source>Direct Connect</source> 4477 <source>Direct Connect</source>
4465 <translation type="unfinished"/> 4478 <translation>Directe Verbinding</translation>
4466 </message> 4479 </message>
4467 <message> 4480 <message>
4468 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="47"/> 4481 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="47"/>
4469 <source>Server Address</source> 4482 <source>Server Address</source>
4470 <translation type="unfinished"/> 4483 <translation>Serveradres</translation>
4471 </message> 4484 </message>
4472 <message> 4485 <message>
4473 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="54"/> 4486 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="54"/>
4474 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Server address of the host&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 4487 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Server address of the host&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
4475 <translation type="unfinished"/> 4488 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Serveradres van de host&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
4476 </message> 4489 </message>
4477 <message> 4490 <message>
4478 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="64"/> 4491 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="64"/>
4479 <source>Port</source> 4492 <source>Port</source>
4480 <translation type="unfinished"/> 4493 <translation>Poort</translation>
4481 </message> 4494 </message>
4482 <message> 4495 <message>
4483 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="71"/> 4496 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="71"/>
4484 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Port number the host is listening on&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 4497 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Port number the host is listening on&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
4485 <translation type="unfinished"/> 4498 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Poortnummer waarop de host luistert&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
4486 </message> 4499 </message>
4487 <message> 4500 <message>
4488 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="97"/> 4501 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="97"/>
4489 <source>Nickname</source> 4502 <source>Nickname</source>
4490 <translation type="unfinished"/> 4503 <translation>Gebruikersnaam</translation>
4491 </message> 4504 </message>
4492 <message> 4505 <message>
4493 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="111"/> 4506 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="111"/>
4494 <source>Password</source> 4507 <source>Password</source>
4495 <translation type="unfinished"/> 4508 <translation>Wachtwoord</translation>
4496 </message> 4509 </message>
4497 <message> 4510 <message>
4498 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="153"/> 4511 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="153"/>
4499 <source>Connect</source> 4512 <source>Connect</source>
4500 <translation type="unfinished"/> 4513 <translation>Verbind</translation>
4501 </message> 4514 </message>
4502</context> 4515</context>
4503<context> 4516<context>
@@ -4505,12 +4518,12 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4505 <message> 4518 <message>
4506 <location filename="../../src/yuzu/multiplayer/direct_connect.cpp" line="120"/> 4519 <location filename="../../src/yuzu/multiplayer/direct_connect.cpp" line="120"/>
4507 <source>Connecting</source> 4520 <source>Connecting</source>
4508 <translation type="unfinished"/> 4521 <translation>Verbinden</translation>
4509 </message> 4522 </message>
4510 <message> 4523 <message>
4511 <location filename="../../src/yuzu/multiplayer/direct_connect.cpp" line="125"/> 4524 <location filename="../../src/yuzu/multiplayer/direct_connect.cpp" line="125"/>
4512 <source>Connect</source> 4525 <source>Connect</source>
4513 <translation type="unfinished"/> 4526 <translation>Verbind</translation>
4514 </message> 4527 </message>
4515</context> 4528</context>
4516<context> 4529<context>
@@ -4528,12 +4541,12 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4528 <message> 4541 <message>
4529 <location filename="../../src/yuzu/main.cpp" line="432"/> 4542 <location filename="../../src/yuzu/main.cpp" line="432"/>
4530 <source>Broken Vulkan Installation Detected</source> 4543 <source>Broken Vulkan Installation Detected</source>
4531 <translation type="unfinished"/> 4544 <translation>Beschadigde Vulkan-installatie gedetecteerd</translation>
4532 </message> 4545 </message>
4533 <message> 4546 <message>
4534 <location filename="../../src/yuzu/main.cpp" line="433"/> 4547 <location filename="../../src/yuzu/main.cpp" line="433"/>
4535 <source>Vulkan initialization failed during boot.&lt;br&gt;&lt;br&gt;Click &lt;a href=&apos;https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected&apos;&gt;here for instructions to fix the issue&lt;/a&gt;.</source> 4548 <source>Vulkan initialization failed during boot.&lt;br&gt;&lt;br&gt;Click &lt;a href=&apos;https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected&apos;&gt;here for instructions to fix the issue&lt;/a&gt;.</source>
4536 <translation type="unfinished"/> 4549 <translation>Vulkan-initialisatie mislukt tijdens het opstarten.&lt;br&gt;&lt;br&gt;Klik &lt;a href=&apos;https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected&apos;&gt;hier voor instructies om het probleem op te lossen&lt;/a&gt;.</translation>
4537 </message> 4550 </message>
4538 <message> 4551 <message>
4539 <location filename="../../src/yuzu/main.cpp" line="824"/> 4552 <location filename="../../src/yuzu/main.cpp" line="824"/>
@@ -4544,79 +4557,80 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4544 <location filename="../../src/yuzu/main.cpp" line="874"/> 4557 <location filename="../../src/yuzu/main.cpp" line="874"/>
4545 <location filename="../../src/yuzu/main.cpp" line="877"/> 4558 <location filename="../../src/yuzu/main.cpp" line="877"/>
4546 <source>Disable Web Applet</source> 4559 <source>Disable Web Applet</source>
4547 <translation type="unfinished"/> 4560 <translation>Schakel Webapplet uit</translation>
4548 </message> 4561 </message>
4549 <message> 4562 <message>
4550 <location filename="../../src/yuzu/main.cpp" line="878"/> 4563 <location filename="../../src/yuzu/main.cpp" line="878"/>
4551 <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? 4564 <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet?
4552(This can be re-enabled in the Debug settings.)</source> 4565(This can be re-enabled in the Debug settings.)</source>
4553 <translation type="unfinished"/> 4566 <translation>Het uitschakelen van de webapplet kan leiden tot ongedefinieerd gedrag en mag alleen gebruikt worden met Super Mario 3D All-Stars. Weet je zeker dat je de webapplet wilt uitschakelen?
4567(Deze kan opnieuw worden ingeschakeld in de Debug-instellingen).</translation>
4554 </message> 4568 </message>
4555 <message> 4569 <message>
4556 <location filename="../../src/yuzu/main.cpp" line="994"/> 4570 <location filename="../../src/yuzu/main.cpp" line="994"/>
4557 <source>The amount of shaders currently being built</source> 4571 <source>The amount of shaders currently being built</source>
4558 <translation type="unfinished"/> 4572 <translation>Het aantal shaders dat momenteel wordt gebouwd</translation>
4559 </message> 4573 </message>
4560 <message> 4574 <message>
4561 <location filename="../../src/yuzu/main.cpp" line="996"/> 4575 <location filename="../../src/yuzu/main.cpp" line="996"/>
4562 <source>The current selected resolution scaling multiplier.</source> 4576 <source>The current selected resolution scaling multiplier.</source>
4563 <translation type="unfinished"/> 4577 <translation>De huidige geselecteerde resolutieschaalmultiplier.</translation>
4564 </message> 4578 </message>
4565 <message> 4579 <message>
4566 <location filename="../../src/yuzu/main.cpp" line="999"/> 4580 <location filename="../../src/yuzu/main.cpp" line="999"/>
4567 <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> 4581 <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source>
4568 <translation>Huidige emulatie snelheid. Waardes hoger of lager dan 100% betekent dat de emulatie sneller of langzamer loopt dan de Switch.</translation> 4582 <translation>Huidige emulatiesnelheid. Waarden hoger of lager dan 100% geven aan dat de emulatie sneller of langzamer werkt dan een Switch.</translation>
4569 </message> 4583 </message>
4570 <message> 4584 <message>
4571 <location filename="../../src/yuzu/main.cpp" line="1002"/> 4585 <location filename="../../src/yuzu/main.cpp" line="1002"/>
4572 <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> 4586 <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source>
4573 <translation>Hoeveel frames per seconde de game op dit moment weergeeft. Dit zal veranderen van game naar game en van scène naar scène.</translation> 4587 <translation>Hoeveel beelden per seconde het spel momenteel weergeeft. Dit varieert van spel tot spel en van scène tot scène.</translation>
4574 </message> 4588 </message>
4575 <message> 4589 <message>
4576 <location filename="../../src/yuzu/main.cpp" line="1006"/> 4590 <location filename="../../src/yuzu/main.cpp" line="1006"/>
4577 <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> 4591 <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source>
4578 <translation>Tijd gebruikt om een frame van de Switch te emuleren, waarbij framelimiteren of v-sync niet wordt meegerekend. Voor emulatie op volledige snelheid zou dit maximaal 16.67 ms zijn.</translation> 4592 <translation>Tijd die nodig is om een Switch-beeld te emuleren, beeldbeperking of v-sync niet meegerekend. Voor emulatie op volle snelheid mag dit maximaal 16,67 ms zijn.</translation>
4579 </message> 4593 </message>
4580 <message> 4594 <message>
4581 <location filename="../../src/yuzu/main.cpp" line="1156"/> 4595 <location filename="../../src/yuzu/main.cpp" line="1156"/>
4582 <source>&amp;Clear Recent Files</source> 4596 <source>&amp;Clear Recent Files</source>
4583 <translation type="unfinished"/> 4597 <translation>&amp;Wis Recente Bestanden</translation>
4584 </message> 4598 </message>
4585 <message> 4599 <message>
4586 <location filename="../../src/yuzu/main.cpp" line="1230"/> 4600 <location filename="../../src/yuzu/main.cpp" line="1230"/>
4587 <source>Emulated mouse is enabled</source> 4601 <source>Emulated mouse is enabled</source>
4588 <translation type="unfinished"/> 4602 <translation>Geëmuleerde muis is ingeschakeld</translation>
4589 </message> 4603 </message>
4590 <message> 4604 <message>
4591 <location filename="../../src/yuzu/main.cpp" line="1231"/> 4605 <location filename="../../src/yuzu/main.cpp" line="1231"/>
4592 <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> 4606 <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source>
4593 <translation type="unfinished"/> 4607 <translation>Echte muisinvoer en muispanning zijn niet compatibel. Schakel de geëmuleerde muis uit in de geavanceerde invoerinstellingen om muispanning mogelijk te maken.</translation>
4594 </message> 4608 </message>
4595 <message> 4609 <message>
4596 <location filename="../../src/yuzu/main.cpp" line="1453"/> 4610 <location filename="../../src/yuzu/main.cpp" line="1453"/>
4597 <source>&amp;Continue</source> 4611 <source>&amp;Continue</source>
4598 <translation type="unfinished"/> 4612 <translation>&amp;Doorgaan</translation>
4599 </message> 4613 </message>
4600 <message> 4614 <message>
4601 <location filename="../../src/yuzu/main.cpp" line="1455"/> 4615 <location filename="../../src/yuzu/main.cpp" line="1455"/>
4602 <source>&amp;Pause</source> 4616 <source>&amp;Pause</source>
4603 <translation>&amp;Pauzeren</translation> 4617 <translation>&amp;Onderbreken</translation>
4604 </message> 4618 </message>
4605 <message> 4619 <message>
4606 <location filename="../../src/yuzu/main.cpp" line="1535"/> 4620 <location filename="../../src/yuzu/main.cpp" line="1535"/>
4607 <source>yuzu is running a game</source> 4621 <source>yuzu is running a game</source>
4608 <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> 4622 <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment>
4609 <translation type="unfinished"/> 4623 <translation>yuzu is een spel aan het uitvoeren</translation>
4610 </message> 4624 </message>
4611 <message> 4625 <message>
4612 <location filename="../../src/yuzu/main.cpp" line="1668"/> 4626 <location filename="../../src/yuzu/main.cpp" line="1668"/>
4613 <source>Warning Outdated Game Format</source> 4627 <source>Warning Outdated Game Format</source>
4614 <translation>Waarschuwing Verouderd Spel Formaat</translation> 4628 <translation>Waarschuwing Verouderd Spelformaat</translation>
4615 </message> 4629 </message>
4616 <message> 4630 <message>
4617 <location filename="../../src/yuzu/main.cpp" line="1669"/> 4631 <location filename="../../src/yuzu/main.cpp" line="1669"/>
4618 <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.&lt;br&gt;&lt;br&gt;For an explanation of the various Switch formats yuzu supports, &lt;a href=&apos;https://yuzu-emu.org/wiki/overview-of-switch-game-formats&apos;&gt;check out our wiki&lt;/a&gt;. This message will not be shown again.</source> 4632 <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.&lt;br&gt;&lt;br&gt;For an explanation of the various Switch formats yuzu supports, &lt;a href=&apos;https://yuzu-emu.org/wiki/overview-of-switch-game-formats&apos;&gt;check out our wiki&lt;/a&gt;. This message will not be shown again.</source>
4619 <translation>Je gebruikt gedeconstrueerd ROM map formaat voor dit Spel, dit is een verouderd formaat en is vervangen door formaten zoals NCA, NAX, XCI of NSP. Gedeconstrueerd ROM map heeft geen iconen, metadata en update understeuning.&lt;br&gt;&lt;br&gt;Voor een uitleg over welke Switch formaten yuzu ondersteund, &lt;a href=&apos;https://yuzu-emu.org/wiki/overview-of-switch-game-formats&apos;&gt;kijk op onze wiki&lt;/a&gt;. Dit bericht word niet nog een keer weergegeven.</translation> 4633 <translation>Je gebruikt het gedeconstrueerde ROM-mapformaat voor dit spel, wat een verouderd formaat is dat vervangen is door andere zoals NCA, NAX, XCI, of NSP. Deconstructed ROM-mappen missen iconen, metadata, en update-ondersteuning.&lt;br&gt;&lt;br&gt;Voor een uitleg van de verschillende Switch-formaten die yuzu ondersteunt,&lt;a href=&apos;https://yuzu-emu.org/wiki/overview-of-switch-game-formats&apos;&gt; bekijk onze wiki&lt;/a&gt;. Dit bericht wordt niet meer getoond.</translation>
4620 </message> 4634 </message>
4621 <message> 4635 <message>
4622 <location filename="../../src/yuzu/main.cpp" line="1681"/> 4636 <location filename="../../src/yuzu/main.cpp" line="1681"/>
@@ -4627,7 +4641,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4627 <message> 4641 <message>
4628 <location filename="../../src/yuzu/main.cpp" line="1682"/> 4642 <location filename="../../src/yuzu/main.cpp" line="1682"/>
4629 <source>The ROM format is not supported.</source> 4643 <source>The ROM format is not supported.</source>
4630 <translation>Het formaat van de ROM is niet ondersteunt.</translation> 4644 <translation>Het ROM-formaat wordt niet ondersteund.</translation>
4631 </message> 4645 </message>
4632 <message> 4646 <message>
4633 <location filename="../../src/yuzu/main.cpp" line="1686"/> 4647 <location filename="../../src/yuzu/main.cpp" line="1686"/>
@@ -4637,19 +4651,19 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4637 <message> 4651 <message>
4638 <location filename="../../src/yuzu/main.cpp" line="1687"/> 4652 <location filename="../../src/yuzu/main.cpp" line="1687"/>
4639 <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: &lt;a href=&apos;https://yuzu-emu.org/help/reference/log-files/&apos;&gt;How to Upload the Log File&lt;/a&gt;. </source> 4653 <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: &lt;a href=&apos;https://yuzu-emu.org/help/reference/log-files/&apos;&gt;How to Upload the Log File&lt;/a&gt;. </source>
4640 <translation type="unfinished"/> 4654 <translation>yuzu is een fout tegengekomen tijdens het uitvoeren van de videokern. Dit wordt meestal veroorzaakt door verouderde GPU-drivers, inclusief geïntegreerde. Zie het logboek voor meer details. Voor meer informatie over toegang tot het log, zie de volgende pagina: &lt;a href=&apos;https://yuzu-emu.org/help/reference/log-files/&apos;&gt;Hoe upload je het logbestand&lt;/a&gt;. </translation>
4641 </message> 4655 </message>
4642 <message> 4656 <message>
4643 <location filename="../../src/yuzu/main.cpp" line="1702"/> 4657 <location filename="../../src/yuzu/main.cpp" line="1702"/>
4644 <source>Error while loading ROM! %1</source> 4658 <source>Error while loading ROM! %1</source>
4645 <comment>%1 signifies a numeric error code.</comment> 4659 <comment>%1 signifies a numeric error code.</comment>
4646 <translation type="unfinished"/> 4660 <translation>Fout tijdens het laden van ROM! %1</translation>
4647 </message> 4661 </message>
4648 <message> 4662 <message>
4649 <location filename="../../src/yuzu/main.cpp" line="1705"/> 4663 <location filename="../../src/yuzu/main.cpp" line="1705"/>
4650 <source>%1&lt;br&gt;Please follow &lt;a href=&apos;https://yuzu-emu.org/help/quickstart/&apos;&gt;the yuzu quickstart guide&lt;/a&gt; to redump your files.&lt;br&gt;You can refer to the yuzu wiki&lt;/a&gt; or the yuzu Discord&lt;/a&gt; for help.</source> 4664 <source>%1&lt;br&gt;Please follow &lt;a href=&apos;https://yuzu-emu.org/help/quickstart/&apos;&gt;the yuzu quickstart guide&lt;/a&gt; to redump your files.&lt;br&gt;You can refer to the yuzu wiki&lt;/a&gt; or the yuzu Discord&lt;/a&gt; for help.</source>
4651 <comment>%1 signifies an error string.</comment> 4665 <comment>%1 signifies an error string.</comment>
4652 <translation type="unfinished"/> 4666 <translation>%1&lt;br&gt;Volg de &lt;a href=&apos;https://yuzu-emu.org/help/quickstart/&apos;&gt;yuzu snelstartgids&lt;/a&gt; om je bestanden te redumpen.&lt;br&gt;Je kunt de yuzu-wiki&lt;/a&gt;of de yuzu-Discord&lt;/a&gt; raadplegen voor hulp.</translation>
4653 </message> 4667 </message>
4654 <message> 4668 <message>
4655 <location filename="../../src/yuzu/main.cpp" line="1716"/> 4669 <location filename="../../src/yuzu/main.cpp" line="1716"/>
@@ -4659,23 +4673,23 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4659 <message> 4673 <message>
4660 <location filename="../../src/yuzu/main.cpp" line="1858"/> 4674 <location filename="../../src/yuzu/main.cpp" line="1858"/>
4661 <source>(64-bit)</source> 4675 <source>(64-bit)</source>
4662 <translation type="unfinished"/> 4676 <translation>(64-bit)</translation>
4663 </message> 4677 </message>
4664 <message> 4678 <message>
4665 <location filename="../../src/yuzu/main.cpp" line="1858"/> 4679 <location filename="../../src/yuzu/main.cpp" line="1858"/>
4666 <source>(32-bit)</source> 4680 <source>(32-bit)</source>
4667 <translation type="unfinished"/> 4681 <translation>(32-bit)</translation>
4668 </message> 4682 </message>
4669 <message> 4683 <message>
4670 <location filename="../../src/yuzu/main.cpp" line="1859"/> 4684 <location filename="../../src/yuzu/main.cpp" line="1859"/>
4671 <source>%1 %2</source> 4685 <source>%1 %2</source>
4672 <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> 4686 <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment>
4673 <translation type="unfinished"/> 4687 <translation>%1 %2</translation>
4674 </message> 4688 </message>
4675 <message> 4689 <message>
4676 <location filename="../../src/yuzu/main.cpp" line="1917"/> 4690 <location filename="../../src/yuzu/main.cpp" line="1917"/>
4677 <source>Closing software...</source> 4691 <source>Closing software...</source>
4678 <translation type="unfinished"/> 4692 <translation>Software sluiten...</translation>
4679 </message> 4693 </message>
4680 <message> 4694 <message>
4681 <location filename="../../src/yuzu/main.cpp" line="2066"/> 4695 <location filename="../../src/yuzu/main.cpp" line="2066"/>
@@ -4690,58 +4704,58 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4690 <message> 4704 <message>
4691 <location filename="../../src/yuzu/main.cpp" line="2135"/> 4705 <location filename="../../src/yuzu/main.cpp" line="2135"/>
4692 <source>Error Opening %1 Folder</source> 4706 <source>Error Opening %1 Folder</source>
4693 <translation>Fout tijdens het openen van %1 folder</translation> 4707 <translation>Fout tijdens het openen van %1 map</translation>
4694 </message> 4708 </message>
4695 <message> 4709 <message>
4696 <location filename="../../src/yuzu/main.cpp" line="2136"/> 4710 <location filename="../../src/yuzu/main.cpp" line="2136"/>
4697 <location filename="../../src/yuzu/main.cpp" line="2718"/> 4711 <location filename="../../src/yuzu/main.cpp" line="2718"/>
4698 <source>Folder does not exist!</source> 4712 <source>Folder does not exist!</source>
4699 <translation>Folder bestaat niet!</translation> 4713 <translation>Map bestaat niet!</translation>
4700 </message> 4714 </message>
4701 <message> 4715 <message>
4702 <location filename="../../src/yuzu/main.cpp" line="2148"/> 4716 <location filename="../../src/yuzu/main.cpp" line="2148"/>
4703 <source>Error Opening Transferable Shader Cache</source> 4717 <source>Error Opening Transferable Shader Cache</source>
4704 <translation>Fout Bij Het Openen Van Overdraagbare Shader Cache</translation> 4718 <translation>Fout bij het openen van overdraagbare shader-cache</translation>
4705 </message> 4719 </message>
4706 <message> 4720 <message>
4707 <location filename="../../src/yuzu/main.cpp" line="2149"/> 4721 <location filename="../../src/yuzu/main.cpp" line="2149"/>
4708 <source>Failed to create the shader cache directory for this title.</source> 4722 <source>Failed to create the shader cache directory for this title.</source>
4709 <translation type="unfinished"/> 4723 <translation>Kon de shader-cache-map voor dit spel niet aanmaken.</translation>
4710 </message> 4724 </message>
4711 <message> 4725 <message>
4712 <location filename="../../src/yuzu/main.cpp" line="2200"/> 4726 <location filename="../../src/yuzu/main.cpp" line="2200"/>
4713 <source>Error Removing Contents</source> 4727 <source>Error Removing Contents</source>
4714 <translation type="unfinished"/> 4728 <translation>Fout bij het verwijderen van de inhoud</translation>
4715 </message> 4729 </message>
4716 <message> 4730 <message>
4717 <location filename="../../src/yuzu/main.cpp" line="2202"/> 4731 <location filename="../../src/yuzu/main.cpp" line="2202"/>
4718 <source>Error Removing Update</source> 4732 <source>Error Removing Update</source>
4719 <translation type="unfinished"/> 4733 <translation>Fout bij het verwijderen van de update</translation>
4720 </message> 4734 </message>
4721 <message> 4735 <message>
4722 <location filename="../../src/yuzu/main.cpp" line="2204"/> 4736 <location filename="../../src/yuzu/main.cpp" line="2204"/>
4723 <source>Error Removing DLC</source> 4737 <source>Error Removing DLC</source>
4724 <translation type="unfinished"/> 4738 <translation>Fout bij het verwijderen van DLC</translation>
4725 </message> 4739 </message>
4726 <message> 4740 <message>
4727 <location filename="../../src/yuzu/main.cpp" line="2213"/> 4741 <location filename="../../src/yuzu/main.cpp" line="2213"/>
4728 <source>Remove Installed Game Contents?</source> 4742 <source>Remove Installed Game Contents?</source>
4729 <translation type="unfinished"/> 4743 <translation>Geïnstalleerde Spelinhoud Verwijderen?</translation>
4730 </message> 4744 </message>
4731 <message> 4745 <message>
4732 <location filename="../../src/yuzu/main.cpp" line="2215"/> 4746 <location filename="../../src/yuzu/main.cpp" line="2215"/>
4733 <source>Remove Installed Game Update?</source> 4747 <source>Remove Installed Game Update?</source>
4734 <translation type="unfinished"/> 4748 <translation>Geïnstalleerde Spel-update Verwijderen?</translation>
4735 </message> 4749 </message>
4736 <message> 4750 <message>
4737 <location filename="../../src/yuzu/main.cpp" line="2217"/> 4751 <location filename="../../src/yuzu/main.cpp" line="2217"/>
4738 <source>Remove Installed Game DLC?</source> 4752 <source>Remove Installed Game DLC?</source>
4739 <translation type="unfinished"/> 4753 <translation>Geïnstalleerde Spel-DLC Verwijderen?</translation>
4740 </message> 4754 </message>
4741 <message> 4755 <message>
4742 <location filename="../../src/yuzu/main.cpp" line="2223"/> 4756 <location filename="../../src/yuzu/main.cpp" line="2223"/>
4743 <source>Remove Entry</source> 4757 <source>Remove Entry</source>
4744 <translation type="unfinished"/> 4758 <translation>Verwijder Invoer</translation>
4745 </message> 4759 </message>
4746 <message> 4760 <message>
4747 <location filename="../../src/yuzu/main.cpp" line="2254"/> 4761 <location filename="../../src/yuzu/main.cpp" line="2254"/>
@@ -4751,147 +4765,147 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4751 <location filename="../../src/yuzu/main.cpp" line="2398"/> 4765 <location filename="../../src/yuzu/main.cpp" line="2398"/>
4752 <location filename="../../src/yuzu/main.cpp" line="2421"/> 4766 <location filename="../../src/yuzu/main.cpp" line="2421"/>
4753 <source>Successfully Removed</source> 4767 <source>Successfully Removed</source>
4754 <translation type="unfinished"/> 4768 <translation>Met Succes Verwijderd</translation>
4755 </message> 4769 </message>
4756 <message> 4770 <message>
4757 <location filename="../../src/yuzu/main.cpp" line="2255"/> 4771 <location filename="../../src/yuzu/main.cpp" line="2255"/>
4758 <source>Successfully removed the installed base game.</source> 4772 <source>Successfully removed the installed base game.</source>
4759 <translation type="unfinished"/> 4773 <translation>Het geïnstalleerde basisspel is succesvol verwijderd.</translation>
4760 </message> 4774 </message>
4761 <message> 4775 <message>
4762 <location filename="../../src/yuzu/main.cpp" line="2259"/> 4776 <location filename="../../src/yuzu/main.cpp" line="2259"/>
4763 <source>The base game is not installed in the NAND and cannot be removed.</source> 4777 <source>The base game is not installed in the NAND and cannot be removed.</source>
4764 <translation type="unfinished"/> 4778 <translation>Het basisspel is niet geïnstalleerd in de NAND en kan niet worden verwijderd.</translation>
4765 </message> 4779 </message>
4766 <message> 4780 <message>
4767 <location filename="../../src/yuzu/main.cpp" line="2271"/> 4781 <location filename="../../src/yuzu/main.cpp" line="2271"/>
4768 <source>Successfully removed the installed update.</source> 4782 <source>Successfully removed the installed update.</source>
4769 <translation type="unfinished"/> 4783 <translation>De geïnstalleerde update is succesvol verwijderd.</translation>
4770 </message> 4784 </message>
4771 <message> 4785 <message>
4772 <location filename="../../src/yuzu/main.cpp" line="2274"/> 4786 <location filename="../../src/yuzu/main.cpp" line="2274"/>
4773 <source>There is no update installed for this title.</source> 4787 <source>There is no update installed for this title.</source>
4774 <translation type="unfinished"/> 4788 <translation>Er is geen update geïnstalleerd voor dit spel.</translation>
4775 </message> 4789 </message>
4776 <message> 4790 <message>
4777 <location filename="../../src/yuzu/main.cpp" line="2297"/> 4791 <location filename="../../src/yuzu/main.cpp" line="2297"/>
4778 <source>There are no DLC installed for this title.</source> 4792 <source>There are no DLC installed for this title.</source>
4779 <translation type="unfinished"/> 4793 <translation>Er is geen DLC geïnstalleerd voor dit spel.</translation>
4780 </message> 4794 </message>
4781 <message> 4795 <message>
4782 <location filename="../../src/yuzu/main.cpp" line="2302"/> 4796 <location filename="../../src/yuzu/main.cpp" line="2302"/>
4783 <source>Successfully removed %1 installed DLC.</source> 4797 <source>Successfully removed %1 installed DLC.</source>
4784 <translation type="unfinished"/> 4798 <translation>%1 geïnstalleerde DLC met succes verwijderd.</translation>
4785 </message> 4799 </message>
4786 <message> 4800 <message>
4787 <location filename="../../src/yuzu/main.cpp" line="2310"/> 4801 <location filename="../../src/yuzu/main.cpp" line="2310"/>
4788 <source>Delete OpenGL Transferable Shader Cache?</source> 4802 <source>Delete OpenGL Transferable Shader Cache?</source>
4789 <translation type="unfinished"/> 4803 <translation>Overdraagbare OpenGL-shader-cache Verwijderen?</translation>
4790 </message> 4804 </message>
4791 <message> 4805 <message>
4792 <location filename="../../src/yuzu/main.cpp" line="2312"/> 4806 <location filename="../../src/yuzu/main.cpp" line="2312"/>
4793 <source>Delete Vulkan Transferable Shader Cache?</source> 4807 <source>Delete Vulkan Transferable Shader Cache?</source>
4794 <translation type="unfinished"/> 4808 <translation>Overdraagbare Vulkan-shader-cache Verwijderen?</translation>
4795 </message> 4809 </message>
4796 <message> 4810 <message>
4797 <location filename="../../src/yuzu/main.cpp" line="2314"/> 4811 <location filename="../../src/yuzu/main.cpp" line="2314"/>
4798 <source>Delete All Transferable Shader Caches?</source> 4812 <source>Delete All Transferable Shader Caches?</source>
4799 <translation type="unfinished"/> 4813 <translation>Alle Overdraagbare Shader-caches Verwijderen?</translation>
4800 </message> 4814 </message>
4801 <message> 4815 <message>
4802 <location filename="../../src/yuzu/main.cpp" line="2316"/> 4816 <location filename="../../src/yuzu/main.cpp" line="2316"/>
4803 <source>Remove Custom Game Configuration?</source> 4817 <source>Remove Custom Game Configuration?</source>
4804 <translation type="unfinished"/> 4818 <translation>Aangepaste Spelconfiguratie Verwijderen?</translation>
4805 </message> 4819 </message>
4806 <message> 4820 <message>
4807 <location filename="../../src/yuzu/main.cpp" line="2322"/> 4821 <location filename="../../src/yuzu/main.cpp" line="2322"/>
4808 <source>Remove File</source> 4822 <source>Remove File</source>
4809 <translation type="unfinished"/> 4823 <translation>Verwijder Bestand</translation>
4810 </message> 4824 </message>
4811 <message> 4825 <message>
4812 <location filename="../../src/yuzu/main.cpp" line="2359"/> 4826 <location filename="../../src/yuzu/main.cpp" line="2359"/>
4813 <location filename="../../src/yuzu/main.cpp" line="2367"/> 4827 <location filename="../../src/yuzu/main.cpp" line="2367"/>
4814 <source>Error Removing Transferable Shader Cache</source> 4828 <source>Error Removing Transferable Shader Cache</source>
4815 <translation type="unfinished"/> 4829 <translation>Fout bij het verwijderen van Overdraagbare Shader-cache</translation>
4816 </message> 4830 </message>
4817 <message> 4831 <message>
4818 <location filename="../../src/yuzu/main.cpp" line="2360"/> 4832 <location filename="../../src/yuzu/main.cpp" line="2360"/>
4819 <location filename="../../src/yuzu/main.cpp" line="2394"/> 4833 <location filename="../../src/yuzu/main.cpp" line="2394"/>
4820 <source>A shader cache for this title does not exist.</source> 4834 <source>A shader cache for this title does not exist.</source>
4821 <translation>Er bestaat geen shader cache voor deze game</translation> 4835 <translation>Er bestaat geen shader-cache voor dit spel.</translation>
4822 </message> 4836 </message>
4823 <message> 4837 <message>
4824 <location filename="../../src/yuzu/main.cpp" line="2365"/> 4838 <location filename="../../src/yuzu/main.cpp" line="2365"/>
4825 <source>Successfully removed the transferable shader cache.</source> 4839 <source>Successfully removed the transferable shader cache.</source>
4826 <translation type="unfinished"/> 4840 <translation>De overdraagbare shader-cache is verwijderd.</translation>
4827 </message> 4841 </message>
4828 <message> 4842 <message>
4829 <location filename="../../src/yuzu/main.cpp" line="2368"/> 4843 <location filename="../../src/yuzu/main.cpp" line="2368"/>
4830 <source>Failed to remove the transferable shader cache.</source> 4844 <source>Failed to remove the transferable shader cache.</source>
4831 <translation type="unfinished"/> 4845 <translation>Kon de overdraagbare shader-cache niet verwijderen.</translation>
4832 </message> 4846 </message>
4833 <message> 4847 <message>
4834 <location filename="../../src/yuzu/main.cpp" line="2383"/> 4848 <location filename="../../src/yuzu/main.cpp" line="2383"/>
4835 <source>Error Removing Vulkan Driver Pipeline Cache</source> 4849 <source>Error Removing Vulkan Driver Pipeline Cache</source>
4836 <translation type="unfinished"/> 4850 <translation>Fout bij het verwijderen van Pijplijn-cache van Vulkan-driver</translation>
4837 </message> 4851 </message>
4838 <message> 4852 <message>
4839 <location filename="../../src/yuzu/main.cpp" line="2384"/> 4853 <location filename="../../src/yuzu/main.cpp" line="2384"/>
4840 <source>Failed to remove the driver pipeline cache.</source> 4854 <source>Failed to remove the driver pipeline cache.</source>
4841 <translation type="unfinished"/> 4855 <translation>Kon de pijplijn-cache van de driver niet verwijderen.</translation>
4842 </message> 4856 </message>
4843 <message> 4857 <message>
4844 <location filename="../../src/yuzu/main.cpp" line="2393"/> 4858 <location filename="../../src/yuzu/main.cpp" line="2393"/>
4845 <location filename="../../src/yuzu/main.cpp" line="2401"/> 4859 <location filename="../../src/yuzu/main.cpp" line="2401"/>
4846 <source>Error Removing Transferable Shader Caches</source> 4860 <source>Error Removing Transferable Shader Caches</source>
4847 <translation type="unfinished"/> 4861 <translation>Fout bij het verwijderen van overdraagbare shader-caches</translation>
4848 </message> 4862 </message>
4849 <message> 4863 <message>
4850 <location filename="../../src/yuzu/main.cpp" line="2399"/> 4864 <location filename="../../src/yuzu/main.cpp" line="2399"/>
4851 <source>Successfully removed the transferable shader caches.</source> 4865 <source>Successfully removed the transferable shader caches.</source>
4852 <translation type="unfinished"/> 4866 <translation>De overdraagbare shader-caches zijn verwijderd.</translation>
4853 </message> 4867 </message>
4854 <message> 4868 <message>
4855 <location filename="../../src/yuzu/main.cpp" line="2402"/> 4869 <location filename="../../src/yuzu/main.cpp" line="2402"/>
4856 <source>Failed to remove the transferable shader cache directory.</source> 4870 <source>Failed to remove the transferable shader cache directory.</source>
4857 <translation type="unfinished"/> 4871 <translation>Kon de overdraagbare shader-cache-map niet verwijderen.</translation>
4858 </message> 4872 </message>
4859 <message> 4873 <message>
4860 <location filename="../../src/yuzu/main.cpp" line="2415"/> 4874 <location filename="../../src/yuzu/main.cpp" line="2415"/>
4861 <location filename="../../src/yuzu/main.cpp" line="2424"/> 4875 <location filename="../../src/yuzu/main.cpp" line="2424"/>
4862 <source>Error Removing Custom Configuration</source> 4876 <source>Error Removing Custom Configuration</source>
4863 <translation type="unfinished"/> 4877 <translation>Fout bij het verwijderen van aangepaste configuratie</translation>
4864 </message> 4878 </message>
4865 <message> 4879 <message>
4866 <location filename="../../src/yuzu/main.cpp" line="2416"/> 4880 <location filename="../../src/yuzu/main.cpp" line="2416"/>
4867 <source>A custom configuration for this title does not exist.</source> 4881 <source>A custom configuration for this title does not exist.</source>
4868 <translation type="unfinished"/> 4882 <translation>Er bestaat geen aangepaste configuratie voor dit spel.</translation>
4869 </message> 4883 </message>
4870 <message> 4884 <message>
4871 <location filename="../../src/yuzu/main.cpp" line="2422"/> 4885 <location filename="../../src/yuzu/main.cpp" line="2422"/>
4872 <source>Successfully removed the custom game configuration.</source> 4886 <source>Successfully removed the custom game configuration.</source>
4873 <translation type="unfinished"/> 4887 <translation>De aangepaste spelconfiguratie is verwijderd.</translation>
4874 </message> 4888 </message>
4875 <message> 4889 <message>
4876 <location filename="../../src/yuzu/main.cpp" line="2425"/> 4890 <location filename="../../src/yuzu/main.cpp" line="2425"/>
4877 <source>Failed to remove the custom game configuration.</source> 4891 <source>Failed to remove the custom game configuration.</source>
4878 <translation type="unfinished"/> 4892 <translation>Kon de aangepaste spelconfiguratie niet verwijderen.</translation>
4879 </message> 4893 </message>
4880 <message> 4894 <message>
4881 <location filename="../../src/yuzu/main.cpp" line="2432"/> 4895 <location filename="../../src/yuzu/main.cpp" line="2432"/>
4882 <location filename="../../src/yuzu/main.cpp" line="2511"/> 4896 <location filename="../../src/yuzu/main.cpp" line="2511"/>
4883 <source>RomFS Extraction Failed!</source> 4897 <source>RomFS Extraction Failed!</source>
4884 <translation>RomFS Extractie Mislukt!</translation> 4898 <translation>RomFS-extractie Mislukt!</translation>
4885 </message> 4899 </message>
4886 <message> 4900 <message>
4887 <location filename="../../src/yuzu/main.cpp" line="2433"/> 4901 <location filename="../../src/yuzu/main.cpp" line="2433"/>
4888 <source>There was an error copying the RomFS files or the user cancelled the operation.</source> 4902 <source>There was an error copying the RomFS files or the user cancelled the operation.</source>
4889 <translation>Er was een fout tijdens het kopiëren van de RomFS bestanden of de gebruiker heeft de operatie geannuleerd.</translation> 4903 <translation>Er is een fout opgetreden bij het kopiëren van de RomFS-bestanden of de gebruiker heeft de bewerking geannuleerd.</translation>
4890 </message> 4904 </message>
4891 <message> 4905 <message>
4892 <location filename="../../src/yuzu/main.cpp" line="2491"/> 4906 <location filename="../../src/yuzu/main.cpp" line="2491"/>
4893 <source>Full</source> 4907 <source>Full</source>
4894 <translation>Vol</translation> 4908 <translation>Volledig</translation>
4895 </message> 4909 </message>
4896 <message> 4910 <message>
4897 <location filename="../../src/yuzu/main.cpp" line="2491"/> 4911 <location filename="../../src/yuzu/main.cpp" line="2491"/>
@@ -4901,17 +4915,17 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4901 <message> 4915 <message>
4902 <location filename="../../src/yuzu/main.cpp" line="2493"/> 4916 <location filename="../../src/yuzu/main.cpp" line="2493"/>
4903 <source>Select RomFS Dump Mode</source> 4917 <source>Select RomFS Dump Mode</source>
4904 <translation>Selecteer RomFS Dump Mode</translation> 4918 <translation>Selecteer RomFS-dumpmodus</translation>
4905 </message> 4919 </message>
4906 <message> 4920 <message>
4907 <location filename="../../src/yuzu/main.cpp" line="2494"/> 4921 <location filename="../../src/yuzu/main.cpp" line="2494"/>
4908 <source>Please select the how you would like the RomFS dumped.&lt;br&gt;Full will copy all of the files into the new directory while &lt;br&gt;skeleton will only create the directory structure.</source> 4922 <source>Please select the how you would like the RomFS dumped.&lt;br&gt;Full will copy all of the files into the new directory while &lt;br&gt;skeleton will only create the directory structure.</source>
4909 <translation>Selecteer alstublieft hoe je de RomFS wilt dumpen.&lt;br&gt;Volledig kopieërd alle bestanden in een map terwijl &lt;br&gt; skelet maakt alleen het map structuur.</translation> 4923 <translation>Selecteer hoe je de RomFS gedumpt wilt hebben.&lt;br&gt;Volledig zal alle bestanden naar de nieuwe map kopiëren, terwijl &lt;br&gt;Skelet alleen de mapstructuur zal aanmaken.</translation>
4910 </message> 4924 </message>
4911 <message> 4925 <message>
4912 <location filename="../../src/yuzu/main.cpp" line="2512"/> 4926 <location filename="../../src/yuzu/main.cpp" line="2512"/>
4913 <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation &gt; Configure &gt; System &gt; Filesystem &gt; Dump Root</source> 4927 <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation &gt; Configure &gt; System &gt; Filesystem &gt; Dump Root</source>
4914 <translation type="unfinished"/> 4928 <translation>Er is niet genoeg vrije ruimte op %1 om de RomFS uit te pakken. Maak ruimte vrij of kies een andere dumpmap bij Emulatie &gt; Configuratie &gt; Systeem &gt; Bestandssysteem &gt; Dump Root.</translation>
4915 </message> 4929 </message>
4916 <message> 4930 <message>
4917 <location filename="../../src/yuzu/main.cpp" line="2519"/> 4931 <location filename="../../src/yuzu/main.cpp" line="2519"/>
@@ -4927,12 +4941,12 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4927 <message> 4941 <message>
4928 <location filename="../../src/yuzu/main.cpp" line="2526"/> 4942 <location filename="../../src/yuzu/main.cpp" line="2526"/>
4929 <source>RomFS Extraction Succeeded!</source> 4943 <source>RomFS Extraction Succeeded!</source>
4930 <translation>RomFS Extractie Geslaagd!</translation> 4944 <translation>RomFS-extractie Geslaagd!</translation>
4931 </message> 4945 </message>
4932 <message> 4946 <message>
4933 <location filename="../../src/yuzu/main.cpp" line="2527"/> 4947 <location filename="../../src/yuzu/main.cpp" line="2527"/>
4934 <source>The operation completed successfully.</source> 4948 <source>The operation completed successfully.</source>
4935 <translation>De operatie is succesvol voltooid.</translation> 4949 <translation>De bewerking is succesvol voltooid.</translation>
4936 </message> 4950 </message>
4937 <message> 4951 <message>
4938 <location filename="../../src/yuzu/main.cpp" line="2571"/> 4952 <location filename="../../src/yuzu/main.cpp" line="2571"/>
@@ -4941,47 +4955,47 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
4941 <location filename="../../src/yuzu/main.cpp" line="2687"/> 4955 <location filename="../../src/yuzu/main.cpp" line="2687"/>
4942 <location filename="../../src/yuzu/main.cpp" line="2695"/> 4956 <location filename="../../src/yuzu/main.cpp" line="2695"/>
4943 <source>Create Shortcut</source> 4957 <source>Create Shortcut</source>
4944 <translation type="unfinished"/> 4958 <translation>Maak Snelkoppeling</translation>
4945 </message> 4959 </message>
4946 <message> 4960 <message>
4947 <location filename="../../src/yuzu/main.cpp" line="2572"/> 4961 <location filename="../../src/yuzu/main.cpp" line="2572"/>
4948 <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> 4962 <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source>
4949 <translation type="unfinished"/> 4963 <translation>Dit maakt een snelkoppeling naar de huidige AppImage. Dit werkt mogelijk niet goed als je een update uitvoert. Doorgaan?</translation>
4950 </message> 4964 </message>
4951 <message> 4965 <message>
4952 <location filename="../../src/yuzu/main.cpp" line="2596"/> 4966 <location filename="../../src/yuzu/main.cpp" line="2596"/>
4953 <source>Cannot create shortcut on desktop. Path &quot;%1&quot; does not exist.</source> 4967 <source>Cannot create shortcut on desktop. Path &quot;%1&quot; does not exist.</source>
4954 <translation type="unfinished"/> 4968 <translation>Kan geen snelkoppeling op het bureaublad maken. Pad &quot;%1&quot; bestaat niet.</translation>
4955 </message> 4969 </message>
4956 <message> 4970 <message>
4957 <location filename="../../src/yuzu/main.cpp" line="2606"/> 4971 <location filename="../../src/yuzu/main.cpp" line="2606"/>
4958 <source>Cannot create shortcut in applications menu. Path &quot;%1&quot; does not exist and cannot be created.</source> 4972 <source>Cannot create shortcut in applications menu. Path &quot;%1&quot; does not exist and cannot be created.</source>
4959 <translation type="unfinished"/> 4973 <translation>Kan geen snelkoppeling maken in toepassingen menu. Pad &quot;%1&quot; bestaat niet en kan niet worden aangemaakt.</translation>
4960 </message> 4974 </message>
4961 <message> 4975 <message>
4962 <location filename="../../src/yuzu/main.cpp" line="2623"/> 4976 <location filename="../../src/yuzu/main.cpp" line="2623"/>
4963 <source>Create Icon</source> 4977 <source>Create Icon</source>
4964 <translation type="unfinished"/> 4978 <translation>Maak Icoon</translation>
4965 </message> 4979 </message>
4966 <message> 4980 <message>
4967 <location filename="../../src/yuzu/main.cpp" line="2624"/> 4981 <location filename="../../src/yuzu/main.cpp" line="2624"/>
4968 <source>Cannot create icon file. Path &quot;%1&quot; does not exist and cannot be created.</source> 4982 <source>Cannot create icon file. Path &quot;%1&quot; does not exist and cannot be created.</source>
4969 <translation type="unfinished"/> 4983 <translation>Kan geen icoonbestand maken. Pad &quot;%1&quot; bestaat niet en kan niet worden aangemaakt.</translation>
4970 </message> 4984 </message>
4971 <message> 4985 <message>
4972 <location filename="../../src/yuzu/main.cpp" line="2675"/> 4986 <location filename="../../src/yuzu/main.cpp" line="2675"/>
4973 <source>Start %1 with the yuzu Emulator</source> 4987 <source>Start %1 with the yuzu Emulator</source>
4974 <translation type="unfinished"/> 4988 <translation>Voer %1 uiit met de yuzu-emulator</translation>
4975 </message> 4989 </message>
4976 <message> 4990 <message>
4977 <location filename="../../src/yuzu/main.cpp" line="2688"/> 4991 <location filename="../../src/yuzu/main.cpp" line="2688"/>
4978 <source>Failed to create a shortcut at %1</source> 4992 <source>Failed to create a shortcut at %1</source>
4979 <translation type="unfinished"/> 4993 <translation>Er is geen snelkoppeling gemaakt op %1</translation>
4980 </message> 4994 </message>
4981 <message> 4995 <message>
4982 <location filename="../../src/yuzu/main.cpp" line="2696"/> 4996 <location filename="../../src/yuzu/main.cpp" line="2696"/>
4983 <source>Successfully created a shortcut to %1</source> 4997 <source>Successfully created a shortcut to %1</source>
4984 <translation type="unfinished"/> 4998 <translation>Succesvol een snelkoppeling naar %1 gemaakt</translation>
4985 </message> 4999 </message>
4986 <message> 5000 <message>
4987 <location filename="../../src/yuzu/main.cpp" line="2717"/> 5001 <location filename="../../src/yuzu/main.cpp" line="2717"/>
@@ -5001,13 +5015,13 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
5001 <message> 5015 <message>
5002 <location filename="../../src/yuzu/main.cpp" line="2756"/> 5016 <location filename="../../src/yuzu/main.cpp" line="2756"/>
5003 <source>The game properties could not be loaded.</source> 5017 <source>The game properties could not be loaded.</source>
5004 <translation>De eigenschappen van de game kunnen niet geladen worden.</translation> 5018 <translation>De speleigenschappen kunnen niet geladen worden.</translation>
5005 </message> 5019 </message>
5006 <message> 5020 <message>
5007 <location filename="../../src/yuzu/main.cpp" line="2773"/> 5021 <location filename="../../src/yuzu/main.cpp" line="2773"/>
5008 <source>Switch Executable (%1);;All Files (*.*)</source> 5022 <source>Switch Executable (%1);;All Files (*.*)</source>
5009 <comment>%1 is an identifier for the Switch executable file extensions.</comment> 5023 <comment>%1 is an identifier for the Switch executable file extensions.</comment>
5010 <translation>Switch Executable (%1);;Alle bestanden (*.*)</translation> 5024 <translation>Switch Executable (%1);;Alle Bestanden (*.*)</translation>
5011 </message> 5025 </message>
5012 <message> 5026 <message>
5013 <location filename="../../src/yuzu/main.cpp" line="2777"/> 5027 <location filename="../../src/yuzu/main.cpp" line="2777"/>
@@ -5017,7 +5031,7 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
5017 <message> 5031 <message>
5018 <location filename="../../src/yuzu/main.cpp" line="2790"/> 5032 <location filename="../../src/yuzu/main.cpp" line="2790"/>
5019 <source>Open Extracted ROM Directory</source> 5033 <source>Open Extracted ROM Directory</source>
5020 <translation>Open Gedecomprimeerd ROM Map</translation> 5034 <translation>Open Uitgepakte ROM-map</translation>
5021 </message> 5035 </message>
5022 <message> 5036 <message>
5023 <location filename="../../src/yuzu/main.cpp" line="2801"/> 5037 <location filename="../../src/yuzu/main.cpp" line="2801"/>
@@ -5027,22 +5041,22 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
5027 <message> 5041 <message>
5028 <location filename="../../src/yuzu/main.cpp" line="2802"/> 5042 <location filename="../../src/yuzu/main.cpp" line="2802"/>
5029 <source>The directory you have selected does not contain a &apos;main&apos; file.</source> 5043 <source>The directory you have selected does not contain a &apos;main&apos; file.</source>
5030 <translation>De map die je hebt geselecteerd bevat geen &apos;main&apos; bestand.</translation> 5044 <translation>De map die je hebt geselecteerd bevat geen &apos;main&apos;-bestand.</translation>
5031 </message> 5045 </message>
5032 <message> 5046 <message>
5033 <location filename="../../src/yuzu/main.cpp" line="2812"/> 5047 <location filename="../../src/yuzu/main.cpp" line="2812"/>
5034 <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> 5048 <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source>
5035 <translation type="unfinished"/> 5049 <translation>Installeerbaar Switch-bestand (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</translation>
5036 </message> 5050 </message>
5037 <message> 5051 <message>
5038 <location filename="../../src/yuzu/main.cpp" line="2817"/> 5052 <location filename="../../src/yuzu/main.cpp" line="2817"/>
5039 <source>Install Files</source> 5053 <source>Install Files</source>
5040 <translation type="unfinished"/> 5054 <translation>Installeer Bestanden</translation>
5041 </message> 5055 </message>
5042 <message numerus="yes"> 5056 <message numerus="yes">
5043 <location filename="../../src/yuzu/main.cpp" line="2863"/> 5057 <location filename="../../src/yuzu/main.cpp" line="2863"/>
5044 <source>%n file(s) remaining</source> 5058 <source>%n file(s) remaining</source>
5045 <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> 5059 <translation><numerusform>%n bestand(en) resterend</numerusform><numerusform>%n bestand(en) resterend</numerusform></translation>
5046 </message> 5060 </message>
5047 <message> 5061 <message>
5048 <location filename="../../src/yuzu/main.cpp" line="2865"/> 5062 <location filename="../../src/yuzu/main.cpp" line="2865"/>
@@ -5053,71 +5067,78 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen
5053 <location filename="../../src/yuzu/main.cpp" line="2911"/> 5067 <location filename="../../src/yuzu/main.cpp" line="2911"/>
5054 <location filename="../../src/yuzu/main.cpp" line="2925"/> 5068 <location filename="../../src/yuzu/main.cpp" line="2925"/>
5055 <source>Install Results</source> 5069 <source>Install Results</source>
5056 <translation type="unfinished"/> 5070 <translation>Installeerresultaten</translation>
5057 </message> 5071 </message>
5058 <message> 5072 <message>
5059 <location filename="../../src/yuzu/main.cpp" line="2912"/> 5073 <location filename="../../src/yuzu/main.cpp" line="2912"/>
5060 <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. 5074 <source>To avoid possible conflicts, we discourage users from installing base games to the NAND.
5061Please, only use this feature to install updates and DLC.</source> 5075Please, only use this feature to install updates and DLC.</source>
5062 <translation type="unfinished"/> 5076 <translation>Om mogelijke conflicten te voorkomen, raden we gebruikers af om basisgames te installeren op de NAND.
5077Gebruik deze functie alleen om updates en DLC te installeren.</translation>
5063 </message> 5078 </message>
5064 <message numerus="yes"> 5079 <message numerus="yes">
5065 <location filename="../../src/yuzu/main.cpp" line="2918"/> 5080 <location filename="../../src/yuzu/main.cpp" line="2918"/>
5066 <source>%n file(s) were newly installed 5081 <source>%n file(s) were newly installed
5067</source> 5082</source>
5068 <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> 5083 <translation><numerusform>%n bestand(en) zijn recent geïnstalleerd
5084</numerusform><numerusform>%n bestand(en) zijn recent geïnstalleerd
5085</numerusform></translation>
5069 </message> 5086 </message>
5070 <message numerus="yes"> 5087 <message numerus="yes">
5071 <location filename="../../src/yuzu/main.cpp" line="2921"/> 5088 <location filename="../../src/yuzu/main.cpp" line="2921"/>
5072 <source>%n file(s) were overwritten 5089 <source>%n file(s) were overwritten
5073</source> 5090</source>
5074 <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> 5091 <translation><numerusform>%n bestand(en) werden overschreven
5092</numerusform><numerusform>%n bestand(en) werden overschreven
5093</numerusform></translation>
5075 </message> 5094 </message>
5076 <message numerus="yes"> 5095 <message numerus="yes">
5077 <location filename="../../src/yuzu/main.cpp" line="2923"/> 5096 <location filename="../../src/yuzu/main.cpp" line="2923"/>
5078 <source>%n file(s) failed to install 5097 <source>%n file(s) failed to install
5079</source> 5098</source>
5080 <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> 5099 <translation><numerusform>%n bestand(en) niet geïnstalleerd
5100</numerusform><numerusform>%n bestand(en) niet geïnstalleerd
5101</numerusform></translation>
5081 </message> 5102 </message>
5082 <message> 5103 <message>
5083 <location filename="../../src/yuzu/main.cpp" line="3024"/> 5104 <location filename="../../src/yuzu/main.cpp" line="3024"/>
5084 <source>System Application</source> 5105 <source>System Application</source>
5085 <translation>Systeem Applicatie</translation> 5106 <translation>Systeemapplicatie</translation>
5086 </message> 5107 </message>
5087 <message> 5108 <message>
5088 <location filename="../../src/yuzu/main.cpp" line="3025"/> 5109 <location filename="../../src/yuzu/main.cpp" line="3025"/>
5089 <source>System Archive</source> 5110 <source>System Archive</source>
5090 <translation>Systeem Archief</translation> 5111 <translation>Systeemarchief</translation>
5091 </message> 5112 </message>
5092 <message> 5113 <message>
5093 <location filename="../../src/yuzu/main.cpp" line="3026"/> 5114 <location filename="../../src/yuzu/main.cpp" line="3026"/>
5094 <source>System Application Update</source> 5115 <source>System Application Update</source>
5095 <translation>Systeem Applicatie Update</translation> 5116 <translation>Systeemapplicatie-update</translation>
5096 </message> 5117 </message>
5097 <message> 5118 <message>
5098 <location filename="../../src/yuzu/main.cpp" line="3027"/> 5119 <location filename="../../src/yuzu/main.cpp" line="3027"/>
5099 <source>Firmware Package (Type A)</source> 5120 <source>Firmware Package (Type A)</source>
5100 <translation>Filmware Pakket (Type A)</translation> 5121 <translation>Filmware-pakket (Type A)</translation>
5101 </message> 5122 </message>
5102 <message> 5123 <message>
5103 <location filename="../../src/yuzu/main.cpp" line="3028"/> 5124 <location filename="../../src/yuzu/main.cpp" line="3028"/>
5104 <source>Firmware Package (Type B)</source> 5125 <source>Firmware Package (Type B)</source>
5105 <translation>Filmware Pakket (Type B)</translation> 5126 <translation>Filmware-pakket (Type B)</translation>
5106 </message> 5127 </message>
5107 <message> 5128 <message>
5108 <location filename="../../src/yuzu/main.cpp" line="3029"/> 5129 <location filename="../../src/yuzu/main.cpp" line="3029"/>
5109 <source>Game</source> 5130 <source>Game</source>
5110 <translation>Game</translation> 5131 <translation>Spel</translation>
5111 </message> 5132 </message>
5112 <message> 5133 <message>
5113 <location filename="../../src/yuzu/main.cpp" line="3030"/> 5134 <location filename="../../src/yuzu/main.cpp" line="3030"/>
5114 <source>Game Update</source> 5135 <source>Game Update</source>
5115 <translation>Game Update</translation> 5136 <translation>Spelupdate</translation>
5116 </message> 5137 </message>
5117 <message> 5138 <message>
5118 <location filename="../../src/yuzu/main.cpp" line="3031"/> 5139 <location filename="../../src/yuzu/main.cpp" line="3031"/>
5119 <source>Game DLC</source> 5140 <source>Game DLC</source>
5120 <translation>Game DLC</translation> 5141 <translation>Spel-DLC</translation>
5121 </message> 5142 </message>
5122 <message> 5143 <message>
5123 <location filename="../../src/yuzu/main.cpp" line="3032"/> 5144 <location filename="../../src/yuzu/main.cpp" line="3032"/>
@@ -5127,14 +5148,14 @@ Please, only use this feature to install updates and DLC.</source>
5127 <message> 5148 <message>
5128 <location filename="../../src/yuzu/main.cpp" line="3035"/> 5149 <location filename="../../src/yuzu/main.cpp" line="3035"/>
5129 <source>Select NCA Install Type...</source> 5150 <source>Select NCA Install Type...</source>
5130 <translation>Selecteer NCA Installatie Type...</translation> 5151 <translation>Selecteer NCA-installatiesoort...</translation>
5131 </message> 5152 </message>
5132 <message> 5153 <message>
5133 <location filename="../../src/yuzu/main.cpp" line="3036"/> 5154 <location filename="../../src/yuzu/main.cpp" line="3036"/>
5134 <source>Please select the type of title you would like to install this NCA as: 5155 <source>Please select the type of title you would like to install this NCA as:
5135(In most instances, the default &apos;Game&apos; is fine.)</source> 5156(In most instances, the default &apos;Game&apos; is fine.)</source>
5136 <translation>Selecteer het type titel hoe je wilt dat deze NCA installeerd: 5157 <translation>Selecteer het type titel waarin je deze NCA wilt installeren:
5137(In de meeste gevallen is de standaard &apos;Game&apos; juist.)</translation> 5158(In de meeste gevallen is de standaard &quot;Spel&quot; prima).</translation>
5138 </message> 5159 </message>
5139 <message> 5160 <message>
5140 <location filename="../../src/yuzu/main.cpp" line="3042"/> 5161 <location filename="../../src/yuzu/main.cpp" line="3042"/>
@@ -5144,7 +5165,7 @@ Please, only use this feature to install updates and DLC.</source>
5144 <message> 5165 <message>
5145 <location filename="../../src/yuzu/main.cpp" line="3043"/> 5166 <location filename="../../src/yuzu/main.cpp" line="3043"/>
5146 <source>The title type you selected for the NCA is invalid.</source> 5167 <source>The title type you selected for the NCA is invalid.</source>
5147 <translation>Het type title dat je hebt geselecteerd voor de NCA is ongeldig.</translation> 5168 <translation>Het soort title dat je hebt geselecteerd voor de NCA is ongeldig.</translation>
5148 </message> 5169 </message>
5149 <message> 5170 <message>
5150 <location filename="../../src/yuzu/main.cpp" line="3078"/> 5171 <location filename="../../src/yuzu/main.cpp" line="3078"/>
@@ -5165,81 +5186,81 @@ Please, only use this feature to install updates and DLC.</source>
5165 <location filename="../../src/yuzu/main.cpp" line="3182"/> 5186 <location filename="../../src/yuzu/main.cpp" line="3182"/>
5166 <location filename="../../src/yuzu/main.cpp" line="3201"/> 5187 <location filename="../../src/yuzu/main.cpp" line="3201"/>
5167 <source>Hardware requirements not met</source> 5188 <source>Hardware requirements not met</source>
5168 <translation type="unfinished"/> 5189 <translation>Er is niet voldaan aan de hardwarevereisten</translation>
5169 </message> 5190 </message>
5170 <message> 5191 <message>
5171 <location filename="../../src/yuzu/main.cpp" line="3183"/> 5192 <location filename="../../src/yuzu/main.cpp" line="3183"/>
5172 <location filename="../../src/yuzu/main.cpp" line="3202"/> 5193 <location filename="../../src/yuzu/main.cpp" line="3202"/>
5173 <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> 5194 <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source>
5174 <translation type="unfinished"/> 5195 <translation>Je systeem voldoet niet aan de aanbevolen hardwarevereisten. Compatibiliteitsrapportage is uitgeschakeld.</translation>
5175 </message> 5196 </message>
5176 <message> 5197 <message>
5177 <location filename="../../src/yuzu/main.cpp" line="3194"/> 5198 <location filename="../../src/yuzu/main.cpp" line="3194"/>
5178 <source>Missing yuzu Account</source> 5199 <source>Missing yuzu Account</source>
5179 <translation>Je yuzu account mist</translation> 5200 <translation>yuzu-account Ontbreekt</translation>
5180 </message> 5201 </message>
5181 <message> 5202 <message>
5182 <location filename="../../src/yuzu/main.cpp" line="3195"/> 5203 <location filename="../../src/yuzu/main.cpp" line="3195"/>
5183 <source>In order to submit a game compatibility test case, you must link your yuzu account.&lt;br&gt;&lt;br/&gt;To link your yuzu account, go to Emulation &amp;gt; Configuration &amp;gt; Web.</source> 5204 <source>In order to submit a game compatibility test case, you must link your yuzu account.&lt;br&gt;&lt;br/&gt;To link your yuzu account, go to Emulation &amp;gt; Configuration &amp;gt; Web.</source>
5184 <translation>Om game campatibiliteit te raporteren, moet je je yuzu account koppelen.&lt;br&gt;&lt;br/&gt; Om je yuzu account te koppelen, ga naar Emulatie &amp;gt; Configuratie &amp;gt; Web.</translation> 5205 <translation>Om een spelcompatibiliteitstest in te dienen, moet je je yuzu-account koppelen.&lt;br&gt;&lt;br/&gt;Om je yuzu-account te koppelen, ga naar Emulatie &amp;gt; Configuratie &amp;gt; Web.</translation>
5185 </message> 5206 </message>
5186 <message> 5207 <message>
5187 <location filename="../../src/yuzu/main.cpp" line="3210"/> 5208 <location filename="../../src/yuzu/main.cpp" line="3210"/>
5188 <source>Error opening URL</source> 5209 <source>Error opening URL</source>
5189 <translation type="unfinished"/> 5210 <translation>Fout bij het openen van URL</translation>
5190 </message> 5211 </message>
5191 <message> 5212 <message>
5192 <location filename="../../src/yuzu/main.cpp" line="3211"/> 5213 <location filename="../../src/yuzu/main.cpp" line="3211"/>
5193 <source>Unable to open the URL &quot;%1&quot;.</source> 5214 <source>Unable to open the URL &quot;%1&quot;.</source>
5194 <translation type="unfinished"/> 5215 <translation>Kan de URL &quot;%1&quot; niet openen.</translation>
5195 </message> 5216 </message>
5196 <message> 5217 <message>
5197 <location filename="../../src/yuzu/main.cpp" line="3514"/> 5218 <location filename="../../src/yuzu/main.cpp" line="3514"/>
5198 <source>TAS Recording</source> 5219 <source>TAS Recording</source>
5199 <translation type="unfinished"/> 5220 <translation>TAS-opname</translation>
5200 </message> 5221 </message>
5201 <message> 5222 <message>
5202 <location filename="../../src/yuzu/main.cpp" line="3515"/> 5223 <location filename="../../src/yuzu/main.cpp" line="3515"/>
5203 <source>Overwrite file of player 1?</source> 5224 <source>Overwrite file of player 1?</source>
5204 <translation type="unfinished"/> 5225 <translation>Het bestand van speler 1 overschrijven?</translation>
5205 </message> 5226 </message>
5206 <message> 5227 <message>
5207 <location filename="../../src/yuzu/main.cpp" line="3541"/> 5228 <location filename="../../src/yuzu/main.cpp" line="3541"/>
5208 <source>Invalid config detected</source> 5229 <source>Invalid config detected</source>
5209 <translation type="unfinished"/> 5230 <translation>Ongeldige configuratie gedetecteerd</translation>
5210 </message> 5231 </message>
5211 <message> 5232 <message>
5212 <location filename="../../src/yuzu/main.cpp" line="3542"/> 5233 <location filename="../../src/yuzu/main.cpp" line="3542"/>
5213 <source>Handheld controller can&apos;t be used on docked mode. Pro controller will be selected.</source> 5234 <source>Handheld controller can&apos;t be used on docked mode. Pro controller will be selected.</source>
5214 <translation type="unfinished"/> 5235 <translation>Handheld-controller kan niet gebruikt worden in docked-modus. Pro controller wordt geselecteerd.</translation>
5215 </message> 5236 </message>
5216 <message> 5237 <message>
5217 <location filename="../../src/yuzu/main.cpp" line="3712"/> 5238 <location filename="../../src/yuzu/main.cpp" line="3712"/>
5218 <location filename="../../src/yuzu/main.cpp" line="3740"/> 5239 <location filename="../../src/yuzu/main.cpp" line="3740"/>
5219 <source>Amiibo</source> 5240 <source>Amiibo</source>
5220 <translation type="unfinished"/> 5241 <translation>Amiibo</translation>
5221 </message> 5242 </message>
5222 <message> 5243 <message>
5223 <location filename="../../src/yuzu/main.cpp" line="3712"/> 5244 <location filename="../../src/yuzu/main.cpp" line="3712"/>
5224 <location filename="../../src/yuzu/main.cpp" line="3740"/> 5245 <location filename="../../src/yuzu/main.cpp" line="3740"/>
5225 <source>The current amiibo has been removed</source> 5246 <source>The current amiibo has been removed</source>
5226 <translation type="unfinished"/> 5247 <translation>De huidige amiibo is verwijderd</translation>
5227 </message> 5248 </message>
5228 <message> 5249 <message>
5229 <location filename="../../src/yuzu/main.cpp" line="3717"/> 5250 <location filename="../../src/yuzu/main.cpp" line="3717"/>
5230 <source>Error</source> 5251 <source>Error</source>
5231 <translation type="unfinished"/> 5252 <translation>Fout</translation>
5232 </message> 5253 </message>
5233 <message> 5254 <message>
5234 <location filename="../../src/yuzu/main.cpp" line="3717"/> 5255 <location filename="../../src/yuzu/main.cpp" line="3717"/>
5235 <location filename="../../src/yuzu/main.cpp" line="3752"/> 5256 <location filename="../../src/yuzu/main.cpp" line="3752"/>
5236 <source>The current game is not looking for amiibos</source> 5257 <source>The current game is not looking for amiibos</source>
5237 <translation type="unfinished"/> 5258 <translation>Het huidige spel is niet op zoek naar amiibo&apos;s</translation>
5238 </message> 5259 </message>
5239 <message> 5260 <message>
5240 <location filename="../../src/yuzu/main.cpp" line="3723"/> 5261 <location filename="../../src/yuzu/main.cpp" line="3723"/>
5241 <source>Amiibo File (%1);; All Files (*.*)</source> 5262 <source>Amiibo File (%1);; All Files (*.*)</source>
5242 <translation>Amiibo Bestand (%1);; Alle Bestanden (*.*)</translation> 5263 <translation>Amiibo-bestand (%1);; Alle Bestanden (*.*)</translation>
5243 </message> 5264 </message>
5244 <message> 5265 <message>
5245 <location filename="../../src/yuzu/main.cpp" line="3724"/> 5266 <location filename="../../src/yuzu/main.cpp" line="3724"/>
@@ -5249,57 +5270,57 @@ Please, only use this feature to install updates and DLC.</source>
5249 <message> 5270 <message>
5250 <location filename="../../src/yuzu/main.cpp" line="3736"/> 5271 <location filename="../../src/yuzu/main.cpp" line="3736"/>
5251 <source>Error loading Amiibo data</source> 5272 <source>Error loading Amiibo data</source>
5252 <translation>Fout tijdens het laden van de Amiibo data</translation> 5273 <translation>Fout tijdens het laden van de Amiibo-gegevens</translation>
5253 </message> 5274 </message>
5254 <message> 5275 <message>
5255 <location filename="../../src/yuzu/main.cpp" line="3746"/> 5276 <location filename="../../src/yuzu/main.cpp" line="3746"/>
5256 <source>The selected file is not a valid amiibo</source> 5277 <source>The selected file is not a valid amiibo</source>
5257 <translation type="unfinished"/> 5278 <translation>Het geselecteerde bestand is geen geldige amiibo</translation>
5258 </message> 5279 </message>
5259 <message> 5280 <message>
5260 <location filename="../../src/yuzu/main.cpp" line="3749"/> 5281 <location filename="../../src/yuzu/main.cpp" line="3749"/>
5261 <source>The selected file is already on use</source> 5282 <source>The selected file is already on use</source>
5262 <translation type="unfinished"/> 5283 <translation>Het geselecteerde bestand is al in gebruik</translation>
5263 </message> 5284 </message>
5264 <message> 5285 <message>
5265 <location filename="../../src/yuzu/main.cpp" line="3755"/> 5286 <location filename="../../src/yuzu/main.cpp" line="3755"/>
5266 <source>An unknown error occurred</source> 5287 <source>An unknown error occurred</source>
5267 <translation type="unfinished"/> 5288 <translation>Er is een onbekende fout opgetreden</translation>
5268 </message> 5289 </message>
5269 <message> 5290 <message>
5270 <location filename="../../src/yuzu/main.cpp" line="3807"/> 5291 <location filename="../../src/yuzu/main.cpp" line="3807"/>
5271 <source>Capture Screenshot</source> 5292 <source>Capture Screenshot</source>
5272 <translation>Screenshot Vastleggen</translation> 5293 <translation>Leg Schermafbeelding Vast</translation>
5273 </message> 5294 </message>
5274 <message> 5295 <message>
5275 <location filename="../../src/yuzu/main.cpp" line="3808"/> 5296 <location filename="../../src/yuzu/main.cpp" line="3808"/>
5276 <source>PNG Image (*.png)</source> 5297 <source>PNG Image (*.png)</source>
5277 <translation>PNG afbeelding (*.png)</translation> 5298 <translation>PNG-afbeelding (*.png)</translation>
5278 </message> 5299 </message>
5279 <message> 5300 <message>
5280 <location filename="../../src/yuzu/main.cpp" line="3891"/> 5301 <location filename="../../src/yuzu/main.cpp" line="3891"/>
5281 <source>TAS state: Running %1/%2</source> 5302 <source>TAS state: Running %1/%2</source>
5282 <translation type="unfinished"/> 5303 <translation>TAS-status: %1/%2 In werking</translation>
5283 </message> 5304 </message>
5284 <message> 5305 <message>
5285 <location filename="../../src/yuzu/main.cpp" line="3895"/> 5306 <location filename="../../src/yuzu/main.cpp" line="3895"/>
5286 <source>TAS state: Recording %1</source> 5307 <source>TAS state: Recording %1</source>
5287 <translation type="unfinished"/> 5308 <translation>TAS-status: %1 Aan het opnemen</translation>
5288 </message> 5309 </message>
5289 <message> 5310 <message>
5290 <location filename="../../src/yuzu/main.cpp" line="3897"/> 5311 <location filename="../../src/yuzu/main.cpp" line="3897"/>
5291 <source>TAS state: Idle %1/%2</source> 5312 <source>TAS state: Idle %1/%2</source>
5292 <translation type="unfinished"/> 5313 <translation>TAS-status: %1/%2 Inactief</translation>
5293 </message> 5314 </message>
5294 <message> 5315 <message>
5295 <location filename="../../src/yuzu/main.cpp" line="3901"/> 5316 <location filename="../../src/yuzu/main.cpp" line="3901"/>
5296 <source>TAS State: Invalid</source> 5317 <source>TAS State: Invalid</source>
5297 <translation type="unfinished"/> 5318 <translation>TAS-status: Ongeldig</translation>
5298 </message> 5319 </message>
5299 <message> 5320 <message>
5300 <location filename="../../src/yuzu/main.cpp" line="3915"/> 5321 <location filename="../../src/yuzu/main.cpp" line="3915"/>
5301 <source>&amp;Stop Running</source> 5322 <source>&amp;Stop Running</source>
5302 <translation type="unfinished"/> 5323 <translation>&amp;Stop Uitvoering</translation>
5303 </message> 5324 </message>
5304 <message> 5325 <message>
5305 <location filename="../../src/yuzu/main.cpp" line="3915"/> 5326 <location filename="../../src/yuzu/main.cpp" line="3915"/>
@@ -5309,23 +5330,23 @@ Please, only use this feature to install updates and DLC.</source>
5309 <message> 5330 <message>
5310 <location filename="../../src/yuzu/main.cpp" line="3916"/> 5331 <location filename="../../src/yuzu/main.cpp" line="3916"/>
5311 <source>Stop R&amp;ecording</source> 5332 <source>Stop R&amp;ecording</source>
5312 <translation type="unfinished"/> 5333 <translation>Stop Opname</translation>
5313 </message> 5334 </message>
5314 <message> 5335 <message>
5315 <location filename="../../src/yuzu/main.cpp" line="3916"/> 5336 <location filename="../../src/yuzu/main.cpp" line="3916"/>
5316 <source>R&amp;ecord</source> 5337 <source>R&amp;ecord</source>
5317 <translation type="unfinished"/> 5338 <translation>Opnemen</translation>
5318 </message> 5339 </message>
5319 <message numerus="yes"> 5340 <message numerus="yes">
5320 <location filename="../../src/yuzu/main.cpp" line="3940"/> 5341 <location filename="../../src/yuzu/main.cpp" line="3940"/>
5321 <source>Building: %n shader(s)</source> 5342 <source>Building: %n shader(s)</source>
5322 <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> 5343 <translation><numerusform>Bouwen: %n shader(s)</numerusform><numerusform>Bouwen: %n shader(s)</numerusform></translation>
5323 </message> 5344 </message>
5324 <message> 5345 <message>
5325 <location filename="../../src/yuzu/main.cpp" line="3949"/> 5346 <location filename="../../src/yuzu/main.cpp" line="3949"/>
5326 <source>Scale: %1x</source> 5347 <source>Scale: %1x</source>
5327 <comment>%1 is the resolution scaling factor</comment> 5348 <comment>%1 is the resolution scaling factor</comment>
5328 <translation type="unfinished"/> 5349 <translation>Schaal: %1x</translation>
5329 </message> 5350 </message>
5330 <message> 5351 <message>
5331 <location filename="../../src/yuzu/main.cpp" line="3952"/> 5352 <location filename="../../src/yuzu/main.cpp" line="3952"/>
@@ -5340,7 +5361,7 @@ Please, only use this feature to install updates and DLC.</source>
5340 <message> 5361 <message>
5341 <location filename="../../src/yuzu/main.cpp" line="3960"/> 5362 <location filename="../../src/yuzu/main.cpp" line="3960"/>
5342 <source>Game: %1 FPS (Unlocked)</source> 5363 <source>Game: %1 FPS (Unlocked)</source>
5343 <translation type="unfinished"/> 5364 <translation>Spel: %1 FPS (Ontgrendeld)</translation>
5344 </message> 5365 </message>
5345 <message> 5366 <message>
5346 <location filename="../../src/yuzu/main.cpp" line="3963"/> 5367 <location filename="../../src/yuzu/main.cpp" line="3963"/>
@@ -5355,110 +5376,110 @@ Please, only use this feature to install updates and DLC.</source>
5355 <message> 5376 <message>
5356 <location filename="../../src/yuzu/main.cpp" line="3976"/> 5377 <location filename="../../src/yuzu/main.cpp" line="3976"/>
5357 <source>GPU NORMAL</source> 5378 <source>GPU NORMAL</source>
5358 <translation type="unfinished"/> 5379 <translation>GPU NORMAAL</translation>
5359 </message> 5380 </message>
5360 <message> 5381 <message>
5361 <location filename="../../src/yuzu/main.cpp" line="3981"/> 5382 <location filename="../../src/yuzu/main.cpp" line="3981"/>
5362 <source>GPU HIGH</source> 5383 <source>GPU HIGH</source>
5363 <translation type="unfinished"/> 5384 <translation>GPU HOOG</translation>
5364 </message> 5385 </message>
5365 <message> 5386 <message>
5366 <location filename="../../src/yuzu/main.cpp" line="3986"/> 5387 <location filename="../../src/yuzu/main.cpp" line="3986"/>
5367 <source>GPU EXTREME</source> 5388 <source>GPU EXTREME</source>
5368 <translation type="unfinished"/> 5389 <translation>GPU EXTREEM</translation>
5369 </message> 5390 </message>
5370 <message> 5391 <message>
5371 <location filename="../../src/yuzu/main.cpp" line="3991"/> 5392 <location filename="../../src/yuzu/main.cpp" line="3991"/>
5372 <source>GPU ERROR</source> 5393 <source>GPU ERROR</source>
5373 <translation type="unfinished"/> 5394 <translation>GPU FOUT</translation>
5374 </message> 5395 </message>
5375 <message> 5396 <message>
5376 <location filename="../../src/yuzu/main.cpp" line="4001"/> 5397 <location filename="../../src/yuzu/main.cpp" line="4001"/>
5377 <source>DOCKED</source> 5398 <source>DOCKED</source>
5378 <translation type="unfinished"/> 5399 <translation>DOCKED</translation>
5379 </message> 5400 </message>
5380 <message> 5401 <message>
5381 <location filename="../../src/yuzu/main.cpp" line="4001"/> 5402 <location filename="../../src/yuzu/main.cpp" line="4001"/>
5382 <source>HANDHELD</source> 5403 <source>HANDHELD</source>
5383 <translation type="unfinished"/> 5404 <translation>HANDHELD</translation>
5384 </message> 5405 </message>
5385 <message> 5406 <message>
5386 <location filename="../../src/yuzu/main.cpp" line="4008"/> 5407 <location filename="../../src/yuzu/main.cpp" line="4008"/>
5387 <source>OPENGL</source> 5408 <source>OPENGL</source>
5388 <translation type="unfinished"/> 5409 <translation>OPENGL</translation>
5389 </message> 5410 </message>
5390 <message> 5411 <message>
5391 <location filename="../../src/yuzu/main.cpp" line="4011"/> 5412 <location filename="../../src/yuzu/main.cpp" line="4011"/>
5392 <source>VULKAN</source> 5413 <source>VULKAN</source>
5393 <translation type="unfinished"/> 5414 <translation>VULKAN</translation>
5394 </message> 5415 </message>
5395 <message> 5416 <message>
5396 <location filename="../../src/yuzu/main.cpp" line="4014"/> 5417 <location filename="../../src/yuzu/main.cpp" line="4014"/>
5397 <source>NULL</source> 5418 <source>NULL</source>
5398 <translation type="unfinished"/> 5419 <translation>NULL</translation>
5399 </message> 5420 </message>
5400 <message> 5421 <message>
5401 <location filename="../../src/yuzu/main.cpp" line="4023"/> 5422 <location filename="../../src/yuzu/main.cpp" line="4023"/>
5402 <source>NEAREST</source> 5423 <source>NEAREST</source>
5403 <translation type="unfinished"/> 5424 <translation>NEAREST</translation>
5404 </message> 5425 </message>
5405 <message> 5426 <message>
5406 <location filename="../../src/yuzu/main.cpp" line="4026"/> 5427 <location filename="../../src/yuzu/main.cpp" line="4026"/>
5407 <location filename="../../src/yuzu/main.cpp" line="4041"/> 5428 <location filename="../../src/yuzu/main.cpp" line="4041"/>
5408 <source>BILINEAR</source> 5429 <source>BILINEAR</source>
5409 <translation type="unfinished"/> 5430 <translation>BILINEAR</translation>
5410 </message> 5431 </message>
5411 <message> 5432 <message>
5412 <location filename="../../src/yuzu/main.cpp" line="4029"/> 5433 <location filename="../../src/yuzu/main.cpp" line="4029"/>
5413 <source>BICUBIC</source> 5434 <source>BICUBIC</source>
5414 <translation type="unfinished"/> 5435 <translation>BICUBIC</translation>
5415 </message> 5436 </message>
5416 <message> 5437 <message>
5417 <location filename="../../src/yuzu/main.cpp" line="4032"/> 5438 <location filename="../../src/yuzu/main.cpp" line="4032"/>
5418 <source>GAUSSIAN</source> 5439 <source>GAUSSIAN</source>
5419 <translation type="unfinished"/> 5440 <translation>GAUSSIAN</translation>
5420 </message> 5441 </message>
5421 <message> 5442 <message>
5422 <location filename="../../src/yuzu/main.cpp" line="4035"/> 5443 <location filename="../../src/yuzu/main.cpp" line="4035"/>
5423 <source>SCALEFORCE</source> 5444 <source>SCALEFORCE</source>
5424 <translation type="unfinished"/> 5445 <translation>SCALEFORCE</translation>
5425 </message> 5446 </message>
5426 <message> 5447 <message>
5427 <location filename="../../src/yuzu/main.cpp" line="4038"/> 5448 <location filename="../../src/yuzu/main.cpp" line="4038"/>
5428 <source>FSR</source> 5449 <source>FSR</source>
5429 <translation type="unfinished"/> 5450 <translation>FSR</translation>
5430 </message> 5451 </message>
5431 <message> 5452 <message>
5432 <location filename="../../src/yuzu/main.cpp" line="4050"/> 5453 <location filename="../../src/yuzu/main.cpp" line="4050"/>
5433 <location filename="../../src/yuzu/main.cpp" line="4059"/> 5454 <location filename="../../src/yuzu/main.cpp" line="4059"/>
5434 <source>NO AA</source> 5455 <source>NO AA</source>
5435 <translation type="unfinished"/> 5456 <translation>GEEN AA</translation>
5436 </message> 5457 </message>
5437 <message> 5458 <message>
5438 <location filename="../../src/yuzu/main.cpp" line="4053"/> 5459 <location filename="../../src/yuzu/main.cpp" line="4053"/>
5439 <source>FXAA</source> 5460 <source>FXAA</source>
5440 <translation type="unfinished"/> 5461 <translation>FXAA</translation>
5441 </message> 5462 </message>
5442 <message> 5463 <message>
5443 <location filename="../../src/yuzu/main.cpp" line="4056"/> 5464 <location filename="../../src/yuzu/main.cpp" line="4056"/>
5444 <source>SMAA</source> 5465 <source>SMAA</source>
5445 <translation type="unfinished"/> 5466 <translation>SMAA</translation>
5446 </message> 5467 </message>
5447 <message> 5468 <message>
5448 <location filename="../../src/yuzu/main.cpp" line="4069"/> 5469 <location filename="../../src/yuzu/main.cpp" line="4069"/>
5449 <source>VOLUME: MUTE</source> 5470 <source>VOLUME: MUTE</source>
5450 <translation type="unfinished"/> 5471 <translation>VOLUME: GEDEMPT</translation>
5451 </message> 5472 </message>
5452 <message> 5473 <message>
5453 <location filename="../../src/yuzu/main.cpp" line="4072"/> 5474 <location filename="../../src/yuzu/main.cpp" line="4072"/>
5454 <source>VOLUME: %1%</source> 5475 <source>VOLUME: %1%</source>
5455 <comment>Volume percentage (e.g. 50%)</comment> 5476 <comment>Volume percentage (e.g. 50%)</comment>
5456 <translation type="unfinished"/> 5477 <translation>VOLUME: %1%</translation>
5457 </message> 5478 </message>
5458 <message> 5479 <message>
5459 <location filename="../../src/yuzu/main.cpp" line="4153"/> 5480 <location filename="../../src/yuzu/main.cpp" line="4153"/>
5460 <source>Confirm Key Rederivation</source> 5481 <source>Confirm Key Rederivation</source>
5461 <translation>Bevestig Sleutel Herafleiding</translation> 5482 <translation>Bevestig Sleutelherhaling</translation>
5462 </message> 5483 </message>
5463 <message> 5484 <message>
5464 <location filename="../../src/yuzu/main.cpp" line="4154"/> 5485 <location filename="../../src/yuzu/main.cpp" line="4154"/>
@@ -5469,61 +5490,62 @@ Please make sure this is what you want
5469and optionally make backups. 5490and optionally make backups.
5470 5491
5471This will delete your autogenerated key files and re-run the key derivation module.</source> 5492This will delete your autogenerated key files and re-run the key derivation module.</source>
5472 <translation>Je bent op het punt al je sleutels geforceerd opnieuw te verkrijgen. 5493 <translation>Je staat op het punt om al je sleutels te forceren.
5473Als je niet weet wat dit doet of wat je aan het doen bent, 5494Als je niet weet wat dit betekent of wat je doet,
5474dit is potentieel een vernietigende actie. 5495is dit een potentieel destructieve actie.
5475Zorg ervoor dat je zeker weet dat dit is wat je wilt doen 5496Zorg ervoor dat dit is wat je wilt
5476en optioneel maak backups. 5497en maak eventueel back-ups.
5477 5498
5478Dit zal je automatisch gegenereerde sleutel bestanden verwijderen en de sleutel verkrijger module opnieuw starten</translation> 5499Dit zal je automatisch gegenereerde sleutelbestanden verwijderen en de sleutelafleidingsmodule opnieuw uitvoeren.</translation>
5479 </message> 5500 </message>
5480 <message> 5501 <message>
5481 <location filename="../../src/yuzu/main.cpp" line="4186"/> 5502 <location filename="../../src/yuzu/main.cpp" line="4186"/>
5482 <source>Missing fuses</source> 5503 <source>Missing fuses</source>
5483 <translation type="unfinished"/> 5504 <translation>Missing fuses</translation>
5484 </message> 5505 </message>
5485 <message> 5506 <message>
5486 <location filename="../../src/yuzu/main.cpp" line="4189"/> 5507 <location filename="../../src/yuzu/main.cpp" line="4189"/>
5487 <source> - Missing BOOT0</source> 5508 <source> - Missing BOOT0</source>
5488 <translation type="unfinished"/> 5509 <translation> - BOOT0 Ontbreekt</translation>
5489 </message> 5510 </message>
5490 <message> 5511 <message>
5491 <location filename="../../src/yuzu/main.cpp" line="4192"/> 5512 <location filename="../../src/yuzu/main.cpp" line="4192"/>
5492 <source> - Missing BCPKG2-1-Normal-Main</source> 5513 <source> - Missing BCPKG2-1-Normal-Main</source>
5493 <translation type="unfinished"/> 5514 <translation> - BCPKG2-1-Normal-Main Ontbreekt</translation>
5494 </message> 5515 </message>
5495 <message> 5516 <message>
5496 <location filename="../../src/yuzu/main.cpp" line="4195"/> 5517 <location filename="../../src/yuzu/main.cpp" line="4195"/>
5497 <source> - Missing PRODINFO</source> 5518 <source> - Missing PRODINFO</source>
5498 <translation type="unfinished"/> 5519 <translation> - PRODINFO Ontbreekt</translation>
5499 </message> 5520 </message>
5500 <message> 5521 <message>
5501 <location filename="../../src/yuzu/main.cpp" line="4199"/> 5522 <location filename="../../src/yuzu/main.cpp" line="4199"/>
5502 <source>Derivation Components Missing</source> 5523 <source>Derivation Components Missing</source>
5503 <translation type="unfinished"/> 5524 <translation>Afleidingscomponenten ontbreken</translation>
5504 </message> 5525 </message>
5505 <message> 5526 <message>
5506 <location filename="../../src/yuzu/main.cpp" line="4200"/> 5527 <location filename="../../src/yuzu/main.cpp" line="4200"/>
5507 <source>Encryption keys are missing. &lt;br&gt;Please follow &lt;a href=&apos;https://yuzu-emu.org/help/quickstart/&apos;&gt;the yuzu quickstart guide&lt;/a&gt; to get all your keys, firmware and games.&lt;br&gt;&lt;br&gt;&lt;small&gt;(%1)&lt;/small&gt;</source> 5528 <source>Encryption keys are missing. &lt;br&gt;Please follow &lt;a href=&apos;https://yuzu-emu.org/help/quickstart/&apos;&gt;the yuzu quickstart guide&lt;/a&gt; to get all your keys, firmware and games.&lt;br&gt;&lt;br&gt;&lt;small&gt;(%1)&lt;/small&gt;</source>
5508 <translation type="unfinished"/> 5529 <translation>Encryptiesleutels ontbreken. &lt;br&gt;Volg &lt;a href=&apos;https://yuzu-emu.org/help/quickstart/&apos;&gt;de yuzu-snelstartgids&lt;/a&gt; om al je sleutels, firmware en spellen te krijgen.&lt;br&gt;&lt;br&gt;&lt;small&gt;(%1)&lt;/small&gt;</translation>
5509 </message> 5530 </message>
5510 <message> 5531 <message>
5511 <location filename="../../src/yuzu/main.cpp" line="4209"/> 5532 <location filename="../../src/yuzu/main.cpp" line="4209"/>
5512 <source>Deriving keys... 5533 <source>Deriving keys...
5513This may take up to a minute depending 5534This may take up to a minute depending
5514on your system&apos;s performance.</source> 5535on your system&apos;s performance.</source>
5515 <translation>Dit zal misschien een paar minuten duren gebaseerd 5536 <translation>Sleutels afleiden...
5516op je systeem&apos;s performatie.</translation> 5537Dit kan tot een minuut duren,
5538afhankelijk van de prestaties van je systeem.</translation>
5517 </message> 5539 </message>
5518 <message> 5540 <message>
5519 <location filename="../../src/yuzu/main.cpp" line="4211"/> 5541 <location filename="../../src/yuzu/main.cpp" line="4211"/>
5520 <source>Deriving Keys</source> 5542 <source>Deriving Keys</source>
5521 <translation>Sleutels afleiden</translation> 5543 <translation>Sleutels Afleiden</translation>
5522 </message> 5544 </message>
5523 <message> 5545 <message>
5524 <location filename="../../src/yuzu/main.cpp" line="4256"/> 5546 <location filename="../../src/yuzu/main.cpp" line="4256"/>
5525 <source>Select RomFS Dump Target</source> 5547 <source>Select RomFS Dump Target</source>
5526 <translation>Selecteer RomFS Dump Doel</translation> 5548 <translation>Selecteer RomFS-dumpdoel</translation>
5527 </message> 5549 </message>
5528 <message> 5550 <message>
5529 <location filename="../../src/yuzu/main.cpp" line="4257"/> 5551 <location filename="../../src/yuzu/main.cpp" line="4257"/>
@@ -5545,7 +5567,7 @@ op je systeem&apos;s performatie.</translation>
5545 <message> 5567 <message>
5546 <location filename="../../src/yuzu/main.cpp" line="4369"/> 5568 <location filename="../../src/yuzu/main.cpp" line="4369"/>
5547 <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> 5569 <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source>
5548 <translation>Weet je zeker dat je de emulatie wilt stoppen? Alle onopgeslagen voortgang will verloren gaan.</translation> 5570 <translation>Weet je zeker dat je de emulatie wilt stoppen? Alle niet opgeslagen voortgang zal verloren gaan.</translation>
5549 </message> 5571 </message>
5550 <message> 5572 <message>
5551 <location filename="../../src/yuzu/main.cpp" line="4378"/> 5573 <location filename="../../src/yuzu/main.cpp" line="4378"/>
@@ -5554,7 +5576,7 @@ op je systeem&apos;s performatie.</translation>
5554Would you like to bypass this and exit anyway?</source> 5576Would you like to bypass this and exit anyway?</source>
5555 <translation>De momenteel actieve toepassing heeft yuzu gevraagd om niet af te sluiten. 5577 <translation>De momenteel actieve toepassing heeft yuzu gevraagd om niet af te sluiten.
5556 5578
5557Wilt u dit omzeilen en toch afsluiten?</translation> 5579Wil je toch afsluiten?</translation>
5558 </message> 5580 </message>
5559</context> 5581</context>
5560<context> 5582<context>
@@ -5563,43 +5585,43 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5563 <location filename="../../src/yuzu/bootmanager.cpp" line="974"/> 5585 <location filename="../../src/yuzu/bootmanager.cpp" line="974"/>
5564 <location filename="../../src/yuzu/bootmanager.cpp" line="991"/> 5586 <location filename="../../src/yuzu/bootmanager.cpp" line="991"/>
5565 <source>OpenGL not available!</source> 5587 <source>OpenGL not available!</source>
5566 <translation type="unfinished"/> 5588 <translation>OpenGL niet beschikbaar!</translation>
5567 </message> 5589 </message>
5568 <message> 5590 <message>
5569 <location filename="../../src/yuzu/bootmanager.cpp" line="975"/> 5591 <location filename="../../src/yuzu/bootmanager.cpp" line="975"/>
5570 <source>OpenGL shared contexts are not supported.</source> 5592 <source>OpenGL shared contexts are not supported.</source>
5571 <translation type="unfinished"/> 5593 <translation>OpenGL gedeelde contexten worden niet ondersteund.</translation>
5572 </message> 5594 </message>
5573 <message> 5595 <message>
5574 <location filename="../../src/yuzu/bootmanager.cpp" line="992"/> 5596 <location filename="../../src/yuzu/bootmanager.cpp" line="992"/>
5575 <source>yuzu has not been compiled with OpenGL support.</source> 5597 <source>yuzu has not been compiled with OpenGL support.</source>
5576 <translation type="unfinished"/> 5598 <translation>yuzu is niet gecompileerd met OpenGL-ondersteuning.</translation>
5577 </message> 5599 </message>
5578 <message> 5600 <message>
5579 <location filename="../../src/yuzu/bootmanager.cpp" line="1016"/> 5601 <location filename="../../src/yuzu/bootmanager.cpp" line="1016"/>
5580 <location filename="../../src/yuzu/bootmanager.cpp" line="1036"/> 5602 <location filename="../../src/yuzu/bootmanager.cpp" line="1036"/>
5581 <source>Error while initializing OpenGL!</source> 5603 <source>Error while initializing OpenGL!</source>
5582 <translation type="unfinished"/> 5604 <translation>Fout tijdens het initialiseren van OpenGL!</translation>
5583 </message> 5605 </message>
5584 <message> 5606 <message>
5585 <location filename="../../src/yuzu/bootmanager.cpp" line="1017"/> 5607 <location filename="../../src/yuzu/bootmanager.cpp" line="1017"/>
5586 <source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source> 5608 <source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
5587 <translation type="unfinished"/> 5609 <translation>Je GPU ondersteunt mogelijk geen OpenGL, of je hebt niet de laatste grafische stuurprogramma.</translation>
5588 </message> 5610 </message>
5589 <message> 5611 <message>
5590 <location filename="../../src/yuzu/bootmanager.cpp" line="1026"/> 5612 <location filename="../../src/yuzu/bootmanager.cpp" line="1026"/>
5591 <source>Error while initializing OpenGL 4.6!</source> 5613 <source>Error while initializing OpenGL 4.6!</source>
5592 <translation type="unfinished"/> 5614 <translation>Fout tijdens het initialiseren van OpenGL 4.6!</translation>
5593 </message> 5615 </message>
5594 <message> 5616 <message>
5595 <location filename="../../src/yuzu/bootmanager.cpp" line="1027"/> 5617 <location filename="../../src/yuzu/bootmanager.cpp" line="1027"/>
5596 <source>Your GPU may not support OpenGL 4.6, or you do not have the latest graphics driver.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</source> 5618 <source>Your GPU may not support OpenGL 4.6, or you do not have the latest graphics driver.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</source>
5597 <translation type="unfinished"/> 5619 <translation>Je GPU ondersteunt mogelijk OpenGL 4.6 niet, of je hebt niet het laatste grafische stuurprogramma.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
5598 </message> 5620 </message>
5599 <message> 5621 <message>
5600 <location filename="../../src/yuzu/bootmanager.cpp" line="1037"/> 5622 <location filename="../../src/yuzu/bootmanager.cpp" line="1037"/>
5601 <source>Your GPU may not support one or more required OpenGL extensions. Please ensure you have the latest graphics driver.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Unsupported extensions:&lt;br&gt;%2</source> 5623 <source>Your GPU may not support one or more required OpenGL extensions. Please ensure you have the latest graphics driver.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Unsupported extensions:&lt;br&gt;%2</source>
5602 <translation type="unfinished"/> 5624 <translation>Je GPU ondersteunt mogelijk een of meer vereiste OpenGL-extensies niet. Zorg ervoor dat je het laatste grafische stuurprogramma hebt.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Ondersteunde extensies:&lt;br&gt;%2</translation>
5603 </message> 5625 </message>
5604</context> 5626</context>
5605<context> 5627<context>
@@ -5607,32 +5629,32 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5607 <message> 5629 <message>
5608 <location filename="../../src/yuzu/game_list.cpp" line="532"/> 5630 <location filename="../../src/yuzu/game_list.cpp" line="532"/>
5609 <source>Favorite</source> 5631 <source>Favorite</source>
5610 <translation type="unfinished"/> 5632 <translation>Favoriet</translation>
5611 </message> 5633 </message>
5612 <message> 5634 <message>
5613 <location filename="../../src/yuzu/game_list.cpp" line="534"/> 5635 <location filename="../../src/yuzu/game_list.cpp" line="534"/>
5614 <source>Start Game</source> 5636 <source>Start Game</source>
5615 <translation type="unfinished"/> 5637 <translation>Start Spel</translation>
5616 </message> 5638 </message>
5617 <message> 5639 <message>
5618 <location filename="../../src/yuzu/game_list.cpp" line="536"/> 5640 <location filename="../../src/yuzu/game_list.cpp" line="536"/>
5619 <source>Start Game without Custom Configuration</source> 5641 <source>Start Game without Custom Configuration</source>
5620 <translation type="unfinished"/> 5642 <translation>Start Spel zonder Aangepaste Configuratie</translation>
5621 </message> 5643 </message>
5622 <message> 5644 <message>
5623 <location filename="../../src/yuzu/game_list.cpp" line="538"/> 5645 <location filename="../../src/yuzu/game_list.cpp" line="538"/>
5624 <source>Open Save Data Location</source> 5646 <source>Open Save Data Location</source>
5625 <translation>Open Locatie Van Save Gegevens </translation> 5647 <translation>Open Locatie van Save-data</translation>
5626 </message> 5648 </message>
5627 <message> 5649 <message>
5628 <location filename="../../src/yuzu/game_list.cpp" line="539"/> 5650 <location filename="../../src/yuzu/game_list.cpp" line="539"/>
5629 <source>Open Mod Data Location</source> 5651 <source>Open Mod Data Location</source>
5630 <translation>Open Mod Data Locatie</translation> 5652 <translation>Open Locatie van Mod-data</translation>
5631 </message> 5653 </message>
5632 <message> 5654 <message>
5633 <location filename="../../src/yuzu/game_list.cpp" line="541"/> 5655 <location filename="../../src/yuzu/game_list.cpp" line="541"/>
5634 <source>Open Transferable Pipeline Cache</source> 5656 <source>Open Transferable Pipeline Cache</source>
5635 <translation type="unfinished"/> 5657 <translation>Open Overdraagbare Pijplijn-cache</translation>
5636 </message> 5658 </message>
5637 <message> 5659 <message>
5638 <location filename="../../src/yuzu/game_list.cpp" line="543"/> 5660 <location filename="../../src/yuzu/game_list.cpp" line="543"/>
@@ -5642,37 +5664,37 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5642 <message> 5664 <message>
5643 <location filename="../../src/yuzu/game_list.cpp" line="544"/> 5665 <location filename="../../src/yuzu/game_list.cpp" line="544"/>
5644 <source>Remove Installed Update</source> 5666 <source>Remove Installed Update</source>
5645 <translation type="unfinished"/> 5667 <translation>Verwijder Geïnstalleerde Update</translation>
5646 </message> 5668 </message>
5647 <message> 5669 <message>
5648 <location filename="../../src/yuzu/game_list.cpp" line="545"/> 5670 <location filename="../../src/yuzu/game_list.cpp" line="545"/>
5649 <source>Remove All Installed DLC</source> 5671 <source>Remove All Installed DLC</source>
5650 <translation type="unfinished"/> 5672 <translation>Verwijder Alle Geïnstalleerde DLC&apos;s</translation>
5651 </message> 5673 </message>
5652 <message> 5674 <message>
5653 <location filename="../../src/yuzu/game_list.cpp" line="546"/> 5675 <location filename="../../src/yuzu/game_list.cpp" line="546"/>
5654 <source>Remove Custom Configuration</source> 5676 <source>Remove Custom Configuration</source>
5655 <translation type="unfinished"/> 5677 <translation>Verwijder Aangepaste Configuraties</translation>
5656 </message> 5678 </message>
5657 <message> 5679 <message>
5658 <location filename="../../src/yuzu/game_list.cpp" line="547"/> 5680 <location filename="../../src/yuzu/game_list.cpp" line="547"/>
5659 <source>Remove OpenGL Pipeline Cache</source> 5681 <source>Remove OpenGL Pipeline Cache</source>
5660 <translation type="unfinished"/> 5682 <translation>Verwijder OpenGL-pijplijn-cache</translation>
5661 </message> 5683 </message>
5662 <message> 5684 <message>
5663 <location filename="../../src/yuzu/game_list.cpp" line="548"/> 5685 <location filename="../../src/yuzu/game_list.cpp" line="548"/>
5664 <source>Remove Vulkan Pipeline Cache</source> 5686 <source>Remove Vulkan Pipeline Cache</source>
5665 <translation type="unfinished"/> 5687 <translation>Verwijder Vulkan-pijplijn-cache</translation>
5666 </message> 5688 </message>
5667 <message> 5689 <message>
5668 <location filename="../../src/yuzu/game_list.cpp" line="550"/> 5690 <location filename="../../src/yuzu/game_list.cpp" line="550"/>
5669 <source>Remove All Pipeline Caches</source> 5691 <source>Remove All Pipeline Caches</source>
5670 <translation type="unfinished"/> 5692 <translation>Verwijder Alle Pijplijn-caches</translation>
5671 </message> 5693 </message>
5672 <message> 5694 <message>
5673 <location filename="../../src/yuzu/game_list.cpp" line="551"/> 5695 <location filename="../../src/yuzu/game_list.cpp" line="551"/>
5674 <source>Remove All Installed Contents</source> 5696 <source>Remove All Installed Contents</source>
5675 <translation type="unfinished"/> 5697 <translation>Verwijder Alle Geïnstalleerde Inhoud</translation>
5676 </message> 5698 </message>
5677 <message> 5699 <message>
5678 <location filename="../../src/yuzu/game_list.cpp" line="552"/> 5700 <location filename="../../src/yuzu/game_list.cpp" line="552"/>
@@ -5683,32 +5705,32 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5683 <message> 5705 <message>
5684 <location filename="../../src/yuzu/game_list.cpp" line="554"/> 5706 <location filename="../../src/yuzu/game_list.cpp" line="554"/>
5685 <source>Dump RomFS to SDMC</source> 5707 <source>Dump RomFS to SDMC</source>
5686 <translation type="unfinished"/> 5708 <translation>Dump RomFS naar SDMC</translation>
5687 </message> 5709 </message>
5688 <message> 5710 <message>
5689 <location filename="../../src/yuzu/game_list.cpp" line="555"/> 5711 <location filename="../../src/yuzu/game_list.cpp" line="555"/>
5690 <source>Copy Title ID to Clipboard</source> 5712 <source>Copy Title ID to Clipboard</source>
5691 <translation>Kopieer Titel ID naar Klembord</translation> 5713 <translation>Kopiëer Titel-ID naar Klembord</translation>
5692 </message> 5714 </message>
5693 <message> 5715 <message>
5694 <location filename="../../src/yuzu/game_list.cpp" line="556"/> 5716 <location filename="../../src/yuzu/game_list.cpp" line="556"/>
5695 <source>Navigate to GameDB entry</source> 5717 <source>Navigate to GameDB entry</source>
5696 <translation>Navigeer naar GameDB inzending</translation> 5718 <translation>Navigeer naar GameDB-invoer</translation>
5697 </message> 5719 </message>
5698 <message> 5720 <message>
5699 <location filename="../../src/yuzu/game_list.cpp" line="558"/> 5721 <location filename="../../src/yuzu/game_list.cpp" line="558"/>
5700 <source>Create Shortcut</source> 5722 <source>Create Shortcut</source>
5701 <translation type="unfinished"/> 5723 <translation>Maak Snelkoppeling</translation>
5702 </message> 5724 </message>
5703 <message> 5725 <message>
5704 <location filename="../../src/yuzu/game_list.cpp" line="559"/> 5726 <location filename="../../src/yuzu/game_list.cpp" line="559"/>
5705 <source>Add to Desktop</source> 5727 <source>Add to Desktop</source>
5706 <translation type="unfinished"/> 5728 <translation>Toevoegen aan Bureaublad</translation>
5707 </message> 5729 </message>
5708 <message> 5730 <message>
5709 <location filename="../../src/yuzu/game_list.cpp" line="561"/> 5731 <location filename="../../src/yuzu/game_list.cpp" line="561"/>
5710 <source>Add to Applications Menu</source> 5732 <source>Add to Applications Menu</source>
5711 <translation type="unfinished"/> 5733 <translation>Toevoegen aan menu Toepassingen</translation>
5712 </message> 5734 </message>
5713 <message> 5735 <message>
5714 <location filename="../../src/yuzu/game_list.cpp" line="564"/> 5736 <location filename="../../src/yuzu/game_list.cpp" line="564"/>
@@ -5718,27 +5740,27 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5718 <message> 5740 <message>
5719 <location filename="../../src/yuzu/game_list.cpp" line="644"/> 5741 <location filename="../../src/yuzu/game_list.cpp" line="644"/>
5720 <source>Scan Subfolders</source> 5742 <source>Scan Subfolders</source>
5721 <translation>Scan Subfolders</translation> 5743 <translation>Scan Submappen</translation>
5722 </message> 5744 </message>
5723 <message> 5745 <message>
5724 <location filename="../../src/yuzu/game_list.cpp" line="645"/> 5746 <location filename="../../src/yuzu/game_list.cpp" line="645"/>
5725 <source>Remove Game Directory</source> 5747 <source>Remove Game Directory</source>
5726 <translation>Verwijder Game Directory</translation> 5748 <translation>Verwijder Spelmap</translation>
5727 </message> 5749 </message>
5728 <message> 5750 <message>
5729 <location filename="../../src/yuzu/game_list.cpp" line="664"/> 5751 <location filename="../../src/yuzu/game_list.cpp" line="664"/>
5730 <source>▲ Move Up</source> 5752 <source>▲ Move Up</source>
5731 <translation type="unfinished"/> 5753 <translation>▲ Omhoog</translation>
5732 </message> 5754 </message>
5733 <message> 5755 <message>
5734 <location filename="../../src/yuzu/game_list.cpp" line="665"/> 5756 <location filename="../../src/yuzu/game_list.cpp" line="665"/>
5735 <source>▼ Move Down</source> 5757 <source>▼ Move Down</source>
5736 <translation type="unfinished"/> 5758 <translation>▼ Omlaag</translation>
5737 </message> 5759 </message>
5738 <message> 5760 <message>
5739 <location filename="../../src/yuzu/game_list.cpp" line="666"/> 5761 <location filename="../../src/yuzu/game_list.cpp" line="666"/>
5740 <source>Open Directory Location</source> 5762 <source>Open Directory Location</source>
5741 <translation>Open Directory Locatie</translation> 5763 <translation>Open Maplocatie</translation>
5742 </message> 5764 </message>
5743 <message> 5765 <message>
5744 <location filename="../../src/yuzu/game_list.cpp" line="711"/> 5766 <location filename="../../src/yuzu/game_list.cpp" line="711"/>
@@ -5758,12 +5780,12 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5758 <message> 5780 <message>
5759 <location filename="../../src/yuzu/game_list.cpp" line="777"/> 5781 <location filename="../../src/yuzu/game_list.cpp" line="777"/>
5760 <source>Add-ons</source> 5782 <source>Add-ons</source>
5761 <translation>Toevoegingen</translation> 5783 <translation>Add-ons</translation>
5762 </message> 5784 </message>
5763 <message> 5785 <message>
5764 <location filename="../../src/yuzu/game_list.cpp" line="778"/> 5786 <location filename="../../src/yuzu/game_list.cpp" line="778"/>
5765 <source>File type</source> 5787 <source>File type</source>
5766 <translation>Bestands type</translation> 5788 <translation>Bestandssoort</translation>
5767 </message> 5789 </message>
5768 <message> 5790 <message>
5769 <location filename="../../src/yuzu/game_list.cpp" line="779"/> 5791 <location filename="../../src/yuzu/game_list.cpp" line="779"/>
@@ -5776,12 +5798,12 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5776 <message> 5798 <message>
5777 <location filename="../../src/yuzu/game_list_p.h" line="149"/> 5799 <location filename="../../src/yuzu/game_list_p.h" line="149"/>
5778 <source>Ingame</source> 5800 <source>Ingame</source>
5779 <translation type="unfinished"/> 5801 <translation>In het spel</translation>
5780 </message> 5802 </message>
5781 <message> 5803 <message>
5782 <location filename="../../src/yuzu/game_list_p.h" line="149"/> 5804 <location filename="../../src/yuzu/game_list_p.h" line="149"/>
5783 <source>Game starts, but crashes or major glitches prevent it from being completed.</source> 5805 <source>Game starts, but crashes or major glitches prevent it from being completed.</source>
5784 <translation type="unfinished"/> 5806 <translation>Het spel start, maar crashes of grote glitches voorkomen dat het wordt voltooid.</translation>
5785 </message> 5807 </message>
5786 <message> 5808 <message>
5787 <location filename="../../src/yuzu/game_list_p.h" line="151"/> 5809 <location filename="../../src/yuzu/game_list_p.h" line="151"/>
@@ -5791,17 +5813,17 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5791 <message> 5813 <message>
5792 <location filename="../../src/yuzu/game_list_p.h" line="151"/> 5814 <location filename="../../src/yuzu/game_list_p.h" line="151"/>
5793 <source>Game can be played without issues.</source> 5815 <source>Game can be played without issues.</source>
5794 <translation type="unfinished"/> 5816 <translation>Het spel kan zonder problemen gespeeld worden.</translation>
5795 </message> 5817 </message>
5796 <message> 5818 <message>
5797 <location filename="../../src/yuzu/game_list_p.h" line="152"/> 5819 <location filename="../../src/yuzu/game_list_p.h" line="152"/>
5798 <source>Playable</source> 5820 <source>Playable</source>
5799 <translation type="unfinished"/> 5821 <translation>Speelbaar</translation>
5800 </message> 5822 </message>
5801 <message> 5823 <message>
5802 <location filename="../../src/yuzu/game_list_p.h" line="152"/> 5824 <location filename="../../src/yuzu/game_list_p.h" line="152"/>
5803 <source>Game functions with minor graphical or audio glitches and is playable from start to finish.</source> 5825 <source>Game functions with minor graphical or audio glitches and is playable from start to finish.</source>
5804 <translation type="unfinished"/> 5826 <translation>Het spel werkt met kleine grafische of audiofouten en is speelbaar van begin tot eind.</translation>
5805 </message> 5827 </message>
5806 <message> 5828 <message>
5807 <location filename="../../src/yuzu/game_list_p.h" line="155"/> 5829 <location filename="../../src/yuzu/game_list_p.h" line="155"/>
@@ -5811,17 +5833,17 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5811 <message> 5833 <message>
5812 <location filename="../../src/yuzu/game_list_p.h" line="155"/> 5834 <location filename="../../src/yuzu/game_list_p.h" line="155"/>
5813 <source>Game loads, but is unable to progress past the Start Screen.</source> 5835 <source>Game loads, but is unable to progress past the Start Screen.</source>
5814 <translation type="unfinished"/> 5836 <translation>Het spel wordt geladen, maar komt niet verder dan het startscherm.</translation>
5815 </message> 5837 </message>
5816 <message> 5838 <message>
5817 <location filename="../../src/yuzu/game_list_p.h" line="156"/> 5839 <location filename="../../src/yuzu/game_list_p.h" line="156"/>
5818 <source>Won&apos;t Boot</source> 5840 <source>Won&apos;t Boot</source>
5819 <translation>Start Niet</translation> 5841 <translation>Start niet op</translation>
5820 </message> 5842 </message>
5821 <message> 5843 <message>
5822 <location filename="../../src/yuzu/game_list_p.h" line="156"/> 5844 <location filename="../../src/yuzu/game_list_p.h" line="156"/>
5823 <source>The game crashes when attempting to startup.</source> 5845 <source>The game crashes when attempting to startup.</source>
5824 <translation>De Game crasht wanneer hij probeert op te starten.</translation> 5846 <translation>Het spel loopt vast bij het opstarten.</translation>
5825 </message> 5847 </message>
5826 <message> 5848 <message>
5827 <location filename="../../src/yuzu/game_list_p.h" line="157"/> 5849 <location filename="../../src/yuzu/game_list_p.h" line="157"/>
@@ -5831,7 +5853,7 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5831 <message> 5853 <message>
5832 <location filename="../../src/yuzu/game_list_p.h" line="157"/> 5854 <location filename="../../src/yuzu/game_list_p.h" line="157"/>
5833 <source>The game has not yet been tested.</source> 5855 <source>The game has not yet been tested.</source>
5834 <translation>Deze Game is nog niet getest.</translation> 5856 <translation>Het spel is nog niet getest.</translation>
5835 </message> 5857 </message>
5836</context> 5858</context>
5837<context> 5859<context>
@@ -5839,7 +5861,7 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5839 <message> 5861 <message>
5840 <location filename="../../src/yuzu/game_list.cpp" line="952"/> 5862 <location filename="../../src/yuzu/game_list.cpp" line="952"/>
5841 <source>Double-click to add a new folder to the game list</source> 5863 <source>Double-click to add a new folder to the game list</source>
5842 <translation>Dubbel-klik om een ​​nieuwe map toe te voegen aan de lijst met games</translation> 5864 <translation>Dubbel-klik om een ​​nieuwe map toe te voegen aan de spellijst</translation>
5843 </message> 5865 </message>
5844</context> 5866</context>
5845<context> 5867<context>
@@ -5847,7 +5869,7 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5847 <message numerus="yes"> 5869 <message numerus="yes">
5848 <location filename="../../src/yuzu/game_list.cpp" line="86"/> 5870 <location filename="../../src/yuzu/game_list.cpp" line="86"/>
5849 <source>%1 of %n result(s)</source> 5871 <source>%1 of %n result(s)</source>
5850 <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> 5872 <translation><numerusform>%1 van %n resultaat(en)</numerusform><numerusform>%1 van %n resultaat(en)</numerusform></translation>
5851 </message> 5873 </message>
5852 <message> 5874 <message>
5853 <location filename="../../src/yuzu/game_list.cpp" line="791"/> 5875 <location filename="../../src/yuzu/game_list.cpp" line="791"/>
@@ -5857,7 +5879,7 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5857 <message> 5879 <message>
5858 <location filename="../../src/yuzu/game_list.cpp" line="792"/> 5880 <location filename="../../src/yuzu/game_list.cpp" line="792"/>
5859 <source>Enter pattern to filter</source> 5881 <source>Enter pattern to filter</source>
5860 <translation>Voer patroon in om te filteren:</translation> 5882 <translation>Voer patroon in om te filteren</translation>
5861 </message> 5883 </message>
5862</context> 5884</context>
5863<context> 5885<context>
@@ -5865,22 +5887,22 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5865 <message> 5887 <message>
5866 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="14"/> 5888 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="14"/>
5867 <source>Create Room</source> 5889 <source>Create Room</source>
5868 <translation type="unfinished"/> 5890 <translation>Maak Kamer</translation>
5869 </message> 5891 </message>
5870 <message> 5892 <message>
5871 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="37"/> 5893 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="37"/>
5872 <source>Room Name</source> 5894 <source>Room Name</source>
5873 <translation type="unfinished"/> 5895 <translation>Kamernaam</translation>
5874 </message> 5896 </message>
5875 <message> 5897 <message>
5876 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="51"/> 5898 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="51"/>
5877 <source>Preferred Game</source> 5899 <source>Preferred Game</source>
5878 <translation type="unfinished"/> 5900 <translation>Voorkeursspel</translation>
5879 </message> 5901 </message>
5880 <message> 5902 <message>
5881 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="61"/> 5903 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="61"/>
5882 <source>Max Players</source> 5904 <source>Max Players</source>
5883 <translation type="unfinished"/> 5905 <translation>Maximum Spelers</translation>
5884 </message> 5906 </message>
5885 <message> 5907 <message>
5886 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="91"/> 5908 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="91"/>
@@ -5890,42 +5912,42 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5890 <message> 5912 <message>
5891 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="101"/> 5913 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="101"/>
5892 <source>(Leave blank for open game)</source> 5914 <source>(Leave blank for open game)</source>
5893 <translation type="unfinished"/> 5915 <translation>(Laat leeg voor open spel)</translation>
5894 </message> 5916 </message>
5895 <message> 5917 <message>
5896 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="118"/> 5918 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="118"/>
5897 <source>Password</source> 5919 <source>Password</source>
5898 <translation type="unfinished"/> 5920 <translation>Wachtwoord</translation>
5899 </message> 5921 </message>
5900 <message> 5922 <message>
5901 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="125"/> 5923 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="125"/>
5902 <source>Port</source> 5924 <source>Port</source>
5903 <translation type="unfinished"/> 5925 <translation>Poort</translation>
5904 </message> 5926 </message>
5905 <message> 5927 <message>
5906 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="139"/> 5928 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="139"/>
5907 <source>Room Description</source> 5929 <source>Room Description</source>
5908 <translation>Kamer Beschrijving</translation> 5930 <translation>Kamerbeschrijving</translation>
5909 </message> 5931 </message>
5910 <message> 5932 <message>
5911 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="153"/> 5933 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="153"/>
5912 <source>Load Previous Ban List</source> 5934 <source>Load Previous Ban List</source>
5913 <translation type="unfinished"/> 5935 <translation>Laad Vorige Banlijst</translation>
5914 </message> 5936 </message>
5915 <message> 5937 <message>
5916 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="184"/> 5938 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="184"/>
5917 <source>Public</source> 5939 <source>Public</source>
5918 <translation type="unfinished"/> 5940 <translation>Openbaar</translation>
5919 </message> 5941 </message>
5920 <message> 5942 <message>
5921 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="189"/> 5943 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="189"/>
5922 <source>Unlisted</source> 5944 <source>Unlisted</source>
5923 <translation type="unfinished"/> 5945 <translation>Niet Vermeld</translation>
5924 </message> 5946 </message>
5925 <message> 5947 <message>
5926 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="197"/> 5948 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="197"/>
5927 <source>Host Room</source> 5949 <source>Host Room</source>
5928 <translation type="unfinished"/> 5950 <translation>Hostkamer</translation>
5929 </message> 5951 </message>
5930</context> 5952</context>
5931<context> 5953<context>
@@ -5933,13 +5955,14 @@ Wilt u dit omzeilen en toch afsluiten?</translation>
5933 <message> 5955 <message>
5934 <location filename="../../src/yuzu/multiplayer/host_room.cpp" line="182"/> 5956 <location filename="../../src/yuzu/multiplayer/host_room.cpp" line="182"/>
5935 <source>Error</source> 5957 <source>Error</source>
5936 <translation type="unfinished"/> 5958 <translation>Fout</translation>
5937 </message> 5959 </message>
5938 <message> 5960 <message>
5939 <location filename="../../src/yuzu/multiplayer/host_room.cpp" line="183"/> 5961 <location filename="../../src/yuzu/multiplayer/host_room.cpp" line="183"/>
5940 <source>Failed to announce the room to the public lobby. In order to host a room publicly, you must have a valid yuzu account configured in Emulation -&gt; Configure -&gt; Web. If you do not want to publish a room in the public lobby, then select Unlisted instead. 5962 <source>Failed to announce the room to the public lobby. In order to host a room publicly, you must have a valid yuzu account configured in Emulation -&gt; Configure -&gt; Web. If you do not want to publish a room in the public lobby, then select Unlisted instead.
5941Debug Message: </source> 5963Debug Message: </source>
5942 <translation type="unfinished"/> 5964 <translation>Het is niet gelukt om de kamer aan te kondigen in de openbare lobby. Om een kamer openbaar te hosten, moet je een geldige yuzu-account geconfigureerd hebben in Emulatie -&gt; Configuratie -&gt; Web. Als je geen kamer wilt publiceren in de openbare lobby, selecteer dan in plaats daarvan Niet Vermeld.
5965Debug-bericht: </translation>
5943 </message> 5966 </message>
5944</context> 5967</context>
5945<context> 5968<context>
@@ -5947,7 +5970,7 @@ Debug Message: </source>
5947 <message> 5970 <message>
5948 <location filename="../../src/yuzu/configuration/config.cpp" line="73"/> 5971 <location filename="../../src/yuzu/configuration/config.cpp" line="73"/>
5949 <source>Audio Mute/Unmute</source> 5972 <source>Audio Mute/Unmute</source>
5950 <translation type="unfinished"/> 5973 <translation>Audio Dempen/Dempen Opheffen</translation>
5951 </message> 5974 </message>
5952 <message> 5975 <message>
5953 <location filename="../../src/yuzu/configuration/config.cpp" line="73"/> 5976 <location filename="../../src/yuzu/configuration/config.cpp" line="73"/>
@@ -5973,52 +5996,52 @@ Debug Message: </source>
5973 <location filename="../../src/yuzu/configuration/config.cpp" line="93"/> 5996 <location filename="../../src/yuzu/configuration/config.cpp" line="93"/>
5974 <location filename="../../src/yuzu/configuration/config.cpp" line="94"/> 5997 <location filename="../../src/yuzu/configuration/config.cpp" line="94"/>
5975 <source>Main Window</source> 5998 <source>Main Window</source>
5976 <translation type="unfinished"/> 5999 <translation>Hoofdvenster</translation>
5977 </message> 6000 </message>
5978 <message> 6001 <message>
5979 <location filename="../../src/yuzu/configuration/config.cpp" line="74"/> 6002 <location filename="../../src/yuzu/configuration/config.cpp" line="74"/>
5980 <source>Audio Volume Down</source> 6003 <source>Audio Volume Down</source>
5981 <translation type="unfinished"/> 6004 <translation>Audiovolume Omlaag</translation>
5982 </message> 6005 </message>
5983 <message> 6006 <message>
5984 <location filename="../../src/yuzu/configuration/config.cpp" line="75"/> 6007 <location filename="../../src/yuzu/configuration/config.cpp" line="75"/>
5985 <source>Audio Volume Up</source> 6008 <source>Audio Volume Up</source>
5986 <translation type="unfinished"/> 6009 <translation>Audiovolume Omhoog</translation>
5987 </message> 6010 </message>
5988 <message> 6011 <message>
5989 <location filename="../../src/yuzu/configuration/config.cpp" line="76"/> 6012 <location filename="../../src/yuzu/configuration/config.cpp" line="76"/>
5990 <source>Capture Screenshot</source> 6013 <source>Capture Screenshot</source>
5991 <translation>Screenshot Vastleggen</translation> 6014 <translation>Leg Schermafbeelding Vast</translation>
5992 </message> 6015 </message>
5993 <message> 6016 <message>
5994 <location filename="../../src/yuzu/configuration/config.cpp" line="77"/> 6017 <location filename="../../src/yuzu/configuration/config.cpp" line="77"/>
5995 <source>Change Adapting Filter</source> 6018 <source>Change Adapting Filter</source>
5996 <translation type="unfinished"/> 6019 <translation>Wijzig Aanpassingsfilter</translation>
5997 </message> 6020 </message>
5998 <message> 6021 <message>
5999 <location filename="../../src/yuzu/configuration/config.cpp" line="78"/> 6022 <location filename="../../src/yuzu/configuration/config.cpp" line="78"/>
6000 <source>Change Docked Mode</source> 6023 <source>Change Docked Mode</source>
6001 <translation type="unfinished"/> 6024 <translation>Wijzig Docked-modus</translation>
6002 </message> 6025 </message>
6003 <message> 6026 <message>
6004 <location filename="../../src/yuzu/configuration/config.cpp" line="79"/> 6027 <location filename="../../src/yuzu/configuration/config.cpp" line="79"/>
6005 <source>Change GPU Accuracy</source> 6028 <source>Change GPU Accuracy</source>
6006 <translation type="unfinished"/> 6029 <translation>Wijzig GPU-nauwkeurigheid</translation>
6007 </message> 6030 </message>
6008 <message> 6031 <message>
6009 <location filename="../../src/yuzu/configuration/config.cpp" line="80"/> 6032 <location filename="../../src/yuzu/configuration/config.cpp" line="80"/>
6010 <source>Continue/Pause Emulation</source> 6033 <source>Continue/Pause Emulation</source>
6011 <translation type="unfinished"/> 6034 <translation>Emulatie Doorgaan/Onderbreken</translation>
6012 </message> 6035 </message>
6013 <message> 6036 <message>
6014 <location filename="../../src/yuzu/configuration/config.cpp" line="81"/> 6037 <location filename="../../src/yuzu/configuration/config.cpp" line="81"/>
6015 <source>Exit Fullscreen</source> 6038 <source>Exit Fullscreen</source>
6016 <translation type="unfinished"/> 6039 <translation>Volledig Scherm Afsluiten</translation>
6017 </message> 6040 </message>
6018 <message> 6041 <message>
6019 <location filename="../../src/yuzu/configuration/config.cpp" line="82"/> 6042 <location filename="../../src/yuzu/configuration/config.cpp" line="82"/>
6020 <source>Exit yuzu</source> 6043 <source>Exit yuzu</source>
6021 <translation type="unfinished"/> 6044 <translation>yuzu afsluiten</translation>
6022 </message> 6045 </message>
6023 <message> 6046 <message>
6024 <location filename="../../src/yuzu/configuration/config.cpp" line="83"/> 6047 <location filename="../../src/yuzu/configuration/config.cpp" line="83"/>
@@ -6033,52 +6056,52 @@ Debug Message: </source>
6033 <message> 6056 <message>
6034 <location filename="../../src/yuzu/configuration/config.cpp" line="85"/> 6057 <location filename="../../src/yuzu/configuration/config.cpp" line="85"/>
6035 <source>Load/Remove Amiibo</source> 6058 <source>Load/Remove Amiibo</source>
6036 <translation type="unfinished"/> 6059 <translation>Laad/Verwijder Amiibo</translation>
6037 </message> 6060 </message>
6038 <message> 6061 <message>
6039 <location filename="../../src/yuzu/configuration/config.cpp" line="86"/> 6062 <location filename="../../src/yuzu/configuration/config.cpp" line="86"/>
6040 <source>Restart Emulation</source> 6063 <source>Restart Emulation</source>
6041 <translation type="unfinished"/> 6064 <translation>Herstart Emulatie</translation>
6042 </message> 6065 </message>
6043 <message> 6066 <message>
6044 <location filename="../../src/yuzu/configuration/config.cpp" line="87"/> 6067 <location filename="../../src/yuzu/configuration/config.cpp" line="87"/>
6045 <source>Stop Emulation</source> 6068 <source>Stop Emulation</source>
6046 <translation type="unfinished"/> 6069 <translation>Stop Emulatie</translation>
6047 </message> 6070 </message>
6048 <message> 6071 <message>
6049 <location filename="../../src/yuzu/configuration/config.cpp" line="88"/> 6072 <location filename="../../src/yuzu/configuration/config.cpp" line="88"/>
6050 <source>TAS Record</source> 6073 <source>TAS Record</source>
6051 <translation type="unfinished"/> 6074 <translation>TAS Opname</translation>
6052 </message> 6075 </message>
6053 <message> 6076 <message>
6054 <location filename="../../src/yuzu/configuration/config.cpp" line="89"/> 6077 <location filename="../../src/yuzu/configuration/config.cpp" line="89"/>
6055 <source>TAS Reset</source> 6078 <source>TAS Reset</source>
6056 <translation type="unfinished"/> 6079 <translation>TAS Reset</translation>
6057 </message> 6080 </message>
6058 <message> 6081 <message>
6059 <location filename="../../src/yuzu/configuration/config.cpp" line="90"/> 6082 <location filename="../../src/yuzu/configuration/config.cpp" line="90"/>
6060 <source>TAS Start/Stop</source> 6083 <source>TAS Start/Stop</source>
6061 <translation type="unfinished"/> 6084 <translation>TAS Start/Stop</translation>
6062 </message> 6085 </message>
6063 <message> 6086 <message>
6064 <location filename="../../src/yuzu/configuration/config.cpp" line="91"/> 6087 <location filename="../../src/yuzu/configuration/config.cpp" line="91"/>
6065 <source>Toggle Filter Bar</source> 6088 <source>Toggle Filter Bar</source>
6066 <translation type="unfinished"/> 6089 <translation>Schakel Filterbalk</translation>
6067 </message> 6090 </message>
6068 <message> 6091 <message>
6069 <location filename="../../src/yuzu/configuration/config.cpp" line="92"/> 6092 <location filename="../../src/yuzu/configuration/config.cpp" line="92"/>
6070 <source>Toggle Framerate Limit</source> 6093 <source>Toggle Framerate Limit</source>
6071 <translation type="unfinished"/> 6094 <translation>Schakel Frameratelimiet</translation>
6072 </message> 6095 </message>
6073 <message> 6096 <message>
6074 <location filename="../../src/yuzu/configuration/config.cpp" line="93"/> 6097 <location filename="../../src/yuzu/configuration/config.cpp" line="93"/>
6075 <source>Toggle Mouse Panning</source> 6098 <source>Toggle Mouse Panning</source>
6076 <translation type="unfinished"/> 6099 <translation>Schakel Muispanning</translation>
6077 </message> 6100 </message>
6078 <message> 6101 <message>
6079 <location filename="../../src/yuzu/configuration/config.cpp" line="94"/> 6102 <location filename="../../src/yuzu/configuration/config.cpp" line="94"/>
6080 <source>Toggle Status Bar</source> 6103 <source>Toggle Status Bar</source>
6081 <translation type="unfinished"/> 6104 <translation>Schakel Statusbalk</translation>
6082 </message> 6105 </message>
6083</context> 6106</context>
6084<context> 6107<context>
@@ -6086,17 +6109,17 @@ Debug Message: </source>
6086 <message> 6109 <message>
6087 <location filename="../../src/yuzu/install_dialog.cpp" line="29"/> 6110 <location filename="../../src/yuzu/install_dialog.cpp" line="29"/>
6088 <source>Please confirm these are the files you wish to install.</source> 6111 <source>Please confirm these are the files you wish to install.</source>
6089 <translation type="unfinished"/> 6112 <translation>Bevestig dat dit de bestanden zijn die je wilt installeren.</translation>
6090 </message> 6113 </message>
6091 <message> 6114 <message>
6092 <location filename="../../src/yuzu/install_dialog.cpp" line="32"/> 6115 <location filename="../../src/yuzu/install_dialog.cpp" line="32"/>
6093 <source>Installing an Update or DLC will overwrite the previously installed one.</source> 6116 <source>Installing an Update or DLC will overwrite the previously installed one.</source>
6094 <translation type="unfinished"/> 6117 <translation>Het installeren van een Update of DLC overschrijft de eerder geïnstalleerde.</translation>
6095 </message> 6118 </message>
6096 <message> 6119 <message>
6097 <location filename="../../src/yuzu/install_dialog.cpp" line="36"/> 6120 <location filename="../../src/yuzu/install_dialog.cpp" line="36"/>
6098 <source>Install</source> 6121 <source>Install</source>
6099 <translation>Installeren</translation> 6122 <translation>Installeer</translation>
6100 </message> 6123 </message>
6101 <message> 6124 <message>
6102 <location filename="../../src/yuzu/install_dialog.cpp" line="49"/> 6125 <location filename="../../src/yuzu/install_dialog.cpp" line="49"/>
@@ -6110,7 +6133,8 @@ Debug Message: </source>
6110 <location filename="../../src/yuzu/util/limitable_input_dialog.cpp" line="59"/> 6133 <location filename="../../src/yuzu/util/limitable_input_dialog.cpp" line="59"/>
6111 <source>The text can't contain any of the following characters: 6134 <source>The text can't contain any of the following characters:
6112%1</source> 6135%1</source>
6113 <translation type="unfinished"/> 6136 <translation>De tekst kan geen van de volgende tekens bevatten:
6137%1</translation>
6114 </message> 6138 </message>
6115</context> 6139</context>
6116<context> 6140<context>
@@ -6118,12 +6142,12 @@ Debug Message: </source>
6118 <message> 6142 <message>
6119 <location filename="../../src/yuzu/loading_screen.ui" line="84"/> 6143 <location filename="../../src/yuzu/loading_screen.ui" line="84"/>
6120 <source>Loading Shaders 387 / 1628</source> 6144 <source>Loading Shaders 387 / 1628</source>
6121 <translation>Shaders Laden 387 / 1628</translation> 6145 <translation>Shaders Laden 387 / 1628</translation>
6122 </message> 6146 </message>
6123 <message> 6147 <message>
6124 <location filename="../../src/yuzu/loading_screen.ui" line="121"/> 6148 <location filename="../../src/yuzu/loading_screen.ui" line="121"/>
6125 <source>Loading Shaders %v out of %m</source> 6149 <source>Loading Shaders %v out of %m</source>
6126 <translation>%v Shaders Laden van de %m</translation> 6150 <translation>Shaders Laden %v van %m</translation>
6127 </message> 6151 </message>
6128 <message> 6152 <message>
6129 <location filename="../../src/yuzu/loading_screen.ui" line="135"/> 6153 <location filename="../../src/yuzu/loading_screen.ui" line="135"/>
@@ -6138,7 +6162,7 @@ Debug Message: </source>
6138 <message> 6162 <message>
6139 <location filename="../../src/yuzu/loading_screen.cpp" line="84"/> 6163 <location filename="../../src/yuzu/loading_screen.cpp" line="84"/>
6140 <source>Loading Shaders %1 / %2</source> 6164 <source>Loading Shaders %1 / %2</source>
6141 <translation>Shaders Laden %1 / %2</translation> 6165 <translation>Shaders Laden %1 / %2</translation>
6142 </message> 6166 </message>
6143 <message> 6167 <message>
6144 <location filename="../../src/yuzu/loading_screen.cpp" line="85"/> 6168 <location filename="../../src/yuzu/loading_screen.cpp" line="85"/>
@@ -6156,53 +6180,53 @@ Debug Message: </source>
6156 <message> 6180 <message>
6157 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="14"/> 6181 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="14"/>
6158 <source>Public Room Browser</source> 6182 <source>Public Room Browser</source>
6159 <translation type="unfinished"/> 6183 <translation>Browser voor Openbare Ruimten</translation>
6160 </message> 6184 </message>
6161 <message> 6185 <message>
6162 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="32"/> 6186 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="32"/>
6163 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="39"/> 6187 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="39"/>
6164 <source>Nickname</source> 6188 <source>Nickname</source>
6165 <translation type="unfinished"/> 6189 <translation>Gebruikersnaam</translation>
6166 </message> 6190 </message>
6167 <message> 6191 <message>
6168 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="59"/> 6192 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="59"/>
6169 <source>Filters</source> 6193 <source>Filters</source>
6170 <translation type="unfinished"/> 6194 <translation>Filters</translation>
6171 </message> 6195 </message>
6172 <message> 6196 <message>
6173 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="66"/> 6197 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="66"/>
6174 <source>Search</source> 6198 <source>Search</source>
6175 <translation type="unfinished"/> 6199 <translation>Zoek</translation>
6176 </message> 6200 </message>
6177 <message> 6201 <message>
6178 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="76"/> 6202 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="76"/>
6179 <source>Games I Own</source> 6203 <source>Games I Own</source>
6180 <translation type="unfinished"/> 6204 <translation>Spellen die ik bezit</translation>
6181 </message> 6205 </message>
6182 <message> 6206 <message>
6183 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="83"/> 6207 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="83"/>
6184 <source>Hide Empty Rooms</source> 6208 <source>Hide Empty Rooms</source>
6185 <translation type="unfinished"/> 6209 <translation>Verberg Lege Kamers</translation>
6186 </message> 6210 </message>
6187 <message> 6211 <message>
6188 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="90"/> 6212 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="90"/>
6189 <source>Hide Full Rooms</source> 6213 <source>Hide Full Rooms</source>
6190 <translation type="unfinished"/> 6214 <translation>Verberg Volle Kamers</translation>
6191 </message> 6215 </message>
6192 <message> 6216 <message>
6193 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="110"/> 6217 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="110"/>
6194 <source>Refresh Lobby</source> 6218 <source>Refresh Lobby</source>
6195 <translation type="unfinished"/> 6219 <translation>Vernieuw Lobby</translation>
6196 </message> 6220 </message>
6197 <message> 6221 <message>
6198 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="113"/> 6222 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="113"/>
6199 <source>Password Required to Join</source> 6223 <source>Password Required to Join</source>
6200 <translation type="unfinished"/> 6224 <translation>Wachtwoord vereist om toegang te krijgen</translation>
6201 </message> 6225 </message>
6202 <message> 6226 <message>
6203 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="113"/> 6227 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="113"/>
6204 <source>Password:</source> 6228 <source>Password:</source>
6205 <translation type="unfinished"/> 6229 <translation>Wachtwoord:</translation>
6206 </message> 6230 </message>
6207 <message> 6231 <message>
6208 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="216"/> 6232 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="216"/>
@@ -6212,27 +6236,27 @@ Debug Message: </source>
6212 <message> 6236 <message>
6213 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="217"/> 6237 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="217"/>
6214 <source>Room Name</source> 6238 <source>Room Name</source>
6215 <translation type="unfinished"/> 6239 <translation>Kamernaam</translation>
6216 </message> 6240 </message>
6217 <message> 6241 <message>
6218 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="218"/> 6242 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="218"/>
6219 <source>Preferred Game</source> 6243 <source>Preferred Game</source>
6220 <translation type="unfinished"/> 6244 <translation>Voorkeursspel</translation>
6221 </message> 6245 </message>
6222 <message> 6246 <message>
6223 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="219"/> 6247 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="219"/>
6224 <source>Host</source> 6248 <source>Host</source>
6225 <translation type="unfinished"/> 6249 <translation>Host</translation>
6226 </message> 6250 </message>
6227 <message> 6251 <message>
6228 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="226"/> 6252 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="226"/>
6229 <source>Refreshing</source> 6253 <source>Refreshing</source>
6230 <translation type="unfinished"/> 6254 <translation>Vernieuwen</translation>
6231 </message> 6255 </message>
6232 <message> 6256 <message>
6233 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="283"/> 6257 <location filename="../../src/yuzu/multiplayer/lobby.cpp" line="283"/>
6234 <source>Refresh List</source> 6258 <source>Refresh List</source>
6235 <translation type="unfinished"/> 6259 <translation>Vernieuw Lijst</translation>
6236 </message> 6260 </message>
6237</context> 6261</context>
6238<context> 6262<context>
@@ -6250,7 +6274,7 @@ Debug Message: </source>
6250 <message> 6274 <message>
6251 <location filename="../../src/yuzu/main.ui" line="48"/> 6275 <location filename="../../src/yuzu/main.ui" line="48"/>
6252 <source>&amp;Recent Files</source> 6276 <source>&amp;Recent Files</source>
6253 <translation type="unfinished"/> 6277 <translation>&amp;Recente Bestanden</translation>
6254 </message> 6278 </message>
6255 <message> 6279 <message>
6256 <location filename="../../src/yuzu/main.ui" line="66"/> 6280 <location filename="../../src/yuzu/main.ui" line="66"/>
@@ -6265,57 +6289,57 @@ Debug Message: </source>
6265 <message> 6289 <message>
6266 <location filename="../../src/yuzu/main.ui" line="81"/> 6290 <location filename="../../src/yuzu/main.ui" line="81"/>
6267 <source>&amp;Reset Window Size</source> 6291 <source>&amp;Reset Window Size</source>
6268 <translation type="unfinished"/> 6292 <translation>&amp;Herstel Venstergrootte</translation>
6269 </message> 6293 </message>
6270 <message> 6294 <message>
6271 <location filename="../../src/yuzu/main.ui" line="86"/> 6295 <location filename="../../src/yuzu/main.ui" line="86"/>
6272 <source>&amp;Debugging</source> 6296 <source>&amp;Debugging</source>
6273 <translation type="unfinished"/> 6297 <translation>&amp;Debuggen</translation>
6274 </message> 6298 </message>
6275 <message> 6299 <message>
6276 <location filename="../../src/yuzu/main.ui" line="91"/> 6300 <location filename="../../src/yuzu/main.ui" line="91"/>
6277 <source>Reset Window Size to &amp;720p</source> 6301 <source>Reset Window Size to &amp;720p</source>
6278 <translation type="unfinished"/> 6302 <translation>Herstel Venstergrootte naar &amp;720p</translation>
6279 </message> 6303 </message>
6280 <message> 6304 <message>
6281 <location filename="../../src/yuzu/main.ui" line="94"/> 6305 <location filename="../../src/yuzu/main.ui" line="94"/>
6282 <source>Reset Window Size to 720p</source> 6306 <source>Reset Window Size to 720p</source>
6283 <translation type="unfinished"/> 6307 <translation>Herstel Venstergrootte naar 720p</translation>
6284 </message> 6308 </message>
6285 <message> 6309 <message>
6286 <location filename="../../src/yuzu/main.ui" line="99"/> 6310 <location filename="../../src/yuzu/main.ui" line="99"/>
6287 <source>Reset Window Size to &amp;900p</source> 6311 <source>Reset Window Size to &amp;900p</source>
6288 <translation type="unfinished"/> 6312 <translation>Herstel Venstergrootte naar &amp;900p</translation>
6289 </message> 6313 </message>
6290 <message> 6314 <message>
6291 <location filename="../../src/yuzu/main.ui" line="102"/> 6315 <location filename="../../src/yuzu/main.ui" line="102"/>
6292 <source>Reset Window Size to 900p</source> 6316 <source>Reset Window Size to 900p</source>
6293 <translation type="unfinished"/> 6317 <translation>Herstel Venstergrootte naar 900p</translation>
6294 </message> 6318 </message>
6295 <message> 6319 <message>
6296 <location filename="../../src/yuzu/main.ui" line="107"/> 6320 <location filename="../../src/yuzu/main.ui" line="107"/>
6297 <source>Reset Window Size to &amp;1080p</source> 6321 <source>Reset Window Size to &amp;1080p</source>
6298 <translation type="unfinished"/> 6322 <translation>Herstel Venstergrootte naar &amp;1080p</translation>
6299 </message> 6323 </message>
6300 <message> 6324 <message>
6301 <location filename="../../src/yuzu/main.ui" line="110"/> 6325 <location filename="../../src/yuzu/main.ui" line="110"/>
6302 <source>Reset Window Size to 1080p</source> 6326 <source>Reset Window Size to 1080p</source>
6303 <translation type="unfinished"/> 6327 <translation>Herstel Venstergrootte naar 1080p</translation>
6304 </message> 6328 </message>
6305 <message> 6329 <message>
6306 <location filename="../../src/yuzu/main.ui" line="127"/> 6330 <location filename="../../src/yuzu/main.ui" line="127"/>
6307 <source>&amp;Multiplayer</source> 6331 <source>&amp;Multiplayer</source>
6308 <translation type="unfinished"/> 6332 <translation>&amp;Multiplayer</translation>
6309 </message> 6333 </message>
6310 <message> 6334 <message>
6311 <location filename="../../src/yuzu/main.ui" line="138"/> 6335 <location filename="../../src/yuzu/main.ui" line="138"/>
6312 <source>&amp;Tools</source> 6336 <source>&amp;Tools</source>
6313 <translation type="unfinished"/> 6337 <translation>&amp;Tools</translation>
6314 </message> 6338 </message>
6315 <message> 6339 <message>
6316 <location filename="../../src/yuzu/main.ui" line="142"/> 6340 <location filename="../../src/yuzu/main.ui" line="142"/>
6317 <source>&amp;TAS</source> 6341 <source>&amp;TAS</source>
6318 <translation type="unfinished"/> 6342 <translation>&amp;TAS</translation>
6319 </message> 6343 </message>
6320 <message> 6344 <message>
6321 <location filename="../../src/yuzu/main.ui" line="157"/> 6345 <location filename="../../src/yuzu/main.ui" line="157"/>
@@ -6325,17 +6349,17 @@ Debug Message: </source>
6325 <message> 6349 <message>
6326 <location filename="../../src/yuzu/main.ui" line="178"/> 6350 <location filename="../../src/yuzu/main.ui" line="178"/>
6327 <source>&amp;Install Files to NAND...</source> 6351 <source>&amp;Install Files to NAND...</source>
6328 <translation type="unfinished"/> 6352 <translation>&amp;Installeer Bestanden naar NAND...</translation>
6329 </message> 6353 </message>
6330 <message> 6354 <message>
6331 <location filename="../../src/yuzu/main.ui" line="183"/> 6355 <location filename="../../src/yuzu/main.ui" line="183"/>
6332 <source>L&amp;oad File...</source> 6356 <source>L&amp;oad File...</source>
6333 <translation type="unfinished"/> 6357 <translation>L&amp;aad Bestand...</translation>
6334 </message> 6358 </message>
6335 <message> 6359 <message>
6336 <location filename="../../src/yuzu/main.ui" line="188"/> 6360 <location filename="../../src/yuzu/main.ui" line="188"/>
6337 <source>Load &amp;Folder...</source> 6361 <source>Load &amp;Folder...</source>
6338 <translation type="unfinished"/> 6362 <translation>Laad &amp;Map...</translation>
6339 </message> 6363 </message>
6340 <message> 6364 <message>
6341 <location filename="../../src/yuzu/main.ui" line="193"/> 6365 <location filename="../../src/yuzu/main.ui" line="193"/>
@@ -6345,7 +6369,7 @@ Debug Message: </source>
6345 <message> 6369 <message>
6346 <location filename="../../src/yuzu/main.ui" line="201"/> 6370 <location filename="../../src/yuzu/main.ui" line="201"/>
6347 <source>&amp;Pause</source> 6371 <source>&amp;Pause</source>
6348 <translation>&amp;Pauzeren</translation> 6372 <translation>&amp;Onderbreken</translation>
6349 </message> 6373 </message>
6350 <message> 6374 <message>
6351 <location filename="../../src/yuzu/main.ui" line="209"/> 6375 <location filename="../../src/yuzu/main.ui" line="209"/>
@@ -6355,122 +6379,122 @@ Debug Message: </source>
6355 <message> 6379 <message>
6356 <location filename="../../src/yuzu/main.ui" line="214"/> 6380 <location filename="../../src/yuzu/main.ui" line="214"/>
6357 <source>&amp;Reinitialize keys...</source> 6381 <source>&amp;Reinitialize keys...</source>
6358 <translation type="unfinished"/> 6382 <translation>&amp;Herinitialiseer toetsen...</translation>
6359 </message> 6383 </message>
6360 <message> 6384 <message>
6361 <location filename="../../src/yuzu/main.ui" line="219"/> 6385 <location filename="../../src/yuzu/main.ui" line="219"/>
6362 <source>&amp;About yuzu</source> 6386 <source>&amp;About yuzu</source>
6363 <translation type="unfinished"/> 6387 <translation>&amp;Over yuzu</translation>
6364 </message> 6388 </message>
6365 <message> 6389 <message>
6366 <location filename="../../src/yuzu/main.ui" line="227"/> 6390 <location filename="../../src/yuzu/main.ui" line="227"/>
6367 <source>Single &amp;Window Mode</source> 6391 <source>Single &amp;Window Mode</source>
6368 <translation type="unfinished"/> 6392 <translation>Modus Enkel Venster</translation>
6369 </message> 6393 </message>
6370 <message> 6394 <message>
6371 <location filename="../../src/yuzu/main.ui" line="232"/> 6395 <location filename="../../src/yuzu/main.ui" line="232"/>
6372 <source>Con&amp;figure...</source> 6396 <source>Con&amp;figure...</source>
6373 <translation type="unfinished"/> 6397 <translation>Con&amp;figureer...</translation>
6374 </message> 6398 </message>
6375 <message> 6399 <message>
6376 <location filename="../../src/yuzu/main.ui" line="243"/> 6400 <location filename="../../src/yuzu/main.ui" line="243"/>
6377 <source>Display D&amp;ock Widget Headers</source> 6401 <source>Display D&amp;ock Widget Headers</source>
6378 <translation type="unfinished"/> 6402 <translation>Toon Dock Widget Kopteksten</translation>
6379 </message> 6403 </message>
6380 <message> 6404 <message>
6381 <location filename="../../src/yuzu/main.ui" line="251"/> 6405 <location filename="../../src/yuzu/main.ui" line="251"/>
6382 <source>Show &amp;Filter Bar</source> 6406 <source>Show &amp;Filter Bar</source>
6383 <translation type="unfinished"/> 6407 <translation>Toon &amp;Filterbalk</translation>
6384 </message> 6408 </message>
6385 <message> 6409 <message>
6386 <location filename="../../src/yuzu/main.ui" line="259"/> 6410 <location filename="../../src/yuzu/main.ui" line="259"/>
6387 <source>Show &amp;Status Bar</source> 6411 <source>Show &amp;Status Bar</source>
6388 <translation type="unfinished"/> 6412 <translation>Toon &amp;Statusbalk</translation>
6389 </message> 6413 </message>
6390 <message> 6414 <message>
6391 <location filename="../../src/yuzu/main.ui" line="262"/> 6415 <location filename="../../src/yuzu/main.ui" line="262"/>
6392 <source>Show Status Bar</source> 6416 <source>Show Status Bar</source>
6393 <translation>Laat status balk zien</translation> 6417 <translation>Toon Statusbalk</translation>
6394 </message> 6418 </message>
6395 <message> 6419 <message>
6396 <location filename="../../src/yuzu/main.ui" line="270"/> 6420 <location filename="../../src/yuzu/main.ui" line="270"/>
6397 <source>&amp;Browse Public Game Lobby</source> 6421 <source>&amp;Browse Public Game Lobby</source>
6398 <translation type="unfinished"/> 6422 <translation>&amp;Bladeren door Openbare Spellobby</translation>
6399 </message> 6423 </message>
6400 <message> 6424 <message>
6401 <location filename="../../src/yuzu/main.ui" line="278"/> 6425 <location filename="../../src/yuzu/main.ui" line="278"/>
6402 <source>&amp;Create Room</source> 6426 <source>&amp;Create Room</source>
6403 <translation type="unfinished"/> 6427 <translation>&amp;Maak Kamer</translation>
6404 </message> 6428 </message>
6405 <message> 6429 <message>
6406 <location filename="../../src/yuzu/main.ui" line="286"/> 6430 <location filename="../../src/yuzu/main.ui" line="286"/>
6407 <source>&amp;Leave Room</source> 6431 <source>&amp;Leave Room</source>
6408 <translation type="unfinished"/> 6432 <translation>&amp;Verlaat Kamer</translation>
6409 </message> 6433 </message>
6410 <message> 6434 <message>
6411 <location filename="../../src/yuzu/main.ui" line="291"/> 6435 <location filename="../../src/yuzu/main.ui" line="291"/>
6412 <source>&amp;Direct Connect to Room</source> 6436 <source>&amp;Direct Connect to Room</source>
6413 <translation type="unfinished"/> 6437 <translation>&amp;Directe Verbinding met Kamer</translation>
6414 </message> 6438 </message>
6415 <message> 6439 <message>
6416 <location filename="../../src/yuzu/main.ui" line="299"/> 6440 <location filename="../../src/yuzu/main.ui" line="299"/>
6417 <source>&amp;Show Current Room</source> 6441 <source>&amp;Show Current Room</source>
6418 <translation type="unfinished"/> 6442 <translation>&amp;Toon Huidige Kamer</translation>
6419 </message> 6443 </message>
6420 <message> 6444 <message>
6421 <location filename="../../src/yuzu/main.ui" line="307"/> 6445 <location filename="../../src/yuzu/main.ui" line="307"/>
6422 <source>F&amp;ullscreen</source> 6446 <source>F&amp;ullscreen</source>
6423 <translation type="unfinished"/> 6447 <translation>Volledig Scherm</translation>
6424 </message> 6448 </message>
6425 <message> 6449 <message>
6426 <location filename="../../src/yuzu/main.ui" line="315"/> 6450 <location filename="../../src/yuzu/main.ui" line="315"/>
6427 <source>&amp;Restart</source> 6451 <source>&amp;Restart</source>
6428 <translation type="unfinished"/> 6452 <translation>&amp;Herstart</translation>
6429 </message> 6453 </message>
6430 <message> 6454 <message>
6431 <location filename="../../src/yuzu/main.ui" line="323"/> 6455 <location filename="../../src/yuzu/main.ui" line="323"/>
6432 <source>Load/Remove &amp;Amiibo...</source> 6456 <source>Load/Remove &amp;Amiibo...</source>
6433 <translation type="unfinished"/> 6457 <translation>Laad/Verwijder &amp;Amiibo...</translation>
6434 </message> 6458 </message>
6435 <message> 6459 <message>
6436 <location filename="../../src/yuzu/main.ui" line="331"/> 6460 <location filename="../../src/yuzu/main.ui" line="331"/>
6437 <source>&amp;Report Compatibility</source> 6461 <source>&amp;Report Compatibility</source>
6438 <translation type="unfinished"/> 6462 <translation>&amp;Rapporteer Compatibiliteit</translation>
6439 </message> 6463 </message>
6440 <message> 6464 <message>
6441 <location filename="../../src/yuzu/main.ui" line="339"/> 6465 <location filename="../../src/yuzu/main.ui" line="339"/>
6442 <source>Open &amp;Mods Page</source> 6466 <source>Open &amp;Mods Page</source>
6443 <translation type="unfinished"/> 6467 <translation>Open &amp;Mod-pagina</translation>
6444 </message> 6468 </message>
6445 <message> 6469 <message>
6446 <location filename="../../src/yuzu/main.ui" line="344"/> 6470 <location filename="../../src/yuzu/main.ui" line="344"/>
6447 <source>Open &amp;Quickstart Guide</source> 6471 <source>Open &amp;Quickstart Guide</source>
6448 <translation type="unfinished"/> 6472 <translation>Open &amp;Snelstartgids</translation>
6449 </message> 6473 </message>
6450 <message> 6474 <message>
6451 <location filename="../../src/yuzu/main.ui" line="349"/> 6475 <location filename="../../src/yuzu/main.ui" line="349"/>
6452 <source>&amp;FAQ</source> 6476 <source>&amp;FAQ</source>
6453 <translation type="unfinished"/> 6477 <translation>&amp;FAQ</translation>
6454 </message> 6478 </message>
6455 <message> 6479 <message>
6456 <location filename="../../src/yuzu/main.ui" line="354"/> 6480 <location filename="../../src/yuzu/main.ui" line="354"/>
6457 <source>Open &amp;yuzu Folder</source> 6481 <source>Open &amp;yuzu Folder</source>
6458 <translation type="unfinished"/> 6482 <translation>Open &amp;yuzu-map</translation>
6459 </message> 6483 </message>
6460 <message> 6484 <message>
6461 <location filename="../../src/yuzu/main.ui" line="362"/> 6485 <location filename="../../src/yuzu/main.ui" line="362"/>
6462 <source>&amp;Capture Screenshot</source> 6486 <source>&amp;Capture Screenshot</source>
6463 <translation type="unfinished"/> 6487 <translation>&amp;Leg Schermafbeelding Vast</translation>
6464 </message> 6488 </message>
6465 <message> 6489 <message>
6466 <location filename="../../src/yuzu/main.ui" line="367"/> 6490 <location filename="../../src/yuzu/main.ui" line="367"/>
6467 <source>&amp;Configure TAS...</source> 6491 <source>&amp;Configure TAS...</source>
6468 <translation type="unfinished"/> 6492 <translation>&amp;Configureer TAS...</translation>
6469 </message> 6493 </message>
6470 <message> 6494 <message>
6471 <location filename="../../src/yuzu/main.ui" line="378"/> 6495 <location filename="../../src/yuzu/main.ui" line="378"/>
6472 <source>Configure C&amp;urrent Game...</source> 6496 <source>Configure C&amp;urrent Game...</source>
6473 <translation type="unfinished"/> 6497 <translation>Configureer Huidig Spel...</translation>
6474 </message> 6498 </message>
6475 <message> 6499 <message>
6476 <location filename="../../src/yuzu/main.ui" line="389"/> 6500 <location filename="../../src/yuzu/main.ui" line="389"/>
@@ -6480,12 +6504,12 @@ Debug Message: </source>
6480 <message> 6504 <message>
6481 <location filename="../../src/yuzu/main.ui" line="397"/> 6505 <location filename="../../src/yuzu/main.ui" line="397"/>
6482 <source>&amp;Reset</source> 6506 <source>&amp;Reset</source>
6483 <translation type="unfinished"/> 6507 <translation>&amp;Herstel</translation>
6484 </message> 6508 </message>
6485 <message> 6509 <message>
6486 <location filename="../../src/yuzu/main.ui" line="405"/> 6510 <location filename="../../src/yuzu/main.ui" line="405"/>
6487 <source>R&amp;ecord</source> 6511 <source>R&amp;ecord</source>
6488 <translation type="unfinished"/> 6512 <translation>Opnemen</translation>
6489 </message> 6513 </message>
6490</context> 6514</context>
6491<context> 6515<context>
@@ -6493,7 +6517,7 @@ Debug Message: </source>
6493 <message> 6517 <message>
6494 <location filename="../../src/yuzu/debugger/profiler.cpp" line="50"/> 6518 <location filename="../../src/yuzu/debugger/profiler.cpp" line="50"/>
6495 <source>&amp;MicroProfile</source> 6519 <source>&amp;MicroProfile</source>
6496 <translation type="unfinished"/> 6520 <translation>&amp;MicroProfile</translation>
6497 </message> 6521 </message>
6498</context> 6522</context>
6499<context> 6523<context>
@@ -6501,48 +6525,48 @@ Debug Message: </source>
6501 <message> 6525 <message>
6502 <location filename="../../src/yuzu/multiplayer/moderation_dialog.ui" line="6"/> 6526 <location filename="../../src/yuzu/multiplayer/moderation_dialog.ui" line="6"/>
6503 <source>Moderation</source> 6527 <source>Moderation</source>
6504 <translation type="unfinished"/> 6528 <translation>Moderatie</translation>
6505 </message> 6529 </message>
6506 <message> 6530 <message>
6507 <location filename="../../src/yuzu/multiplayer/moderation_dialog.ui" line="20"/> 6531 <location filename="../../src/yuzu/multiplayer/moderation_dialog.ui" line="20"/>
6508 <source>Ban List</source> 6532 <source>Ban List</source>
6509 <translation type="unfinished"/> 6533 <translation>Banlijst</translation>
6510 </message> 6534 </message>
6511 <message> 6535 <message>
6512 <location filename="../../src/yuzu/multiplayer/moderation_dialog.ui" line="41"/> 6536 <location filename="../../src/yuzu/multiplayer/moderation_dialog.ui" line="41"/>
6513 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="73"/> 6537 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="73"/>
6514 <source>Refreshing</source> 6538 <source>Refreshing</source>
6515 <translation type="unfinished"/> 6539 <translation>Vernieuwen</translation>
6516 </message> 6540 </message>
6517 <message> 6541 <message>
6518 <location filename="../../src/yuzu/multiplayer/moderation_dialog.ui" line="51"/> 6542 <location filename="../../src/yuzu/multiplayer/moderation_dialog.ui" line="51"/>
6519 <source>Unban</source> 6543 <source>Unban</source>
6520 <translation type="unfinished"/> 6544 <translation>Ontban</translation>
6521 </message> 6545 </message>
6522 <message> 6546 <message>
6523 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="40"/> 6547 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="40"/>
6524 <source>Subject</source> 6548 <source>Subject</source>
6525 <translation type="unfinished"/> 6549 <translation>Onderwerp</translation>
6526 </message> 6550 </message>
6527 <message> 6551 <message>
6528 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="41"/> 6552 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="41"/>
6529 <source>Type</source> 6553 <source>Type</source>
6530 <translation type="unfinished"/> 6554 <translation>Soort</translation>
6531 </message> 6555 </message>
6532 <message> 6556 <message>
6533 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="83"/> 6557 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="83"/>
6534 <source>Forum Username</source> 6558 <source>Forum Username</source>
6535 <translation type="unfinished"/> 6559 <translation>Forum Gebruikersnaam</translation>
6536 </message> 6560 </message>
6537 <message> 6561 <message>
6538 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="88"/> 6562 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="88"/>
6539 <source>IP Address</source> 6563 <source>IP Address</source>
6540 <translation type="unfinished"/> 6564 <translation>IP-adres</translation>
6541 </message> 6565 </message>
6542 <message> 6566 <message>
6543 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="95"/> 6567 <location filename="../../src/yuzu/multiplayer/moderation_dialog.cpp" line="95"/>
6544 <source>Refresh</source> 6568 <source>Refresh</source>
6545 <translation type="unfinished"/> 6569 <translation>Vernieuw</translation>
6546 </message> 6570 </message>
6547</context> 6571</context>
6548<context> 6572<context>
@@ -6550,17 +6574,17 @@ Debug Message: </source>
6550 <message> 6574 <message>
6551 <location filename="../../src/yuzu/multiplayer/state.cpp" line="90"/> 6575 <location filename="../../src/yuzu/multiplayer/state.cpp" line="90"/>
6552 <source>Current connection status</source> 6576 <source>Current connection status</source>
6553 <translation type="unfinished"/> 6577 <translation>Huidige verbindingsstatus</translation>
6554 </message> 6578 </message>
6555 <message> 6579 <message>
6556 <location filename="../../src/yuzu/multiplayer/state.cpp" line="117"/> 6580 <location filename="../../src/yuzu/multiplayer/state.cpp" line="117"/>
6557 <source>Not Connected. Click here to find a room!</source> 6581 <source>Not Connected. Click here to find a room!</source>
6558 <translation type="unfinished"/> 6582 <translation>Niet Verbonden. Klik hier om een kamer te vinden!</translation>
6559 </message> 6583 </message>
6560 <message> 6584 <message>
6561 <location filename="../../src/yuzu/multiplayer/state.cpp" line="123"/> 6585 <location filename="../../src/yuzu/multiplayer/state.cpp" line="123"/>
6562 <source>Not Connected</source> 6586 <source>Not Connected</source>
6563 <translation type="unfinished"/> 6587 <translation>Niet Verbonden</translation>
6564 </message> 6588 </message>
6565 <message> 6589 <message>
6566 <location filename="../../src/yuzu/multiplayer/state.cpp" line="129"/> 6590 <location filename="../../src/yuzu/multiplayer/state.cpp" line="129"/>
@@ -6570,18 +6594,19 @@ Debug Message: </source>
6570 <message> 6594 <message>
6571 <location filename="../../src/yuzu/multiplayer/state.cpp" line="136"/> 6595 <location filename="../../src/yuzu/multiplayer/state.cpp" line="136"/>
6572 <source>New Messages Received</source> 6596 <source>New Messages Received</source>
6573 <translation type="unfinished"/> 6597 <translation>Nieuwe Berichten Ontvangen</translation>
6574 </message> 6598 </message>
6575 <message> 6599 <message>
6576 <location filename="../../src/yuzu/multiplayer/state.cpp" line="207"/> 6600 <location filename="../../src/yuzu/multiplayer/state.cpp" line="207"/>
6577 <source>Error</source> 6601 <source>Error</source>
6578 <translation type="unfinished"/> 6602 <translation>Fout</translation>
6579 </message> 6603 </message>
6580 <message> 6604 <message>
6581 <location filename="../../src/yuzu/multiplayer/state.cpp" line="208"/> 6605 <location filename="../../src/yuzu/multiplayer/state.cpp" line="208"/>
6582 <source>Failed to update the room information. Please check your Internet connection and try hosting the room again. 6606 <source>Failed to update the room information. Please check your Internet connection and try hosting the room again.
6583Debug Message: </source> 6607Debug Message: </source>
6584 <translation type="unfinished"/> 6608 <translation>Het is niet gelukt om de kamerinformatie bij te werken. Controleer je internetverbinding en probeer de kamer opnieuw te hosten.
6609Debug-bericht: </translation>
6585 </message> 6610 </message>
6586</context> 6611</context>
6587<context> 6612<context>
@@ -6589,135 +6614,138 @@ Debug Message: </source>
6589 <message> 6614 <message>
6590 <location filename="../../src/yuzu/multiplayer/message.cpp" line="11"/> 6615 <location filename="../../src/yuzu/multiplayer/message.cpp" line="11"/>
6591 <source>Username is not valid. Must be 4 to 20 alphanumeric characters.</source> 6616 <source>Username is not valid. Must be 4 to 20 alphanumeric characters.</source>
6592 <translation type="unfinished"/> 6617 <translation>Gebruikersnaam is niet geldig. Moet bestaan uit 4 tot 20 alfanumerieke tekens.</translation>
6593 </message> 6618 </message>
6594 <message> 6619 <message>
6595 <location filename="../../src/yuzu/multiplayer/message.cpp" line="13"/> 6620 <location filename="../../src/yuzu/multiplayer/message.cpp" line="13"/>
6596 <source>Room name is not valid. Must be 4 to 20 alphanumeric characters.</source> 6621 <source>Room name is not valid. Must be 4 to 20 alphanumeric characters.</source>
6597 <translation type="unfinished"/> 6622 <translation>Kamernaam is niet geldig. Moet bestaan uit 4 tot 20 alfanumerieke tekens.</translation>
6598 </message> 6623 </message>
6599 <message> 6624 <message>
6600 <location filename="../../src/yuzu/multiplayer/message.cpp" line="15"/> 6625 <location filename="../../src/yuzu/multiplayer/message.cpp" line="15"/>
6601 <source>Username is already in use or not valid. Please choose another.</source> 6626 <source>Username is already in use or not valid. Please choose another.</source>
6602 <translation type="unfinished"/> 6627 <translation>Gebruikersnaam is al in gebruik of niet geldig. Kies een andere.</translation>
6603 </message> 6628 </message>
6604 <message> 6629 <message>
6605 <location filename="../../src/yuzu/multiplayer/message.cpp" line="17"/> 6630 <location filename="../../src/yuzu/multiplayer/message.cpp" line="17"/>
6606 <source>IP is not a valid IPv4 address.</source> 6631 <source>IP is not a valid IPv4 address.</source>
6607 <translation type="unfinished"/> 6632 <translation>IP is geen geldig IPv4-adres.</translation>
6608 </message> 6633 </message>
6609 <message> 6634 <message>
6610 <location filename="../../src/yuzu/multiplayer/message.cpp" line="19"/> 6635 <location filename="../../src/yuzu/multiplayer/message.cpp" line="19"/>
6611 <source>Port must be a number between 0 to 65535.</source> 6636 <source>Port must be a number between 0 to 65535.</source>
6612 <translation type="unfinished"/> 6637 <translation>De poort moet een getal zijn tussen 0 en 65535.</translation>
6613 </message> 6638 </message>
6614 <message> 6639 <message>
6615 <location filename="../../src/yuzu/multiplayer/message.cpp" line="20"/> 6640 <location filename="../../src/yuzu/multiplayer/message.cpp" line="20"/>
6616 <source>You must choose a Preferred Game to host a room. If you do not have any games in your game list yet, add a game folder by clicking on the plus icon in the game list.</source> 6641 <source>You must choose a Preferred Game to host a room. If you do not have any games in your game list yet, add a game folder by clicking on the plus icon in the game list.</source>
6617 <translation type="unfinished"/> 6642 <translation>Je moet een Voorkeursspel kiezen om een kamer te hosten. Als je nog geen spellen in je spellenlijst hebt, voeg dan een spellenmap toe door op het plus-icoon in de spellenlijst te klikken.</translation>
6618 </message> 6643 </message>
6619 <message> 6644 <message>
6620 <location filename="../../src/yuzu/multiplayer/message.cpp" line="24"/> 6645 <location filename="../../src/yuzu/multiplayer/message.cpp" line="24"/>
6621 <source>Unable to find an internet connection. Check your internet settings.</source> 6646 <source>Unable to find an internet connection. Check your internet settings.</source>
6622 <translation type="unfinished"/> 6647 <translation>Kan geen internetverbinding vinden. Controleer je Internetinstellingen.</translation>
6623 </message> 6648 </message>
6624 <message> 6649 <message>
6625 <location filename="../../src/yuzu/multiplayer/message.cpp" line="26"/> 6650 <location filename="../../src/yuzu/multiplayer/message.cpp" line="26"/>
6626 <source>Unable to connect to the host. Verify that the connection settings are correct. If you still cannot connect, contact the room host and verify that the host is properly configured with the external port forwarded.</source> 6651 <source>Unable to connect to the host. Verify that the connection settings are correct. If you still cannot connect, contact the room host and verify that the host is properly configured with the external port forwarded.</source>
6627 <translation type="unfinished"/> 6652 <translation>Kan geen verbinding maken met de host. Controleer of de verbindingsinstellingen correct zijn. Als je nog steeds geen verbinding kunt maken, neem dan contact op met de ruimtehost en controleer of de host correct is geconfigureerd met de externe poort doorgestuurd.</translation>
6628 </message> 6653 </message>
6629 <message> 6654 <message>
6630 <location filename="../../src/yuzu/multiplayer/message.cpp" line="30"/> 6655 <location filename="../../src/yuzu/multiplayer/message.cpp" line="30"/>
6631 <source>Unable to connect to the room because it is already full.</source> 6656 <source>Unable to connect to the room because it is already full.</source>
6632 <translation type="unfinished"/> 6657 <translation>Kan geen verbinding maken met de kamer omdat deze al vol is.</translation>
6633 </message> 6658 </message>
6634 <message> 6659 <message>
6635 <location filename="../../src/yuzu/multiplayer/message.cpp" line="32"/> 6660 <location filename="../../src/yuzu/multiplayer/message.cpp" line="32"/>
6636 <source>Creating a room failed. Please retry. Restarting yuzu might be necessary.</source> 6661 <source>Creating a room failed. Please retry. Restarting yuzu might be necessary.</source>
6637 <translation type="unfinished"/> 6662 <translation>Het aanmaken van een kamer is mislukt. Probeer het opnieuw. Het herstarten van yuzu kan nodig zijn.</translation>
6638 </message> 6663 </message>
6639 <message> 6664 <message>
6640 <location filename="../../src/yuzu/multiplayer/message.cpp" line="34"/> 6665 <location filename="../../src/yuzu/multiplayer/message.cpp" line="34"/>
6641 <source>The host of the room has banned you. Speak with the host to unban you or try a different room.</source> 6666 <source>The host of the room has banned you. Speak with the host to unban you or try a different room.</source>
6642 <translation type="unfinished"/> 6667 <translation>De host van de kamer heeft je verbannen. Praat met de host om je ban op te heffen of probeer een andere kamer.</translation>
6643 </message> 6668 </message>
6644 <message> 6669 <message>
6645 <location filename="../../src/yuzu/multiplayer/message.cpp" line="37"/> 6670 <location filename="../../src/yuzu/multiplayer/message.cpp" line="37"/>
6646 <source>Version mismatch! Please update to the latest version of yuzu. If the problem persists, contact the room host and ask them to update the server.</source> 6671 <source>Version mismatch! Please update to the latest version of yuzu. If the problem persists, contact the room host and ask them to update the server.</source>
6647 <translation type="unfinished"/> 6672 <translation>Versie komt niet overeen! Update naar de laatste versie van yuzu. Als het probleem aanhoudt, neem dan contact op met de room host en vraag hen om de server bij te werken.</translation>
6648 </message> 6673 </message>
6649 <message> 6674 <message>
6650 <location filename="../../src/yuzu/multiplayer/message.cpp" line="39"/> 6675 <location filename="../../src/yuzu/multiplayer/message.cpp" line="39"/>
6651 <source>Incorrect password.</source> 6676 <source>Incorrect password.</source>
6652 <translation type="unfinished"/> 6677 <translation>Verkeerd wachtwoord.</translation>
6653 </message> 6678 </message>
6654 <message> 6679 <message>
6655 <location filename="../../src/yuzu/multiplayer/message.cpp" line="40"/> 6680 <location filename="../../src/yuzu/multiplayer/message.cpp" line="40"/>
6656 <source>An unknown error occurred. If this error continues to occur, please open an issue</source> 6681 <source>An unknown error occurred. If this error continues to occur, please open an issue</source>
6657 <translation type="unfinished"/> 6682 <translation>Er is een onbekende fout opgetreden. Als deze fout zich blijft voordoen, open dan een ticket</translation>
6658 </message> 6683 </message>
6659 <message> 6684 <message>
6660 <location filename="../../src/yuzu/multiplayer/message.cpp" line="43"/> 6685 <location filename="../../src/yuzu/multiplayer/message.cpp" line="43"/>
6661 <source>Connection to room lost. Try to reconnect.</source> 6686 <source>Connection to room lost. Try to reconnect.</source>
6662 <translation type="unfinished"/> 6687 <translation>Verbinding met kamer verloren. Probeer opnieuw verbinding te maken.</translation>
6663 </message> 6688 </message>
6664 <message> 6689 <message>
6665 <location filename="../../src/yuzu/multiplayer/message.cpp" line="45"/> 6690 <location filename="../../src/yuzu/multiplayer/message.cpp" line="45"/>
6666 <source>You have been kicked by the room host.</source> 6691 <source>You have been kicked by the room host.</source>
6667 <translation type="unfinished"/> 6692 <translation>Je bent gekickt door de kamerhost.</translation>
6668 </message> 6693 </message>
6669 <message> 6694 <message>
6670 <location filename="../../src/yuzu/multiplayer/message.cpp" line="47"/> 6695 <location filename="../../src/yuzu/multiplayer/message.cpp" line="47"/>
6671 <source>IP address is already in use. Please choose another.</source> 6696 <source>IP address is already in use. Please choose another.</source>
6672 <translation type="unfinished"/> 6697 <translation>Het IP-adres is al in gebruik. Kies een ander.</translation>
6673 </message> 6698 </message>
6674 <message> 6699 <message>
6675 <location filename="../../src/yuzu/multiplayer/message.cpp" line="49"/> 6700 <location filename="../../src/yuzu/multiplayer/message.cpp" line="49"/>
6676 <source>You do not have enough permission to perform this action.</source> 6701 <source>You do not have enough permission to perform this action.</source>
6677 <translation type="unfinished"/> 6702 <translation>Je hebt niet genoeg rechten om deze actie uit te voeren.</translation>
6678 </message> 6703 </message>
6679 <message> 6704 <message>
6680 <location filename="../../src/yuzu/multiplayer/message.cpp" line="50"/> 6705 <location filename="../../src/yuzu/multiplayer/message.cpp" line="50"/>
6681 <source>The user you are trying to kick/ban could not be found. 6706 <source>The user you are trying to kick/ban could not be found.
6682They may have left the room.</source> 6707They may have left the room.</source>
6683 <translation type="unfinished"/> 6708 <translation>De gebruiker die je probeert te kicken/bannen kon niet gevonden worden.
6709Ze kunnen de ruimte hebben verlaten.</translation>
6684 </message> 6710 </message>
6685 <message> 6711 <message>
6686 <location filename="../../src/yuzu/multiplayer/message.cpp" line="52"/> 6712 <location filename="../../src/yuzu/multiplayer/message.cpp" line="52"/>
6687 <source>No valid network interface is selected. 6713 <source>No valid network interface is selected.
6688Please go to Configure -&gt; System -&gt; Network and make a selection.</source> 6714Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
6689 <translation type="unfinished"/> 6715 <translation>Er is geen geldige netwerkinterface geselecteerd.
6716Ga naar Configuratie -&gt; Systeem -&gt; Netwerk en maak een selectie.</translation>
6690 </message> 6717 </message>
6691 <message> 6718 <message>
6692 <location filename="../../src/yuzu/multiplayer/message.cpp" line="68"/> 6719 <location filename="../../src/yuzu/multiplayer/message.cpp" line="68"/>
6693 <source>Game already running</source> 6720 <source>Game already running</source>
6694 <translation type="unfinished"/> 6721 <translation>Het spel draait al</translation>
6695 </message> 6722 </message>
6696 <message> 6723 <message>
6697 <location filename="../../src/yuzu/multiplayer/message.cpp" line="69"/> 6724 <location filename="../../src/yuzu/multiplayer/message.cpp" line="69"/>
6698 <source>Joining a room when the game is already running is discouraged and can cause the room feature not to work correctly. 6725 <source>Joining a room when the game is already running is discouraged and can cause the room feature not to work correctly.
6699Proceed anyway?</source> 6726Proceed anyway?</source>
6700 <translation type="unfinished"/> 6727 <translation>Het wordt afgeraden om aan een kamer deel te nemen als het spel al bezig is en kan ervoor zorgen dat de kamerfunctie niet correct werkt.
6728Toch doorgaan?</translation>
6701 </message> 6729 </message>
6702 <message> 6730 <message>
6703 <location filename="../../src/yuzu/multiplayer/message.cpp" line="75"/> 6731 <location filename="../../src/yuzu/multiplayer/message.cpp" line="75"/>
6704 <source>Leave Room</source> 6732 <source>Leave Room</source>
6705 <translation type="unfinished"/> 6733 <translation>Verlaat Kamer</translation>
6706 </message> 6734 </message>
6707 <message> 6735 <message>
6708 <location filename="../../src/yuzu/multiplayer/message.cpp" line="76"/> 6736 <location filename="../../src/yuzu/multiplayer/message.cpp" line="76"/>
6709 <source>You are about to close the room. Any network connections will be closed.</source> 6737 <source>You are about to close the room. Any network connections will be closed.</source>
6710 <translation type="unfinished"/> 6738 <translation>Je staat op het punt de kamer te sluiten. Alle netwerkverbindingen worden afgesloten.</translation>
6711 </message> 6739 </message>
6712 <message> 6740 <message>
6713 <location filename="../../src/yuzu/multiplayer/message.cpp" line="81"/> 6741 <location filename="../../src/yuzu/multiplayer/message.cpp" line="81"/>
6714 <source>Disconnect</source> 6742 <source>Disconnect</source>
6715 <translation type="unfinished"/> 6743 <translation>Verbinding Verbreken</translation>
6716 </message> 6744 </message>
6717 <message> 6745 <message>
6718 <location filename="../../src/yuzu/multiplayer/message.cpp" line="82"/> 6746 <location filename="../../src/yuzu/multiplayer/message.cpp" line="82"/>
6719 <source>You are about to leave the room. Any network connections will be closed.</source> 6747 <source>You are about to leave the room. Any network connections will be closed.</source>
6720 <translation type="unfinished"/> 6748 <translation>Je staat op het punt de kamer te verlaten. Alle netwerkverbindingen worden afgesloten.</translation>
6721 </message> 6749 </message>
6722</context> 6750</context>
6723<context> 6751<context>
@@ -6725,7 +6753,7 @@ Proceed anyway?</source>
6725 <message> 6753 <message>
6726 <location filename="../../src/yuzu/multiplayer/message.cpp" line="63"/> 6754 <location filename="../../src/yuzu/multiplayer/message.cpp" line="63"/>
6727 <source>Error</source> 6755 <source>Error</source>
6728 <translation type="unfinished"/> 6756 <translation>Fout</translation>
6729 </message> 6757 </message>
6730</context> 6758</context>
6731<context> 6759<context>
@@ -6754,7 +6782,11 @@ Proceed anyway?</source>
6754p, li { white-space: pre-wrap; } 6782p, li { white-space: pre-wrap; }
6755&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:18pt; font-weight:400; font-style:normal;&quot;&gt; 6783&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:18pt; font-weight:400; font-style:normal;&quot;&gt;
6756&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 6784&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
6757 <translation type="unfinished"/> 6785 <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
6786&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
6787p, li { white-space: pre-wrap; }
6788&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:18pt; font-weight:400; font-style:normal;&quot;&gt;
6789&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
6758 </message> 6790 </message>
6759</context> 6791</context>
6760<context> 6792<context>
@@ -6762,7 +6794,7 @@ p, li { white-space: pre-wrap; }
6762 <message> 6794 <message>
6763 <location filename="../../src/yuzu/configuration/configure_input_player_widget.cpp" line="1579"/> 6795 <location filename="../../src/yuzu/configuration/configure_input_player_widget.cpp" line="1579"/>
6764 <source>START/PAUSE</source> 6796 <source>START/PAUSE</source>
6765 <translation type="unfinished"/> 6797 <translation>START/ONDERBREKEN</translation>
6766 </message> 6798 </message>
6767</context> 6799</context>
6768<context> 6800<context>
@@ -6770,42 +6802,42 @@ p, li { white-space: pre-wrap; }
6770 <message> 6802 <message>
6771 <location filename="../../src/yuzu/multiplayer/lobby_p.h" line="236"/> 6803 <location filename="../../src/yuzu/multiplayer/lobby_p.h" line="236"/>
6772 <source>%1 is not playing a game</source> 6804 <source>%1 is not playing a game</source>
6773 <translation type="unfinished"/> 6805 <translation>%1 speelt geen spel</translation>
6774 </message> 6806 </message>
6775 <message> 6807 <message>
6776 <location filename="../../src/yuzu/multiplayer/lobby_p.h" line="238"/> 6808 <location filename="../../src/yuzu/multiplayer/lobby_p.h" line="238"/>
6777 <source>%1 is playing %2</source> 6809 <source>%1 is playing %2</source>
6778 <translation type="unfinished"/> 6810 <translation>%1 speelt %2</translation>
6779 </message> 6811 </message>
6780 <message> 6812 <message>
6781 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="142"/> 6813 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="142"/>
6782 <source>Not playing a game</source> 6814 <source>Not playing a game</source>
6783 <translation type="unfinished"/> 6815 <translation>Geen spel aan het spelen</translation>
6784 </message> 6816 </message>
6785 <message> 6817 <message>
6786 <location filename="../../src/yuzu/game_list_p.h" line="244"/> 6818 <location filename="../../src/yuzu/game_list_p.h" line="244"/>
6787 <source>Installed SD Titles</source> 6819 <source>Installed SD Titles</source>
6788 <translation>Geïnstalleerde SD Titels</translation> 6820 <translation>Geïnstalleerde SD-titels</translation>
6789 </message> 6821 </message>
6790 <message> 6822 <message>
6791 <location filename="../../src/yuzu/game_list_p.h" line="252"/> 6823 <location filename="../../src/yuzu/game_list_p.h" line="252"/>
6792 <source>Installed NAND Titles</source> 6824 <source>Installed NAND Titles</source>
6793 <translation>Geïnstalleerde NAND Titels</translation> 6825 <translation>Geïnstalleerde NAND-titels</translation>
6794 </message> 6826 </message>
6795 <message> 6827 <message>
6796 <location filename="../../src/yuzu/game_list_p.h" line="260"/> 6828 <location filename="../../src/yuzu/game_list_p.h" line="260"/>
6797 <source>System Titles</source> 6829 <source>System Titles</source>
6798 <translation>Systeem Titels</translation> 6830 <translation>Systeemtitels</translation>
6799 </message> 6831 </message>
6800 <message> 6832 <message>
6801 <location filename="../../src/yuzu/game_list_p.h" line="303"/> 6833 <location filename="../../src/yuzu/game_list_p.h" line="303"/>
6802 <source>Add New Game Directory</source> 6834 <source>Add New Game Directory</source>
6803 <translation>Voeg Nieuwe Game Map Toe</translation> 6835 <translation>Voeg Nieuwe Spelmap Toe</translation>
6804 </message> 6836 </message>
6805 <message> 6837 <message>
6806 <location filename="../../src/yuzu/game_list_p.h" line="326"/> 6838 <location filename="../../src/yuzu/game_list_p.h" line="326"/>
6807 <source>Favorites</source> 6839 <source>Favorites</source>
6808 <translation type="unfinished"/> 6840 <translation>Favorieten</translation>
6809 </message> 6841 </message>
6810 <message> 6842 <message>
6811 <location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="21"/> 6843 <location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="21"/>
@@ -6876,28 +6908,28 @@ p, li { white-space: pre-wrap; }
6876 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="56"/> 6908 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="56"/>
6877 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="144"/> 6909 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="144"/>
6878 <source>Left</source> 6910 <source>Left</source>
6879 <translation>Links:</translation> 6911 <translation>Links</translation>
6880 </message> 6912 </message>
6881 <message> 6913 <message>
6882 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="49"/> 6914 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="49"/>
6883 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="58"/> 6915 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="58"/>
6884 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="147"/> 6916 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="147"/>
6885 <source>Right</source> 6917 <source>Right</source>
6886 <translation>Rechts:</translation> 6918 <translation>Rechts</translation>
6887 </message> 6919 </message>
6888 <message> 6920 <message>
6889 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="51"/> 6921 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="51"/>
6890 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="60"/> 6922 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="60"/>
6891 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="153"/> 6923 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="153"/>
6892 <source>Down</source> 6924 <source>Down</source>
6893 <translation>Beneden:</translation> 6925 <translation>Omlaag</translation>
6894 </message> 6926 </message>
6895 <message> 6927 <message>
6896 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="53"/> 6928 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="53"/>
6897 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="62"/> 6929 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="62"/>
6898 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="150"/> 6930 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="150"/>
6899 <source>Up</source> 6931 <source>Up</source>
6900 <translation>Boven:</translation> 6932 <translation>Omhoog</translation>
6901 </message> 6933 </message>
6902 <message> 6934 <message>
6903 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="55"/> 6935 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="55"/>
@@ -6909,7 +6941,7 @@ p, li { white-space: pre-wrap; }
6909 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="57"/> 6941 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="57"/>
6910 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="66"/> 6942 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="66"/>
6911 <source>R</source> 6943 <source>R</source>
6912 <translation>R:</translation> 6944 <translation>R</translation>
6913 </message> 6945 </message>
6914 <message> 6946 <message>
6915 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="59"/> 6947 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="59"/>
@@ -6951,79 +6983,79 @@ p, li { white-space: pre-wrap; }
6951 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="71"/> 6983 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="71"/>
6952 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="100"/> 6984 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="100"/>
6953 <source>L1</source> 6985 <source>L1</source>
6954 <translation type="unfinished"/> 6986 <translation>L1</translation>
6955 </message> 6987 </message>
6956 <message> 6988 <message>
6957 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="73"/> 6989 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="73"/>
6958 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="102"/> 6990 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="102"/>
6959 <source>L2</source> 6991 <source>L2</source>
6960 <translation type="unfinished"/> 6992 <translation>L2</translation>
6961 </message> 6993 </message>
6962 <message> 6994 <message>
6963 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="75"/> 6995 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="75"/>
6964 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="104"/> 6996 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="104"/>
6965 <source>L3</source> 6997 <source>L3</source>
6966 <translation type="unfinished"/> 6998 <translation>L3</translation>
6967 </message> 6999 </message>
6968 <message> 7000 <message>
6969 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="77"/> 7001 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="77"/>
6970 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="106"/> 7002 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="106"/>
6971 <source>R1</source> 7003 <source>R1</source>
6972 <translation type="unfinished"/> 7004 <translation>R1</translation>
6973 </message> 7005 </message>
6974 <message> 7006 <message>
6975 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="79"/> 7007 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="79"/>
6976 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="108"/> 7008 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="108"/>
6977 <source>R2</source> 7009 <source>R2</source>
6978 <translation type="unfinished"/> 7010 <translation>R2</translation>
6979 </message> 7011 </message>
6980 <message> 7012 <message>
6981 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="81"/> 7013 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="81"/>
6982 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="110"/> 7014 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="110"/>
6983 <source>R3</source> 7015 <source>R3</source>
6984 <translation type="unfinished"/> 7016 <translation>R3</translation>
6985 </message> 7017 </message>
6986 <message> 7018 <message>
6987 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="83"/> 7019 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="83"/>
6988 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="112"/> 7020 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="112"/>
6989 <source>Circle</source> 7021 <source>Circle</source>
6990 <translation type="unfinished"/> 7022 <translation>Cirkel</translation>
6991 </message> 7023 </message>
6992 <message> 7024 <message>
6993 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="85"/> 7025 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="85"/>
6994 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="114"/> 7026 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="114"/>
6995 <source>Cross</source> 7027 <source>Cross</source>
6996 <translation type="unfinished"/> 7028 <translation>Kruis</translation>
6997 </message> 7029 </message>
6998 <message> 7030 <message>
6999 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="87"/> 7031 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="87"/>
7000 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="116"/> 7032 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="116"/>
7001 <source>Square</source> 7033 <source>Square</source>
7002 <translation type="unfinished"/> 7034 <translation>Vierkant</translation>
7003 </message> 7035 </message>
7004 <message> 7036 <message>
7005 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="89"/> 7037 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="89"/>
7006 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="118"/> 7038 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="118"/>
7007 <source>Triangle</source> 7039 <source>Triangle</source>
7008 <translation type="unfinished"/> 7040 <translation>Driehoek</translation>
7009 </message> 7041 </message>
7010 <message> 7042 <message>
7011 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="91"/> 7043 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="91"/>
7012 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="120"/> 7044 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="120"/>
7013 <source>Share</source> 7045 <source>Share</source>
7014 <translation type="unfinished"/> 7046 <translation>Deel</translation>
7015 </message> 7047 </message>
7016 <message> 7048 <message>
7017 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="93"/> 7049 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="93"/>
7018 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="122"/> 7050 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="122"/>
7019 <source>Options</source> 7051 <source>Options</source>
7020 <translation type="unfinished"/> 7052 <translation>Opties</translation>
7021 </message> 7053 </message>
7022 <message> 7054 <message>
7023 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="95"/> 7055 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="95"/>
7024 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="138"/> 7056 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="138"/>
7025 <source>[undefined]</source> 7057 <source>[undefined]</source>
7026 <translation type="unfinished"/> 7058 <translation>[ongedefinieerd]</translation>
7027 </message> 7059 </message>
7028 <message> 7060 <message>
7029 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="399"/> 7061 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="399"/>
@@ -7034,13 +7066,13 @@ p, li { white-space: pre-wrap; }
7034 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="403"/> 7066 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="403"/>
7035 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="195"/> 7067 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="195"/>
7036 <source>[invalid]</source> 7068 <source>[invalid]</source>
7037 <translation type="unfinished"/> 7069 <translation>[ongeldig]</translation>
7038 </message> 7070 </message>
7039 <message> 7071 <message>
7040 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="413"/> 7072 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="413"/>
7041 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/> 7073 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
7042 <source>%1%2Hat %3</source> 7074 <source>%1%2Hat %3</source>
7043 <translation type="unfinished"/> 7075 <translation>%1%2Hat %3</translation>
7044 </message> 7076 </message>
7045 <message> 7077 <message>
7046 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="417"/> 7078 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="417"/>
@@ -7050,25 +7082,25 @@ p, li { white-space: pre-wrap; }
7050 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="232"/> 7082 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="232"/>
7051 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="235"/> 7083 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="235"/>
7052 <source>%1%2Axis %3</source> 7084 <source>%1%2Axis %3</source>
7053 <translation type="unfinished"/> 7085 <translation>%1%2As %3</translation>
7054 </message> 7086 </message>
7055 <message> 7087 <message>
7056 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/> 7088 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
7057 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="215"/> 7089 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="215"/>
7058 <source>%1%2Axis %3,%4,%5</source> 7090 <source>%1%2Axis %3,%4,%5</source>
7059 <translation type="unfinished"/> 7091 <translation>%1%2As %3,%4,%5</translation>
7060 </message> 7092 </message>
7061 <message> 7093 <message>
7062 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="427"/> 7094 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="427"/>
7063 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/> 7095 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
7064 <source>%1%2Motion %3</source> 7096 <source>%1%2Motion %3</source>
7065 <translation type="unfinished"/> 7097 <translation>%1%2Beweging %3</translation>
7066 </message> 7098 </message>
7067 <message> 7099 <message>
7068 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="431"/> 7100 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="431"/>
7069 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/> 7101 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
7070 <source>%1%2Button %3</source> 7102 <source>%1%2Button %3</source>
7071 <translation type="unfinished"/> 7103 <translation>%1%2Knop %3</translation>
7072 </message> 7104 </message>
7073 <message> 7105 <message>
7074 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="473"/> 7106 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="473"/>
@@ -7099,17 +7131,17 @@ p, li { white-space: pre-wrap; }
7099 <message> 7131 <message>
7100 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="78"/> 7132 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="78"/>
7101 <source>Stick L</source> 7133 <source>Stick L</source>
7102 <translation type="unfinished"/> 7134 <translation>Stick L</translation>
7103 </message> 7135 </message>
7104 <message> 7136 <message>
7105 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="80"/> 7137 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="80"/>
7106 <source>Stick R</source> 7138 <source>Stick R</source>
7107 <translation type="unfinished"/> 7139 <translation>Stick R</translation>
7108 </message> 7140 </message>
7109 <message> 7141 <message>
7110 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="92"/> 7142 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="92"/>
7111 <source>Plus</source> 7143 <source>Plus</source>
7112 <translation>Plus:</translation> 7144 <translation>Plus</translation>
7113 </message> 7145 </message>
7114 <message> 7146 <message>
7115 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="94"/> 7147 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="94"/>
@@ -7120,7 +7152,7 @@ p, li { white-space: pre-wrap; }
7120 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="96"/> 7152 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="96"/>
7121 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="124"/> 7153 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="124"/>
7122 <source>Home</source> 7154 <source>Home</source>
7123 <translation>Home:</translation> 7155 <translation>Home</translation>
7124 </message> 7156 </message>
7125 <message> 7157 <message>
7126 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="98"/> 7158 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="98"/>
@@ -7136,44 +7168,44 @@ p, li { white-space: pre-wrap; }
7136 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="128"/> 7168 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="128"/>
7137 <source>Wheel</source> 7169 <source>Wheel</source>
7138 <comment>Indicates the mouse wheel</comment> 7170 <comment>Indicates the mouse wheel</comment>
7139 <translation type="unfinished"/> 7171 <translation>Wiel</translation>
7140 </message> 7172 </message>
7141 <message> 7173 <message>
7142 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="130"/> 7174 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="130"/>
7143 <source>Backward</source> 7175 <source>Backward</source>
7144 <translation type="unfinished"/> 7176 <translation>Achteruit</translation>
7145 </message> 7177 </message>
7146 <message> 7178 <message>
7147 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="132"/> 7179 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="132"/>
7148 <source>Forward</source> 7180 <source>Forward</source>
7149 <translation type="unfinished"/> 7181 <translation>Vooruit</translation>
7150 </message> 7182 </message>
7151 <message> 7183 <message>
7152 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="134"/> 7184 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="134"/>
7153 <source>Task</source> 7185 <source>Task</source>
7154 <translation type="unfinished"/> 7186 <translation>Taak</translation>
7155 </message> 7187 </message>
7156 <message> 7188 <message>
7157 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="136"/> 7189 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="136"/>
7158 <source>Extra</source> 7190 <source>Extra</source>
7159 <translation type="unfinished"/> 7191 <translation>Extra</translation>
7160 </message> 7192 </message>
7161 <message> 7193 <message>
7162 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="191"/> 7194 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="191"/>
7163 <source>%1%2%3%4</source> 7195 <source>%1%2%3%4</source>
7164 <translation type="unfinished"/> 7196 <translation>%1%2%3%4</translation>
7165 </message> 7197 </message>
7166 <message> 7198 <message>
7167 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="205"/> 7199 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="205"/>
7168 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="229"/> 7200 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="229"/>
7169 <source>%1%2%3Hat %4</source> 7201 <source>%1%2%3Hat %4</source>
7170 <translation type="unfinished"/> 7202 <translation>%1%2%3Hat %4</translation>
7171 </message> 7203 </message>
7172 <message> 7204 <message>
7173 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/> 7205 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
7174 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="238"/> 7206 <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="238"/>
7175 <source>%1%2%3Button %4</source> 7207 <source>%1%2%3Button %4</source>
7176 <translation type="unfinished"/> 7208 <translation>%1%2%3Knop %4</translation>
7177 </message> 7209 </message>
7178</context> 7210</context>
7179<context> 7211<context>
@@ -7181,22 +7213,22 @@ p, li { white-space: pre-wrap; }
7181 <message> 7213 <message>
7182 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="14"/> 7214 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="14"/>
7183 <source>Amiibo Settings</source> 7215 <source>Amiibo Settings</source>
7184 <translation type="unfinished"/> 7216 <translation>Amiibo-instellingen</translation>
7185 </message> 7217 </message>
7186 <message> 7218 <message>
7187 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="169"/> 7219 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="169"/>
7188 <source>Amiibo Info</source> 7220 <source>Amiibo Info</source>
7189 <translation type="unfinished"/> 7221 <translation>Amiibo-info</translation>
7190 </message> 7222 </message>
7191 <message> 7223 <message>
7192 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="177"/> 7224 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="177"/>
7193 <source>Series</source> 7225 <source>Series</source>
7194 <translation type="unfinished"/> 7226 <translation>Serie</translation>
7195 </message> 7227 </message>
7196 <message> 7228 <message>
7197 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="197"/> 7229 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="197"/>
7198 <source>Type</source> 7230 <source>Type</source>
7199 <translation type="unfinished"/> 7231 <translation>Soort</translation>
7200 </message> 7232 </message>
7201 <message> 7233 <message>
7202 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="217"/> 7234 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="217"/>
@@ -7206,52 +7238,52 @@ p, li { white-space: pre-wrap; }
7206 <message> 7238 <message>
7207 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="242"/> 7239 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="242"/>
7208 <source>Amiibo Data</source> 7240 <source>Amiibo Data</source>
7209 <translation type="unfinished"/> 7241 <translation>Amiibo-gegevens</translation>
7210 </message> 7242 </message>
7211 <message> 7243 <message>
7212 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="250"/> 7244 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="250"/>
7213 <source>Custom Name</source> 7245 <source>Custom Name</source>
7214 <translation type="unfinished"/> 7246 <translation>Aangepaste Naam</translation>
7215 </message> 7247 </message>
7216 <message> 7248 <message>
7217 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="270"/> 7249 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="270"/>
7218 <source>Owner</source> 7250 <source>Owner</source>
7219 <translation type="unfinished"/> 7251 <translation>Eigenaar</translation>
7220 </message> 7252 </message>
7221 <message> 7253 <message>
7222 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="290"/> 7254 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="290"/>
7223 <source>Creation Date</source> 7255 <source>Creation Date</source>
7224 <translation type="unfinished"/> 7256 <translation>Aanmaakdatum</translation>
7225 </message> 7257 </message>
7226 <message> 7258 <message>
7227 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="307"/> 7259 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="307"/>
7228 <source>dd/MM/yyyy</source> 7260 <source>dd/MM/yyyy</source>
7229 <translation type="unfinished"/> 7261 <translation>dd/MM/yyyy</translation>
7230 </message> 7262 </message>
7231 <message> 7263 <message>
7232 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="314"/> 7264 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="314"/>
7233 <source>Modification Date</source> 7265 <source>Modification Date</source>
7234 <translation type="unfinished"/> 7266 <translation>Modificatiedatum</translation>
7235 </message> 7267 </message>
7236 <message> 7268 <message>
7237 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="331"/> 7269 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="331"/>
7238 <source>dd/MM/yyyy </source> 7270 <source>dd/MM/yyyy </source>
7239 <translation type="unfinished"/> 7271 <translation>dd/MM/yyyy </translation>
7240 </message> 7272 </message>
7241 <message> 7273 <message>
7242 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="349"/> 7274 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="349"/>
7243 <source>Game Data</source> 7275 <source>Game Data</source>
7244 <translation type="unfinished"/> 7276 <translation>Spelgegevens</translation>
7245 </message> 7277 </message>
7246 <message> 7278 <message>
7247 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="355"/> 7279 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="355"/>
7248 <source>Game Id</source> 7280 <source>Game Id</source>
7249 <translation type="unfinished"/> 7281 <translation>Spel-ID</translation>
7250 </message> 7282 </message>
7251 <message> 7283 <message>
7252 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="384"/> 7284 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="384"/>
7253 <source>Mount Amiibo</source> 7285 <source>Mount Amiibo</source>
7254 <translation type="unfinished"/> 7286 <translation>Gebruik Amiibo</translation>
7255 </message> 7287 </message>
7256 <message> 7288 <message>
7257 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="390"/> 7289 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="390"/>
@@ -7261,32 +7293,32 @@ p, li { white-space: pre-wrap; }
7261 <message> 7293 <message>
7262 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="413"/> 7294 <location filename="../../src/yuzu/applets/qt_amiibo_settings.ui" line="413"/>
7263 <source>File Path</source> 7295 <source>File Path</source>
7264 <translation type="unfinished"/> 7296 <translation>Bestandspad</translation>
7265 </message> 7297 </message>
7266 <message> 7298 <message>
7267 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="191"/> 7299 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="191"/>
7268 <source>No game data present</source> 7300 <source>No game data present</source>
7269 <translation type="unfinished"/> 7301 <translation>Geen spelgegevens aanwezig</translation>
7270 </message> 7302 </message>
7271 <message> 7303 <message>
7272 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="231"/> 7304 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="231"/>
7273 <source>The following amiibo data will be formatted:</source> 7305 <source>The following amiibo data will be formatted:</source>
7274 <translation type="unfinished"/> 7306 <translation>De volgende amiibo-gegevens worden zo geformatteerd:</translation>
7275 </message> 7307 </message>
7276 <message> 7308 <message>
7277 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="234"/> 7309 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="234"/>
7278 <source>The following game data will removed:</source> 7310 <source>The following game data will removed:</source>
7279 <translation type="unfinished"/> 7311 <translation>De volgende spelgegevens worden verwijderd:</translation>
7280 </message> 7312 </message>
7281 <message> 7313 <message>
7282 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="237"/> 7314 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="237"/>
7283 <source>Set nickname and owner:</source> 7315 <source>Set nickname and owner:</source>
7284 <translation type="unfinished"/> 7316 <translation>Stel gebruikersnaam en eigenaar in:</translation>
7285 </message> 7317 </message>
7286 <message> 7318 <message>
7287 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="240"/> 7319 <location filename="../../src/yuzu/applets/qt_amiibo_settings.cpp" line="240"/>
7288 <source>Do you wish to restore this amiibo?</source> 7320 <source>Do you wish to restore this amiibo?</source>
7289 <translation type="unfinished"/> 7321 <translation>Wil je deze amiibo herstellen?</translation>
7290 </message> 7322 </message>
7291</context> 7323</context>
7292<context> 7324<context>
@@ -7294,27 +7326,27 @@ p, li { white-space: pre-wrap; }
7294 <message> 7326 <message>
7295 <location filename="../../src/yuzu/applets/qt_controller.ui" line="14"/> 7327 <location filename="../../src/yuzu/applets/qt_controller.ui" line="14"/>
7296 <source>Controller Applet</source> 7328 <source>Controller Applet</source>
7297 <translation type="unfinished"/> 7329 <translation>Controller Applet</translation>
7298 </message> 7330 </message>
7299 <message> 7331 <message>
7300 <location filename="../../src/yuzu/applets/qt_controller.ui" line="129"/> 7332 <location filename="../../src/yuzu/applets/qt_controller.ui" line="129"/>
7301 <source>Supported Controller Types:</source> 7333 <source>Supported Controller Types:</source>
7302 <translation type="unfinished"/> 7334 <translation>Ondersteunde Controller-typen:</translation>
7303 </message> 7335 </message>
7304 <message> 7336 <message>
7305 <location filename="../../src/yuzu/applets/qt_controller.ui" line="282"/> 7337 <location filename="../../src/yuzu/applets/qt_controller.ui" line="282"/>
7306 <source>Players:</source> 7338 <source>Players:</source>
7307 <translation type="unfinished"/> 7339 <translation>Spelers:</translation>
7308 </message> 7340 </message>
7309 <message> 7341 <message>
7310 <location filename="../../src/yuzu/applets/qt_controller.ui" line="300"/> 7342 <location filename="../../src/yuzu/applets/qt_controller.ui" line="300"/>
7311 <source>1 - 8</source> 7343 <source>1 - 8</source>
7312 <translation type="unfinished"/> 7344 <translation>1 - 8</translation>
7313 </message> 7345 </message>
7314 <message> 7346 <message>
7315 <location filename="../../src/yuzu/applets/qt_controller.ui" line="418"/> 7347 <location filename="../../src/yuzu/applets/qt_controller.ui" line="418"/>
7316 <source>P4</source> 7348 <source>P4</source>
7317 <translation type="unfinished"/> 7349 <translation>P4</translation>
7318 </message> 7350 </message>
7319 <message> 7351 <message>
7320 <location filename="../../src/yuzu/applets/qt_controller.ui" line="514"/> 7352 <location filename="../../src/yuzu/applets/qt_controller.ui" line="514"/>
@@ -7378,59 +7410,59 @@ p, li { white-space: pre-wrap; }
7378 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1881"/> 7410 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1881"/>
7379 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2078"/> 7411 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2078"/>
7380 <source>Use Current Config</source> 7412 <source>Use Current Config</source>
7381 <translation type="unfinished"/> 7413 <translation>Gebruik Huidige Configuratie</translation>
7382 </message> 7414 </message>
7383 <message> 7415 <message>
7384 <location filename="../../src/yuzu/applets/qt_controller.ui" line="615"/> 7416 <location filename="../../src/yuzu/applets/qt_controller.ui" line="615"/>
7385 <source>P2</source> 7417 <source>P2</source>
7386 <translation type="unfinished"/> 7418 <translation>P2</translation>
7387 </message> 7419 </message>
7388 <message> 7420 <message>
7389 <location filename="../../src/yuzu/applets/qt_controller.ui" line="812"/> 7421 <location filename="../../src/yuzu/applets/qt_controller.ui" line="812"/>
7390 <source>P1</source> 7422 <source>P1</source>
7391 <translation type="unfinished"/> 7423 <translation>P1</translation>
7392 </message> 7424 </message>
7393 <message> 7425 <message>
7394 <location filename="../../src/yuzu/applets/qt_controller.ui" line="932"/> 7426 <location filename="../../src/yuzu/applets/qt_controller.ui" line="932"/>
7395 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2303"/> 7427 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2303"/>
7396 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="430"/> 7428 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="430"/>
7397 <source>Handheld</source> 7429 <source>Handheld</source>
7398 <translation>Mobiel</translation> 7430 <translation>Handheld</translation>
7399 </message> 7431 </message>
7400 <message> 7432 <message>
7401 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1126"/> 7433 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1126"/>
7402 <source>P3</source> 7434 <source>P3</source>
7403 <translation type="unfinished"/> 7435 <translation>P3</translation>
7404 </message> 7436 </message>
7405 <message> 7437 <message>
7406 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1363"/> 7438 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1363"/>
7407 <source>P7</source> 7439 <source>P7</source>
7408 <translation type="unfinished"/> 7440 <translation>P7</translation>
7409 </message> 7441 </message>
7410 <message> 7442 <message>
7411 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1560"/> 7443 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1560"/>
7412 <source>P8</source> 7444 <source>P8</source>
7413 <translation type="unfinished"/> 7445 <translation>P8</translation>
7414 </message> 7446 </message>
7415 <message> 7447 <message>
7416 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1757"/> 7448 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1757"/>
7417 <source>P5</source> 7449 <source>P5</source>
7418 <translation type="unfinished"/> 7450 <translation>P5</translation>
7419 </message> 7451 </message>
7420 <message> 7452 <message>
7421 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1958"/> 7453 <location filename="../../src/yuzu/applets/qt_controller.ui" line="1958"/>
7422 <source>P6</source> 7454 <source>P6</source>
7423 <translation type="unfinished"/> 7455 <translation>P6</translation>
7424 </message> 7456 </message>
7425 <message> 7457 <message>
7426 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2272"/> 7458 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2272"/>
7427 <source>Console Mode</source> 7459 <source>Console Mode</source>
7428 <translation>Console ID:</translation> 7460 <translation>Console-ID:</translation>
7429 </message> 7461 </message>
7430 <message> 7462 <message>
7431 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2293"/> 7463 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2293"/>
7432 <source>Docked</source> 7464 <source>Docked</source>
7433 <translation>GeDocked</translation> 7465 <translation>Docked</translation>
7434 </message> 7466 </message>
7435 <message> 7467 <message>
7436 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2313"/> 7468 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2313"/>
@@ -7456,7 +7488,7 @@ p, li { white-space: pre-wrap; }
7456 <message> 7488 <message>
7457 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2432"/> 7489 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2432"/>
7458 <source>Create</source> 7490 <source>Create</source>
7459 <translation type="unfinished"/> 7491 <translation>Maak</translation>
7460 </message> 7492 </message>
7461 <message> 7493 <message>
7462 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2467"/> 7494 <location filename="../../src/yuzu/applets/qt_controller.ui" line="2467"/>
@@ -7511,32 +7543,32 @@ p, li { white-space: pre-wrap; }
7511 <message> 7543 <message>
7512 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="434"/> 7544 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="434"/>
7513 <source>GameCube Controller</source> 7545 <source>GameCube Controller</source>
7514 <translation>GameCube Controller</translation> 7546 <translation>GameCube-controller</translation>
7515 </message> 7547 </message>
7516 <message> 7548 <message>
7517 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="443"/> 7549 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="443"/>
7518 <source>Poke Ball Plus</source> 7550 <source>Poke Ball Plus</source>
7519 <translation type="unfinished"/> 7551 <translation>Poke Ball Plus</translation>
7520 </message> 7552 </message>
7521 <message> 7553 <message>
7522 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="447"/> 7554 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="447"/>
7523 <source>NES Controller</source> 7555 <source>NES Controller</source>
7524 <translation type="unfinished"/> 7556 <translation>NES-controller</translation>
7525 </message> 7557 </message>
7526 <message> 7558 <message>
7527 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="451"/> 7559 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="451"/>
7528 <source>SNES Controller</source> 7560 <source>SNES Controller</source>
7529 <translation type="unfinished"/> 7561 <translation>SNES-controller</translation>
7530 </message> 7562 </message>
7531 <message> 7563 <message>
7532 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="455"/> 7564 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="455"/>
7533 <source>N64 Controller</source> 7565 <source>N64 Controller</source>
7534 <translation type="unfinished"/> 7566 <translation>N64-controller</translation>
7535 </message> 7567 </message>
7536 <message> 7568 <message>
7537 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="459"/> 7569 <location filename="../../src/yuzu/applets/qt_controller.cpp" line="459"/>
7538 <source>Sega Genesis</source> 7570 <source>Sega Genesis</source>
7539 <translation type="unfinished"/> 7571 <translation>Sega Genesis</translation>
7540 </message> 7572 </message>
7541</context> 7573</context>
7542<context> 7574<context>
@@ -7546,19 +7578,21 @@ p, li { white-space: pre-wrap; }
7546 <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> 7578 <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/>
7547 <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> 7579 <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/>
7548 <source>Error Code: %1-%2 (0x%3)</source> 7580 <source>Error Code: %1-%2 (0x%3)</source>
7549 <translation type="unfinished"/> 7581 <translation>Foutcode: %1-%2 (0x%3)</translation>
7550 </message> 7582 </message>
7551 <message> 7583 <message>
7552 <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> 7584 <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/>
7553 <source>An error has occurred. 7585 <source>An error has occurred.
7554Please try again or contact the developer of the software.</source> 7586Please try again or contact the developer of the software.</source>
7555 <translation type="unfinished"/> 7587 <translation>Er is een fout opgetreden.
7588Probeer het opnieuw of neem contact op met de software-ontwikkelaar.</translation>
7556 </message> 7589 </message>
7557 <message> 7590 <message>
7558 <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> 7591 <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/>
7559 <source>An error occurred on %1 at %2. 7592 <source>An error occurred on %1 at %2.
7560Please try again or contact the developer of the software.</source> 7593Please try again or contact the developer of the software.</source>
7561 <translation type="unfinished"/> 7594 <translation>Er is een fout opgetreden op %1 bij %2.
7595Probeer het opnieuw of neem contact op met de software-ontwikkelaar.</translation>
7562 </message> 7596 </message>
7563 <message> 7597 <message>
7564 <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> 7598 <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/>
@@ -7567,7 +7601,11 @@ Please try again or contact the developer of the software.</source>
7567%1 7601%1
7568 7602
7569%2</source> 7603%2</source>
7570 <translation type="unfinished"/> 7604 <translation>Er is een fout opgetreden.
7605
7606%1
7607
7608%2</translation>
7571 </message> 7609 </message>
7572</context> 7610</context>
7573<context> 7611<context>
@@ -7588,68 +7626,68 @@ Please try again or contact the developer of the software.</source>
7588 <message> 7626 <message>
7589 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> 7627 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/>
7590 <source>Profile Creator</source> 7628 <source>Profile Creator</source>
7591 <translation type="unfinished"/> 7629 <translation>Profielmaker</translation>
7592 </message> 7630 </message>
7593 <message> 7631 <message>
7594 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> 7632 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/>
7595 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> 7633 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/>
7596 <source>Profile Selector</source> 7634 <source>Profile Selector</source>
7597 <translation>Profiel keuzeschakelaar</translation> 7635 <translation>Profielkiezer</translation>
7598 </message> 7636 </message>
7599 <message> 7637 <message>
7600 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> 7638 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/>
7601 <source>Profile Icon Editor</source> 7639 <source>Profile Icon Editor</source>
7602 <translation type="unfinished"/> 7640 <translation>Profielicoon-editor</translation>
7603 </message> 7641 </message>
7604 <message> 7642 <message>
7605 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> 7643 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/>
7606 <source>Profile Nickname Editor</source> 7644 <source>Profile Nickname Editor</source>
7607 <translation type="unfinished"/> 7645 <translation>Profielnaam-editor</translation>
7608 </message> 7646 </message>
7609 <message> 7647 <message>
7610 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> 7648 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/>
7611 <source>Who will receive the points?</source> 7649 <source>Who will receive the points?</source>
7612 <translation type="unfinished"/> 7650 <translation>Wie krijgt de punten?</translation>
7613 </message> 7651 </message>
7614 <message> 7652 <message>
7615 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> 7653 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/>
7616 <source>Who is using Nintendo eShop?</source> 7654 <source>Who is using Nintendo eShop?</source>
7617 <translation type="unfinished"/> 7655 <translation>Wie gebruikt de Nintendo eShop?</translation>
7618 </message> 7656 </message>
7619 <message> 7657 <message>
7620 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> 7658 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/>
7621 <source>Who is making this purchase?</source> 7659 <source>Who is making this purchase?</source>
7622 <translation type="unfinished"/> 7660 <translation>Wie doet deze aankoop?</translation>
7623 </message> 7661 </message>
7624 <message> 7662 <message>
7625 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> 7663 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/>
7626 <source>Who is posting?</source> 7664 <source>Who is posting?</source>
7627 <translation type="unfinished"/> 7665 <translation>Wie post er?</translation>
7628 </message> 7666 </message>
7629 <message> 7667 <message>
7630 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> 7668 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/>
7631 <source>Select a user to link to a Nintendo Account.</source> 7669 <source>Select a user to link to a Nintendo Account.</source>
7632 <translation type="unfinished"/> 7670 <translation>Selecteer een gebruiker om te koppelen aan een Nintendo-account.</translation>
7633 </message> 7671 </message>
7634 <message> 7672 <message>
7635 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> 7673 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/>
7636 <source>Change settings for which user?</source> 7674 <source>Change settings for which user?</source>
7637 <translation type="unfinished"/> 7675 <translation>Instellingen wijzigen voor welke gebruiker?</translation>
7638 </message> 7676 </message>
7639 <message> 7677 <message>
7640 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> 7678 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/>
7641 <source>Format data for which user?</source> 7679 <source>Format data for which user?</source>
7642 <translation type="unfinished"/> 7680 <translation>Formatteer gegevens voor welke gebruiker?</translation>
7643 </message> 7681 </message>
7644 <message> 7682 <message>
7645 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> 7683 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/>
7646 <source>Which user will be transferred to another console?</source> 7684 <source>Which user will be transferred to another console?</source>
7647 <translation type="unfinished"/> 7685 <translation>Welke gebruiker wordt overgezet naar een andere console?</translation>
7648 </message> 7686 </message>
7649 <message> 7687 <message>
7650 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> 7688 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/>
7651 <source>Send save data for which user?</source> 7689 <source>Send save data for which user?</source>
7652 <translation type="unfinished"/> 7690 <translation>Gegevens verzenden voor welke gebruiker?</translation>
7653 </message> 7691 </message>
7654 <message> 7692 <message>
7655 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> 7693 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/>
@@ -7662,12 +7700,12 @@ Please try again or contact the developer of the software.</source>
7662 <message> 7700 <message>
7663 <location filename="../../src/yuzu/applets/qt_software_keyboard.ui" line="14"/> 7701 <location filename="../../src/yuzu/applets/qt_software_keyboard.ui" line="14"/>
7664 <source>Software Keyboard</source> 7702 <source>Software Keyboard</source>
7665 <translation>Software Toetsenbord</translation> 7703 <translation>Softwaretoetsenbord</translation>
7666 </message> 7704 </message>
7667 <message> 7705 <message>
7668 <location filename="../../src/yuzu/applets/qt_software_keyboard.ui" line="199"/> 7706 <location filename="../../src/yuzu/applets/qt_software_keyboard.ui" line="199"/>
7669 <source>Enter Text</source> 7707 <source>Enter Text</source>
7670 <translation type="unfinished"/> 7708 <translation>Voer Tekst In</translation>
7671 </message> 7709 </message>
7672 <message> 7710 <message>
7673 <location filename="../../src/yuzu/applets/qt_software_keyboard.ui" line="479"/> 7711 <location filename="../../src/yuzu/applets/qt_software_keyboard.ui" line="479"/>
@@ -7676,7 +7714,11 @@ Please try again or contact the developer of the software.</source>
7676p, li { white-space: pre-wrap; } 7714p, li { white-space: pre-wrap; }
7677&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:26pt; font-weight:400; font-style:normal;&quot;&gt; 7715&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:26pt; font-weight:400; font-style:normal;&quot;&gt;
7678&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 7716&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
7679 <translation type="unfinished"/> 7717 <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
7718&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
7719p, li { white-space: pre-wrap; }
7720&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:26pt; font-weight:400; font-style:normal;&quot;&gt;
7721&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
7680 </message> 7722 </message>
7681 <message> 7723 <message>
7682 <location filename="../../src/yuzu/applets/qt_software_keyboard.cpp" line="403"/> 7724 <location filename="../../src/yuzu/applets/qt_software_keyboard.cpp" line="403"/>
@@ -7695,7 +7737,7 @@ p, li { white-space: pre-wrap; }
7695 <message> 7737 <message>
7696 <location filename="../../src/yuzu/util/sequence_dialog/sequence_dialog.cpp" line="10"/> 7738 <location filename="../../src/yuzu/util/sequence_dialog/sequence_dialog.cpp" line="10"/>
7697 <source>Enter a hotkey</source> 7739 <source>Enter a hotkey</source>
7698 <translation>Voer een hotkey in</translation> 7740 <translation>Voer een sneltoets in</translation>
7699 </message> 7741 </message>
7700</context> 7742</context>
7701<context> 7743<context>
@@ -7711,12 +7753,12 @@ p, li { white-space: pre-wrap; }
7711 <message> 7753 <message>
7712 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> 7754 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/>
7713 <source>[%1] %2</source> 7755 <source>[%1] %2</source>
7714 <translation type="unfinished"/> 7756 <translation>[%1] %2</translation>
7715 </message> 7757 </message>
7716 <message> 7758 <message>
7717 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> 7759 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/>
7718 <source>waited by no thread</source> 7760 <source>waited by no thread</source>
7719 <translation>wachtend door geen draad</translation> 7761 <translation>wachtend door geen thread</translation>
7720 </message> 7762 </message>
7721</context> 7763</context>
7722<context> 7764<context>
@@ -7729,7 +7771,7 @@ p, li { white-space: pre-wrap; }
7729 <message> 7771 <message>
7730 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> 7772 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/>
7731 <source>paused</source> 7773 <source>paused</source>
7732 <translation>gepauzeerd</translation> 7774 <translation>onderbroken</translation>
7733 </message> 7775 </message>
7734 <message> 7776 <message>
7735 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> 7777 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/>
@@ -7739,7 +7781,7 @@ p, li { white-space: pre-wrap; }
7739 <message> 7781 <message>
7740 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> 7782 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/>
7741 <source>waiting for IPC reply</source> 7783 <source>waiting for IPC reply</source>
7742 <translation>wachten op IPC antwoord</translation> 7784 <translation>wachten op IPC-antwoord</translation>
7743 </message> 7785 </message>
7744 <message> 7786 <message>
7745 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> 7787 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/>
@@ -7759,7 +7801,7 @@ p, li { white-space: pre-wrap; }
7759 <message> 7801 <message>
7760 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> 7802 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/>
7761 <source>waiting for suspend resume</source> 7803 <source>waiting for suspend resume</source>
7762 <translation type="unfinished"/> 7804 <translation>wachtend op hervatten onderbreking</translation>
7763 </message> 7805 </message>
7764 <message> 7806 <message>
7765 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> 7807 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/>
@@ -7769,7 +7811,7 @@ p, li { white-space: pre-wrap; }
7769 <message> 7811 <message>
7770 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> 7812 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/>
7771 <source>initialized</source> 7813 <source>initialized</source>
7772 <translation>geinitialiseerd</translation> 7814 <translation>geïnitialiseerd</translation>
7773 </message> 7815 </message>
7774 <message> 7816 <message>
7775 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> 7817 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/>
@@ -7809,7 +7851,7 @@ p, li { white-space: pre-wrap; }
7809 <message> 7851 <message>
7810 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> 7852 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/>
7811 <source>thread id = %1</source> 7853 <source>thread id = %1</source>
7812 <translation>draad id = %1</translation> 7854 <translation>thread-id = %1</translation>
7813 </message> 7855 </message>
7814 <message> 7856 <message>
7815 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> 7857 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/>
@@ -7827,7 +7869,7 @@ p, li { white-space: pre-wrap; }
7827 <message> 7869 <message>
7828 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> 7870 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/>
7829 <source>waited by thread</source> 7871 <source>waited by thread</source>
7830 <translation>Wachtend door draad</translation> 7872 <translation>wachtend door thread</translation>
7831 </message> 7873 </message>
7832</context> 7874</context>
7833<context> 7875<context>
@@ -7835,7 +7877,7 @@ p, li { white-space: pre-wrap; }
7835 <message> 7877 <message>
7836 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> 7878 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/>
7837 <source>&amp;Wait Tree</source> 7879 <source>&amp;Wait Tree</source>
7838 <translation type="unfinished"/> 7880 <translation>&amp;Wait Tree</translation>
7839 </message> 7881 </message>
7840</context> 7882</context>
7841</TS> \ No newline at end of file 7883</TS> \ No newline at end of file
diff --git a/dist/languages/pl.ts b/dist/languages/pl.ts
index 36daf71d2..e822fcac8 100644
--- a/dist/languages/pl.ts
+++ b/dist/languages/pl.ts
@@ -1377,8 +1377,8 @@ Gdy ta opcja jest włączona, niedopasowanie jest uruchamiane tylko wtedy, gdy d
1377 </message> 1377 </message>
1378 <message> 1378 <message>
1379 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1379 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1380 <source>Extended memory layout (6GB DRAM)</source> 1380 <source>Extended memory layout (8GB DRAM)</source>
1381 <translation>Rozszerzony układ pamięci (6GB DRAM)</translation> 1381 <translation type="unfinished"/>
1382 </message> 1382 </message>
1383 <message> 1383 <message>
1384 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1384 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/pt_BR.ts b/dist/languages/pt_BR.ts
index 98f1345a2..50213db36 100644
--- a/dist/languages/pt_BR.ts
+++ b/dist/languages/pt_BR.ts
@@ -1383,8 +1383,8 @@ Isto banirá tanto o nome de usuário do fórum como o endereço IP.</translatio
1383 </message> 1383 </message>
1384 <message> 1384 <message>
1385 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1385 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1386 <source>Extended memory layout (6GB DRAM)</source> 1386 <source>Extended memory layout (8GB DRAM)</source>
1387 <translation>Layout de memória extendida (6GB DRAM)</translation> 1387 <translation type="unfinished"/>
1388 </message> 1388 </message>
1389 <message> 1389 <message>
1390 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1390 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/pt_PT.ts b/dist/languages/pt_PT.ts
index 293283ac9..da8aa6d13 100644
--- a/dist/languages/pt_PT.ts
+++ b/dist/languages/pt_PT.ts
@@ -1373,8 +1373,8 @@ Isto banirá tanto o nome de usuário do fórum como o endereço IP.</translatio
1373 </message> 1373 </message>
1374 <message> 1374 <message>
1375 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1375 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1376 <source>Extended memory layout (6GB DRAM)</source> 1376 <source>Extended memory layout (8GB DRAM)</source>
1377 <translation>Layout de memória extendida (6GB DRAM)</translation> 1377 <translation type="unfinished"/>
1378 </message> 1378 </message>
1379 <message> 1379 <message>
1380 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1380 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/ru_RU.ts b/dist/languages/ru_RU.ts
index eee646732..898c1800c 100644
--- a/dist/languages/ru_RU.ts
+++ b/dist/languages/ru_RU.ts
@@ -381,17 +381,17 @@ This would ban both their forum username and their IP address.</source>
381 <message> 381 <message>
382 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> 382 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/>
383 <source>Output Device:</source> 383 <source>Output Device:</source>
384 <translation type="unfinished"/> 384 <translation>Устройство вывода:</translation>
385 </message> 385 </message>
386 <message> 386 <message>
387 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> 387 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/>
388 <source>Input Device:</source> 388 <source>Input Device:</source>
389 <translation type="unfinished"/> 389 <translation>Устройство ввода:</translation>
390 </message> 390 </message>
391 <message> 391 <message>
392 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> 392 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/>
393 <source>Sound Output Mode:</source> 393 <source>Sound Output Mode:</source>
394 <translation type="unfinished"/> 394 <translation>Режим вывода звука:</translation>
395 </message> 395 </message>
396 <message> 396 <message>
397 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> 397 <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/>
@@ -551,13 +551,13 @@ This would ban both their forum username and their IP address.</source>
551 &lt;div&gt;This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.&lt;/div&gt; 551 &lt;div&gt;This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.&lt;/div&gt;
552 </source> 552 </source>
553 <translation> 553 <translation>
554 &lt;div&gt;Эта опция повышает скорость, уменьшая точность сложенных умноженных инструкций на ЦП без поддержки FMA.&lt;/div&gt; 554 &lt;div&gt;Эта опция повышает скорость за счет снижения точности инструкций fused-multiply-add на ЦП без встроенной поддержки FMA.&lt;/div&gt;
555 </translation> 555 </translation>
556 </message> 556 </message>
557 <message> 557 <message>
558 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="106"/> 558 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="106"/>
559 <source>Unfuse FMA (improve performance on CPUs without FMA)</source> 559 <source>Unfuse FMA (improve performance on CPUs without FMA)</source>
560 <translation>Не использовать FMA (улучшает производительность на ЦП без FMA)</translation> 560 <translation>Отключить FMA (улучшает производительность на ЦП без FMA)</translation>
561 </message> 561 </message>
562 <message> 562 <message>
563 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="113"/> 563 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="113"/>
@@ -565,7 +565,7 @@ This would ban both their forum username and their IP address.</source>
565 &lt;div&gt;This option improves the speed of some approximate floating-point functions by using less accurate native approximations.&lt;/div&gt; 565 &lt;div&gt;This option improves the speed of some approximate floating-point functions by using less accurate native approximations.&lt;/div&gt;
566 </source> 566 </source>
567 <translation> 567 <translation>
568 &lt;div&gt;Эта опция повышает скорость некоторых аппроксимирующих функций с плавающей точкой за счет использования менее точных нативных приближений.&lt;/div&gt; 568 &lt;div&gt;Эта опция повышает скорость некоторых приближенных функций с плавающей точкой за счет использования менее точных нативных приближений&lt;/div&gt;
569 </translation> 569 </translation>
570 </message> 570 </message>
571 <message> 571 <message>
@@ -579,13 +579,13 @@ This would ban both their forum username and their IP address.</source>
579 &lt;div&gt;This option improves the speed of 32 bits ASIMD floating-point functions by running with incorrect rounding modes.&lt;/div&gt; 579 &lt;div&gt;This option improves the speed of 32 bits ASIMD floating-point functions by running with incorrect rounding modes.&lt;/div&gt;
580 </source> 580 </source>
581 <translation> 581 <translation>
582 &lt;div&gt;Эта опция улучшает скорость 32-битных ASIMD-функций с плавающей запятой путём работы с некорректными режимами округления.&lt;/div&gt; 582 &lt;div&gt;Эта опция повышает скорость работы 32-битных ASIMD-функций с плавающей запятой, работая с неправильными режимами округления.&lt;/div&gt;
583 </translation> 583 </translation>
584 </message> 584 </message>
585 <message> 585 <message>
586 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="130"/> 586 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="130"/>
587 <source>Faster ASIMD instructions (32 bits only)</source> 587 <source>Faster ASIMD instructions (32 bits only)</source>
588 <translation>е ыстрые инструкции ASIMD (только 32 бит)</translation> 588 <translation>среые инструкции ASIMD (только 32 бит)</translation>
589 </message> 589 </message>
590 <message> 590 <message>
591 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="137"/> 591 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="137"/>
@@ -593,20 +593,22 @@ This would ban both their forum username and their IP address.</source>
593 &lt;div&gt;This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.&lt;/div&gt; 593 &lt;div&gt;This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.&lt;/div&gt;
594 </source> 594 </source>
595 <translation> 595 <translation>
596 &lt;div&gt;Эта опция повышает скорость, убирая проверку на NaN. Обратите внимание, что это также снижает точность некоторых инструкций с плавающей точкой.&lt;/div&gt; 596 &lt;div&gt;Эта опция повышает скорость, удаляя проверку NaN. Обратите внимание, что это также снижает точность некоторых инструкций с плавающей точкой.&lt;/div&gt;
597 </translation> 597 </translation>
598 </message> 598 </message>
599 <message> 599 <message>
600 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="142"/> 600 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="142"/>
601 <source>Inaccurate NaN handling</source> 601 <source>Inaccurate NaN handling</source>
602 <translation>Непвилная обработка NaN</translation> 602 <translation>Неная обработка NaN</translation>
603 </message> 603 </message>
604 <message> 604 <message>
605 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="149"/> 605 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="149"/>
606 <source> 606 <source>
607 &lt;div&gt;This option improves speed by eliminating a safety check before every memory read/write in guest. Disabling it may allow a game to read/write the emulator's memory.&lt;/div&gt; 607 &lt;div&gt;This option improves speed by eliminating a safety check before every memory read/write in guest. Disabling it may allow a game to read/write the emulator's memory.&lt;/div&gt;
608 </source> 608 </source>
609 <translation type="unfinished"/> 609 <translation>
610 &lt;div&gt;Эта опция повышает скорость за счет исключения проверки безопасности перед каждым чтением/записью памяти в гостевом режиме. Отключение этой опции может позволить игре читать/записывать память эмулятора.
611 </translation>
610 </message> 612 </message>
611 <message> 613 <message>
612 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="154"/> 614 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="154"/>
@@ -618,12 +620,14 @@ This would ban both their forum username and their IP address.</source>
618 <source> 620 <source>
619 &lt;div&gt;This option improves speed by relying only on the semantics of cmpxchg to ensure safety of exclusive access instructions. Please note this may result in deadlocks and other race conditions.&lt;/div&gt; 621 &lt;div&gt;This option improves speed by relying only on the semantics of cmpxchg to ensure safety of exclusive access instructions. Please note this may result in deadlocks and other race conditions.&lt;/div&gt;
620 </source> 622 </source>
621 <translation type="unfinished"/> 623 <translation>
624 &lt;div&gt;Эта опция повышает скорость, полагаясь только на семантику cmpxchg для обеспечения безопасности инструкций исключительного доступа. Обратите внимание, что это может привести к полным зависаниям и другим условиям гонки.&lt;/div&gt;
625 </translation>
622 </message> 626 </message>
623 <message> 627 <message>
624 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="166"/> 628 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="166"/>
625 <source>Ignore global monitor</source> 629 <source>Ignore global monitor</source>
626 <translation type="unfinished"/> 630 <translation>Игнорировать глобальный мониторинг</translation>
627 </message> 631 </message>
628 <message> 632 <message>
629 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="191"/> 633 <location filename="../../src/yuzu/configuration/configure_cpu.ui" line="191"/>
@@ -660,7 +664,11 @@ This would ban both their forum username and their IP address.</source>
660 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it inlines accesses to PageTable::pointers into emitted code.&lt;/div&gt; 664 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it inlines accesses to PageTable::pointers into emitted code.&lt;/div&gt;
661 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to go through the Memory::Read/Memory::Write functions.&lt;/div&gt; 665 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to go through the Memory::Read/Memory::Write functions.&lt;/div&gt;
662 </source> 666 </source>
663 <translation type="unfinished"/> 667 <translation>
668 &lt;div style=&quot;white-space: nowrap&quot;&gt;Эта оптимизация ускоряет доступ гостевой программы к памяти.&lt;/div&gt;
669 &lt;div style=&quot;white-space: nowrap&quot;&gt; Включение этой оптимизации встраивает доступ к указателям PageTable::pointers в эмулируемый код.&lt;/div&gt;
670 &lt;div style=&quot;white-space: nowrap&quot;&gt;Отключение этой функции заставляет все обращения к памяти проходить через функции Memory::Read/Memory::Write.&lt;/div&gt;
671 </translation>
664 </message> 672 </message>
665 <message> 673 <message>
666 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="48"/> 674 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="48"/>
@@ -672,7 +680,9 @@ This would ban both their forum username and their IP address.</source>
672 <source> 680 <source>
673 &lt;div&gt;This optimization avoids dispatcher lookups by allowing emitted basic blocks to jump directly to other basic blocks if the destination PC is static.&lt;/div&gt; 681 &lt;div&gt;This optimization avoids dispatcher lookups by allowing emitted basic blocks to jump directly to other basic blocks if the destination PC is static.&lt;/div&gt;
674 </source> 682 </source>
675 <translation type="unfinished"/> 683 <translation>
684 &lt;div&gt;Эта оптимизация позволяет избежать поиска диспетчера, позволяя эмитированным базовым блокам переходить непосредственно к другим базовым блокам, если конечный ПК статичен.&lt;/div&gt;
685 </translation>
676 </message> 686 </message>
677 <message> 687 <message>
678 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="60"/> 688 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="60"/>
@@ -684,7 +694,9 @@ This would ban both their forum username and their IP address.</source>
684 <source> 694 <source>
685 &lt;div&gt;This optimization avoids dispatcher lookups by keeping track potential return addresses of BL instructions. This approximates what happens with a return stack buffer on a real CPU.&lt;/div&gt; 695 &lt;div&gt;This optimization avoids dispatcher lookups by keeping track potential return addresses of BL instructions. This approximates what happens with a return stack buffer on a real CPU.&lt;/div&gt;
686 </source> 696 </source>
687 <translation type="unfinished"/> 697 <translation>
698 &lt;div&gt;Эта оптимизация позволяет избежать поиска диспетчера, отслеживая потенциальные адреса возврата инструкций BL. Это приближено к тому, что происходит с буфером стека возврата на реальном ЦП.&lt;/div&gt;
699 </translation>
688 </message> 700 </message>
689 <message> 701 <message>
690 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="72"/> 702 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="72"/>
@@ -696,7 +708,9 @@ This would ban both their forum username and their IP address.</source>
696 <source> 708 <source>
697 &lt;div&gt;Enable a two-tiered dispatch system. A faster dispatcher written in assembly has a small MRU cache of jump destinations is used first. If that fails, dispatch falls back to the slower C++ dispatcher.&lt;/div&gt; 709 &lt;div&gt;Enable a two-tiered dispatch system. A faster dispatcher written in assembly has a small MRU cache of jump destinations is used first. If that fails, dispatch falls back to the slower C++ dispatcher.&lt;/div&gt;
698 </source> 710 </source>
699 <translation type="unfinished"/> 711 <translation>
712 &lt;div&gt;Включите двухуровневую систему диспетчеризации. Сначала используется более быстрый диспетчер, написанный на ассемблере и имеющий небольшой кэш MRU для мест назначения переходов. Если он не справляется, диспетчеризация возвращается к более медленному диспетчеру на C++.&lt;/div&gt;
713 </translation>
700 </message> 714 </message>
701 <message> 715 <message>
702 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="84"/> 716 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="84"/>
@@ -708,7 +722,9 @@ This would ban both their forum username and their IP address.</source>
708 <source> 722 <source>
709 &lt;div&gt;Enables an IR optimization that reduces unnecessary accesses to the CPU context structure.&lt;/div&gt; 723 &lt;div&gt;Enables an IR optimization that reduces unnecessary accesses to the CPU context structure.&lt;/div&gt;
710 </source> 724 </source>
711 <translation type="unfinished"/> 725 <translation>
726 &lt;div&gt;Включает IR-оптимизацию, которая уменьшает ненужные обращения к структуре контекста ЦП.&lt;/div&gt;
727 </translation>
712 </message> 728 </message>
713 <message> 729 <message>
714 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="96"/> 730 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="96"/>
@@ -720,19 +736,23 @@ This would ban both their forum username and their IP address.</source>
720 <source> 736 <source>
721 &lt;div&gt;Enables IR optimizations that involve constant propagation.&lt;/div&gt; 737 &lt;div&gt;Enables IR optimizations that involve constant propagation.&lt;/div&gt;
722 </source> 738 </source>
723 <translation type="unfinished"/> 739 <translation>
740 &lt;div&gt;Включает IR-оптимизацию, которая включает распространение констант.&lt;/div&gt;
741 </translation>
724 </message> 742 </message>
725 <message> 743 <message>
726 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="108"/> 744 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="108"/>
727 <source>Enable constant propagation</source> 745 <source>Enable constant propagation</source>
728 <translation>Включить потоянное аспространение</translation> 746 <translation>Включить распространение констант</translation>
729 </message> 747 </message>
730 <message> 748 <message>
731 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="115"/> 749 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="115"/>
732 <source> 750 <source>
733 &lt;div&gt;Enables miscellaneous IR optimizations.&lt;/div&gt; 751 &lt;div&gt;Enables miscellaneous IR optimizations.&lt;/div&gt;
734 </source> 752 </source>
735 <translation type="unfinished"/> 753 <translation>
754 &lt;div&gt;Включает различные IR-оптимизации.&lt;/div&gt;
755 </translation>
736 </message> 756 </message>
737 <message> 757 <message>
738 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="120"/> 758 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="120"/>
@@ -745,12 +765,15 @@ This would ban both their forum username and their IP address.</source>
745 &lt;div style=&quot;white-space: nowrap&quot;&gt;When enabled, a misalignment is only triggered when an access crosses a page boundary.&lt;/div&gt; 765 &lt;div style=&quot;white-space: nowrap&quot;&gt;When enabled, a misalignment is only triggered when an access crosses a page boundary.&lt;/div&gt;
746 &lt;div style=&quot;white-space: nowrap&quot;&gt;When disabled, a misalignment is triggered on all misaligned accesses.&lt;/div&gt; 766 &lt;div style=&quot;white-space: nowrap&quot;&gt;When disabled, a misalignment is triggered on all misaligned accesses.&lt;/div&gt;
747 </source> 767 </source>
748 <translation type="unfinished"/> 768 <translation>
769 &lt;div style=&quot;white-space: nowrap&quot;&gt;Если функция включена, смещение срабатывает только тогда, когда доступ пересекает границу страницы.&lt;/div&gt;
770 &lt;div style=&quot;white-space: nowrap&quot;&gt;Если отключено, смещение срабатывает при всех смещенных доступах.&lt;/div&gt;
771 </translation>
749 </message> 772 </message>
750 <message> 773 <message>
751 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="133"/> 774 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="133"/>
752 <source>Enable misalignment check reduction</source> 775 <source>Enable misalignment check reduction</source>
753 <translation type="unfinished"/> 776 <translation>Включить уменьшение проверки несоосности</translation>
754 </message> 777 </message>
755 <message> 778 <message>
756 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="140"/> 779 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="140"/>
@@ -759,12 +782,16 @@ This would ban both their forum username and their IP address.</source>
759 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it causes guest memory reads/writes to be done directly into memory and make use of Host's MMU.&lt;/div&gt; 782 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it causes guest memory reads/writes to be done directly into memory and make use of Host's MMU.&lt;/div&gt;
760 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to use Software MMU Emulation.&lt;/div&gt; 783 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to use Software MMU Emulation.&lt;/div&gt;
761 </source> 784 </source>
762 <translation type="unfinished"/> 785 <translation>
786 &lt;div style=&quot;white-space: nowrap&quot;&gt;Эта оптимизация ускоряет доступ гостевой программы к памяти.&lt;/div&gt;
787 &lt;div style=&quot;white-space: nowrap&quot;&gt; Включение этой оптимизации приводит к тому, что чтение/запись гостевой памяти производится непосредственно в память и использует MMU хоста.&lt;/div&gt;
788 &lt;div style=&quot;white-space: nowrap&quot;&gt;Отключение этой функции заставляет все обращения к памяти использовать программную эмуляцию MMU.&lt;/div&gt;
789 </translation>
763 </message> 790 </message>
764 <message> 791 <message>
765 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="147"/> 792 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="147"/>
766 <source>Enable Host MMU Emulation (general memory instructions)</source> 793 <source>Enable Host MMU Emulation (general memory instructions)</source>
767 <translation type="unfinished"/> 794 <translation>Включить эмуляцию MMU хоста (инструкции общей памяти)</translation>
768 </message> 795 </message>
769 <message> 796 <message>
770 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="154"/> 797 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="154"/>
@@ -773,12 +800,16 @@ This would ban both their forum username and their IP address.</source>
773 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it causes guest exclusive memory reads/writes to be done directly into memory and make use of Host's MMU.&lt;/div&gt; 800 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it causes guest exclusive memory reads/writes to be done directly into memory and make use of Host's MMU.&lt;/div&gt;
774 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all exclusive memory accesses to use Software MMU Emulation.&lt;/div&gt; 801 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all exclusive memory accesses to use Software MMU Emulation.&lt;/div&gt;
775 </source> 802 </source>
776 <translation type="unfinished"/> 803 <translation>
804 &lt;div style=&quot;white-space: nowrap&quot;&gt;Эта оптимизация ускоряет доступ гостевой программы к эксклюзивной памяти.&lt;/div&gt;
805 &lt;div style=&quot;white-space: nowrap&quot;&gt;Включение этой оптимизации приводит к тому, что чтение/запись в эксклюзивную память гостя выполняется непосредственно в память и использует MMU хоста.&lt;/div&gt;
806 &lt;div style=&quot;white-space: nowrap&quot;&gt; Отключение этой функции заставляет все эксклюзивные доступы к памяти использовать эмуляцию программного MMU.&lt;/div&gt;
807 </translation>
777 </message> 808 </message>
778 <message> 809 <message>
779 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="161"/> 810 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="161"/>
780 <source>Enable Host MMU Emulation (exclusive memory instructions)</source> 811 <source>Enable Host MMU Emulation (exclusive memory instructions)</source>
781 <translation type="unfinished"/> 812 <translation>Включить эмуляцию MMU хоста (инструкции исключительной памяти)</translation>
782 </message> 813 </message>
783 <message> 814 <message>
784 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="168"/> 815 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="168"/>
@@ -786,12 +817,15 @@ This would ban both their forum username and their IP address.</source>
786 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up exclusive memory accesses by the guest program.&lt;/div&gt; 817 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up exclusive memory accesses by the guest program.&lt;/div&gt;
787 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it reduces the overhead of fastmem failure of exclusive memory accesses.&lt;/div&gt; 818 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it reduces the overhead of fastmem failure of exclusive memory accesses.&lt;/div&gt;
788 </source> 819 </source>
789 <translation type="unfinished"/> 820 <translation>
821 &lt;div style=&quot;white-space: nowrap&quot;&gt;Эта оптимизация ускоряет обращение гостевой программы к исключительной памяти.&lt;/div&gt;
822 &lt;div style=&quot;white-space: nowrap&quot;&gt;Ее включение снижает накладные расходы, связанные с отказом fastmem при доступе к исключительной памяти.&lt;/div&gt;
823 </translation>
790 </message> 824 </message>
791 <message> 825 <message>
792 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="174"/> 826 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="174"/>
793 <source>Enable recompilation of exclusive memory instructions</source> 827 <source>Enable recompilation of exclusive memory instructions</source>
794 <translation type="unfinished"/> 828 <translation>Разрешить перекомпиляцию инструкций исключительной памяти</translation>
795 </message> 829 </message>
796 <message> 830 <message>
797 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="181"/> 831 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="181"/>
@@ -799,7 +833,10 @@ This would ban both their forum username and their IP address.</source>
799 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up memory accesses by allowing invalid memory accesses to succeed.&lt;/div&gt; 833 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up memory accesses by allowing invalid memory accesses to succeed.&lt;/div&gt;
800 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it reduces the overhead of all memory accesses and has no impact on programs that don't access invalid memory.&lt;/div&gt; 834 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it reduces the overhead of all memory accesses and has no impact on programs that don't access invalid memory.&lt;/div&gt;
801 </source> 835 </source>
802 <translation type="unfinished"/> 836 <translation>
837 &lt;div style=&quot;white-space: nowrap&quot;&gt;Эта оптимизация ускоряет обращение к памяти, позволяя успешное обращение к недопустимой памяти.&lt;/div&gt;
838 &lt;div style=&quot;white-space: nowrap&quot;&gt;Включение этой оптимизации снижает накладные расходы на все обращения к памяти и не влияет на программы, которые не обращаются к недопустимой памяти.&lt;/div&gt;
839 </translation>
803 </message> 840 </message>
804 <message> 841 <message>
805 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="187"/> 842 <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="187"/>
@@ -917,17 +954,17 @@ This would ban both their forum username and their IP address.</source>
917 <message> 954 <message>
918 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="198"/> 955 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="198"/>
919 <source>When checked, it disables the macro Just In Time compiler. Enabling this makes games run slower</source> 956 <source>When checked, it disables the macro Just In Time compiler. Enabling this makes games run slower</source>
920 <translation>Если включено, отключает компилятор макроса Just In Time. Включение опции делает игры медленнее</translation> 957 <translation>Если включено, отключает компилятор макроса Just In Time. Включение этого параметра замедляет работу игр</translation>
921 </message> 958 </message>
922 <message> 959 <message>
923 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="201"/> 960 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="201"/>
924 <source>Disable Macro JIT</source> 961 <source>Disable Macro JIT</source>
925 <translation>Отключить Macro JIT</translation> 962 <translation>Отключить макрос JIT</translation>
926 </message> 963 </message>
927 <message> 964 <message>
928 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="211"/> 965 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="211"/>
929 <source>When checked, it disables the macro HLE functions. Enabling this makes games run slower</source> 966 <source>When checked, it disables the macro HLE functions. Enabling this makes games run slower</source>
930 <translation type="unfinished"/> 967 <translation>Если флажок установлен, он отключает функции макроса HLE. Включение этого параметра замедляет работу игр</translation>
931 </message> 968 </message>
932 <message> 969 <message>
933 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="214"/> 970 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="214"/>
@@ -947,12 +984,12 @@ This would ban both their forum username and their IP address.</source>
947 <message> 984 <message>
948 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="231"/> 985 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="231"/>
949 <source>When checked, it executes shaders without loop logic changes</source> 986 <source>When checked, it executes shaders without loop logic changes</source>
950 <translation type="unfinished"/> 987 <translation>Если включено, шейдеры выполняются без изменения логики цикла</translation>
951 </message> 988 </message>
952 <message> 989 <message>
953 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="234"/> 990 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="234"/>
954 <source>Disable Loop safety checks</source> 991 <source>Disable Loop safety checks</source>
955 <translation type="unfinished"/> 992 <translation>Отключить проверку безопасности цикла</translation>
956 </message> 993 </message>
957 <message> 994 <message>
958 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="244"/> 995 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="244"/>
@@ -967,12 +1004,12 @@ This would ban both their forum username and their IP address.</source>
967 <message> 1004 <message>
968 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="257"/> 1005 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="257"/>
969 <source>Enable FS Access Log</source> 1006 <source>Enable FS Access Log</source>
970 <translation type="unfinished"/> 1007 <translation>Включить журнал доступа к ФС</translation>
971 </message> 1008 </message>
972 <message> 1009 <message>
973 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="264"/> 1010 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="264"/>
974 <source>Enable this to output the latest generated audio command list to the console. Only affects games using the audio renderer.</source> 1011 <source>Enable this to output the latest generated audio command list to the console. Only affects games using the audio renderer.</source>
975 <translation type="unfinished"/> 1012 <translation>Включите эту опцию, чтобы вывести на консоль последний сгенерированный список аудиокоманд. Влияет только на игры, использующие аудио рендерер.</translation>
976 </message> 1013 </message>
977 <message> 1014 <message>
978 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="267"/> 1015 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="267"/>
@@ -1007,7 +1044,7 @@ This would ban both their forum username and their IP address.</source>
1007 <message> 1044 <message>
1008 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="311"/> 1045 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="311"/>
1009 <source>Enable Auto-Stub**</source> 1046 <source>Enable Auto-Stub**</source>
1010 <translation type="unfinished"/> 1047 <translation>Включить автоподставку**</translation>
1011 </message> 1048 </message>
1012 <message> 1049 <message>
1013 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="318"/> 1050 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="318"/>
@@ -1346,8 +1383,8 @@ This would ban both their forum username and their IP address.</source>
1346 </message> 1383 </message>
1347 <message> 1384 <message>
1348 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1385 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1349 <source>Extended memory layout (6GB DRAM)</source> 1386 <source>Extended memory layout (8GB DRAM)</source>
1350 <translation>Расширенная компоновка памяти (6 ГБ DRAM)</translation> 1387 <translation>Расширенная компоновка памяти (8 ГБ DRAM)</translation>
1351 </message> 1388 </message>
1352 <message> 1389 <message>
1353 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1390 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
@@ -1716,12 +1753,12 @@ This would ban both their forum username and their IP address.</source>
1716 <message> 1753 <message>
1717 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/> 1754 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/>
1718 <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source> 1755 <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source>
1719 <translation type="unfinished"/> 1756 <translation>Включает асинхронное декодирование текстур ASTC, что может уменьшить фризы при загрузке. Эта функция является экспериментальной.</translation>
1720 </message> 1757 </message>
1721 <message> 1758 <message>
1722 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/> 1759 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/>
1723 <source>Decode ASTC textures asynchronously (Hack)</source> 1760 <source>Decode ASTC textures asynchronously (Hack)</source>
1724 <translation type="unfinished"/> 1761 <translation>Асинхронное декодирование текстур ASTC (Хак)</translation>
1725 </message> 1762 </message>
1726 <message> 1763 <message>
1727 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/> 1764 <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/>
@@ -2236,7 +2273,7 @@ This would ban both their forum username and their IP address.</source>
2236 <message> 2273 <message>
2237 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2726"/> 2274 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2726"/>
2238 <source>Enable direct Pro Controller driver [EXPERIMENTAL]</source> 2275 <source>Enable direct Pro Controller driver [EXPERIMENTAL]</source>
2239 <translation type="unfinished"/> 2276 <translation>Включить прямой драйвер Pro Controller [ЭКСПЕРИМЕНТАЛЬНО]</translation>
2240 </message> 2277 </message>
2241 <message> 2278 <message>
2242 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2739"/> 2279 <location filename="../../src/yuzu/configuration/configure_input_advanced.ui" line="2739"/>
@@ -4580,12 +4617,12 @@ Drag points to change position, or double-click table cells to edit values.</sou
4580 <message> 4617 <message>
4581 <location filename="../../src/yuzu/main.cpp" line="1230"/> 4618 <location filename="../../src/yuzu/main.cpp" line="1230"/>
4582 <source>Emulated mouse is enabled</source> 4619 <source>Emulated mouse is enabled</source>
4583 <translation type="unfinished"/> 4620 <translation>Эмулированная мышь включена</translation>
4584 </message> 4621 </message>
4585 <message> 4622 <message>
4586 <location filename="../../src/yuzu/main.cpp" line="1231"/> 4623 <location filename="../../src/yuzu/main.cpp" line="1231"/>
4587 <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> 4624 <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source>
4588 <translation type="unfinished"/> 4625 <translation>Ввод реальной мыши и панорамирование мышью несовместимы. Пожалуйста, отключите эмулированную мышь в расширенных настройках ввода, чтобы разрешить панорамирование мышью.</translation>
4589 </message> 4626 </message>
4590 <message> 4627 <message>
4591 <location filename="../../src/yuzu/main.cpp" line="1453"/> 4628 <location filename="../../src/yuzu/main.cpp" line="1453"/>
@@ -7613,7 +7650,7 @@ Please try again or contact the developer of the software.</source>
7613 <message> 7650 <message>
7614 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> 7651 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/>
7615 <source>Profile Creator</source> 7652 <source>Profile Creator</source>
7616 <translation type="unfinished"/> 7653 <translation>Создатель профиля</translation>
7617 </message> 7654 </message>
7618 <message> 7655 <message>
7619 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> 7656 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/>
@@ -7624,57 +7661,57 @@ Please try again or contact the developer of the software.</source>
7624 <message> 7661 <message>
7625 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> 7662 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/>
7626 <source>Profile Icon Editor</source> 7663 <source>Profile Icon Editor</source>
7627 <translation type="unfinished"/> 7664 <translation>Редактор иконки профиля</translation>
7628 </message> 7665 </message>
7629 <message> 7666 <message>
7630 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> 7667 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/>
7631 <source>Profile Nickname Editor</source> 7668 <source>Profile Nickname Editor</source>
7632 <translation type="unfinished"/> 7669 <translation>Редактор никнейма профиля</translation>
7633 </message> 7670 </message>
7634 <message> 7671 <message>
7635 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> 7672 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/>
7636 <source>Who will receive the points?</source> 7673 <source>Who will receive the points?</source>
7637 <translation type="unfinished"/> 7674 <translation>Кто будет получать очки?</translation>
7638 </message> 7675 </message>
7639 <message> 7676 <message>
7640 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> 7677 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/>
7641 <source>Who is using Nintendo eShop?</source> 7678 <source>Who is using Nintendo eShop?</source>
7642 <translation type="unfinished"/> 7679 <translation>Кто использует Nintendo eShop?</translation>
7643 </message> 7680 </message>
7644 <message> 7681 <message>
7645 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> 7682 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/>
7646 <source>Who is making this purchase?</source> 7683 <source>Who is making this purchase?</source>
7647 <translation type="unfinished"/> 7684 <translation>Кто совершает эту покупку?</translation>
7648 </message> 7685 </message>
7649 <message> 7686 <message>
7650 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> 7687 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/>
7651 <source>Who is posting?</source> 7688 <source>Who is posting?</source>
7652 <translation type="unfinished"/> 7689 <translation>Кто публикует?</translation>
7653 </message> 7690 </message>
7654 <message> 7691 <message>
7655 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> 7692 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/>
7656 <source>Select a user to link to a Nintendo Account.</source> 7693 <source>Select a user to link to a Nintendo Account.</source>
7657 <translation type="unfinished"/> 7694 <translation>Выберите пользователя для привязки к учетной записи Nintendo.</translation>
7658 </message> 7695 </message>
7659 <message> 7696 <message>
7660 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> 7697 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/>
7661 <source>Change settings for which user?</source> 7698 <source>Change settings for which user?</source>
7662 <translation type="unfinished"/> 7699 <translation>Изменить настройки для какого пользователя?</translation>
7663 </message> 7700 </message>
7664 <message> 7701 <message>
7665 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> 7702 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/>
7666 <source>Format data for which user?</source> 7703 <source>Format data for which user?</source>
7667 <translation type="unfinished"/> 7704 <translation>Форматировать данные для какого пользователя?</translation>
7668 </message> 7705 </message>
7669 <message> 7706 <message>
7670 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> 7707 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/>
7671 <source>Which user will be transferred to another console?</source> 7708 <source>Which user will be transferred to another console?</source>
7672 <translation type="unfinished"/> 7709 <translation>Какой пользователь будет переходить на другую консоль?</translation>
7673 </message> 7710 </message>
7674 <message> 7711 <message>
7675 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> 7712 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/>
7676 <source>Send save data for which user?</source> 7713 <source>Send save data for which user?</source>
7677 <translation type="unfinished"/> 7714 <translation>Отправить сохранение какому пользователю?</translation>
7678 </message> 7715 </message>
7679 <message> 7716 <message>
7680 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> 7717 <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/>
@@ -7740,7 +7777,7 @@ p, li { white-space: pre-wrap; }
7740 <message> 7777 <message>
7741 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> 7778 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/>
7742 <source>[%1] %2</source> 7779 <source>[%1] %2</source>
7743 <translation type="unfinished"/> 7780 <translation>[%1] %2</translation>
7744 </message> 7781 </message>
7745 <message> 7782 <message>
7746 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> 7783 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/>
@@ -7753,17 +7790,17 @@ p, li { white-space: pre-wrap; }
7753 <message> 7790 <message>
7754 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> 7791 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/>
7755 <source>runnable</source> 7792 <source>runnable</source>
7756 <translation type="unfinished"/> 7793 <translation>runnable</translation>
7757 </message> 7794 </message>
7758 <message> 7795 <message>
7759 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> 7796 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/>
7760 <source>paused</source> 7797 <source>paused</source>
7761 <translation type="unfinished"/> 7798 <translation>paused</translation>
7762 </message> 7799 </message>
7763 <message> 7800 <message>
7764 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> 7801 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/>
7765 <source>sleeping</source> 7802 <source>sleeping</source>
7766 <translation type="unfinished"/> 7803 <translation>sleeping</translation>
7767 </message> 7804 </message>
7768 <message> 7805 <message>
7769 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> 7806 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/>
@@ -7778,32 +7815,32 @@ p, li { white-space: pre-wrap; }
7778 <message> 7815 <message>
7779 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> 7816 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/>
7780 <source>waiting for condition variable</source> 7817 <source>waiting for condition variable</source>
7781 <translation type="unfinished"/> 7818 <translation>waiting for condition variable</translation>
7782 </message> 7819 </message>
7783 <message> 7820 <message>
7784 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> 7821 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/>
7785 <source>waiting for address arbiter</source> 7822 <source>waiting for address arbiter</source>
7786 <translation type="unfinished"/> 7823 <translation>waiting for address arbiter</translation>
7787 </message> 7824 </message>
7788 <message> 7825 <message>
7789 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> 7826 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/>
7790 <source>waiting for suspend resume</source> 7827 <source>waiting for suspend resume</source>
7791 <translation type="unfinished"/> 7828 <translation>waiting for suspend resume</translation>
7792 </message> 7829 </message>
7793 <message> 7830 <message>
7794 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> 7831 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/>
7795 <source>waiting</source> 7832 <source>waiting</source>
7796 <translation type="unfinished"/> 7833 <translation>waiting</translation>
7797 </message> 7834 </message>
7798 <message> 7835 <message>
7799 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> 7836 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/>
7800 <source>initialized</source> 7837 <source>initialized</source>
7801 <translation type="unfinished"/> 7838 <translation>initialized</translation>
7802 </message> 7839 </message>
7803 <message> 7840 <message>
7804 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> 7841 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/>
7805 <source>terminated</source> 7842 <source>terminated</source>
7806 <translation type="unfinished"/> 7843 <translation>terminated</translation>
7807 </message> 7844 </message>
7808 <message> 7845 <message>
7809 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> 7846 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/>
@@ -7818,7 +7855,7 @@ p, li { white-space: pre-wrap; }
7818 <message> 7855 <message>
7819 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> 7856 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/>
7820 <source>ideal</source> 7857 <source>ideal</source>
7821 <translation type="unfinished"/> 7858 <translation>ideal</translation>
7822 </message> 7859 </message>
7823 <message> 7860 <message>
7824 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> 7861 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/>
@@ -7848,7 +7885,7 @@ p, li { white-space: pre-wrap; }
7848 <message> 7885 <message>
7849 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> 7886 <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/>
7850 <source>last running ticks = %1</source> 7887 <source>last running ticks = %1</source>
7851 <translation type="unfinished"/> 7888 <translation>last running ticks = %1</translation>
7852 </message> 7889 </message>
7853</context> 7890</context>
7854<context> 7891<context>
diff --git a/dist/languages/sv.ts b/dist/languages/sv.ts
index b81ed7fd6..8c60a4942 100644
--- a/dist/languages/sv.ts
+++ b/dist/languages/sv.ts
@@ -122,7 +122,7 @@ p, li { white-space: pre-wrap; }
122 <message> 122 <message>
123 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="330"/> 123 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="330"/>
124 <source>%1 has been unbanned</source> 124 <source>%1 has been unbanned</source>
125 <translation type="unfinished"/> 125 <translation>%1 har haft dess bannlysning upphävd.</translation>
126 </message> 126 </message>
127 <message> 127 <message>
128 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="446"/> 128 <location filename="../../src/yuzu/multiplayer/chat_room.cpp" line="446"/>
@@ -242,22 +242,22 @@ Detta kommer bannlysa både dennes användarnamn på forum samt IP-adress.</tran
242 <message> 242 <message>
243 <location filename="../../src/yuzu/compatdb.ui" line="77"/> 243 <location filename="../../src/yuzu/compatdb.ui" line="77"/>
244 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game boot?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> 244 <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Does the game boot?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
245 <translation type="unfinished"/> 245 <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Startar Spelet? &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
246 </message> 246 </message>
247 <message> 247 <message>
248 <location filename="../../src/yuzu/compatdb.ui" line="100"/> 248 <location filename="../../src/yuzu/compatdb.ui" line="100"/>
249 <source>Yes The game starts to output video or audio</source> 249 <source>Yes The game starts to output video or audio</source>
250 <translation type="unfinished"/> 250 <translation>Ja Spelet öppnar till utmatning av video eller audio</translation>
251 </message> 251 </message>
252 <message> 252 <message>
253 <location filename="../../src/yuzu/compatdb.ui" line="107"/> 253 <location filename="../../src/yuzu/compatdb.ui" line="107"/>
254 <source>No The game doesn&apos;t get past the &quot;Launching...&quot; screen</source> 254 <source>No The game doesn&apos;t get past the &quot;Launching...&quot; screen</source>
255 <translation type="unfinished"/> 255 <translation>Nej Spelet öppnar ej förbi &quot;Startar...&quot; skärmen</translation>
256 </message> 256 </message>
257 <message> 257 <message>
258 <location filename="../../src/yuzu/compatdb.ui" line="124"/> 258 <location filename="../../src/yuzu/compatdb.ui" line="124"/>
259 <source>Yes The game gets past the intro/menu and into gameplay</source> 259 <source>Yes The game gets past the intro/menu and into gameplay</source>
260 <translation type="unfinished"/> 260 <translation>Ja Spelet öppnar förbi introt/menyn och in i själva spelandet</translation>
261 </message> 261 </message>
262 <message> 262 <message>
263 <location filename="../../src/yuzu/compatdb.ui" line="131"/> 263 <location filename="../../src/yuzu/compatdb.ui" line="131"/>
@@ -1031,7 +1031,7 @@ avgjord kod.&lt;/div&gt;
1031 <message> 1031 <message>
1032 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="325"/> 1032 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="325"/>
1033 <source>Disable Web Applet</source> 1033 <source>Disable Web Applet</source>
1034 <translation type="unfinished"/> 1034 <translation>Avaktivera Webbappletten</translation>
1035 </message> 1035 </message>
1036 <message> 1036 <message>
1037 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="332"/> 1037 <location filename="../../src/yuzu/configuration/configure_debug.ui" line="332"/>
@@ -1360,8 +1360,8 @@ avgjord kod.&lt;/div&gt;
1360 </message> 1360 </message>
1361 <message> 1361 <message>
1362 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1362 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1363 <source>Extended memory layout (6GB DRAM)</source> 1363 <source>Extended memory layout (8GB DRAM)</source>
1364 <translation>Utökad minnesöversikt (6GB DRAM)</translation> 1364 <translation type="unfinished"/>
1365 </message> 1365 </message>
1366 <message> 1366 <message>
1367 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1367 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
@@ -3320,13 +3320,13 @@ UUID: %2</source>
3320 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="84"/> 3320 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="84"/>
3321 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="123"/> 3321 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="123"/>
3322 <source>Pull</source> 3322 <source>Pull</source>
3323 <translation type="unfinished"/> 3323 <translation>Dra</translation>
3324 </message> 3324 </message>
3325 <message> 3325 <message>
3326 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="133"/> 3326 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="133"/>
3327 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="172"/> 3327 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="172"/>
3328 <source>Push</source> 3328 <source>Push</source>
3329 <translation type="unfinished"/> 3329 <translation>Knuff</translation>
3330 </message> 3330 </message>
3331 <message> 3331 <message>
3332 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="206"/> 3332 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="206"/>
@@ -3347,7 +3347,7 @@ UUID: %2</source>
3347 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="300"/> 3347 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="300"/>
3348 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="314"/> 3348 <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="314"/>
3349 <source>Enable</source> 3349 <source>Enable</source>
3350 <translation type="unfinished"/> 3350 <translation>Aktivera</translation>
3351 </message> 3351 </message>
3352 <message> 3352 <message>
3353 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="307"/> 3353 <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="307"/>
@@ -4493,17 +4493,17 @@ Dra punkter för att ändra position, eller dubbelklicka tabellceller för att r
4493 <message> 4493 <message>
4494 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="97"/> 4494 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="97"/>
4495 <source>Nickname</source> 4495 <source>Nickname</source>
4496 <translation type="unfinished"/> 4496 <translation>Smeknamn</translation>
4497 </message> 4497 </message>
4498 <message> 4498 <message>
4499 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="111"/> 4499 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="111"/>
4500 <source>Password</source> 4500 <source>Password</source>
4501 <translation type="unfinished"/> 4501 <translation>Lösenord</translation>
4502 </message> 4502 </message>
4503 <message> 4503 <message>
4504 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="153"/> 4504 <location filename="../../src/yuzu/multiplayer/direct_connect.ui" line="153"/>
4505 <source>Connect</source> 4505 <source>Connect</source>
4506 <translation type="unfinished"/> 4506 <translation>Anslut</translation>
4507 </message> 4507 </message>
4508</context> 4508</context>
4509<context> 4509<context>
@@ -4511,12 +4511,12 @@ Dra punkter för att ändra position, eller dubbelklicka tabellceller för att r
4511 <message> 4511 <message>
4512 <location filename="../../src/yuzu/multiplayer/direct_connect.cpp" line="120"/> 4512 <location filename="../../src/yuzu/multiplayer/direct_connect.cpp" line="120"/>
4513 <source>Connecting</source> 4513 <source>Connecting</source>
4514 <translation type="unfinished"/> 4514 <translation>Ansluter</translation>
4515 </message> 4515 </message>
4516 <message> 4516 <message>
4517 <location filename="../../src/yuzu/multiplayer/direct_connect.cpp" line="125"/> 4517 <location filename="../../src/yuzu/multiplayer/direct_connect.cpp" line="125"/>
4518 <source>Connect</source> 4518 <source>Connect</source>
4519 <translation type="unfinished"/> 4519 <translation>Anslut</translation>
4520 </message> 4520 </message>
4521</context> 4521</context>
4522<context> 4522<context>
@@ -4534,7 +4534,7 @@ Dra punkter för att ändra position, eller dubbelklicka tabellceller för att r
4534 <message> 4534 <message>
4535 <location filename="../../src/yuzu/main.cpp" line="432"/> 4535 <location filename="../../src/yuzu/main.cpp" line="432"/>
4536 <source>Broken Vulkan Installation Detected</source> 4536 <source>Broken Vulkan Installation Detected</source>
4537 <translation type="unfinished"/> 4537 <translation>Felaktig Vulkaninstallation Upptäckt</translation>
4538 </message> 4538 </message>
4539 <message> 4539 <message>
4540 <location filename="../../src/yuzu/main.cpp" line="433"/> 4540 <location filename="../../src/yuzu/main.cpp" line="433"/>
@@ -4550,7 +4550,7 @@ Dra punkter för att ändra position, eller dubbelklicka tabellceller för att r
4550 <location filename="../../src/yuzu/main.cpp" line="874"/> 4550 <location filename="../../src/yuzu/main.cpp" line="874"/>
4551 <location filename="../../src/yuzu/main.cpp" line="877"/> 4551 <location filename="../../src/yuzu/main.cpp" line="877"/>
4552 <source>Disable Web Applet</source> 4552 <source>Disable Web Applet</source>
4553 <translation type="unfinished"/> 4553 <translation>Avaktivera Webbappletten</translation>
4554 </message> 4554 </message>
4555 <message> 4555 <message>
4556 <location filename="../../src/yuzu/main.cpp" line="878"/> 4556 <location filename="../../src/yuzu/main.cpp" line="878"/>
@@ -4591,7 +4591,7 @@ Dra punkter för att ändra position, eller dubbelklicka tabellceller för att r
4591 <message> 4591 <message>
4592 <location filename="../../src/yuzu/main.cpp" line="1230"/> 4592 <location filename="../../src/yuzu/main.cpp" line="1230"/>
4593 <source>Emulated mouse is enabled</source> 4593 <source>Emulated mouse is enabled</source>
4594 <translation type="unfinished"/> 4594 <translation>Emulerad datormus är aktiverad</translation>
4595 </message> 4595 </message>
4596 <message> 4596 <message>
4597 <location filename="../../src/yuzu/main.cpp" line="1231"/> 4597 <location filename="../../src/yuzu/main.cpp" line="1231"/>
@@ -5171,7 +5171,7 @@ Please, only use this feature to install updates and DLC.</source>
5171 <location filename="../../src/yuzu/main.cpp" line="3182"/> 5171 <location filename="../../src/yuzu/main.cpp" line="3182"/>
5172 <location filename="../../src/yuzu/main.cpp" line="3201"/> 5172 <location filename="../../src/yuzu/main.cpp" line="3201"/>
5173 <source>Hardware requirements not met</source> 5173 <source>Hardware requirements not met</source>
5174 <translation type="unfinished"/> 5174 <translation> Hårdvarukraven uppfylls ej</translation>
5175 </message> 5175 </message>
5176 <message> 5176 <message>
5177 <location filename="../../src/yuzu/main.cpp" line="3183"/> 5177 <location filename="../../src/yuzu/main.cpp" line="3183"/>
@@ -5202,17 +5202,17 @@ Please, only use this feature to install updates and DLC.</source>
5202 <message> 5202 <message>
5203 <location filename="../../src/yuzu/main.cpp" line="3514"/> 5203 <location filename="../../src/yuzu/main.cpp" line="3514"/>
5204 <source>TAS Recording</source> 5204 <source>TAS Recording</source>
5205 <translation type="unfinished"/> 5205 <translation>TAS Inspelning</translation>
5206 </message> 5206 </message>
5207 <message> 5207 <message>
5208 <location filename="../../src/yuzu/main.cpp" line="3515"/> 5208 <location filename="../../src/yuzu/main.cpp" line="3515"/>
5209 <source>Overwrite file of player 1?</source> 5209 <source>Overwrite file of player 1?</source>
5210 <translation type="unfinished"/> 5210 <translation>Överskriv spelare 1:s fil?</translation>
5211 </message> 5211 </message>
5212 <message> 5212 <message>
5213 <location filename="../../src/yuzu/main.cpp" line="3541"/> 5213 <location filename="../../src/yuzu/main.cpp" line="3541"/>
5214 <source>Invalid config detected</source> 5214 <source>Invalid config detected</source>
5215 <translation type="unfinished"/> 5215 <translation>Ogiltig konfiguration upptäckt</translation>
5216 </message> 5216 </message>
5217 <message> 5217 <message>
5218 <location filename="../../src/yuzu/main.cpp" line="3542"/> 5218 <location filename="../../src/yuzu/main.cpp" line="3542"/>
@@ -5223,13 +5223,13 @@ Please, only use this feature to install updates and DLC.</source>
5223 <location filename="../../src/yuzu/main.cpp" line="3712"/> 5223 <location filename="../../src/yuzu/main.cpp" line="3712"/>
5224 <location filename="../../src/yuzu/main.cpp" line="3740"/> 5224 <location filename="../../src/yuzu/main.cpp" line="3740"/>
5225 <source>Amiibo</source> 5225 <source>Amiibo</source>
5226 <translation type="unfinished"/> 5226 <translation>Amiibo</translation>
5227 </message> 5227 </message>
5228 <message> 5228 <message>
5229 <location filename="../../src/yuzu/main.cpp" line="3712"/> 5229 <location filename="../../src/yuzu/main.cpp" line="3712"/>
5230 <location filename="../../src/yuzu/main.cpp" line="3740"/> 5230 <location filename="../../src/yuzu/main.cpp" line="3740"/>
5231 <source>The current amiibo has been removed</source> 5231 <source>The current amiibo has been removed</source>
5232 <translation type="unfinished"/> 5232 <translation>Den aktuella amiibon har avlägsnats</translation>
5233 </message> 5233 </message>
5234 <message> 5234 <message>
5235 <location filename="../../src/yuzu/main.cpp" line="3717"/> 5235 <location filename="../../src/yuzu/main.cpp" line="3717"/>
@@ -5240,7 +5240,7 @@ Please, only use this feature to install updates and DLC.</source>
5240 <location filename="../../src/yuzu/main.cpp" line="3717"/> 5240 <location filename="../../src/yuzu/main.cpp" line="3717"/>
5241 <location filename="../../src/yuzu/main.cpp" line="3752"/> 5241 <location filename="../../src/yuzu/main.cpp" line="3752"/>
5242 <source>The current game is not looking for amiibos</source> 5242 <source>The current game is not looking for amiibos</source>
5243 <translation type="unfinished"/> 5243 <translation>Det aktuella spelet letar ej efter amiibos</translation>
5244 </message> 5244 </message>
5245 <message> 5245 <message>
5246 <location filename="../../src/yuzu/main.cpp" line="3723"/> 5246 <location filename="../../src/yuzu/main.cpp" line="3723"/>
@@ -5260,17 +5260,17 @@ Please, only use this feature to install updates and DLC.</source>
5260 <message> 5260 <message>
5261 <location filename="../../src/yuzu/main.cpp" line="3746"/> 5261 <location filename="../../src/yuzu/main.cpp" line="3746"/>
5262 <source>The selected file is not a valid amiibo</source> 5262 <source>The selected file is not a valid amiibo</source>
5263 <translation type="unfinished"/> 5263 <translation>Den valda filen är inte en giltig amiibo</translation>
5264 </message> 5264 </message>
5265 <message> 5265 <message>
5266 <location filename="../../src/yuzu/main.cpp" line="3749"/> 5266 <location filename="../../src/yuzu/main.cpp" line="3749"/>
5267 <source>The selected file is already on use</source> 5267 <source>The selected file is already on use</source>
5268 <translation type="unfinished"/> 5268 <translation>Den valda filen är redan använd</translation>
5269 </message> 5269 </message>
5270 <message> 5270 <message>
5271 <location filename="../../src/yuzu/main.cpp" line="3755"/> 5271 <location filename="../../src/yuzu/main.cpp" line="3755"/>
5272 <source>An unknown error occurred</source> 5272 <source>An unknown error occurred</source>
5273 <translation type="unfinished"/> 5273 <translation>Ett okänt fel har inträffat</translation>
5274 </message> 5274 </message>
5275 <message> 5275 <message>
5276 <location filename="../../src/yuzu/main.cpp" line="3807"/> 5276 <location filename="../../src/yuzu/main.cpp" line="3807"/>
@@ -5285,22 +5285,22 @@ Please, only use this feature to install updates and DLC.</source>
5285 <message> 5285 <message>
5286 <location filename="../../src/yuzu/main.cpp" line="3891"/> 5286 <location filename="../../src/yuzu/main.cpp" line="3891"/>
5287 <source>TAS state: Running %1/%2</source> 5287 <source>TAS state: Running %1/%2</source>
5288 <translation type="unfinished"/> 5288 <translation>TAStillstånd: pågående %1/%2</translation>
5289 </message> 5289 </message>
5290 <message> 5290 <message>
5291 <location filename="../../src/yuzu/main.cpp" line="3895"/> 5291 <location filename="../../src/yuzu/main.cpp" line="3895"/>
5292 <source>TAS state: Recording %1</source> 5292 <source>TAS state: Recording %1</source>
5293 <translation type="unfinished"/> 5293 <translation>TAStillstånd: spelar in %1</translation>
5294 </message> 5294 </message>
5295 <message> 5295 <message>
5296 <location filename="../../src/yuzu/main.cpp" line="3897"/> 5296 <location filename="../../src/yuzu/main.cpp" line="3897"/>
5297 <source>TAS state: Idle %1/%2</source> 5297 <source>TAS state: Idle %1/%2</source>
5298 <translation type="unfinished"/> 5298 <translation>TAStillstånd: inaktiv %1/%2</translation>
5299 </message> 5299 </message>
5300 <message> 5300 <message>
5301 <location filename="../../src/yuzu/main.cpp" line="3901"/> 5301 <location filename="../../src/yuzu/main.cpp" line="3901"/>
5302 <source>TAS State: Invalid</source> 5302 <source>TAS State: Invalid</source>
5303 <translation type="unfinished"/> 5303 <translation>TAStillstånd: ogiltigt</translation>
5304 </message> 5304 </message>
5305 <message> 5305 <message>
5306 <location filename="../../src/yuzu/main.cpp" line="3915"/> 5306 <location filename="../../src/yuzu/main.cpp" line="3915"/>
@@ -5902,7 +5902,7 @@ Vill du strunta i detta och avsluta ändå?</translation>
5902 <message> 5902 <message>
5903 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="118"/> 5903 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="118"/>
5904 <source>Password</source> 5904 <source>Password</source>
5905 <translation type="unfinished"/> 5905 <translation>Lösenord</translation>
5906 </message> 5906 </message>
5907 <message> 5907 <message>
5908 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="125"/> 5908 <location filename="../../src/yuzu/multiplayer/host_room.ui" line="125"/>
@@ -6169,7 +6169,7 @@ Debug Message: </source>
6169 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="32"/> 6169 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="32"/>
6170 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="39"/> 6170 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="39"/>
6171 <source>Nickname</source> 6171 <source>Nickname</source>
6172 <translation type="unfinished"/> 6172 <translation>Smeknamn</translation>
6173 </message> 6173 </message>
6174 <message> 6174 <message>
6175 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="59"/> 6175 <location filename="../../src/yuzu/multiplayer/lobby.ui" line="59"/>
diff --git a/dist/languages/tr_TR.ts b/dist/languages/tr_TR.ts
index 98a7f479f..47a0ca9c8 100644
--- a/dist/languages/tr_TR.ts
+++ b/dist/languages/tr_TR.ts
@@ -1368,8 +1368,8 @@ Bu seçenek belleğe yazma/okuma işlemlerindeki güvenlik kontrolünü kaldıra
1368 </message> 1368 </message>
1369 <message> 1369 <message>
1370 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1370 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1371 <source>Extended memory layout (6GB DRAM)</source> 1371 <source>Extended memory layout (8GB DRAM)</source>
1372 <translation>Artırılmış hafıza düzeni (6GB DRAM)</translation> 1372 <translation type="unfinished"/>
1373 </message> 1373 </message>
1374 <message> 1374 <message>
1375 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1375 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/uk.ts b/dist/languages/uk.ts
index 02bdf2233..3c4e788f6 100644
--- a/dist/languages/uk.ts
+++ b/dist/languages/uk.ts
@@ -1346,8 +1346,8 @@ This would ban both their forum username and their IP address.</source>
1346 </message> 1346 </message>
1347 <message> 1347 <message>
1348 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1348 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1349 <source>Extended memory layout (6GB DRAM)</source> 1349 <source>Extended memory layout (8GB DRAM)</source>
1350 <translation>Розширене компонування пам&apos;яті (6 ГБ DRAM)</translation> 1350 <translation type="unfinished"/>
1351 </message> 1351 </message>
1352 <message> 1352 <message>
1353 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1353 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/zh_CN.ts b/dist/languages/zh_CN.ts
index 9da8b0b32..2de1e921e 100644
--- a/dist/languages/zh_CN.ts
+++ b/dist/languages/zh_CN.ts
@@ -1380,8 +1380,8 @@ This would ban both their forum username and their IP address.</source>
1380 </message> 1380 </message>
1381 <message> 1381 <message>
1382 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1382 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1383 <source>Extended memory layout (6GB DRAM)</source> 1383 <source>Extended memory layout (8GB DRAM)</source>
1384 <translation>扩展的内存布局 (6GB DRAM)</translation> 1384 <translation>扩展的内存布局 (8GB DRAM)</translation>
1385 </message> 1385 </message>
1386 <message> 1386 <message>
1387 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1387 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/dist/languages/zh_TW.ts b/dist/languages/zh_TW.ts
index 472b00114..f6cd1934d 100644
--- a/dist/languages/zh_TW.ts
+++ b/dist/languages/zh_TW.ts
@@ -1382,8 +1382,8 @@ This would ban both their forum username and their IP address.</source>
1382 </message> 1382 </message>
1383 <message> 1383 <message>
1384 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/> 1384 <location filename="../../src/yuzu/configuration/configure_general.ui" line="67"/>
1385 <source>Extended memory layout (6GB DRAM)</source> 1385 <source>Extended memory layout (8GB DRAM)</source>
1386 <translation>扩展的内存布局 (6GB DRAM)</translation> 1386 <translation>扩展的内存布局 (8GB DRAM)</translation>
1387 </message> 1387 </message>
1388 <message> 1388 <message>
1389 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/> 1389 <location filename="../../src/yuzu/configuration/configure_general.ui" line="74"/>
diff --git a/src/common/intrusive_list.h b/src/common/intrusive_list.h
new file mode 100644
index 000000000..d330dc1c2
--- /dev/null
+++ b/src/common/intrusive_list.h
@@ -0,0 +1,631 @@
1// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include "common/common_funcs.h"
7#include "common/parent_of_member.h"
8
9namespace Common {
10
11// Forward declare implementation class for Node.
12namespace impl {
13
14class IntrusiveListImpl;
15
16}
17
18class IntrusiveListNode {
19 YUZU_NON_COPYABLE(IntrusiveListNode);
20
21private:
22 friend class impl::IntrusiveListImpl;
23
24 IntrusiveListNode* m_prev;
25 IntrusiveListNode* m_next;
26
27public:
28 constexpr IntrusiveListNode() : m_prev(this), m_next(this) {}
29
30 constexpr bool IsLinked() const {
31 return m_next != this;
32 }
33
34private:
35 constexpr void LinkPrev(IntrusiveListNode* node) {
36 // We can't link an already linked node.
37 ASSERT(!node->IsLinked());
38 this->SplicePrev(node, node);
39 }
40
41 constexpr void SplicePrev(IntrusiveListNode* first, IntrusiveListNode* last) {
42 // Splice a range into the list.
43 auto last_prev = last->m_prev;
44 first->m_prev = m_prev;
45 last_prev->m_next = this;
46 m_prev->m_next = first;
47 m_prev = last_prev;
48 }
49
50 constexpr void LinkNext(IntrusiveListNode* node) {
51 // We can't link an already linked node.
52 ASSERT(!node->IsLinked());
53 return this->SpliceNext(node, node);
54 }
55
56 constexpr void SpliceNext(IntrusiveListNode* first, IntrusiveListNode* last) {
57 // Splice a range into the list.
58 auto last_prev = last->m_prev;
59 first->m_prev = this;
60 last_prev->m_next = m_next;
61 m_next->m_prev = last_prev;
62 m_next = first;
63 }
64
65 constexpr void Unlink() {
66 this->Unlink(m_next);
67 }
68
69 constexpr void Unlink(IntrusiveListNode* last) {
70 // Unlink a node from a next node.
71 auto last_prev = last->m_prev;
72 m_prev->m_next = last;
73 last->m_prev = m_prev;
74 last_prev->m_next = this;
75 m_prev = last_prev;
76 }
77
78 constexpr IntrusiveListNode* GetPrev() {
79 return m_prev;
80 }
81
82 constexpr const IntrusiveListNode* GetPrev() const {
83 return m_prev;
84 }
85
86 constexpr IntrusiveListNode* GetNext() {
87 return m_next;
88 }
89
90 constexpr const IntrusiveListNode* GetNext() const {
91 return m_next;
92 }
93};
94// DEPRECATED: static_assert(std::is_literal_type<IntrusiveListNode>::value);
95
96namespace impl {
97
98class IntrusiveListImpl {
99 YUZU_NON_COPYABLE(IntrusiveListImpl);
100
101private:
102 IntrusiveListNode m_root_node;
103
104public:
105 template <bool Const>
106 class Iterator;
107
108 using value_type = IntrusiveListNode;
109 using size_type = size_t;
110 using difference_type = ptrdiff_t;
111 using pointer = value_type*;
112 using const_pointer = const value_type*;
113 using reference = value_type&;
114 using const_reference = const value_type&;
115 using iterator = Iterator<false>;
116 using const_iterator = Iterator<true>;
117 using reverse_iterator = std::reverse_iterator<iterator>;
118 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
119
120 template <bool Const>
121 class Iterator {
122 public:
123 using iterator_category = std::bidirectional_iterator_tag;
124 using value_type = typename IntrusiveListImpl::value_type;
125 using difference_type = typename IntrusiveListImpl::difference_type;
126 using pointer =
127 std::conditional_t<Const, IntrusiveListImpl::const_pointer, IntrusiveListImpl::pointer>;
128 using reference = std::conditional_t<Const, IntrusiveListImpl::const_reference,
129 IntrusiveListImpl::reference>;
130
131 private:
132 pointer m_node;
133
134 public:
135 constexpr explicit Iterator(pointer n) : m_node(n) {}
136
137 constexpr bool operator==(const Iterator& rhs) const {
138 return m_node == rhs.m_node;
139 }
140
141 constexpr pointer operator->() const {
142 return m_node;
143 }
144
145 constexpr reference operator*() const {
146 return *m_node;
147 }
148
149 constexpr Iterator& operator++() {
150 m_node = m_node->m_next;
151 return *this;
152 }
153
154 constexpr Iterator& operator--() {
155 m_node = m_node->m_prev;
156 return *this;
157 }
158
159 constexpr Iterator operator++(int) {
160 const Iterator it{*this};
161 ++(*this);
162 return it;
163 }
164
165 constexpr Iterator operator--(int) {
166 const Iterator it{*this};
167 --(*this);
168 return it;
169 }
170
171 constexpr operator Iterator<true>() const {
172 return Iterator<true>(m_node);
173 }
174
175 constexpr Iterator<false> GetNonConstIterator() const {
176 return Iterator<false>(const_cast<IntrusiveListImpl::pointer>(m_node));
177 }
178 };
179
180public:
181 constexpr IntrusiveListImpl() : m_root_node() {}
182
183 // Iterator accessors.
184 constexpr iterator begin() {
185 return iterator(m_root_node.GetNext());
186 }
187
188 constexpr const_iterator begin() const {
189 return const_iterator(m_root_node.GetNext());
190 }
191
192 constexpr iterator end() {
193 return iterator(std::addressof(m_root_node));
194 }
195
196 constexpr const_iterator end() const {
197 return const_iterator(std::addressof(m_root_node));
198 }
199
200 constexpr iterator iterator_to(reference v) {
201 // Only allow iterator_to for values in lists.
202 ASSERT(v.IsLinked());
203 return iterator(std::addressof(v));
204 }
205
206 constexpr const_iterator iterator_to(const_reference v) const {
207 // Only allow iterator_to for values in lists.
208 ASSERT(v.IsLinked());
209 return const_iterator(std::addressof(v));
210 }
211
212 // Content management.
213 constexpr bool empty() const {
214 return !m_root_node.IsLinked();
215 }
216
217 constexpr size_type size() const {
218 return static_cast<size_type>(std::distance(this->begin(), this->end()));
219 }
220
221 constexpr reference back() {
222 return *m_root_node.GetPrev();
223 }
224
225 constexpr const_reference back() const {
226 return *m_root_node.GetPrev();
227 }
228
229 constexpr reference front() {
230 return *m_root_node.GetNext();
231 }
232
233 constexpr const_reference front() const {
234 return *m_root_node.GetNext();
235 }
236
237 constexpr void push_back(reference node) {
238 m_root_node.LinkPrev(std::addressof(node));
239 }
240
241 constexpr void push_front(reference node) {
242 m_root_node.LinkNext(std::addressof(node));
243 }
244
245 constexpr void pop_back() {
246 m_root_node.GetPrev()->Unlink();
247 }
248
249 constexpr void pop_front() {
250 m_root_node.GetNext()->Unlink();
251 }
252
253 constexpr iterator insert(const_iterator pos, reference node) {
254 pos.GetNonConstIterator()->LinkPrev(std::addressof(node));
255 return iterator(std::addressof(node));
256 }
257
258 constexpr void splice(const_iterator pos, IntrusiveListImpl& o) {
259 splice_impl(pos, o.begin(), o.end());
260 }
261
262 constexpr void splice(const_iterator pos, IntrusiveListImpl& o, const_iterator first) {
263 const_iterator last(first);
264 std::advance(last, 1);
265 splice_impl(pos, first, last);
266 }
267
268 constexpr void splice(const_iterator pos, IntrusiveListImpl& o, const_iterator first,
269 const_iterator last) {
270 splice_impl(pos, first, last);
271 }
272
273 constexpr iterator erase(const_iterator pos) {
274 if (pos == this->end()) {
275 return this->end();
276 }
277 iterator it(pos.GetNonConstIterator());
278 (it++)->Unlink();
279 return it;
280 }
281
282 constexpr void clear() {
283 while (!this->empty()) {
284 this->pop_front();
285 }
286 }
287
288private:
289 constexpr void splice_impl(const_iterator _pos, const_iterator _first, const_iterator _last) {
290 if (_first == _last) {
291 return;
292 }
293 iterator pos(_pos.GetNonConstIterator());
294 iterator first(_first.GetNonConstIterator());
295 iterator last(_last.GetNonConstIterator());
296 first->Unlink(std::addressof(*last));
297 pos->SplicePrev(std::addressof(*first), std::addressof(*first));
298 }
299};
300
301} // namespace impl
302
303template <class T, class Traits>
304class IntrusiveList {
305 YUZU_NON_COPYABLE(IntrusiveList);
306
307private:
308 impl::IntrusiveListImpl m_impl;
309
310public:
311 template <bool Const>
312 class Iterator;
313
314 using value_type = T;
315 using size_type = size_t;
316 using difference_type = ptrdiff_t;
317 using pointer = value_type*;
318 using const_pointer = const value_type*;
319 using reference = value_type&;
320 using const_reference = const value_type&;
321 using iterator = Iterator<false>;
322 using const_iterator = Iterator<true>;
323 using reverse_iterator = std::reverse_iterator<iterator>;
324 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
325
326 template <bool Const>
327 class Iterator {
328 public:
329 friend class Common::IntrusiveList<T, Traits>;
330
331 using ImplIterator =
332 std::conditional_t<Const, Common::impl::IntrusiveListImpl::const_iterator,
333 Common::impl::IntrusiveListImpl::iterator>;
334
335 using iterator_category = std::bidirectional_iterator_tag;
336 using value_type = typename IntrusiveList::value_type;
337 using difference_type = typename IntrusiveList::difference_type;
338 using pointer =
339 std::conditional_t<Const, IntrusiveList::const_pointer, IntrusiveList::pointer>;
340 using reference =
341 std::conditional_t<Const, IntrusiveList::const_reference, IntrusiveList::reference>;
342
343 private:
344 ImplIterator m_iterator;
345
346 private:
347 constexpr explicit Iterator(ImplIterator it) : m_iterator(it) {}
348
349 constexpr ImplIterator GetImplIterator() const {
350 return m_iterator;
351 }
352
353 public:
354 constexpr bool operator==(const Iterator& rhs) const {
355 return m_iterator == rhs.m_iterator;
356 }
357
358 constexpr pointer operator->() const {
359 return std::addressof(Traits::GetParent(*m_iterator));
360 }
361
362 constexpr reference operator*() const {
363 return Traits::GetParent(*m_iterator);
364 }
365
366 constexpr Iterator& operator++() {
367 ++m_iterator;
368 return *this;
369 }
370
371 constexpr Iterator& operator--() {
372 --m_iterator;
373 return *this;
374 }
375
376 constexpr Iterator operator++(int) {
377 const Iterator it{*this};
378 ++m_iterator;
379 return it;
380 }
381
382 constexpr Iterator operator--(int) {
383 const Iterator it{*this};
384 --m_iterator;
385 return it;
386 }
387
388 constexpr operator Iterator<true>() const {
389 return Iterator<true>(m_iterator);
390 }
391 };
392
393private:
394 static constexpr IntrusiveListNode& GetNode(reference ref) {
395 return Traits::GetNode(ref);
396 }
397
398 static constexpr IntrusiveListNode const& GetNode(const_reference ref) {
399 return Traits::GetNode(ref);
400 }
401
402 static constexpr reference GetParent(IntrusiveListNode& node) {
403 return Traits::GetParent(node);
404 }
405
406 static constexpr const_reference GetParent(IntrusiveListNode const& node) {
407 return Traits::GetParent(node);
408 }
409
410public:
411 constexpr IntrusiveList() : m_impl() {}
412
413 // Iterator accessors.
414 constexpr iterator begin() {
415 return iterator(m_impl.begin());
416 }
417
418 constexpr const_iterator begin() const {
419 return const_iterator(m_impl.begin());
420 }
421
422 constexpr iterator end() {
423 return iterator(m_impl.end());
424 }
425
426 constexpr const_iterator end() const {
427 return const_iterator(m_impl.end());
428 }
429
430 constexpr const_iterator cbegin() const {
431 return this->begin();
432 }
433
434 constexpr const_iterator cend() const {
435 return this->end();
436 }
437
438 constexpr reverse_iterator rbegin() {
439 return reverse_iterator(this->end());
440 }
441
442 constexpr const_reverse_iterator rbegin() const {
443 return const_reverse_iterator(this->end());
444 }
445
446 constexpr reverse_iterator rend() {
447 return reverse_iterator(this->begin());
448 }
449
450 constexpr const_reverse_iterator rend() const {
451 return const_reverse_iterator(this->begin());
452 }
453
454 constexpr const_reverse_iterator crbegin() const {
455 return this->rbegin();
456 }
457
458 constexpr const_reverse_iterator crend() const {
459 return this->rend();
460 }
461
462 constexpr iterator iterator_to(reference v) {
463 return iterator(m_impl.iterator_to(GetNode(v)));
464 }
465
466 constexpr const_iterator iterator_to(const_reference v) const {
467 return const_iterator(m_impl.iterator_to(GetNode(v)));
468 }
469
470 // Content management.
471 constexpr bool empty() const {
472 return m_impl.empty();
473 }
474
475 constexpr size_type size() const {
476 return m_impl.size();
477 }
478
479 constexpr reference back() {
480 return GetParent(m_impl.back());
481 }
482
483 constexpr const_reference back() const {
484 return GetParent(m_impl.back());
485 }
486
487 constexpr reference front() {
488 return GetParent(m_impl.front());
489 }
490
491 constexpr const_reference front() const {
492 return GetParent(m_impl.front());
493 }
494
495 constexpr void push_back(reference ref) {
496 m_impl.push_back(GetNode(ref));
497 }
498
499 constexpr void push_front(reference ref) {
500 m_impl.push_front(GetNode(ref));
501 }
502
503 constexpr void pop_back() {
504 m_impl.pop_back();
505 }
506
507 constexpr void pop_front() {
508 m_impl.pop_front();
509 }
510
511 constexpr iterator insert(const_iterator pos, reference ref) {
512 return iterator(m_impl.insert(pos.GetImplIterator(), GetNode(ref)));
513 }
514
515 constexpr void splice(const_iterator pos, IntrusiveList& o) {
516 m_impl.splice(pos.GetImplIterator(), o.m_impl);
517 }
518
519 constexpr void splice(const_iterator pos, IntrusiveList& o, const_iterator first) {
520 m_impl.splice(pos.GetImplIterator(), o.m_impl, first.GetImplIterator());
521 }
522
523 constexpr void splice(const_iterator pos, IntrusiveList& o, const_iterator first,
524 const_iterator last) {
525 m_impl.splice(pos.GetImplIterator(), o.m_impl, first.GetImplIterator(),
526 last.GetImplIterator());
527 }
528
529 constexpr iterator erase(const_iterator pos) {
530 return iterator(m_impl.erase(pos.GetImplIterator()));
531 }
532
533 constexpr void clear() {
534 m_impl.clear();
535 }
536};
537
538template <auto T, class Derived = Common::impl::GetParentType<T>>
539class IntrusiveListMemberTraits;
540
541template <class Parent, IntrusiveListNode Parent::*Member, class Derived>
542class IntrusiveListMemberTraits<Member, Derived> {
543public:
544 using ListType = IntrusiveList<Derived, IntrusiveListMemberTraits>;
545
546private:
547 friend class IntrusiveList<Derived, IntrusiveListMemberTraits>;
548
549 static constexpr IntrusiveListNode& GetNode(Derived& parent) {
550 return parent.*Member;
551 }
552
553 static constexpr IntrusiveListNode const& GetNode(Derived const& parent) {
554 return parent.*Member;
555 }
556
557 static Derived& GetParent(IntrusiveListNode& node) {
558 return Common::GetParentReference<Member, Derived>(std::addressof(node));
559 }
560
561 static Derived const& GetParent(IntrusiveListNode const& node) {
562 return Common::GetParentReference<Member, Derived>(std::addressof(node));
563 }
564};
565
566template <auto T, class Derived = Common::impl::GetParentType<T>>
567class IntrusiveListMemberTraitsByNonConstexprOffsetOf;
568
569template <class Parent, IntrusiveListNode Parent::*Member, class Derived>
570class IntrusiveListMemberTraitsByNonConstexprOffsetOf<Member, Derived> {
571public:
572 using ListType = IntrusiveList<Derived, IntrusiveListMemberTraitsByNonConstexprOffsetOf>;
573
574private:
575 friend class IntrusiveList<Derived, IntrusiveListMemberTraitsByNonConstexprOffsetOf>;
576
577 static constexpr IntrusiveListNode& GetNode(Derived& parent) {
578 return parent.*Member;
579 }
580
581 static constexpr IntrusiveListNode const& GetNode(Derived const& parent) {
582 return parent.*Member;
583 }
584
585 static Derived& GetParent(IntrusiveListNode& node) {
586 return *reinterpret_cast<Derived*>(reinterpret_cast<char*>(std::addressof(node)) -
587 GetOffset());
588 }
589
590 static Derived const& GetParent(IntrusiveListNode const& node) {
591 return *reinterpret_cast<const Derived*>(
592 reinterpret_cast<const char*>(std::addressof(node)) - GetOffset());
593 }
594
595 static uintptr_t GetOffset() {
596 return reinterpret_cast<uintptr_t>(std::addressof(reinterpret_cast<Derived*>(0)->*Member));
597 }
598};
599
600template <class Derived>
601class IntrusiveListBaseNode : public IntrusiveListNode {};
602
603template <class Derived>
604class IntrusiveListBaseTraits {
605public:
606 using ListType = IntrusiveList<Derived, IntrusiveListBaseTraits>;
607
608private:
609 friend class IntrusiveList<Derived, IntrusiveListBaseTraits>;
610
611 static constexpr IntrusiveListNode& GetNode(Derived& parent) {
612 return static_cast<IntrusiveListNode&>(
613 static_cast<IntrusiveListBaseNode<Derived>&>(parent));
614 }
615
616 static constexpr IntrusiveListNode const& GetNode(Derived const& parent) {
617 return static_cast<const IntrusiveListNode&>(
618 static_cast<const IntrusiveListBaseNode<Derived>&>(parent));
619 }
620
621 static constexpr Derived& GetParent(IntrusiveListNode& node) {
622 return static_cast<Derived&>(static_cast<IntrusiveListBaseNode<Derived>&>(node));
623 }
624
625 static constexpr Derived const& GetParent(IntrusiveListNode const& node) {
626 return static_cast<const Derived&>(
627 static_cast<const IntrusiveListBaseNode<Derived>&>(node));
628 }
629};
630
631} // namespace Common
diff --git a/src/core/hle/kernel/k_event_info.h b/src/core/hle/kernel/k_event_info.h
index 25b3ff594..eacfa5dc6 100644
--- a/src/core/hle/kernel/k_event_info.h
+++ b/src/core/hle/kernel/k_event_info.h
@@ -5,14 +5,15 @@
5 5
6#include <array> 6#include <array>
7 7
8#include <boost/intrusive/list.hpp> 8#include "common/intrusive_list.h"
9 9
10#include "core/hle/kernel/slab_helpers.h" 10#include "core/hle/kernel/slab_helpers.h"
11#include "core/hle/kernel/svc_types.h" 11#include "core/hle/kernel/svc_types.h"
12 12
13namespace Kernel { 13namespace Kernel {
14 14
15class KEventInfo : public KSlabAllocated<KEventInfo>, public boost::intrusive::list_base_hook<> { 15class KEventInfo : public KSlabAllocated<KEventInfo>,
16 public Common::IntrusiveListBaseNode<KEventInfo> {
16public: 17public:
17 struct InfoCreateThread { 18 struct InfoCreateThread {
18 u32 thread_id{}; 19 u32 thread_id{};
diff --git a/src/core/hle/kernel/k_object_name.h b/src/core/hle/kernel/k_object_name.h
index 2d97fc777..a8876fe37 100644
--- a/src/core/hle/kernel/k_object_name.h
+++ b/src/core/hle/kernel/k_object_name.h
@@ -5,7 +5,8 @@
5 5
6#include <array> 6#include <array>
7#include <memory> 7#include <memory>
8#include <boost/intrusive/list.hpp> 8
9#include "common/intrusive_list.h"
9 10
10#include "core/hle/kernel/k_light_lock.h" 11#include "core/hle/kernel/k_light_lock.h"
11#include "core/hle/kernel/slab_helpers.h" 12#include "core/hle/kernel/slab_helpers.h"
@@ -15,13 +16,14 @@ namespace Kernel {
15 16
16class KObjectNameGlobalData; 17class KObjectNameGlobalData;
17 18
18class KObjectName : public KSlabAllocated<KObjectName>, public boost::intrusive::list_base_hook<> { 19class KObjectName : public KSlabAllocated<KObjectName>,
20 public Common::IntrusiveListBaseNode<KObjectName> {
19public: 21public:
20 explicit KObjectName(KernelCore&) {} 22 explicit KObjectName(KernelCore&) {}
21 virtual ~KObjectName() = default; 23 virtual ~KObjectName() = default;
22 24
23 static constexpr size_t NameLengthMax = 12; 25 static constexpr size_t NameLengthMax = 12;
24 using List = boost::intrusive::list<KObjectName>; 26 using List = Common::IntrusiveListBaseTraits<KObjectName>::ListType;
25 27
26 static Result NewFromName(KernelCore& kernel, KAutoObject* obj, const char* name); 28 static Result NewFromName(KernelCore& kernel, KAutoObject* obj, const char* name);
27 static Result Delete(KernelCore& kernel, KAutoObject* obj, const char* name); 29 static Result Delete(KernelCore& kernel, KAutoObject* obj, const char* name);
diff --git a/src/core/hle/kernel/k_server_port.h b/src/core/hle/kernel/k_server_port.h
index 21c040e62..625280290 100644
--- a/src/core/hle/kernel/k_server_port.h
+++ b/src/core/hle/kernel/k_server_port.h
@@ -7,7 +7,7 @@
7#include <string> 7#include <string>
8#include <utility> 8#include <utility>
9 9
10#include <boost/intrusive/list.hpp> 10#include "common/intrusive_list.h"
11 11
12#include "core/hle/kernel/k_server_session.h" 12#include "core/hle/kernel/k_server_session.h"
13#include "core/hle/kernel/k_synchronization_object.h" 13#include "core/hle/kernel/k_synchronization_object.h"
@@ -42,7 +42,7 @@ public:
42 bool IsSignaled() const override; 42 bool IsSignaled() const override;
43 43
44private: 44private:
45 using SessionList = boost::intrusive::list<KServerSession>; 45 using SessionList = Common::IntrusiveListBaseTraits<KServerSession>::ListType;
46 46
47 void CleanupSessions(); 47 void CleanupSessions();
48 48
diff --git a/src/core/hle/kernel/k_server_session.h b/src/core/hle/kernel/k_server_session.h
index 5ee02f556..403891919 100644
--- a/src/core/hle/kernel/k_server_session.h
+++ b/src/core/hle/kernel/k_server_session.h
@@ -8,7 +8,7 @@
8#include <string> 8#include <string>
9#include <utility> 9#include <utility>
10 10
11#include <boost/intrusive/list.hpp> 11#include "common/intrusive_list.h"
12 12
13#include "core/hle/kernel/k_light_lock.h" 13#include "core/hle/kernel/k_light_lock.h"
14#include "core/hle/kernel/k_session_request.h" 14#include "core/hle/kernel/k_session_request.h"
@@ -27,7 +27,7 @@ class KSession;
27class KThread; 27class KThread;
28 28
29class KServerSession final : public KSynchronizationObject, 29class KServerSession final : public KSynchronizationObject,
30 public boost::intrusive::list_base_hook<> { 30 public Common::IntrusiveListBaseNode<KServerSession> {
31 KERNEL_AUTOOBJECT_TRAITS(KServerSession, KSynchronizationObject); 31 KERNEL_AUTOOBJECT_TRAITS(KServerSession, KSynchronizationObject);
32 32
33 friend class ServiceThread; 33 friend class ServiceThread;
@@ -67,7 +67,8 @@ private:
67 KSession* m_parent{}; 67 KSession* m_parent{};
68 68
69 /// List of threads which are pending a reply. 69 /// List of threads which are pending a reply.
70 boost::intrusive::list<KSessionRequest> m_request_list{}; 70 using RequestList = Common::IntrusiveListBaseTraits<KSessionRequest>::ListType;
71 RequestList m_request_list{};
71 KSessionRequest* m_current_request{}; 72 KSessionRequest* m_current_request{};
72 73
73 KLightLock m_lock; 74 KLightLock m_lock;
diff --git a/src/core/hle/kernel/k_session_request.h b/src/core/hle/kernel/k_session_request.h
index b5f04907b..283669e0a 100644
--- a/src/core/hle/kernel/k_session_request.h
+++ b/src/core/hle/kernel/k_session_request.h
@@ -5,6 +5,8 @@
5 5
6#include <array> 6#include <array>
7 7
8#include "common/intrusive_list.h"
9
8#include "core/hle/kernel/k_auto_object.h" 10#include "core/hle/kernel/k_auto_object.h"
9#include "core/hle/kernel/k_event.h" 11#include "core/hle/kernel/k_event.h"
10#include "core/hle/kernel/k_memory_block.h" 12#include "core/hle/kernel/k_memory_block.h"
@@ -16,7 +18,7 @@ namespace Kernel {
16 18
17class KSessionRequest final : public KSlabAllocated<KSessionRequest>, 19class KSessionRequest final : public KSlabAllocated<KSessionRequest>,
18 public KAutoObject, 20 public KAutoObject,
19 public boost::intrusive::list_base_hook<> { 21 public Common::IntrusiveListBaseNode<KSessionRequest> {
20 KERNEL_AUTOOBJECT_TRAITS(KSessionRequest, KAutoObject); 22 KERNEL_AUTOOBJECT_TRAITS(KSessionRequest, KAutoObject);
21 23
22public: 24public:
diff --git a/src/core/hle/kernel/k_shared_memory_info.h b/src/core/hle/kernel/k_shared_memory_info.h
index 75b73ba39..2d8ff20d6 100644
--- a/src/core/hle/kernel/k_shared_memory_info.h
+++ b/src/core/hle/kernel/k_shared_memory_info.h
@@ -3,7 +3,7 @@
3 3
4#pragma once 4#pragma once
5 5
6#include <boost/intrusive/list.hpp> 6#include "common/intrusive_list.h"
7 7
8#include "core/hle/kernel/slab_helpers.h" 8#include "core/hle/kernel/slab_helpers.h"
9 9
@@ -12,7 +12,7 @@ namespace Kernel {
12class KSharedMemory; 12class KSharedMemory;
13 13
14class KSharedMemoryInfo final : public KSlabAllocated<KSharedMemoryInfo>, 14class KSharedMemoryInfo final : public KSlabAllocated<KSharedMemoryInfo>,
15 public boost::intrusive::list_base_hook<> { 15 public Common::IntrusiveListBaseNode<KSharedMemoryInfo> {
16 16
17public: 17public:
18 explicit KSharedMemoryInfo(KernelCore&) {} 18 explicit KSharedMemoryInfo(KernelCore&) {}
diff --git a/src/core/hle/kernel/k_thread.h b/src/core/hle/kernel/k_thread.h
index 9c1a41128..f9814ac8f 100644
--- a/src/core/hle/kernel/k_thread.h
+++ b/src/core/hle/kernel/k_thread.h
@@ -12,7 +12,7 @@
12#include <utility> 12#include <utility>
13#include <vector> 13#include <vector>
14 14
15#include <boost/intrusive/list.hpp> 15#include "common/intrusive_list.h"
16 16
17#include "common/intrusive_red_black_tree.h" 17#include "common/intrusive_red_black_tree.h"
18#include "common/spin_lock.h" 18#include "common/spin_lock.h"
@@ -119,7 +119,7 @@ s32 GetCurrentCoreId(KernelCore& kernel);
119Core::Memory::Memory& GetCurrentMemory(KernelCore& kernel); 119Core::Memory::Memory& GetCurrentMemory(KernelCore& kernel);
120 120
121class KThread final : public KAutoObjectWithSlabHeapAndContainer<KThread, KWorkerTask>, 121class KThread final : public KAutoObjectWithSlabHeapAndContainer<KThread, KWorkerTask>,
122 public boost::intrusive::list_base_hook<>, 122 public Common::IntrusiveListBaseNode<KThread>,
123 public KTimerTask { 123 public KTimerTask {
124 KERNEL_AUTOOBJECT_TRAITS(KThread, KSynchronizationObject); 124 KERNEL_AUTOOBJECT_TRAITS(KThread, KSynchronizationObject);
125 125
@@ -138,7 +138,7 @@ public:
138public: 138public:
139 using ThreadContext32 = Core::ARM_Interface::ThreadContext32; 139 using ThreadContext32 = Core::ARM_Interface::ThreadContext32;
140 using ThreadContext64 = Core::ARM_Interface::ThreadContext64; 140 using ThreadContext64 = Core::ARM_Interface::ThreadContext64;
141 using WaiterList = boost::intrusive::list<KThread>; 141 using WaiterList = Common::IntrusiveListBaseTraits<KThread>::ListType;
142 142
143 /** 143 /**
144 * Gets the thread's current priority 144 * Gets the thread's current priority
@@ -750,8 +750,9 @@ private:
750 ConditionVariableThreadTreeTraits::TreeType<LockWithPriorityInheritanceComparator>; 750 ConditionVariableThreadTreeTraits::TreeType<LockWithPriorityInheritanceComparator>;
751 751
752public: 752public:
753 class LockWithPriorityInheritanceInfo : public KSlabAllocated<LockWithPriorityInheritanceInfo>, 753 class LockWithPriorityInheritanceInfo
754 public boost::intrusive::list_base_hook<> { 754 : public KSlabAllocated<LockWithPriorityInheritanceInfo>,
755 public Common::IntrusiveListBaseNode<LockWithPriorityInheritanceInfo> {
755 public: 756 public:
756 explicit LockWithPriorityInheritanceInfo(KernelCore&) {} 757 explicit LockWithPriorityInheritanceInfo(KernelCore&) {}
757 758
@@ -839,7 +840,7 @@ public:
839 840
840private: 841private:
841 using LockWithPriorityInheritanceInfoList = 842 using LockWithPriorityInheritanceInfoList =
842 boost::intrusive::list<LockWithPriorityInheritanceInfo>; 843 Common::IntrusiveListBaseTraits<LockWithPriorityInheritanceInfo>::ListType;
843 844
844 ConditionVariableThreadTree* m_condvar_tree{}; 845 ConditionVariableThreadTree* m_condvar_tree{};
845 u64 m_condvar_key{}; 846 u64 m_condvar_key{};
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
index 0cd87a48f..fee510f7b 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
@@ -473,7 +473,8 @@ void EmitSetFragColor(EmitContext& ctx, u32 index, u32 component, Id value) {
473} 473}
474 474
475void EmitSetSampleMask(EmitContext& ctx, Id value) { 475void EmitSetSampleMask(EmitContext& ctx, Id value) {
476 ctx.OpStore(ctx.sample_mask, value); 476 const Id pointer{ctx.OpAccessChain(ctx.output_u32, ctx.sample_mask, ctx.u32_zero_value)};
477 ctx.OpStore(pointer, value);
477} 478}
478 479
479void EmitSetFragDepth(EmitContext& ctx, Id value) { 480void EmitSetFragDepth(EmitContext& ctx, Id value) {
diff --git a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp
index d48d4860e..47739794f 100644
--- a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp
+++ b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp
@@ -1572,7 +1572,8 @@ void EmitContext::DefineOutputs(const IR::Program& program) {
1572 Decorate(frag_depth, spv::Decoration::BuiltIn, spv::BuiltIn::FragDepth); 1572 Decorate(frag_depth, spv::Decoration::BuiltIn, spv::BuiltIn::FragDepth);
1573 } 1573 }
1574 if (info.stores_sample_mask) { 1574 if (info.stores_sample_mask) {
1575 sample_mask = DefineOutput(*this, U32[1], std::nullopt); 1575 const Id array_type{TypeArray(U32[1], Const(1U))};
1576 sample_mask = DefineOutput(*this, array_type, std::nullopt);
1576 Decorate(sample_mask, spv::Decoration::BuiltIn, spv::BuiltIn::SampleMask); 1577 Decorate(sample_mask, spv::Decoration::BuiltIn, spv::BuiltIn::SampleMask);
1577 } 1578 }
1578 break; 1579 break;
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index 39b774c98..1e158f375 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -15,7 +15,7 @@ add_executable(tests
15 core/core_timing.cpp 15 core/core_timing.cpp
16 core/internal_network/network.cpp 16 core/internal_network/network.cpp
17 precompiled_headers.h 17 precompiled_headers.h
18 video_core/buffer_base.cpp 18 video_core/memory_tracker.cpp
19 input_common/calibration_configuration_job.cpp 19 input_common/calibration_configuration_job.cpp
20) 20)
21 21
diff --git a/src/tests/video_core/buffer_base.cpp b/src/tests/video_core/buffer_base.cpp
deleted file mode 100644
index 734dbf4b6..000000000
--- a/src/tests/video_core/buffer_base.cpp
+++ /dev/null
@@ -1,549 +0,0 @@
1// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include <stdexcept>
5#include <unordered_map>
6
7#include <catch2/catch_test_macros.hpp>
8
9#include "common/alignment.h"
10#include "common/common_types.h"
11#include "video_core/buffer_cache/buffer_base.h"
12
13namespace {
14using VideoCommon::BufferBase;
15using Range = std::pair<u64, u64>;
16
17constexpr u64 PAGE = 4096;
18constexpr u64 WORD = 4096 * 64;
19
20constexpr VAddr c = 0x1328914000;
21
22class RasterizerInterface {
23public:
24 void UpdatePagesCachedCount(VAddr addr, u64 size, int delta) {
25 const u64 page_start{addr >> Core::Memory::YUZU_PAGEBITS};
26 const u64 page_end{(addr + size + Core::Memory::YUZU_PAGESIZE - 1) >>
27 Core::Memory::YUZU_PAGEBITS};
28 for (u64 page = page_start; page < page_end; ++page) {
29 int& value = page_table[page];
30 value += delta;
31 if (value < 0) {
32 throw std::logic_error{"negative page"};
33 }
34 if (value == 0) {
35 page_table.erase(page);
36 }
37 }
38 }
39
40 [[nodiscard]] int Count(VAddr addr) const noexcept {
41 const auto it = page_table.find(addr >> Core::Memory::YUZU_PAGEBITS);
42 return it == page_table.end() ? 0 : it->second;
43 }
44
45 [[nodiscard]] unsigned Count() const noexcept {
46 unsigned count = 0;
47 for (const auto& [index, value] : page_table) {
48 count += value;
49 }
50 return count;
51 }
52
53private:
54 std::unordered_map<u64, int> page_table;
55};
56} // Anonymous namespace
57
58TEST_CASE("BufferBase: Small buffer", "[video_core]") {
59 RasterizerInterface rasterizer;
60 BufferBase buffer(rasterizer, c, WORD);
61 REQUIRE(rasterizer.Count() == 0);
62 buffer.UnmarkRegionAsCpuModified(c, WORD);
63 REQUIRE(rasterizer.Count() == WORD / PAGE);
64 REQUIRE(buffer.ModifiedCpuRegion(c, WORD) == Range{0, 0});
65
66 buffer.MarkRegionAsCpuModified(c + PAGE, 1);
67 REQUIRE(buffer.ModifiedCpuRegion(c, WORD) == Range{PAGE * 1, PAGE * 2});
68}
69
70TEST_CASE("BufferBase: Large buffer", "[video_core]") {
71 RasterizerInterface rasterizer;
72 BufferBase buffer(rasterizer, c, WORD * 32);
73 buffer.UnmarkRegionAsCpuModified(c, WORD * 32);
74 buffer.MarkRegionAsCpuModified(c + 4096, WORD * 4);
75 REQUIRE(buffer.ModifiedCpuRegion(c, WORD + PAGE * 2) == Range{PAGE, WORD + PAGE * 2});
76 REQUIRE(buffer.ModifiedCpuRegion(c + PAGE * 2, PAGE * 6) == Range{PAGE * 2, PAGE * 8});
77 REQUIRE(buffer.ModifiedCpuRegion(c, WORD * 32) == Range{PAGE, WORD * 4 + PAGE});
78 REQUIRE(buffer.ModifiedCpuRegion(c + WORD * 4, PAGE) == Range{WORD * 4, WORD * 4 + PAGE});
79 REQUIRE(buffer.ModifiedCpuRegion(c + WORD * 3 + PAGE * 63, PAGE) ==
80 Range{WORD * 3 + PAGE * 63, WORD * 4});
81
82 buffer.MarkRegionAsCpuModified(c + WORD * 5 + PAGE * 6, PAGE);
83 buffer.MarkRegionAsCpuModified(c + WORD * 5 + PAGE * 8, PAGE);
84 REQUIRE(buffer.ModifiedCpuRegion(c + WORD * 5, WORD) ==
85 Range{WORD * 5 + PAGE * 6, WORD * 5 + PAGE * 9});
86
87 buffer.UnmarkRegionAsCpuModified(c + WORD * 5 + PAGE * 8, PAGE);
88 REQUIRE(buffer.ModifiedCpuRegion(c + WORD * 5, WORD) ==
89 Range{WORD * 5 + PAGE * 6, WORD * 5 + PAGE * 7});
90
91 buffer.MarkRegionAsCpuModified(c + PAGE, WORD * 31 + PAGE * 63);
92 REQUIRE(buffer.ModifiedCpuRegion(c, WORD * 32) == Range{PAGE, WORD * 32});
93
94 buffer.UnmarkRegionAsCpuModified(c + PAGE * 4, PAGE);
95 buffer.UnmarkRegionAsCpuModified(c + PAGE * 6, PAGE);
96
97 buffer.UnmarkRegionAsCpuModified(c, WORD * 32);
98 REQUIRE(buffer.ModifiedCpuRegion(c, WORD * 32) == Range{0, 0});
99}
100
101TEST_CASE("BufferBase: Rasterizer counting", "[video_core]") {
102 RasterizerInterface rasterizer;
103 BufferBase buffer(rasterizer, c, PAGE * 2);
104 REQUIRE(rasterizer.Count() == 0);
105 buffer.UnmarkRegionAsCpuModified(c, PAGE);
106 REQUIRE(rasterizer.Count() == 1);
107 buffer.MarkRegionAsCpuModified(c, PAGE * 2);
108 REQUIRE(rasterizer.Count() == 0);
109 buffer.UnmarkRegionAsCpuModified(c, PAGE);
110 buffer.UnmarkRegionAsCpuModified(c + PAGE, PAGE);
111 REQUIRE(rasterizer.Count() == 2);
112 buffer.MarkRegionAsCpuModified(c, PAGE * 2);
113 REQUIRE(rasterizer.Count() == 0);
114}
115
116TEST_CASE("BufferBase: Basic range", "[video_core]") {
117 RasterizerInterface rasterizer;
118 BufferBase buffer(rasterizer, c, WORD);
119 buffer.UnmarkRegionAsCpuModified(c, WORD);
120 buffer.MarkRegionAsCpuModified(c, PAGE);
121 int num = 0;
122 buffer.ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) {
123 REQUIRE(offset == 0U);
124 REQUIRE(size == PAGE);
125 ++num;
126 });
127 REQUIRE(num == 1U);
128}
129
130TEST_CASE("BufferBase: Border upload", "[video_core]") {
131 RasterizerInterface rasterizer;
132 BufferBase buffer(rasterizer, c, WORD * 2);
133 buffer.UnmarkRegionAsCpuModified(c, WORD * 2);
134 buffer.MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
135 buffer.ForEachUploadRange(c, WORD * 2, [](u64 offset, u64 size) {
136 REQUIRE(offset == WORD - PAGE);
137 REQUIRE(size == PAGE * 2);
138 });
139}
140
141TEST_CASE("BufferBase: Border upload range", "[video_core]") {
142 RasterizerInterface rasterizer;
143 BufferBase buffer(rasterizer, c, WORD * 2);
144 buffer.UnmarkRegionAsCpuModified(c, WORD * 2);
145 buffer.MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
146 buffer.ForEachUploadRange(c + WORD - PAGE, PAGE * 2, [](u64 offset, u64 size) {
147 REQUIRE(offset == WORD - PAGE);
148 REQUIRE(size == PAGE * 2);
149 });
150 buffer.MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
151 buffer.ForEachUploadRange(c + WORD - PAGE, PAGE, [](u64 offset, u64 size) {
152 REQUIRE(offset == WORD - PAGE);
153 REQUIRE(size == PAGE);
154 });
155 buffer.ForEachUploadRange(c + WORD, PAGE, [](u64 offset, u64 size) {
156 REQUIRE(offset == WORD);
157 REQUIRE(size == PAGE);
158 });
159}
160
161TEST_CASE("BufferBase: Border upload partial range", "[video_core]") {
162 RasterizerInterface rasterizer;
163 BufferBase buffer(rasterizer, c, WORD * 2);
164 buffer.UnmarkRegionAsCpuModified(c, WORD * 2);
165 buffer.MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
166 buffer.ForEachUploadRange(c + WORD - 1, 2, [](u64 offset, u64 size) {
167 REQUIRE(offset == WORD - PAGE);
168 REQUIRE(size == PAGE * 2);
169 });
170 buffer.MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
171 buffer.ForEachUploadRange(c + WORD - 1, 1, [](u64 offset, u64 size) {
172 REQUIRE(offset == WORD - PAGE);
173 REQUIRE(size == PAGE);
174 });
175 buffer.ForEachUploadRange(c + WORD + 50, 1, [](u64 offset, u64 size) {
176 REQUIRE(offset == WORD);
177 REQUIRE(size == PAGE);
178 });
179}
180
181TEST_CASE("BufferBase: Partial word uploads", "[video_core]") {
182 RasterizerInterface rasterizer;
183 BufferBase buffer(rasterizer, c, 0x9d000);
184 int num = 0;
185 buffer.ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) {
186 REQUIRE(offset == 0U);
187 REQUIRE(size == WORD);
188 ++num;
189 });
190 REQUIRE(num == 1);
191 buffer.ForEachUploadRange(c + WORD, WORD, [&](u64 offset, u64 size) {
192 REQUIRE(offset == WORD);
193 REQUIRE(size == WORD);
194 ++num;
195 });
196 REQUIRE(num == 2);
197 buffer.ForEachUploadRange(c + 0x79000, 0x24000, [&](u64 offset, u64 size) {
198 REQUIRE(offset == WORD * 2);
199 REQUIRE(size == PAGE * 0x1d);
200 ++num;
201 });
202 REQUIRE(num == 3);
203}
204
205TEST_CASE("BufferBase: Partial page upload", "[video_core]") {
206 RasterizerInterface rasterizer;
207 BufferBase buffer(rasterizer, c, WORD);
208 buffer.UnmarkRegionAsCpuModified(c, WORD);
209 int num = 0;
210 buffer.MarkRegionAsCpuModified(c + PAGE * 2, PAGE);
211 buffer.MarkRegionAsCpuModified(c + PAGE * 9, PAGE);
212 buffer.ForEachUploadRange(c, PAGE * 3, [&](u64 offset, u64 size) {
213 REQUIRE(offset == PAGE * 2);
214 REQUIRE(size == PAGE);
215 ++num;
216 });
217 REQUIRE(num == 1);
218 buffer.ForEachUploadRange(c + PAGE * 7, PAGE * 3, [&](u64 offset, u64 size) {
219 REQUIRE(offset == PAGE * 9);
220 REQUIRE(size == PAGE);
221 ++num;
222 });
223 REQUIRE(num == 2);
224}
225
226TEST_CASE("BufferBase: Partial page upload with multiple words on the right") {
227 RasterizerInterface rasterizer;
228 BufferBase buffer(rasterizer, c, WORD * 8);
229 buffer.UnmarkRegionAsCpuModified(c, WORD * 8);
230 buffer.MarkRegionAsCpuModified(c + PAGE * 13, WORD * 7);
231 int num = 0;
232 buffer.ForEachUploadRange(c + PAGE * 10, WORD * 7, [&](u64 offset, u64 size) {
233 REQUIRE(offset == PAGE * 13);
234 REQUIRE(size == WORD * 7 - PAGE * 3);
235 ++num;
236 });
237 REQUIRE(num == 1);
238 buffer.ForEachUploadRange(c + PAGE, WORD * 8, [&](u64 offset, u64 size) {
239 REQUIRE(offset == WORD * 7 + PAGE * 10);
240 REQUIRE(size == PAGE * 3);
241 ++num;
242 });
243 REQUIRE(num == 2);
244}
245
246TEST_CASE("BufferBase: Partial page upload with multiple words on the left", "[video_core]") {
247 RasterizerInterface rasterizer;
248 BufferBase buffer(rasterizer, c, WORD * 8);
249 buffer.UnmarkRegionAsCpuModified(c, WORD * 8);
250 buffer.MarkRegionAsCpuModified(c + PAGE * 13, WORD * 7);
251 int num = 0;
252 buffer.ForEachUploadRange(c + PAGE * 16, WORD * 7, [&](u64 offset, u64 size) {
253 REQUIRE(offset == PAGE * 16);
254 REQUIRE(size == WORD * 7 - PAGE * 3);
255 ++num;
256 });
257 REQUIRE(num == 1);
258 buffer.ForEachUploadRange(c + PAGE, WORD, [&](u64 offset, u64 size) {
259 REQUIRE(offset == PAGE * 13);
260 REQUIRE(size == PAGE * 3);
261 ++num;
262 });
263 REQUIRE(num == 2);
264}
265
266TEST_CASE("BufferBase: Partial page upload with multiple words in the middle", "[video_core]") {
267 RasterizerInterface rasterizer;
268 BufferBase buffer(rasterizer, c, WORD * 8);
269 buffer.UnmarkRegionAsCpuModified(c, WORD * 8);
270 buffer.MarkRegionAsCpuModified(c + PAGE * 13, PAGE * 140);
271 int num = 0;
272 buffer.ForEachUploadRange(c + PAGE * 16, WORD, [&](u64 offset, u64 size) {
273 REQUIRE(offset == PAGE * 16);
274 REQUIRE(size == WORD);
275 ++num;
276 });
277 REQUIRE(num == 1);
278 buffer.ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) {
279 REQUIRE(offset == PAGE * 13);
280 REQUIRE(size == PAGE * 3);
281 ++num;
282 });
283 REQUIRE(num == 2);
284 buffer.ForEachUploadRange(c, WORD * 8, [&](u64 offset, u64 size) {
285 REQUIRE(offset == WORD + PAGE * 16);
286 REQUIRE(size == PAGE * 73);
287 ++num;
288 });
289 REQUIRE(num == 3);
290}
291
292TEST_CASE("BufferBase: Empty right bits", "[video_core]") {
293 RasterizerInterface rasterizer;
294 BufferBase buffer(rasterizer, c, WORD * 2048);
295 buffer.UnmarkRegionAsCpuModified(c, WORD * 2048);
296 buffer.MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
297 buffer.ForEachUploadRange(c, WORD * 2048, [](u64 offset, u64 size) {
298 REQUIRE(offset == WORD - PAGE);
299 REQUIRE(size == PAGE * 2);
300 });
301}
302
303TEST_CASE("BufferBase: Out of bound ranges 1", "[video_core]") {
304 RasterizerInterface rasterizer;
305 BufferBase buffer(rasterizer, c, WORD);
306 buffer.UnmarkRegionAsCpuModified(c, WORD);
307 buffer.MarkRegionAsCpuModified(c, PAGE);
308 int num = 0;
309 buffer.ForEachUploadRange(c - WORD, WORD, [&](u64 offset, u64 size) { ++num; });
310 buffer.ForEachUploadRange(c + WORD, WORD, [&](u64 offset, u64 size) { ++num; });
311 buffer.ForEachUploadRange(c - PAGE, PAGE, [&](u64 offset, u64 size) { ++num; });
312 REQUIRE(num == 0);
313 buffer.ForEachUploadRange(c - PAGE, PAGE * 2, [&](u64 offset, u64 size) { ++num; });
314 REQUIRE(num == 1);
315 buffer.MarkRegionAsCpuModified(c, WORD);
316 REQUIRE(rasterizer.Count() == 0);
317}
318
319TEST_CASE("BufferBase: Out of bound ranges 2", "[video_core]") {
320 RasterizerInterface rasterizer;
321 BufferBase buffer(rasterizer, c, 0x22000);
322 REQUIRE_NOTHROW(buffer.UnmarkRegionAsCpuModified(c + 0x22000, PAGE));
323 REQUIRE_NOTHROW(buffer.UnmarkRegionAsCpuModified(c + 0x28000, PAGE));
324 REQUIRE(rasterizer.Count() == 0);
325 REQUIRE_NOTHROW(buffer.UnmarkRegionAsCpuModified(c + 0x21100, PAGE - 0x100));
326 REQUIRE(rasterizer.Count() == 1);
327 REQUIRE_NOTHROW(buffer.UnmarkRegionAsCpuModified(c - 0x1000, PAGE * 2));
328 buffer.UnmarkRegionAsCpuModified(c - 0x3000, PAGE * 2);
329 buffer.UnmarkRegionAsCpuModified(c - 0x2000, PAGE * 2);
330 REQUIRE(rasterizer.Count() == 2);
331}
332
333TEST_CASE("BufferBase: Out of bound ranges 3", "[video_core]") {
334 RasterizerInterface rasterizer;
335 BufferBase buffer(rasterizer, c, 0x310720);
336 buffer.UnmarkRegionAsCpuModified(c, 0x310720);
337 REQUIRE(rasterizer.Count(c) == 1);
338 REQUIRE(rasterizer.Count(c + PAGE) == 1);
339 REQUIRE(rasterizer.Count(c + WORD) == 1);
340 REQUIRE(rasterizer.Count(c + WORD + PAGE) == 1);
341}
342
343TEST_CASE("BufferBase: Sparse regions 1", "[video_core]") {
344 RasterizerInterface rasterizer;
345 BufferBase buffer(rasterizer, c, WORD);
346 buffer.UnmarkRegionAsCpuModified(c, WORD);
347 buffer.MarkRegionAsCpuModified(c + PAGE * 1, PAGE);
348 buffer.MarkRegionAsCpuModified(c + PAGE * 3, PAGE * 4);
349 buffer.ForEachUploadRange(c, WORD, [i = 0](u64 offset, u64 size) mutable {
350 static constexpr std::array<u64, 2> offsets{PAGE, PAGE * 3};
351 static constexpr std::array<u64, 2> sizes{PAGE, PAGE * 4};
352 REQUIRE(offset == offsets.at(i));
353 REQUIRE(size == sizes.at(i));
354 ++i;
355 });
356}
357
358TEST_CASE("BufferBase: Sparse regions 2", "[video_core]") {
359 RasterizerInterface rasterizer;
360 BufferBase buffer(rasterizer, c, 0x22000);
361 buffer.UnmarkRegionAsCpuModified(c, 0x22000);
362 REQUIRE(rasterizer.Count() == 0x22);
363 buffer.MarkRegionAsCpuModified(c + PAGE * 0x1B, PAGE);
364 buffer.MarkRegionAsCpuModified(c + PAGE * 0x21, PAGE);
365 buffer.ForEachUploadRange(c, WORD, [i = 0](u64 offset, u64 size) mutable {
366 static constexpr std::array<u64, 2> offsets{PAGE * 0x1B, PAGE * 0x21};
367 static constexpr std::array<u64, 2> sizes{PAGE, PAGE};
368 REQUIRE(offset == offsets.at(i));
369 REQUIRE(size == sizes.at(i));
370 ++i;
371 });
372}
373
374TEST_CASE("BufferBase: Single page modified range", "[video_core]") {
375 RasterizerInterface rasterizer;
376 BufferBase buffer(rasterizer, c, PAGE);
377 REQUIRE(buffer.IsRegionCpuModified(c, PAGE));
378 buffer.UnmarkRegionAsCpuModified(c, PAGE);
379 REQUIRE(!buffer.IsRegionCpuModified(c, PAGE));
380}
381
382TEST_CASE("BufferBase: Two page modified range", "[video_core]") {
383 RasterizerInterface rasterizer;
384 BufferBase buffer(rasterizer, c, PAGE * 2);
385 REQUIRE(buffer.IsRegionCpuModified(c, PAGE));
386 REQUIRE(buffer.IsRegionCpuModified(c + PAGE, PAGE));
387 REQUIRE(buffer.IsRegionCpuModified(c, PAGE * 2));
388 buffer.UnmarkRegionAsCpuModified(c, PAGE);
389 REQUIRE(!buffer.IsRegionCpuModified(c, PAGE));
390}
391
392TEST_CASE("BufferBase: Multi word modified ranges", "[video_core]") {
393 for (int offset = 0; offset < 4; ++offset) {
394 const VAddr address = c + WORD * offset;
395 RasterizerInterface rasterizer;
396 BufferBase buffer(rasterizer, address, WORD * 4);
397 REQUIRE(buffer.IsRegionCpuModified(address, PAGE));
398 REQUIRE(buffer.IsRegionCpuModified(address + PAGE * 48, PAGE));
399 REQUIRE(buffer.IsRegionCpuModified(address + PAGE * 56, PAGE));
400
401 buffer.UnmarkRegionAsCpuModified(address + PAGE * 32, PAGE);
402 REQUIRE(buffer.IsRegionCpuModified(address + PAGE, WORD));
403 REQUIRE(buffer.IsRegionCpuModified(address + PAGE * 31, PAGE));
404 REQUIRE(!buffer.IsRegionCpuModified(address + PAGE * 32, PAGE));
405 REQUIRE(buffer.IsRegionCpuModified(address + PAGE * 33, PAGE));
406 REQUIRE(buffer.IsRegionCpuModified(address + PAGE * 31, PAGE * 2));
407 REQUIRE(buffer.IsRegionCpuModified(address + PAGE * 32, PAGE * 2));
408
409 buffer.UnmarkRegionAsCpuModified(address + PAGE * 33, PAGE);
410 REQUIRE(!buffer.IsRegionCpuModified(address + PAGE * 32, PAGE * 2));
411 }
412}
413
414TEST_CASE("BufferBase: Single page in large buffer", "[video_core]") {
415 RasterizerInterface rasterizer;
416 BufferBase buffer(rasterizer, c, WORD * 16);
417 buffer.UnmarkRegionAsCpuModified(c, WORD * 16);
418 REQUIRE(!buffer.IsRegionCpuModified(c, WORD * 16));
419
420 buffer.MarkRegionAsCpuModified(c + WORD * 12 + PAGE * 8, PAGE);
421 REQUIRE(buffer.IsRegionCpuModified(c, WORD * 16));
422 REQUIRE(buffer.IsRegionCpuModified(c + WORD * 10, WORD * 2));
423 REQUIRE(buffer.IsRegionCpuModified(c + WORD * 11, WORD * 2));
424 REQUIRE(buffer.IsRegionCpuModified(c + WORD * 12, WORD * 2));
425 REQUIRE(buffer.IsRegionCpuModified(c + WORD * 12 + PAGE * 4, PAGE * 8));
426 REQUIRE(buffer.IsRegionCpuModified(c + WORD * 12 + PAGE * 6, PAGE * 8));
427 REQUIRE(!buffer.IsRegionCpuModified(c + WORD * 12 + PAGE * 6, PAGE));
428 REQUIRE(buffer.IsRegionCpuModified(c + WORD * 12 + PAGE * 7, PAGE * 2));
429 REQUIRE(buffer.IsRegionCpuModified(c + WORD * 12 + PAGE * 8, PAGE * 2));
430}
431
432TEST_CASE("BufferBase: Out of bounds region query") {
433 RasterizerInterface rasterizer;
434 BufferBase buffer(rasterizer, c, WORD * 16);
435 REQUIRE(!buffer.IsRegionCpuModified(c - PAGE, PAGE));
436 REQUIRE(!buffer.IsRegionCpuModified(c - PAGE * 2, PAGE));
437 REQUIRE(!buffer.IsRegionCpuModified(c + WORD * 16, PAGE));
438 REQUIRE(buffer.IsRegionCpuModified(c + WORD * 16 - PAGE, WORD * 64));
439 REQUIRE(!buffer.IsRegionCpuModified(c + WORD * 16, WORD * 64));
440}
441
442TEST_CASE("BufferBase: Wrap word regions") {
443 RasterizerInterface rasterizer;
444 BufferBase buffer(rasterizer, c, WORD * 2);
445 buffer.UnmarkRegionAsCpuModified(c, WORD * 2);
446 buffer.MarkRegionAsCpuModified(c + PAGE * 63, PAGE * 2);
447 REQUIRE(buffer.IsRegionCpuModified(c, WORD * 2));
448 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE * 62, PAGE));
449 REQUIRE(buffer.IsRegionCpuModified(c + PAGE * 63, PAGE));
450 REQUIRE(buffer.IsRegionCpuModified(c + PAGE * 64, PAGE));
451 REQUIRE(buffer.IsRegionCpuModified(c + PAGE * 63, PAGE * 2));
452 REQUIRE(buffer.IsRegionCpuModified(c + PAGE * 63, PAGE * 8));
453 REQUIRE(buffer.IsRegionCpuModified(c + PAGE * 60, PAGE * 8));
454
455 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE * 127, WORD * 16));
456 buffer.MarkRegionAsCpuModified(c + PAGE * 127, PAGE);
457 REQUIRE(buffer.IsRegionCpuModified(c + PAGE * 127, WORD * 16));
458 REQUIRE(buffer.IsRegionCpuModified(c + PAGE * 127, PAGE));
459 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE * 126, PAGE));
460 REQUIRE(buffer.IsRegionCpuModified(c + PAGE * 126, PAGE * 2));
461 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE * 128, WORD * 16));
462}
463
464TEST_CASE("BufferBase: Unaligned page region query") {
465 RasterizerInterface rasterizer;
466 BufferBase buffer(rasterizer, c, WORD);
467 buffer.UnmarkRegionAsCpuModified(c, WORD);
468 buffer.MarkRegionAsCpuModified(c + 4000, 1000);
469 REQUIRE(buffer.IsRegionCpuModified(c, PAGE));
470 REQUIRE(buffer.IsRegionCpuModified(c + PAGE, PAGE));
471 REQUIRE(buffer.IsRegionCpuModified(c + 4000, 1000));
472 REQUIRE(buffer.IsRegionCpuModified(c + 4000, 1));
473}
474
475TEST_CASE("BufferBase: Cached write") {
476 RasterizerInterface rasterizer;
477 BufferBase buffer(rasterizer, c, WORD);
478 buffer.UnmarkRegionAsCpuModified(c, WORD);
479 buffer.CachedCpuWrite(c + PAGE, PAGE);
480 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE, PAGE));
481 buffer.FlushCachedWrites();
482 REQUIRE(buffer.IsRegionCpuModified(c + PAGE, PAGE));
483 buffer.MarkRegionAsCpuModified(c, WORD);
484 REQUIRE(rasterizer.Count() == 0);
485}
486
487TEST_CASE("BufferBase: Multiple cached write") {
488 RasterizerInterface rasterizer;
489 BufferBase buffer(rasterizer, c, WORD);
490 buffer.UnmarkRegionAsCpuModified(c, WORD);
491 buffer.CachedCpuWrite(c + PAGE, PAGE);
492 buffer.CachedCpuWrite(c + PAGE * 3, PAGE);
493 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE, PAGE));
494 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE * 3, PAGE));
495 buffer.FlushCachedWrites();
496 REQUIRE(buffer.IsRegionCpuModified(c + PAGE, PAGE));
497 REQUIRE(buffer.IsRegionCpuModified(c + PAGE * 3, PAGE));
498 buffer.MarkRegionAsCpuModified(c, WORD);
499 REQUIRE(rasterizer.Count() == 0);
500}
501
502TEST_CASE("BufferBase: Cached write unmarked") {
503 RasterizerInterface rasterizer;
504 BufferBase buffer(rasterizer, c, WORD);
505 buffer.UnmarkRegionAsCpuModified(c, WORD);
506 buffer.CachedCpuWrite(c + PAGE, PAGE);
507 buffer.UnmarkRegionAsCpuModified(c + PAGE, PAGE);
508 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE, PAGE));
509 buffer.FlushCachedWrites();
510 REQUIRE(buffer.IsRegionCpuModified(c + PAGE, PAGE));
511 buffer.MarkRegionAsCpuModified(c, WORD);
512 REQUIRE(rasterizer.Count() == 0);
513}
514
515TEST_CASE("BufferBase: Cached write iterated") {
516 RasterizerInterface rasterizer;
517 BufferBase buffer(rasterizer, c, WORD);
518 buffer.UnmarkRegionAsCpuModified(c, WORD);
519 buffer.CachedCpuWrite(c + PAGE, PAGE);
520 int num = 0;
521 buffer.ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) { ++num; });
522 REQUIRE(num == 0);
523 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE, PAGE));
524 buffer.FlushCachedWrites();
525 REQUIRE(buffer.IsRegionCpuModified(c + PAGE, PAGE));
526 buffer.MarkRegionAsCpuModified(c, WORD);
527 REQUIRE(rasterizer.Count() == 0);
528}
529
530TEST_CASE("BufferBase: Cached write downloads") {
531 RasterizerInterface rasterizer;
532 BufferBase buffer(rasterizer, c, WORD);
533 buffer.UnmarkRegionAsCpuModified(c, WORD);
534 REQUIRE(rasterizer.Count() == 64);
535 buffer.CachedCpuWrite(c + PAGE, PAGE);
536 REQUIRE(rasterizer.Count() == 63);
537 buffer.MarkRegionAsGpuModified(c + PAGE, PAGE);
538 int num = 0;
539 buffer.ForEachDownloadRangeAndClear(c, WORD, [&](u64 offset, u64 size) { ++num; });
540 buffer.ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) { ++num; });
541 REQUIRE(num == 0);
542 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE, PAGE));
543 REQUIRE(!buffer.IsRegionGpuModified(c + PAGE, PAGE));
544 buffer.FlushCachedWrites();
545 REQUIRE(buffer.IsRegionCpuModified(c + PAGE, PAGE));
546 REQUIRE(!buffer.IsRegionGpuModified(c + PAGE, PAGE));
547 buffer.MarkRegionAsCpuModified(c, WORD);
548 REQUIRE(rasterizer.Count() == 0);
549}
diff --git a/src/tests/video_core/memory_tracker.cpp b/src/tests/video_core/memory_tracker.cpp
new file mode 100644
index 000000000..3981907a2
--- /dev/null
+++ b/src/tests/video_core/memory_tracker.cpp
@@ -0,0 +1,549 @@
1// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#include <memory>
5#include <stdexcept>
6#include <unordered_map>
7
8#include <catch2/catch_test_macros.hpp>
9
10#include "common/alignment.h"
11#include "common/common_types.h"
12#include "video_core/buffer_cache/memory_tracker_base.h"
13
14namespace {
15using Range = std::pair<u64, u64>;
16
17constexpr u64 PAGE = 4096;
18constexpr u64 WORD = 4096 * 64;
19constexpr u64 HIGH_PAGE_BITS = 22;
20constexpr u64 HIGH_PAGE_SIZE = 1ULL << HIGH_PAGE_BITS;
21
22constexpr VAddr c = 16 * HIGH_PAGE_SIZE;
23
24class RasterizerInterface {
25public:
26 void UpdatePagesCachedCount(VAddr addr, u64 size, int delta) {
27 const u64 page_start{addr >> Core::Memory::YUZU_PAGEBITS};
28 const u64 page_end{(addr + size + Core::Memory::YUZU_PAGESIZE - 1) >>
29 Core::Memory::YUZU_PAGEBITS};
30 for (u64 page = page_start; page < page_end; ++page) {
31 int& value = page_table[page];
32 value += delta;
33 if (value < 0) {
34 throw std::logic_error{"negative page"};
35 }
36 if (value == 0) {
37 page_table.erase(page);
38 }
39 }
40 }
41
42 [[nodiscard]] int Count(VAddr addr) const noexcept {
43 const auto it = page_table.find(addr >> Core::Memory::YUZU_PAGEBITS);
44 return it == page_table.end() ? 0 : it->second;
45 }
46
47 [[nodiscard]] unsigned Count() const noexcept {
48 unsigned count = 0;
49 for (const auto& [index, value] : page_table) {
50 count += value;
51 }
52 return count;
53 }
54
55private:
56 std::unordered_map<u64, int> page_table;
57};
58} // Anonymous namespace
59
60using MemoryTracker = VideoCommon::MemoryTrackerBase<RasterizerInterface>;
61
62TEST_CASE("MemoryTracker: Small region", "[video_core]") {
63 RasterizerInterface rasterizer;
64 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
65 REQUIRE(rasterizer.Count() == 0);
66 memory_track->UnmarkRegionAsCpuModified(c, WORD);
67 REQUIRE(rasterizer.Count() == WORD / PAGE);
68 REQUIRE(memory_track->ModifiedCpuRegion(c, WORD) == Range{0, 0});
69
70 memory_track->MarkRegionAsCpuModified(c + PAGE, 1);
71 REQUIRE(memory_track->ModifiedCpuRegion(c, WORD) == Range{c + PAGE * 1, c + PAGE * 2});
72}
73
74TEST_CASE("MemoryTracker: Large region", "[video_core]") {
75 RasterizerInterface rasterizer;
76 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
77 memory_track->UnmarkRegionAsCpuModified(c, WORD * 32);
78 memory_track->MarkRegionAsCpuModified(c + 4096, WORD * 4);
79 REQUIRE(memory_track->ModifiedCpuRegion(c, WORD + PAGE * 2) ==
80 Range{c + PAGE, c + WORD + PAGE * 2});
81 REQUIRE(memory_track->ModifiedCpuRegion(c + PAGE * 2, PAGE * 6) ==
82 Range{c + PAGE * 2, c + PAGE * 8});
83 REQUIRE(memory_track->ModifiedCpuRegion(c, WORD * 32) == Range{c + PAGE, c + WORD * 4 + PAGE});
84 REQUIRE(memory_track->ModifiedCpuRegion(c + WORD * 4, PAGE) ==
85 Range{c + WORD * 4, c + WORD * 4 + PAGE});
86 REQUIRE(memory_track->ModifiedCpuRegion(c + WORD * 3 + PAGE * 63, PAGE) ==
87 Range{c + WORD * 3 + PAGE * 63, c + WORD * 4});
88
89 memory_track->MarkRegionAsCpuModified(c + WORD * 5 + PAGE * 6, PAGE);
90 memory_track->MarkRegionAsCpuModified(c + WORD * 5 + PAGE * 8, PAGE);
91 REQUIRE(memory_track->ModifiedCpuRegion(c + WORD * 5, WORD) ==
92 Range{c + WORD * 5 + PAGE * 6, c + WORD * 5 + PAGE * 9});
93
94 memory_track->UnmarkRegionAsCpuModified(c + WORD * 5 + PAGE * 8, PAGE);
95 REQUIRE(memory_track->ModifiedCpuRegion(c + WORD * 5, WORD) ==
96 Range{c + WORD * 5 + PAGE * 6, c + WORD * 5 + PAGE * 7});
97
98 memory_track->MarkRegionAsCpuModified(c + PAGE, WORD * 31 + PAGE * 63);
99 REQUIRE(memory_track->ModifiedCpuRegion(c, WORD * 32) == Range{c + PAGE, c + WORD * 32});
100
101 memory_track->UnmarkRegionAsCpuModified(c + PAGE * 4, PAGE);
102 memory_track->UnmarkRegionAsCpuModified(c + PAGE * 6, PAGE);
103
104 memory_track->UnmarkRegionAsCpuModified(c, WORD * 32);
105 REQUIRE(memory_track->ModifiedCpuRegion(c, WORD * 32) == Range{0, 0});
106}
107
108TEST_CASE("MemoryTracker: Rasterizer counting", "[video_core]") {
109 RasterizerInterface rasterizer;
110 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
111 REQUIRE(rasterizer.Count() == 0);
112 memory_track->UnmarkRegionAsCpuModified(c, PAGE);
113 REQUIRE(rasterizer.Count() == 1);
114 memory_track->MarkRegionAsCpuModified(c, PAGE * 2);
115 REQUIRE(rasterizer.Count() == 0);
116 memory_track->UnmarkRegionAsCpuModified(c, PAGE);
117 memory_track->UnmarkRegionAsCpuModified(c + PAGE, PAGE);
118 REQUIRE(rasterizer.Count() == 2);
119 memory_track->MarkRegionAsCpuModified(c, PAGE * 2);
120 REQUIRE(rasterizer.Count() == 0);
121}
122
123TEST_CASE("MemoryTracker: Basic range", "[video_core]") {
124 RasterizerInterface rasterizer;
125 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
126 memory_track->UnmarkRegionAsCpuModified(c, WORD);
127 memory_track->MarkRegionAsCpuModified(c, PAGE);
128 int num = 0;
129 memory_track->ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) {
130 REQUIRE(offset == c);
131 REQUIRE(size == PAGE);
132 ++num;
133 });
134 REQUIRE(num == 1U);
135}
136
137TEST_CASE("MemoryTracker: Border upload", "[video_core]") {
138 RasterizerInterface rasterizer;
139 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
140 memory_track->UnmarkRegionAsCpuModified(c, WORD * 2);
141 memory_track->MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
142 memory_track->ForEachUploadRange(c, WORD * 2, [](u64 offset, u64 size) {
143 REQUIRE(offset == c + WORD - PAGE);
144 REQUIRE(size == PAGE * 2);
145 });
146}
147
148TEST_CASE("MemoryTracker: Border upload range", "[video_core]") {
149 RasterizerInterface rasterizer;
150 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
151 memory_track->UnmarkRegionAsCpuModified(c, WORD * 2);
152 memory_track->MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
153 memory_track->ForEachUploadRange(c + WORD - PAGE, PAGE * 2, [](u64 offset, u64 size) {
154 REQUIRE(offset == c + WORD - PAGE);
155 REQUIRE(size == PAGE * 2);
156 });
157 memory_track->MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
158 memory_track->ForEachUploadRange(c + WORD - PAGE, PAGE, [](u64 offset, u64 size) {
159 REQUIRE(offset == c + WORD - PAGE);
160 REQUIRE(size == PAGE);
161 });
162 memory_track->ForEachUploadRange(c + WORD, PAGE, [](u64 offset, u64 size) {
163 REQUIRE(offset == c + WORD);
164 REQUIRE(size == PAGE);
165 });
166}
167
168TEST_CASE("MemoryTracker: Border upload partial range", "[video_core]") {
169 RasterizerInterface rasterizer;
170 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
171 memory_track->UnmarkRegionAsCpuModified(c, WORD * 2);
172 memory_track->MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
173 memory_track->ForEachUploadRange(c + WORD - 1, 2, [](u64 offset, u64 size) {
174 REQUIRE(offset == c + WORD - PAGE);
175 REQUIRE(size == PAGE * 2);
176 });
177 memory_track->MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
178 memory_track->ForEachUploadRange(c + WORD - 1, 1, [](u64 offset, u64 size) {
179 REQUIRE(offset == c + WORD - PAGE);
180 REQUIRE(size == PAGE);
181 });
182 memory_track->ForEachUploadRange(c + WORD + 50, 1, [](u64 offset, u64 size) {
183 REQUIRE(offset == c + WORD);
184 REQUIRE(size == PAGE);
185 });
186}
187
188TEST_CASE("MemoryTracker: Partial word uploads", "[video_core]") {
189 RasterizerInterface rasterizer;
190 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
191 int num = 0;
192 memory_track->ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) {
193 REQUIRE(offset == c);
194 REQUIRE(size == WORD);
195 ++num;
196 });
197 REQUIRE(num == 1);
198 memory_track->ForEachUploadRange(c + WORD, WORD, [&](u64 offset, u64 size) {
199 REQUIRE(offset == c + WORD);
200 REQUIRE(size == WORD);
201 ++num;
202 });
203 REQUIRE(num == 2);
204 memory_track->ForEachUploadRange(c + 0x79000, 0x24000, [&](u64 offset, u64 size) {
205 REQUIRE(offset == c + WORD * 2);
206 REQUIRE(size == PAGE * 0x1d);
207 ++num;
208 });
209 REQUIRE(num == 3);
210}
211
212TEST_CASE("MemoryTracker: Partial page upload", "[video_core]") {
213 RasterizerInterface rasterizer;
214 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
215 memory_track->UnmarkRegionAsCpuModified(c, WORD);
216 int num = 0;
217 memory_track->MarkRegionAsCpuModified(c + PAGE * 2, PAGE);
218 memory_track->MarkRegionAsCpuModified(c + PAGE * 9, PAGE);
219 memory_track->ForEachUploadRange(c, PAGE * 3, [&](u64 offset, u64 size) {
220 REQUIRE(offset == c + PAGE * 2);
221 REQUIRE(size == PAGE);
222 ++num;
223 });
224 REQUIRE(num == 1);
225 memory_track->ForEachUploadRange(c + PAGE * 7, PAGE * 3, [&](u64 offset, u64 size) {
226 REQUIRE(offset == c + PAGE * 9);
227 REQUIRE(size == PAGE);
228 ++num;
229 });
230 REQUIRE(num == 2);
231}
232
233TEST_CASE("MemoryTracker: Partial page upload with multiple words on the right") {
234 RasterizerInterface rasterizer;
235 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
236 memory_track->UnmarkRegionAsCpuModified(c, WORD * 9);
237 memory_track->MarkRegionAsCpuModified(c + PAGE * 13, WORD * 7);
238 int num = 0;
239 memory_track->ForEachUploadRange(c + PAGE * 10, WORD * 7, [&](u64 offset, u64 size) {
240 REQUIRE(offset == c + PAGE * 13);
241 REQUIRE(size == WORD * 7 - PAGE * 3);
242 ++num;
243 });
244 REQUIRE(num == 1);
245 memory_track->ForEachUploadRange(c + PAGE, WORD * 8, [&](u64 offset, u64 size) {
246 REQUIRE(offset == c + WORD * 7 + PAGE * 10);
247 REQUIRE(size == PAGE * 3);
248 ++num;
249 });
250 REQUIRE(num == 2);
251}
252
253TEST_CASE("MemoryTracker: Partial page upload with multiple words on the left", "[video_core]") {
254 RasterizerInterface rasterizer;
255 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
256 memory_track->UnmarkRegionAsCpuModified(c, WORD * 8);
257 memory_track->MarkRegionAsCpuModified(c + PAGE * 13, WORD * 7);
258 int num = 0;
259 memory_track->ForEachUploadRange(c + PAGE * 16, WORD * 7, [&](u64 offset, u64 size) {
260 REQUIRE(offset == c + PAGE * 16);
261 REQUIRE(size == WORD * 7 - PAGE * 3);
262 ++num;
263 });
264 REQUIRE(num == 1);
265 memory_track->ForEachUploadRange(c + PAGE, WORD, [&](u64 offset, u64 size) {
266 REQUIRE(offset == c + PAGE * 13);
267 REQUIRE(size == PAGE * 3);
268 ++num;
269 });
270 REQUIRE(num == 2);
271}
272
273TEST_CASE("MemoryTracker: Partial page upload with multiple words in the middle", "[video_core]") {
274 RasterizerInterface rasterizer;
275 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
276 memory_track->UnmarkRegionAsCpuModified(c, WORD * 8);
277 memory_track->MarkRegionAsCpuModified(c + PAGE * 13, PAGE * 140);
278 int num = 0;
279 memory_track->ForEachUploadRange(c + PAGE * 16, WORD, [&](u64 offset, u64 size) {
280 REQUIRE(offset == c + PAGE * 16);
281 REQUIRE(size == WORD);
282 ++num;
283 });
284 REQUIRE(num == 1);
285 memory_track->ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) {
286 REQUIRE(offset == c + PAGE * 13);
287 REQUIRE(size == PAGE * 3);
288 ++num;
289 });
290 REQUIRE(num == 2);
291 memory_track->ForEachUploadRange(c, WORD * 8, [&](u64 offset, u64 size) {
292 REQUIRE(offset == c + WORD + PAGE * 16);
293 REQUIRE(size == PAGE * 73);
294 ++num;
295 });
296 REQUIRE(num == 3);
297}
298
299TEST_CASE("MemoryTracker: Empty right bits", "[video_core]") {
300 RasterizerInterface rasterizer;
301 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
302 memory_track->UnmarkRegionAsCpuModified(c, WORD * 2048);
303 memory_track->MarkRegionAsCpuModified(c + WORD - PAGE, PAGE * 2);
304 memory_track->ForEachUploadRange(c, WORD * 2048, [](u64 offset, u64 size) {
305 REQUIRE(offset == c + WORD - PAGE);
306 REQUIRE(size == PAGE * 2);
307 });
308}
309
310TEST_CASE("MemoryTracker: Out of bound ranges 1", "[video_core]") {
311 RasterizerInterface rasterizer;
312 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
313 memory_track->UnmarkRegionAsCpuModified(c - WORD, 3 * WORD);
314 memory_track->MarkRegionAsCpuModified(c, PAGE);
315 REQUIRE(rasterizer.Count() == (3 * WORD - PAGE) / PAGE);
316 int num = 0;
317 memory_track->ForEachUploadRange(c - WORD, WORD, [&](u64 offset, u64 size) { ++num; });
318 memory_track->ForEachUploadRange(c + WORD, WORD, [&](u64 offset, u64 size) { ++num; });
319 memory_track->ForEachUploadRange(c - PAGE, PAGE, [&](u64 offset, u64 size) { ++num; });
320 REQUIRE(num == 0);
321 memory_track->ForEachUploadRange(c - PAGE, PAGE * 2, [&](u64 offset, u64 size) { ++num; });
322 REQUIRE(num == 1);
323 memory_track->MarkRegionAsCpuModified(c, WORD);
324 REQUIRE(rasterizer.Count() == 2 * WORD / PAGE);
325}
326
327TEST_CASE("MemoryTracker: Out of bound ranges 2", "[video_core]") {
328 RasterizerInterface rasterizer;
329 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
330 REQUIRE_NOTHROW(memory_track->UnmarkRegionAsCpuModified(c + 0x22000, PAGE));
331 REQUIRE_NOTHROW(memory_track->UnmarkRegionAsCpuModified(c + 0x28000, PAGE));
332 REQUIRE(rasterizer.Count() == 2);
333 REQUIRE_NOTHROW(memory_track->UnmarkRegionAsCpuModified(c + 0x21100, PAGE - 0x100));
334 REQUIRE(rasterizer.Count() == 3);
335 REQUIRE_NOTHROW(memory_track->UnmarkRegionAsCpuModified(c - PAGE, PAGE * 2));
336 memory_track->UnmarkRegionAsCpuModified(c - PAGE * 3, PAGE * 2);
337 memory_track->UnmarkRegionAsCpuModified(c - PAGE * 2, PAGE * 2);
338 REQUIRE(rasterizer.Count() == 7);
339}
340
341TEST_CASE("MemoryTracker: Out of bound ranges 3", "[video_core]") {
342 RasterizerInterface rasterizer;
343 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
344 memory_track->UnmarkRegionAsCpuModified(c, 0x310720);
345 REQUIRE(rasterizer.Count(c) == 1);
346 REQUIRE(rasterizer.Count(c + PAGE) == 1);
347 REQUIRE(rasterizer.Count(c + WORD) == 1);
348 REQUIRE(rasterizer.Count(c + WORD + PAGE) == 1);
349}
350
351TEST_CASE("MemoryTracker: Sparse regions 1", "[video_core]") {
352 RasterizerInterface rasterizer;
353 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
354 memory_track->UnmarkRegionAsCpuModified(c, WORD);
355 memory_track->MarkRegionAsCpuModified(c + PAGE * 1, PAGE);
356 memory_track->MarkRegionAsCpuModified(c + PAGE * 3, PAGE * 4);
357 memory_track->ForEachUploadRange(c, WORD, [i = 0](u64 offset, u64 size) mutable {
358 static constexpr std::array<u64, 2> offsets{c + PAGE, c + PAGE * 3};
359 static constexpr std::array<u64, 2> sizes{PAGE, PAGE * 4};
360 REQUIRE(offset == offsets.at(i));
361 REQUIRE(size == sizes.at(i));
362 ++i;
363 });
364}
365
366TEST_CASE("MemoryTracker: Sparse regions 2", "[video_core]") {
367 RasterizerInterface rasterizer;
368 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
369 memory_track->UnmarkRegionAsCpuModified(c, PAGE * 0x23);
370 REQUIRE(rasterizer.Count() == 0x23);
371 memory_track->MarkRegionAsCpuModified(c + PAGE * 0x1B, PAGE);
372 memory_track->MarkRegionAsCpuModified(c + PAGE * 0x21, PAGE);
373 memory_track->ForEachUploadRange(c, PAGE * 0x23, [i = 0](u64 offset, u64 size) mutable {
374 static constexpr std::array<u64, 3> offsets{c + PAGE * 0x1B, c + PAGE * 0x21};
375 static constexpr std::array<u64, 3> sizes{PAGE, PAGE};
376 REQUIRE(offset == offsets.at(i));
377 REQUIRE(size == sizes.at(i));
378 ++i;
379 });
380}
381
382TEST_CASE("MemoryTracker: Single page modified range", "[video_core]") {
383 RasterizerInterface rasterizer;
384 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
385 REQUIRE(memory_track->IsRegionCpuModified(c, PAGE));
386 memory_track->UnmarkRegionAsCpuModified(c, PAGE);
387 REQUIRE(!memory_track->IsRegionCpuModified(c, PAGE));
388}
389
390TEST_CASE("MemoryTracker: Two page modified range", "[video_core]") {
391 RasterizerInterface rasterizer;
392 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
393 REQUIRE(memory_track->IsRegionCpuModified(c, PAGE));
394 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE, PAGE));
395 REQUIRE(memory_track->IsRegionCpuModified(c, PAGE * 2));
396 memory_track->UnmarkRegionAsCpuModified(c, PAGE);
397 REQUIRE(!memory_track->IsRegionCpuModified(c, PAGE));
398}
399
400TEST_CASE("MemoryTracker: Multi word modified ranges", "[video_core]") {
401 for (int offset = 0; offset < 4; ++offset) {
402 const VAddr address = c + WORD * offset;
403 RasterizerInterface rasterizer;
404 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
405 REQUIRE(memory_track->IsRegionCpuModified(address, PAGE));
406 REQUIRE(memory_track->IsRegionCpuModified(address + PAGE * 48, PAGE));
407 REQUIRE(memory_track->IsRegionCpuModified(address + PAGE * 56, PAGE));
408
409 memory_track->UnmarkRegionAsCpuModified(address + PAGE * 32, PAGE);
410 REQUIRE(memory_track->IsRegionCpuModified(address + PAGE, WORD));
411 REQUIRE(memory_track->IsRegionCpuModified(address + PAGE * 31, PAGE));
412 REQUIRE(!memory_track->IsRegionCpuModified(address + PAGE * 32, PAGE));
413 REQUIRE(memory_track->IsRegionCpuModified(address + PAGE * 33, PAGE));
414 REQUIRE(memory_track->IsRegionCpuModified(address + PAGE * 31, PAGE * 2));
415 REQUIRE(memory_track->IsRegionCpuModified(address + PAGE * 32, PAGE * 2));
416
417 memory_track->UnmarkRegionAsCpuModified(address + PAGE * 33, PAGE);
418 REQUIRE(!memory_track->IsRegionCpuModified(address + PAGE * 32, PAGE * 2));
419 }
420}
421
422TEST_CASE("MemoryTracker: Single page in large region", "[video_core]") {
423 RasterizerInterface rasterizer;
424 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
425 memory_track->UnmarkRegionAsCpuModified(c, WORD * 16);
426 REQUIRE(!memory_track->IsRegionCpuModified(c, WORD * 16));
427
428 memory_track->MarkRegionAsCpuModified(c + WORD * 12 + PAGE * 8, PAGE);
429 REQUIRE(memory_track->IsRegionCpuModified(c, WORD * 16));
430 REQUIRE(!memory_track->IsRegionCpuModified(c + WORD * 10, WORD * 2));
431 REQUIRE(memory_track->IsRegionCpuModified(c + WORD * 11, WORD * 2));
432 REQUIRE(memory_track->IsRegionCpuModified(c + WORD * 12, WORD * 2));
433 REQUIRE(memory_track->IsRegionCpuModified(c + WORD * 12 + PAGE * 4, PAGE * 8));
434 REQUIRE(memory_track->IsRegionCpuModified(c + WORD * 12 + PAGE * 6, PAGE * 8));
435 REQUIRE(!memory_track->IsRegionCpuModified(c + WORD * 12 + PAGE * 6, PAGE));
436 REQUIRE(memory_track->IsRegionCpuModified(c + WORD * 12 + PAGE * 7, PAGE * 2));
437 REQUIRE(memory_track->IsRegionCpuModified(c + WORD * 12 + PAGE * 8, PAGE * 2));
438}
439
440TEST_CASE("MemoryTracker: Wrap word regions") {
441 RasterizerInterface rasterizer;
442 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
443 memory_track->UnmarkRegionAsCpuModified(c, WORD * 32);
444 memory_track->MarkRegionAsCpuModified(c + PAGE * 63, PAGE * 2);
445 REQUIRE(memory_track->IsRegionCpuModified(c, WORD * 2));
446 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE * 62, PAGE));
447 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE * 63, PAGE));
448 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE * 64, PAGE));
449 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE * 63, PAGE * 2));
450 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE * 63, PAGE * 8));
451 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE * 60, PAGE * 8));
452
453 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE * 127, WORD * 16));
454 memory_track->MarkRegionAsCpuModified(c + PAGE * 127, PAGE);
455 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE * 127, WORD * 16));
456 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE * 127, PAGE));
457 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE * 126, PAGE));
458 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE * 126, PAGE * 2));
459 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE * 128, WORD * 16));
460}
461
462TEST_CASE("MemoryTracker: Unaligned page region query") {
463 RasterizerInterface rasterizer;
464 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
465 memory_track->UnmarkRegionAsCpuModified(c, WORD);
466 memory_track->MarkRegionAsCpuModified(c + 4000, 1000);
467 REQUIRE(memory_track->IsRegionCpuModified(c, PAGE));
468 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE, PAGE));
469 REQUIRE(memory_track->IsRegionCpuModified(c + 4000, 1000));
470 REQUIRE(memory_track->IsRegionCpuModified(c + 4000, 1));
471}
472
473TEST_CASE("MemoryTracker: Cached write") {
474 RasterizerInterface rasterizer;
475 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
476 memory_track->UnmarkRegionAsCpuModified(c, WORD);
477 memory_track->CachedCpuWrite(c + PAGE, c + PAGE);
478 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE, PAGE));
479 memory_track->FlushCachedWrites();
480 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE, PAGE));
481 memory_track->MarkRegionAsCpuModified(c, WORD);
482 REQUIRE(rasterizer.Count() == 0);
483}
484
485TEST_CASE("MemoryTracker: Multiple cached write") {
486 RasterizerInterface rasterizer;
487 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
488 memory_track->UnmarkRegionAsCpuModified(c, WORD);
489 memory_track->CachedCpuWrite(c + PAGE, PAGE);
490 memory_track->CachedCpuWrite(c + PAGE * 3, PAGE);
491 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE, PAGE));
492 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE * 3, PAGE));
493 memory_track->FlushCachedWrites();
494 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE, PAGE));
495 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE * 3, PAGE));
496 memory_track->MarkRegionAsCpuModified(c, WORD);
497 REQUIRE(rasterizer.Count() == 0);
498}
499
500TEST_CASE("MemoryTracker: Cached write unmarked") {
501 RasterizerInterface rasterizer;
502 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
503 memory_track->UnmarkRegionAsCpuModified(c, WORD);
504 memory_track->CachedCpuWrite(c + PAGE, PAGE);
505 memory_track->UnmarkRegionAsCpuModified(c + PAGE, PAGE);
506 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE, PAGE));
507 memory_track->FlushCachedWrites();
508 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE, PAGE));
509 memory_track->MarkRegionAsCpuModified(c, WORD);
510 REQUIRE(rasterizer.Count() == 0);
511}
512
513TEST_CASE("MemoryTracker: Cached write iterated") {
514 RasterizerInterface rasterizer;
515 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
516 memory_track->UnmarkRegionAsCpuModified(c, WORD);
517 memory_track->CachedCpuWrite(c + PAGE, PAGE);
518 int num = 0;
519 memory_track->ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) { ++num; });
520 REQUIRE(num == 0);
521 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE, PAGE));
522 memory_track->FlushCachedWrites();
523 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE, PAGE));
524 memory_track->MarkRegionAsCpuModified(c, WORD);
525 REQUIRE(rasterizer.Count() == 0);
526}
527
528TEST_CASE("MemoryTracker: Cached write downloads") {
529 RasterizerInterface rasterizer;
530 std::unique_ptr<MemoryTracker> memory_track(std::make_unique<MemoryTracker>(rasterizer));
531 memory_track->UnmarkRegionAsCpuModified(c, WORD);
532 REQUIRE(rasterizer.Count() == 64);
533 memory_track->CachedCpuWrite(c + PAGE, PAGE);
534 REQUIRE(rasterizer.Count() == 63);
535 memory_track->MarkRegionAsGpuModified(c + PAGE, PAGE);
536 int num = 0;
537 memory_track->ForEachDownloadRangeAndClear(c, WORD, [&](u64 offset, u64 size) { ++num; });
538 REQUIRE(num == 1);
539 num = 0;
540 memory_track->ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) { ++num; });
541 REQUIRE(num == 0);
542 REQUIRE(!memory_track->IsRegionCpuModified(c + PAGE, PAGE));
543 REQUIRE(!memory_track->IsRegionGpuModified(c + PAGE, PAGE));
544 memory_track->FlushCachedWrites();
545 REQUIRE(memory_track->IsRegionCpuModified(c + PAGE, PAGE));
546 REQUIRE(!memory_track->IsRegionGpuModified(c + PAGE, PAGE));
547 memory_track->MarkRegionAsCpuModified(c, WORD);
548 REQUIRE(rasterizer.Count() == 0);
549} \ No newline at end of file
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
index e904573d7..92cab93f3 100644
--- a/src/video_core/CMakeLists.txt
+++ b/src/video_core/CMakeLists.txt
@@ -11,8 +11,11 @@ endif()
11 11
12add_library(video_core STATIC 12add_library(video_core STATIC
13 buffer_cache/buffer_base.h 13 buffer_cache/buffer_base.h
14 buffer_cache/buffer_cache_base.h
14 buffer_cache/buffer_cache.cpp 15 buffer_cache/buffer_cache.cpp
15 buffer_cache/buffer_cache.h 16 buffer_cache/buffer_cache.h
17 buffer_cache/memory_tracker_base.h
18 buffer_cache/word_manager.h
16 cache_types.h 19 cache_types.h
17 cdma_pusher.cpp 20 cdma_pusher.cpp
18 cdma_pusher.h 21 cdma_pusher.h
@@ -104,6 +107,7 @@ add_library(video_core STATIC
104 renderer_null/renderer_null.h 107 renderer_null/renderer_null.h
105 renderer_opengl/blit_image.cpp 108 renderer_opengl/blit_image.cpp
106 renderer_opengl/blit_image.h 109 renderer_opengl/blit_image.h
110 renderer_opengl/gl_buffer_cache_base.cpp
107 renderer_opengl/gl_buffer_cache.cpp 111 renderer_opengl/gl_buffer_cache.cpp
108 renderer_opengl/gl_buffer_cache.h 112 renderer_opengl/gl_buffer_cache.h
109 renderer_opengl/gl_compute_pipeline.cpp 113 renderer_opengl/gl_compute_pipeline.cpp
@@ -154,6 +158,7 @@ add_library(video_core STATIC
154 renderer_vulkan/renderer_vulkan.cpp 158 renderer_vulkan/renderer_vulkan.cpp
155 renderer_vulkan/vk_blit_screen.cpp 159 renderer_vulkan/vk_blit_screen.cpp
156 renderer_vulkan/vk_blit_screen.h 160 renderer_vulkan/vk_blit_screen.h
161 renderer_vulkan/vk_buffer_cache_base.cpp
157 renderer_vulkan/vk_buffer_cache.cpp 162 renderer_vulkan/vk_buffer_cache.cpp
158 renderer_vulkan/vk_buffer_cache.h 163 renderer_vulkan/vk_buffer_cache.h
159 renderer_vulkan/vk_command_pool.cpp 164 renderer_vulkan/vk_command_pool.cpp
diff --git a/src/video_core/buffer_cache/buffer_base.h b/src/video_core/buffer_cache/buffer_base.h
index 1b4d63616..9cbd95c4b 100644
--- a/src/video_core/buffer_cache/buffer_base.h
+++ b/src/video_core/buffer_cache/buffer_base.h
@@ -1,5 +1,5 @@
1// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project 1// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later 2// SPDX-License-Identifier: GPL-3.0-or-later
3 3
4#pragma once 4#pragma once
5 5
@@ -11,9 +11,7 @@
11#include "common/alignment.h" 11#include "common/alignment.h"
12#include "common/common_funcs.h" 12#include "common/common_funcs.h"
13#include "common/common_types.h" 13#include "common/common_types.h"
14#include "common/div_ceil.h" 14#include "video_core/buffer_cache/word_manager.h"
15#include "common/settings.h"
16#include "core/memory.h"
17 15
18namespace VideoCommon { 16namespace VideoCommon {
19 17
@@ -36,116 +34,12 @@ struct NullBufferParams {};
36 */ 34 */
37template <class RasterizerInterface> 35template <class RasterizerInterface>
38class BufferBase { 36class BufferBase {
39 static constexpr u64 PAGES_PER_WORD = 64;
40 static constexpr u64 BYTES_PER_PAGE = Core::Memory::YUZU_PAGESIZE;
41 static constexpr u64 BYTES_PER_WORD = PAGES_PER_WORD * BYTES_PER_PAGE;
42
43 /// Vector tracking modified pages tightly packed with small vector optimization
44 union WordsArray {
45 /// Returns the pointer to the words state
46 [[nodiscard]] const u64* Pointer(bool is_short) const noexcept {
47 return is_short ? &stack : heap;
48 }
49
50 /// Returns the pointer to the words state
51 [[nodiscard]] u64* Pointer(bool is_short) noexcept {
52 return is_short ? &stack : heap;
53 }
54
55 u64 stack = 0; ///< Small buffers storage
56 u64* heap; ///< Not-small buffers pointer to the storage
57 };
58
59 struct Words {
60 explicit Words() = default;
61 explicit Words(u64 size_bytes_) : size_bytes{size_bytes_} {
62 if (IsShort()) {
63 cpu.stack = ~u64{0};
64 gpu.stack = 0;
65 cached_cpu.stack = 0;
66 untracked.stack = ~u64{0};
67 } else {
68 // Share allocation between CPU and GPU pages and set their default values
69 const size_t num_words = NumWords();
70 u64* const alloc = new u64[num_words * 4];
71 cpu.heap = alloc;
72 gpu.heap = alloc + num_words;
73 cached_cpu.heap = alloc + num_words * 2;
74 untracked.heap = alloc + num_words * 3;
75 std::fill_n(cpu.heap, num_words, ~u64{0});
76 std::fill_n(gpu.heap, num_words, 0);
77 std::fill_n(cached_cpu.heap, num_words, 0);
78 std::fill_n(untracked.heap, num_words, ~u64{0});
79 }
80 // Clean up tailing bits
81 const u64 last_word_size = size_bytes % BYTES_PER_WORD;
82 const u64 last_local_page = Common::DivCeil(last_word_size, BYTES_PER_PAGE);
83 const u64 shift = (PAGES_PER_WORD - last_local_page) % PAGES_PER_WORD;
84 const u64 last_word = (~u64{0} << shift) >> shift;
85 cpu.Pointer(IsShort())[NumWords() - 1] = last_word;
86 untracked.Pointer(IsShort())[NumWords() - 1] = last_word;
87 }
88
89 ~Words() {
90 Release();
91 }
92
93 Words& operator=(Words&& rhs) noexcept {
94 Release();
95 size_bytes = rhs.size_bytes;
96 cpu = rhs.cpu;
97 gpu = rhs.gpu;
98 cached_cpu = rhs.cached_cpu;
99 untracked = rhs.untracked;
100 rhs.cpu.heap = nullptr;
101 return *this;
102 }
103
104 Words(Words&& rhs) noexcept
105 : size_bytes{rhs.size_bytes}, cpu{rhs.cpu}, gpu{rhs.gpu},
106 cached_cpu{rhs.cached_cpu}, untracked{rhs.untracked} {
107 rhs.cpu.heap = nullptr;
108 }
109
110 Words& operator=(const Words&) = delete;
111 Words(const Words&) = delete;
112
113 /// Returns true when the buffer fits in the small vector optimization
114 [[nodiscard]] bool IsShort() const noexcept {
115 return size_bytes <= BYTES_PER_WORD;
116 }
117
118 /// Returns the number of words of the buffer
119 [[nodiscard]] size_t NumWords() const noexcept {
120 return Common::DivCeil(size_bytes, BYTES_PER_WORD);
121 }
122
123 /// Release buffer resources
124 void Release() {
125 if (!IsShort()) {
126 // CPU written words is the base for the heap allocation
127 delete[] cpu.heap;
128 }
129 }
130
131 u64 size_bytes = 0;
132 WordsArray cpu;
133 WordsArray gpu;
134 WordsArray cached_cpu;
135 WordsArray untracked;
136 };
137
138 enum class Type {
139 CPU,
140 GPU,
141 CachedCPU,
142 Untracked,
143 };
144
145public: 37public:
146 explicit BufferBase(RasterizerInterface& rasterizer_, VAddr cpu_addr_, u64 size_bytes) 38 static constexpr u64 BASE_PAGE_BITS = 16;
147 : rasterizer{&rasterizer_}, cpu_addr{Common::AlignDown(cpu_addr_, BYTES_PER_PAGE)}, 39 static constexpr u64 BASE_PAGE_SIZE = 1ULL << BASE_PAGE_BITS;
148 words(Common::AlignUp(size_bytes + (cpu_addr_ - cpu_addr), BYTES_PER_PAGE)) {} 40
41 explicit BufferBase(RasterizerInterface& rasterizer_, VAddr cpu_addr_, u64 size_bytes_)
42 : cpu_addr{cpu_addr_}, size_bytes{size_bytes_} {}
149 43
150 explicit BufferBase(NullBufferParams) {} 44 explicit BufferBase(NullBufferParams) {}
151 45
@@ -155,100 +49,6 @@ public:
155 BufferBase& operator=(BufferBase&&) = default; 49 BufferBase& operator=(BufferBase&&) = default;
156 BufferBase(BufferBase&&) = default; 50 BufferBase(BufferBase&&) = default;
157 51
158 /// Returns the inclusive CPU modified range in a begin end pair
159 [[nodiscard]] std::pair<u64, u64> ModifiedCpuRegion(VAddr query_cpu_addr,
160 u64 query_size) const noexcept {
161 const u64 offset = query_cpu_addr - cpu_addr;
162 return ModifiedRegion<Type::CPU>(offset, query_size);
163 }
164
165 /// Returns the inclusive GPU modified range in a begin end pair
166 [[nodiscard]] std::pair<u64, u64> ModifiedGpuRegion(VAddr query_cpu_addr,
167 u64 query_size) const noexcept {
168 const u64 offset = query_cpu_addr - cpu_addr;
169 return ModifiedRegion<Type::GPU>(offset, query_size);
170 }
171
172 /// Returns true if a region has been modified from the CPU
173 [[nodiscard]] bool IsRegionCpuModified(VAddr query_cpu_addr, u64 query_size) const noexcept {
174 const u64 offset = query_cpu_addr - cpu_addr;
175 return IsRegionModified<Type::CPU>(offset, query_size);
176 }
177
178 /// Returns true if a region has been modified from the GPU
179 [[nodiscard]] bool IsRegionGpuModified(VAddr query_cpu_addr, u64 query_size) const noexcept {
180 const u64 offset = query_cpu_addr - cpu_addr;
181 return IsRegionModified<Type::GPU>(offset, query_size);
182 }
183
184 /// Mark region as CPU modified, notifying the rasterizer about this change
185 void MarkRegionAsCpuModified(VAddr dirty_cpu_addr, u64 size) {
186 ChangeRegionState<Type::CPU, true>(dirty_cpu_addr, size);
187 }
188
189 /// Unmark region as CPU modified, notifying the rasterizer about this change
190 void UnmarkRegionAsCpuModified(VAddr dirty_cpu_addr, u64 size) {
191 ChangeRegionState<Type::CPU, false>(dirty_cpu_addr, size);
192 }
193
194 /// Mark region as modified from the host GPU
195 void MarkRegionAsGpuModified(VAddr dirty_cpu_addr, u64 size) noexcept {
196 ChangeRegionState<Type::GPU, true>(dirty_cpu_addr, size);
197 }
198
199 /// Unmark region as modified from the host GPU
200 void UnmarkRegionAsGpuModified(VAddr dirty_cpu_addr, u64 size) noexcept {
201 ChangeRegionState<Type::GPU, false>(dirty_cpu_addr, size);
202 }
203
204 /// Mark region as modified from the CPU
205 /// but don't mark it as modified until FlusHCachedWrites is called.
206 void CachedCpuWrite(VAddr dirty_cpu_addr, u64 size) {
207 flags |= BufferFlagBits::CachedWrites;
208 ChangeRegionState<Type::CachedCPU, true>(dirty_cpu_addr, size);
209 }
210
211 /// Flushes cached CPU writes, and notify the rasterizer about the deltas
212 void FlushCachedWrites() noexcept {
213 flags &= ~BufferFlagBits::CachedWrites;
214 const u64 num_words = NumWords();
215 u64* const cached_words = Array<Type::CachedCPU>();
216 u64* const untracked_words = Array<Type::Untracked>();
217 u64* const cpu_words = Array<Type::CPU>();
218 for (u64 word_index = 0; word_index < num_words; ++word_index) {
219 const u64 cached_bits = cached_words[word_index];
220 NotifyRasterizer<false>(word_index, untracked_words[word_index], cached_bits);
221 untracked_words[word_index] |= cached_bits;
222 cpu_words[word_index] |= cached_bits;
223 if (!Settings::values.use_pessimistic_flushes) {
224 cached_words[word_index] = 0;
225 }
226 }
227 }
228
229 /// Call 'func' for each CPU modified range and unmark those pages as CPU modified
230 template <typename Func>
231 void ForEachUploadRange(VAddr query_cpu_range, u64 size, Func&& func) {
232 ForEachModifiedRange<Type::CPU>(query_cpu_range, size, true, func);
233 }
234
235 /// Call 'func' for each GPU modified range and unmark those pages as GPU modified
236 template <typename Func>
237 void ForEachDownloadRange(VAddr query_cpu_range, u64 size, bool clear, Func&& func) {
238 ForEachModifiedRange<Type::GPU>(query_cpu_range, size, clear, func);
239 }
240
241 template <typename Func>
242 void ForEachDownloadRangeAndClear(VAddr query_cpu_range, u64 size, Func&& func) {
243 ForEachModifiedRange<Type::GPU>(query_cpu_range, size, true, func);
244 }
245
246 /// Call 'func' for each GPU modified range and unmark those pages as GPU modified
247 template <typename Func>
248 void ForEachDownloadRange(Func&& func) {
249 ForEachModifiedRange<Type::GPU>(cpu_addr, SizeBytes(), true, func);
250 }
251
252 /// Mark buffer as picked 52 /// Mark buffer as picked
253 void Pick() noexcept { 53 void Pick() noexcept {
254 flags |= BufferFlagBits::Picked; 54 flags |= BufferFlagBits::Picked;
@@ -295,11 +95,6 @@ public:
295 return static_cast<u32>(other_cpu_addr - cpu_addr); 95 return static_cast<u32>(other_cpu_addr - cpu_addr);
296 } 96 }
297 97
298 /// Returns the size in bytes of the buffer
299 [[nodiscard]] u64 SizeBytes() const noexcept {
300 return words.size_bytes;
301 }
302
303 size_t getLRUID() const noexcept { 98 size_t getLRUID() const noexcept {
304 return lru_id; 99 return lru_id;
305 } 100 }
@@ -308,305 +103,16 @@ public:
308 lru_id = lru_id_; 103 lru_id = lru_id_;
309 } 104 }
310 105
311private: 106 size_t SizeBytes() const {
312 template <Type type> 107 return size_bytes;
313 u64* Array() noexcept {
314 if constexpr (type == Type::CPU) {
315 return words.cpu.Pointer(IsShort());
316 } else if constexpr (type == Type::GPU) {
317 return words.gpu.Pointer(IsShort());
318 } else if constexpr (type == Type::CachedCPU) {
319 return words.cached_cpu.Pointer(IsShort());
320 } else if constexpr (type == Type::Untracked) {
321 return words.untracked.Pointer(IsShort());
322 }
323 }
324
325 template <Type type>
326 const u64* Array() const noexcept {
327 if constexpr (type == Type::CPU) {
328 return words.cpu.Pointer(IsShort());
329 } else if constexpr (type == Type::GPU) {
330 return words.gpu.Pointer(IsShort());
331 } else if constexpr (type == Type::CachedCPU) {
332 return words.cached_cpu.Pointer(IsShort());
333 } else if constexpr (type == Type::Untracked) {
334 return words.untracked.Pointer(IsShort());
335 }
336 }
337
338 /**
339 * Change the state of a range of pages
340 *
341 * @param dirty_addr Base address to mark or unmark as modified
342 * @param size Size in bytes to mark or unmark as modified
343 */
344 template <Type type, bool enable>
345 void ChangeRegionState(u64 dirty_addr, s64 size) noexcept(type == Type::GPU) {
346 const s64 difference = dirty_addr - cpu_addr;
347 const u64 offset = std::max<s64>(difference, 0);
348 size += std::min<s64>(difference, 0);
349 if (offset >= SizeBytes() || size < 0) {
350 return;
351 }
352 u64* const untracked_words = Array<Type::Untracked>();
353 u64* const state_words = Array<type>();
354 const u64 offset_end = std::min(offset + size, SizeBytes());
355 const u64 begin_page_index = offset / BYTES_PER_PAGE;
356 const u64 begin_word_index = begin_page_index / PAGES_PER_WORD;
357 const u64 end_page_index = Common::DivCeil(offset_end, BYTES_PER_PAGE);
358 const u64 end_word_index = Common::DivCeil(end_page_index, PAGES_PER_WORD);
359 u64 page_index = begin_page_index % PAGES_PER_WORD;
360 u64 word_index = begin_word_index;
361 while (word_index < end_word_index) {
362 const u64 next_word_first_page = (word_index + 1) * PAGES_PER_WORD;
363 const u64 left_offset =
364 std::min(next_word_first_page - end_page_index, PAGES_PER_WORD) % PAGES_PER_WORD;
365 const u64 right_offset = page_index;
366 u64 bits = ~u64{0};
367 bits = (bits >> right_offset) << right_offset;
368 bits = (bits << left_offset) >> left_offset;
369 if constexpr (type == Type::CPU || type == Type::CachedCPU) {
370 NotifyRasterizer<!enable>(word_index, untracked_words[word_index], bits);
371 }
372 if constexpr (enable) {
373 state_words[word_index] |= bits;
374 if constexpr (type == Type::CPU || type == Type::CachedCPU) {
375 untracked_words[word_index] |= bits;
376 }
377 } else {
378 state_words[word_index] &= ~bits;
379 if constexpr (type == Type::CPU || type == Type::CachedCPU) {
380 untracked_words[word_index] &= ~bits;
381 }
382 }
383 page_index = 0;
384 ++word_index;
385 }
386 }
387
388 /**
389 * Notify rasterizer about changes in the CPU tracking state of a word in the buffer
390 *
391 * @param word_index Index to the word to notify to the rasterizer
392 * @param current_bits Current state of the word
393 * @param new_bits New state of the word
394 *
395 * @tparam add_to_rasterizer True when the rasterizer should start tracking the new pages
396 */
397 template <bool add_to_rasterizer>
398 void NotifyRasterizer(u64 word_index, u64 current_bits, u64 new_bits) const {
399 u64 changed_bits = (add_to_rasterizer ? current_bits : ~current_bits) & new_bits;
400 VAddr addr = cpu_addr + word_index * BYTES_PER_WORD;
401 while (changed_bits != 0) {
402 const int empty_bits = std::countr_zero(changed_bits);
403 addr += empty_bits * BYTES_PER_PAGE;
404 changed_bits >>= empty_bits;
405
406 const u32 continuous_bits = std::countr_one(changed_bits);
407 const u64 size = continuous_bits * BYTES_PER_PAGE;
408 const VAddr begin_addr = addr;
409 addr += size;
410 changed_bits = continuous_bits < PAGES_PER_WORD ? (changed_bits >> continuous_bits) : 0;
411 rasterizer->UpdatePagesCachedCount(begin_addr, size, add_to_rasterizer ? 1 : -1);
412 }
413 }
414
415 /**
416 * Loop over each page in the given range, turn off those bits and notify the rasterizer if
417 * needed. Call the given function on each turned off range.
418 *
419 * @param query_cpu_range Base CPU address to loop over
420 * @param size Size in bytes of the CPU range to loop over
421 * @param func Function to call for each turned off region
422 */
423 template <Type type, typename Func>
424 void ForEachModifiedRange(VAddr query_cpu_range, s64 size, bool clear, Func&& func) {
425 static_assert(type != Type::Untracked);
426
427 const s64 difference = query_cpu_range - cpu_addr;
428 const u64 query_begin = std::max<s64>(difference, 0);
429 size += std::min<s64>(difference, 0);
430 if (query_begin >= SizeBytes() || size < 0) {
431 return;
432 }
433 u64* const untracked_words = Array<Type::Untracked>();
434 u64* const state_words = Array<type>();
435 const u64 query_end = query_begin + std::min(static_cast<u64>(size), SizeBytes());
436 u64* const words_begin = state_words + query_begin / BYTES_PER_WORD;
437 u64* const words_end = state_words + Common::DivCeil(query_end, BYTES_PER_WORD);
438
439 const auto modified = [](u64 word) { return word != 0; };
440 const auto first_modified_word = std::find_if(words_begin, words_end, modified);
441 if (first_modified_word == words_end) {
442 // Exit early when the buffer is not modified
443 return;
444 }
445 const auto last_modified_word = std::find_if_not(first_modified_word, words_end, modified);
446
447 const u64 word_index_begin = std::distance(state_words, first_modified_word);
448 const u64 word_index_end = std::distance(state_words, last_modified_word);
449
450 const unsigned local_page_begin = std::countr_zero(*first_modified_word);
451 const unsigned local_page_end =
452 static_cast<unsigned>(PAGES_PER_WORD) - std::countl_zero(last_modified_word[-1]);
453 const u64 word_page_begin = word_index_begin * PAGES_PER_WORD;
454 const u64 word_page_end = (word_index_end - 1) * PAGES_PER_WORD;
455 const u64 query_page_begin = query_begin / BYTES_PER_PAGE;
456 const u64 query_page_end = Common::DivCeil(query_end, BYTES_PER_PAGE);
457 const u64 page_index_begin = std::max(word_page_begin + local_page_begin, query_page_begin);
458 const u64 page_index_end = std::min(word_page_end + local_page_end, query_page_end);
459 const u64 first_word_page_begin = page_index_begin % PAGES_PER_WORD;
460 const u64 last_word_page_end = (page_index_end - 1) % PAGES_PER_WORD + 1;
461
462 u64 page_begin = first_word_page_begin;
463 u64 current_base = 0;
464 u64 current_size = 0;
465 bool on_going = false;
466 for (u64 word_index = word_index_begin; word_index < word_index_end; ++word_index) {
467 const bool is_last_word = word_index + 1 == word_index_end;
468 const u64 page_end = is_last_word ? last_word_page_end : PAGES_PER_WORD;
469 const u64 right_offset = page_begin;
470 const u64 left_offset = PAGES_PER_WORD - page_end;
471 u64 bits = ~u64{0};
472 bits = (bits >> right_offset) << right_offset;
473 bits = (bits << left_offset) >> left_offset;
474
475 const u64 current_word = state_words[word_index] & bits;
476 if (clear) {
477 state_words[word_index] &= ~bits;
478 }
479
480 if constexpr (type == Type::CPU) {
481 const u64 current_bits = untracked_words[word_index] & bits;
482 untracked_words[word_index] &= ~bits;
483 NotifyRasterizer<true>(word_index, current_bits, ~u64{0});
484 }
485 // Exclude CPU modified pages when visiting GPU pages
486 const u64 word = current_word & ~(type == Type::GPU ? untracked_words[word_index] : 0);
487 u64 page = page_begin;
488 page_begin = 0;
489
490 while (page < page_end) {
491 const int empty_bits = std::countr_zero(word >> page);
492 if (on_going && empty_bits != 0) {
493 InvokeModifiedRange(func, current_size, current_base);
494 current_size = 0;
495 on_going = false;
496 }
497 if (empty_bits == PAGES_PER_WORD) {
498 break;
499 }
500 page += empty_bits;
501
502 const int continuous_bits = std::countr_one(word >> page);
503 if (!on_going && continuous_bits != 0) {
504 current_base = word_index * PAGES_PER_WORD + page;
505 on_going = true;
506 }
507 current_size += continuous_bits;
508 page += continuous_bits;
509 }
510 }
511 if (on_going && current_size > 0) {
512 InvokeModifiedRange(func, current_size, current_base);
513 }
514 }
515
516 template <typename Func>
517 void InvokeModifiedRange(Func&& func, u64 current_size, u64 current_base) {
518 const u64 current_size_bytes = current_size * BYTES_PER_PAGE;
519 const u64 offset_begin = current_base * BYTES_PER_PAGE;
520 const u64 offset_end = std::min(offset_begin + current_size_bytes, SizeBytes());
521 func(offset_begin, offset_end - offset_begin);
522 } 108 }
523 109
524 /** 110private:
525 * Returns true when a region has been modified
526 *
527 * @param offset Offset in bytes from the start of the buffer
528 * @param size Size in bytes of the region to query for modifications
529 */
530 template <Type type>
531 [[nodiscard]] bool IsRegionModified(u64 offset, u64 size) const noexcept {
532 static_assert(type != Type::Untracked);
533
534 const u64* const untracked_words = Array<Type::Untracked>();
535 const u64* const state_words = Array<type>();
536 const u64 num_query_words = size / BYTES_PER_WORD + 1;
537 const u64 word_begin = offset / BYTES_PER_WORD;
538 const u64 word_end = std::min<u64>(word_begin + num_query_words, NumWords());
539 const u64 page_limit = Common::DivCeil(offset + size, BYTES_PER_PAGE);
540 u64 page_index = (offset / BYTES_PER_PAGE) % PAGES_PER_WORD;
541 for (u64 word_index = word_begin; word_index < word_end; ++word_index, page_index = 0) {
542 const u64 off_word = type == Type::GPU ? untracked_words[word_index] : 0;
543 const u64 word = state_words[word_index] & ~off_word;
544 if (word == 0) {
545 continue;
546 }
547 const u64 page_end = std::min((word_index + 1) * PAGES_PER_WORD, page_limit);
548 const u64 local_page_end = page_end % PAGES_PER_WORD;
549 const u64 page_end_shift = (PAGES_PER_WORD - local_page_end) % PAGES_PER_WORD;
550 if (((word >> page_index) << page_index) << page_end_shift != 0) {
551 return true;
552 }
553 }
554 return false;
555 }
556
557 /**
558 * Returns a begin end pair with the inclusive modified region
559 *
560 * @param offset Offset in bytes from the start of the buffer
561 * @param size Size in bytes of the region to query for modifications
562 */
563 template <Type type>
564 [[nodiscard]] std::pair<u64, u64> ModifiedRegion(u64 offset, u64 size) const noexcept {
565 static_assert(type != Type::Untracked);
566
567 const u64* const untracked_words = Array<Type::Untracked>();
568 const u64* const state_words = Array<type>();
569 const u64 num_query_words = size / BYTES_PER_WORD + 1;
570 const u64 word_begin = offset / BYTES_PER_WORD;
571 const u64 word_end = std::min<u64>(word_begin + num_query_words, NumWords());
572 const u64 page_base = offset / BYTES_PER_PAGE;
573 const u64 page_limit = Common::DivCeil(offset + size, BYTES_PER_PAGE);
574 u64 begin = std::numeric_limits<u64>::max();
575 u64 end = 0;
576 for (u64 word_index = word_begin; word_index < word_end; ++word_index) {
577 const u64 off_word = type == Type::GPU ? untracked_words[word_index] : 0;
578 const u64 word = state_words[word_index] & ~off_word;
579 if (word == 0) {
580 continue;
581 }
582 const u64 local_page_begin = std::countr_zero(word);
583 const u64 local_page_end = PAGES_PER_WORD - std::countl_zero(word);
584 const u64 page_index = word_index * PAGES_PER_WORD;
585 const u64 page_begin = std::max(page_index + local_page_begin, page_base);
586 const u64 page_end = std::min(page_index + local_page_end, page_limit);
587 begin = std::min(begin, page_begin);
588 end = std::max(end, page_end);
589 }
590 static constexpr std::pair<u64, u64> EMPTY{0, 0};
591 return begin < end ? std::make_pair(begin * BYTES_PER_PAGE, end * BYTES_PER_PAGE) : EMPTY;
592 }
593
594 /// Returns the number of words of the buffer
595 [[nodiscard]] size_t NumWords() const noexcept {
596 return words.NumWords();
597 }
598
599 /// Returns true when the buffer fits in the small vector optimization
600 [[nodiscard]] bool IsShort() const noexcept {
601 return words.IsShort();
602 }
603
604 RasterizerInterface* rasterizer = nullptr;
605 VAddr cpu_addr = 0; 111 VAddr cpu_addr = 0;
606 Words words;
607 BufferFlagBits flags{}; 112 BufferFlagBits flags{};
608 int stream_score = 0; 113 int stream_score = 0;
609 size_t lru_id = SIZE_MAX; 114 size_t lru_id = SIZE_MAX;
115 size_t size_bytes = 0;
610}; 116};
611 117
612} // namespace VideoCommon 118} // namespace VideoCommon
diff --git a/src/video_core/buffer_cache/buffer_cache.cpp b/src/video_core/buffer_cache/buffer_cache.cpp
index a16308b60..40db243d2 100644
--- a/src/video_core/buffer_cache/buffer_cache.cpp
+++ b/src/video_core/buffer_cache/buffer_cache.cpp
@@ -1,5 +1,5 @@
1// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project 1// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later 2// SPDX-License-Identifier: GPL-3.0-or-later
3 3
4#include "common/microprofile.h" 4#include "common/microprofile.h"
5 5
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index abdc593df..7975564b5 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -1,485 +1,29 @@
1// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project 1// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later 2// SPDX-License-Identifier: GPL-3.0-or-later
3 3
4#pragma once 4#pragma once
5 5
6#include <algorithm> 6#include <algorithm>
7#include <array>
8#include <memory> 7#include <memory>
9#include <mutex>
10#include <numeric> 8#include <numeric>
11#include <span>
12#include <vector>
13
14#include <boost/container/small_vector.hpp>
15#include <boost/icl/interval_set.hpp>
16
17#include "common/common_types.h"
18#include "common/div_ceil.h"
19#include "common/literals.h"
20#include "common/lru_cache.h"
21#include "common/microprofile.h"
22#include "common/polyfill_ranges.h"
23#include "common/scratch_buffer.h"
24#include "common/settings.h"
25#include "core/memory.h"
26#include "video_core/buffer_cache/buffer_base.h"
27#include "video_core/control/channel_state_cache.h"
28#include "video_core/delayed_destruction_ring.h"
29#include "video_core/dirty_flags.h"
30#include "video_core/engines/draw_manager.h"
31#include "video_core/engines/kepler_compute.h"
32#include "video_core/engines/maxwell_3d.h"
33#include "video_core/memory_manager.h"
34#include "video_core/rasterizer_interface.h"
35#include "video_core/surface.h"
36#include "video_core/texture_cache/slot_vector.h"
37#include "video_core/texture_cache/types.h"
38 9
39namespace VideoCommon { 10#include "video_core/buffer_cache/buffer_cache_base.h"
40
41MICROPROFILE_DECLARE(GPU_PrepareBuffers);
42MICROPROFILE_DECLARE(GPU_BindUploadBuffers);
43MICROPROFILE_DECLARE(GPU_DownloadMemory);
44
45using BufferId = SlotId;
46
47using VideoCore::Surface::PixelFormat;
48using namespace Common::Literals;
49
50constexpr u32 NUM_VERTEX_BUFFERS = 32;
51constexpr u32 NUM_TRANSFORM_FEEDBACK_BUFFERS = 4;
52constexpr u32 NUM_GRAPHICS_UNIFORM_BUFFERS = 18;
53constexpr u32 NUM_COMPUTE_UNIFORM_BUFFERS = 8;
54constexpr u32 NUM_STORAGE_BUFFERS = 16;
55constexpr u32 NUM_TEXTURE_BUFFERS = 16;
56constexpr u32 NUM_STAGES = 5;
57
58enum class ObtainBufferSynchronize : u32 {
59 NoSynchronize = 0,
60 FullSynchronize = 1,
61 SynchronizeNoDirty = 2,
62};
63
64enum class ObtainBufferOperation : u32 {
65 DoNothing = 0,
66 MarkAsWritten = 1,
67 DiscardWrite = 2,
68 MarkQuery = 3,
69};
70
71using UniformBufferSizes = std::array<std::array<u32, NUM_GRAPHICS_UNIFORM_BUFFERS>, NUM_STAGES>;
72using ComputeUniformBufferSizes = std::array<u32, NUM_COMPUTE_UNIFORM_BUFFERS>;
73
74template <typename P>
75class BufferCache : public VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> {
76
77 // Page size for caching purposes.
78 // This is unrelated to the CPU page size and it can be changed as it seems optimal.
79 static constexpr u32 YUZU_PAGEBITS = 16;
80 static constexpr u64 YUZU_PAGESIZE = u64{1} << YUZU_PAGEBITS;
81
82 static constexpr bool IS_OPENGL = P::IS_OPENGL;
83 static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS =
84 P::HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS;
85 static constexpr bool HAS_FULL_INDEX_AND_PRIMITIVE_SUPPORT =
86 P::HAS_FULL_INDEX_AND_PRIMITIVE_SUPPORT;
87 static constexpr bool NEEDS_BIND_UNIFORM_INDEX = P::NEEDS_BIND_UNIFORM_INDEX;
88 static constexpr bool NEEDS_BIND_STORAGE_INDEX = P::NEEDS_BIND_STORAGE_INDEX;
89 static constexpr bool USE_MEMORY_MAPS = P::USE_MEMORY_MAPS;
90 static constexpr bool SEPARATE_IMAGE_BUFFERS_BINDINGS = P::SEPARATE_IMAGE_BUFFER_BINDINGS;
91
92 static constexpr BufferId NULL_BUFFER_ID{0};
93
94 static constexpr s64 DEFAULT_EXPECTED_MEMORY = 512_MiB;
95 static constexpr s64 DEFAULT_CRITICAL_MEMORY = 1_GiB;
96 static constexpr s64 TARGET_THRESHOLD = 4_GiB;
97
98 using Maxwell = Tegra::Engines::Maxwell3D::Regs;
99
100 using Runtime = typename P::Runtime;
101 using Buffer = typename P::Buffer;
102
103 using IntervalSet = boost::icl::interval_set<VAddr>;
104 using IntervalType = typename IntervalSet::interval_type;
105
106 struct Empty {};
107
108 struct OverlapResult {
109 std::vector<BufferId> ids;
110 VAddr begin;
111 VAddr end;
112 bool has_stream_leap = false;
113 };
114
115 struct Binding {
116 VAddr cpu_addr{};
117 u32 size{};
118 BufferId buffer_id;
119 };
120
121 struct TextureBufferBinding : Binding {
122 PixelFormat format;
123 };
124
125 static constexpr Binding NULL_BINDING{
126 .cpu_addr = 0,
127 .size = 0,
128 .buffer_id = NULL_BUFFER_ID,
129 };
130
131public:
132 static constexpr u32 DEFAULT_SKIP_CACHE_SIZE = static_cast<u32>(4_KiB);
133
134 explicit BufferCache(VideoCore::RasterizerInterface& rasterizer_,
135 Core::Memory::Memory& cpu_memory_, Runtime& runtime_);
136
137 void TickFrame();
138
139 void WriteMemory(VAddr cpu_addr, u64 size);
140
141 void CachedWriteMemory(VAddr cpu_addr, u64 size);
142
143 void DownloadMemory(VAddr cpu_addr, u64 size);
144
145 bool InlineMemory(VAddr dest_address, size_t copy_size, std::span<const u8> inlined_buffer);
146
147 void BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr gpu_addr, u32 size);
148
149 void DisableGraphicsUniformBuffer(size_t stage, u32 index);
150
151 void UpdateGraphicsBuffers(bool is_indexed);
152
153 void UpdateComputeBuffers();
154
155 void BindHostGeometryBuffers(bool is_indexed);
156
157 void BindHostStageBuffers(size_t stage);
158
159 void BindHostComputeBuffers();
160
161 void SetUniformBuffersState(const std::array<u32, NUM_STAGES>& mask,
162 const UniformBufferSizes* sizes);
163
164 void SetComputeUniformBufferState(u32 mask, const ComputeUniformBufferSizes* sizes);
165
166 void UnbindGraphicsStorageBuffers(size_t stage);
167
168 void BindGraphicsStorageBuffer(size_t stage, size_t ssbo_index, u32 cbuf_index, u32 cbuf_offset,
169 bool is_written);
170
171 void UnbindGraphicsTextureBuffers(size_t stage);
172
173 void BindGraphicsTextureBuffer(size_t stage, size_t tbo_index, GPUVAddr gpu_addr, u32 size,
174 PixelFormat format, bool is_written, bool is_image);
175
176 void UnbindComputeStorageBuffers();
177
178 void BindComputeStorageBuffer(size_t ssbo_index, u32 cbuf_index, u32 cbuf_offset,
179 bool is_written);
180
181 void UnbindComputeTextureBuffers();
182
183 void BindComputeTextureBuffer(size_t tbo_index, GPUVAddr gpu_addr, u32 size, PixelFormat format,
184 bool is_written, bool is_image);
185
186 void FlushCachedWrites();
187
188 /// Return true when there are uncommitted buffers to be downloaded
189 [[nodiscard]] bool HasUncommittedFlushes() const noexcept;
190
191 void AccumulateFlushes();
192
193 /// Return true when the caller should wait for async downloads
194 [[nodiscard]] bool ShouldWaitAsyncFlushes() const noexcept;
195
196 /// Commit asynchronous downloads
197 void CommitAsyncFlushes();
198 void CommitAsyncFlushesHigh();
199
200 /// Pop asynchronous downloads
201 void PopAsyncFlushes();
202
203 bool DMACopy(GPUVAddr src_address, GPUVAddr dest_address, u64 amount);
204
205 bool DMAClear(GPUVAddr src_address, u64 amount, u32 value);
206
207 [[nodiscard]] std::pair<Buffer*, u32> ObtainBuffer(GPUVAddr gpu_addr, u32 size,
208 ObtainBufferSynchronize sync_info,
209 ObtainBufferOperation post_op);
210
211 /// Return true when a CPU region is modified from the GPU
212 [[nodiscard]] bool IsRegionGpuModified(VAddr addr, size_t size);
213
214 /// Return true when a region is registered on the cache
215 [[nodiscard]] bool IsRegionRegistered(VAddr addr, size_t size);
216
217 /// Return true when a CPU region is modified from the CPU
218 [[nodiscard]] bool IsRegionCpuModified(VAddr addr, size_t size);
219
220 void SetDrawIndirect(
221 const Tegra::Engines::DrawManager::IndirectParams* current_draw_indirect_) {
222 current_draw_indirect = current_draw_indirect_;
223 }
224
225 [[nodiscard]] std::pair<Buffer*, u32> GetDrawIndirectCount();
226
227 [[nodiscard]] std::pair<Buffer*, u32> GetDrawIndirectBuffer();
228
229 std::recursive_mutex mutex;
230 Runtime& runtime;
231
232private:
233 template <typename Func>
234 static void ForEachEnabledBit(u32 enabled_mask, Func&& func) {
235 for (u32 index = 0; enabled_mask != 0; ++index, enabled_mask >>= 1) {
236 const int disabled_bits = std::countr_zero(enabled_mask);
237 index += disabled_bits;
238 enabled_mask >>= disabled_bits;
239 func(index);
240 }
241 }
242
243 template <typename Func>
244 void ForEachBufferInRange(VAddr cpu_addr, u64 size, Func&& func) {
245 const u64 page_end = Common::DivCeil(cpu_addr + size, YUZU_PAGESIZE);
246 for (u64 page = cpu_addr >> YUZU_PAGEBITS; page < page_end;) {
247 const BufferId buffer_id = page_table[page];
248 if (!buffer_id) {
249 ++page;
250 continue;
251 }
252 Buffer& buffer = slot_buffers[buffer_id];
253 func(buffer_id, buffer);
254
255 const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes();
256 page = Common::DivCeil(end_addr, YUZU_PAGESIZE);
257 }
258 }
259
260 template <typename Func>
261 void ForEachWrittenRange(VAddr cpu_addr, u64 size, Func&& func) {
262 const VAddr start_address = cpu_addr;
263 const VAddr end_address = start_address + size;
264 const VAddr search_base =
265 static_cast<VAddr>(std::min<s64>(0LL, static_cast<s64>(start_address - size)));
266 const IntervalType search_interval{search_base, search_base + 1};
267 auto it = common_ranges.lower_bound(search_interval);
268 if (it == common_ranges.end()) {
269 it = common_ranges.begin();
270 }
271 for (; it != common_ranges.end(); it++) {
272 VAddr inter_addr_end = it->upper();
273 VAddr inter_addr = it->lower();
274 if (inter_addr >= end_address) {
275 break;
276 }
277 if (inter_addr_end <= start_address) {
278 continue;
279 }
280 if (inter_addr_end > end_address) {
281 inter_addr_end = end_address;
282 }
283 if (inter_addr < start_address) {
284 inter_addr = start_address;
285 }
286 func(inter_addr, inter_addr_end);
287 }
288 }
289
290 static bool IsRangeGranular(VAddr cpu_addr, size_t size) {
291 return (cpu_addr & ~Core::Memory::YUZU_PAGEMASK) ==
292 ((cpu_addr + size) & ~Core::Memory::YUZU_PAGEMASK);
293 }
294
295 void RunGarbageCollector();
296
297 void BindHostIndexBuffer();
298
299 void BindHostVertexBuffers();
300
301 void BindHostDrawIndirectBuffers();
302
303 void BindHostGraphicsUniformBuffers(size_t stage);
304
305 void BindHostGraphicsUniformBuffer(size_t stage, u32 index, u32 binding_index, bool needs_bind);
306
307 void BindHostGraphicsStorageBuffers(size_t stage);
308
309 void BindHostGraphicsTextureBuffers(size_t stage);
310
311 void BindHostTransformFeedbackBuffers();
312
313 void BindHostComputeUniformBuffers();
314
315 void BindHostComputeStorageBuffers();
316
317 void BindHostComputeTextureBuffers();
318
319 void DoUpdateGraphicsBuffers(bool is_indexed);
320
321 void DoUpdateComputeBuffers();
322
323 void UpdateIndexBuffer();
324
325 void UpdateVertexBuffers();
326
327 void UpdateVertexBuffer(u32 index);
328
329 void UpdateDrawIndirect();
330
331 void UpdateUniformBuffers(size_t stage);
332
333 void UpdateStorageBuffers(size_t stage);
334
335 void UpdateTextureBuffers(size_t stage);
336
337 void UpdateTransformFeedbackBuffers();
338
339 void UpdateTransformFeedbackBuffer(u32 index);
340
341 void UpdateComputeUniformBuffers();
342
343 void UpdateComputeStorageBuffers();
344
345 void UpdateComputeTextureBuffers();
346
347 void MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 size);
348
349 [[nodiscard]] BufferId FindBuffer(VAddr cpu_addr, u32 size);
350
351 [[nodiscard]] OverlapResult ResolveOverlaps(VAddr cpu_addr, u32 wanted_size);
352
353 void JoinOverlap(BufferId new_buffer_id, BufferId overlap_id, bool accumulate_stream_score);
354
355 [[nodiscard]] BufferId CreateBuffer(VAddr cpu_addr, u32 wanted_size);
356
357 void Register(BufferId buffer_id);
358
359 void Unregister(BufferId buffer_id);
360
361 template <bool insert>
362 void ChangeRegister(BufferId buffer_id);
363
364 void TouchBuffer(Buffer& buffer, BufferId buffer_id) noexcept;
365
366 bool SynchronizeBuffer(Buffer& buffer, VAddr cpu_addr, u32 size);
367
368 bool SynchronizeBufferImpl(Buffer& buffer, VAddr cpu_addr, u32 size);
369
370 void UploadMemory(Buffer& buffer, u64 total_size_bytes, u64 largest_copy,
371 std::span<BufferCopy> copies);
372
373 void ImmediateUploadMemory(Buffer& buffer, u64 largest_copy,
374 std::span<const BufferCopy> copies);
375
376 void MappedUploadMemory(Buffer& buffer, u64 total_size_bytes, std::span<BufferCopy> copies);
377
378 void DownloadBufferMemory(Buffer& buffer_id);
379
380 void DownloadBufferMemory(Buffer& buffer_id, VAddr cpu_addr, u64 size);
381
382 void DeleteBuffer(BufferId buffer_id);
383
384 void NotifyBufferDeletion();
385
386 [[nodiscard]] Binding StorageBufferBinding(GPUVAddr ssbo_addr, u32 cbuf_index,
387 bool is_written = false) const;
388
389 [[nodiscard]] TextureBufferBinding GetTextureBufferBinding(GPUVAddr gpu_addr, u32 size,
390 PixelFormat format);
391
392 [[nodiscard]] std::span<const u8> ImmediateBufferWithData(VAddr cpu_addr, size_t size);
393
394 [[nodiscard]] std::span<u8> ImmediateBuffer(size_t wanted_capacity);
395
396 [[nodiscard]] bool HasFastUniformBufferBound(size_t stage, u32 binding_index) const noexcept;
397
398 void ClearDownload(IntervalType subtract_interval);
399
400 VideoCore::RasterizerInterface& rasterizer;
401 Core::Memory::Memory& cpu_memory;
402
403 SlotVector<Buffer> slot_buffers;
404 DelayedDestructionRing<Buffer, 8> delayed_destruction_ring;
405
406 const Tegra::Engines::DrawManager::IndirectParams* current_draw_indirect{};
407
408 u32 last_index_count = 0;
409
410 Binding index_buffer;
411 std::array<Binding, NUM_VERTEX_BUFFERS> vertex_buffers;
412 std::array<std::array<Binding, NUM_GRAPHICS_UNIFORM_BUFFERS>, NUM_STAGES> uniform_buffers;
413 std::array<std::array<Binding, NUM_STORAGE_BUFFERS>, NUM_STAGES> storage_buffers;
414 std::array<std::array<TextureBufferBinding, NUM_TEXTURE_BUFFERS>, NUM_STAGES> texture_buffers;
415 std::array<Binding, NUM_TRANSFORM_FEEDBACK_BUFFERS> transform_feedback_buffers;
416 Binding count_buffer_binding;
417 Binding indirect_buffer_binding;
418
419 std::array<Binding, NUM_COMPUTE_UNIFORM_BUFFERS> compute_uniform_buffers;
420 std::array<Binding, NUM_STORAGE_BUFFERS> compute_storage_buffers;
421 std::array<TextureBufferBinding, NUM_TEXTURE_BUFFERS> compute_texture_buffers;
422
423 std::array<u32, NUM_STAGES> enabled_uniform_buffer_masks{};
424 u32 enabled_compute_uniform_buffer_mask = 0;
425
426 const UniformBufferSizes* uniform_buffer_sizes{};
427 const ComputeUniformBufferSizes* compute_uniform_buffer_sizes{};
428
429 std::array<u32, NUM_STAGES> enabled_storage_buffers{};
430 std::array<u32, NUM_STAGES> written_storage_buffers{};
431 u32 enabled_compute_storage_buffers = 0;
432 u32 written_compute_storage_buffers = 0;
433
434 std::array<u32, NUM_STAGES> enabled_texture_buffers{};
435 std::array<u32, NUM_STAGES> written_texture_buffers{};
436 std::array<u32, NUM_STAGES> image_texture_buffers{};
437 u32 enabled_compute_texture_buffers = 0;
438 u32 written_compute_texture_buffers = 0;
439 u32 image_compute_texture_buffers = 0;
440
441 std::array<u32, 16> uniform_cache_hits{};
442 std::array<u32, 16> uniform_cache_shots{};
443
444 u32 uniform_buffer_skip_cache_size = DEFAULT_SKIP_CACHE_SIZE;
445
446 bool has_deleted_buffers = false;
447 11
448 std::conditional_t<HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS, std::array<u32, NUM_STAGES>, Empty> 12namespace VideoCommon {
449 dirty_uniform_buffers{};
450 std::conditional_t<IS_OPENGL, std::array<u32, NUM_STAGES>, Empty> fast_bound_uniform_buffers{};
451 std::conditional_t<HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS,
452 std::array<std::array<u32, NUM_GRAPHICS_UNIFORM_BUFFERS>, NUM_STAGES>, Empty>
453 uniform_buffer_binding_sizes{};
454
455 std::vector<BufferId> cached_write_buffer_ids;
456
457 IntervalSet uncommitted_ranges;
458 IntervalSet common_ranges;
459 std::deque<IntervalSet> committed_ranges;
460
461 Common::ScratchBuffer<u8> immediate_buffer_alloc;
462
463 struct LRUItemParams {
464 using ObjectType = BufferId;
465 using TickType = u64;
466 };
467 Common::LeastRecentlyUsedCache<LRUItemParams> lru_cache;
468 u64 frame_tick = 0;
469 u64 total_used_memory = 0;
470 u64 minimum_memory = 0;
471 u64 critical_memory = 0;
472 13
473 std::array<BufferId, ((1ULL << 39) >> YUZU_PAGEBITS)> page_table; 14using Core::Memory::YUZU_PAGESIZE;
474};
475 15
476template <class P> 16template <class P>
477BufferCache<P>::BufferCache(VideoCore::RasterizerInterface& rasterizer_, 17BufferCache<P>::BufferCache(VideoCore::RasterizerInterface& rasterizer_,
478 Core::Memory::Memory& cpu_memory_, Runtime& runtime_) 18 Core::Memory::Memory& cpu_memory_, Runtime& runtime_)
479 : runtime{runtime_}, rasterizer{rasterizer_}, cpu_memory{cpu_memory_} { 19 : runtime{runtime_}, rasterizer{rasterizer_}, cpu_memory{cpu_memory_}, memory_tracker{
20 rasterizer} {
480 // Ensure the first slot is used for the null buffer 21 // Ensure the first slot is used for the null buffer
481 void(slot_buffers.insert(runtime, NullBufferParams{})); 22 void(slot_buffers.insert(runtime, NullBufferParams{}));
482 common_ranges.clear(); 23 common_ranges.clear();
24 inline_buffer_id = NULL_BUFFER_ID;
25
26 active_async_buffers = !Settings::IsGPULevelHigh();
483 27
484 if (!runtime.CanReportMemoryUsage()) { 28 if (!runtime.CanReportMemoryUsage()) {
485 minimum_memory = DEFAULT_EXPECTED_MEMORY; 29 minimum_memory = DEFAULT_EXPECTED_MEMORY;
@@ -531,6 +75,8 @@ void BufferCache<P>::TickFrame() {
531 uniform_cache_hits[0] = 0; 75 uniform_cache_hits[0] = 0;
532 uniform_cache_shots[0] = 0; 76 uniform_cache_shots[0] = 0;
533 77
78 active_async_buffers = !Settings::IsGPULevelHigh();
79
534 const bool skip_preferred = hits * 256 < shots * 251; 80 const bool skip_preferred = hits * 256 < shots * 251;
535 uniform_buffer_skip_cache_size = skip_preferred ? DEFAULT_SKIP_CACHE_SIZE : 0; 81 uniform_buffer_skip_cache_size = skip_preferred ? DEFAULT_SKIP_CACHE_SIZE : 0;
536 82
@@ -543,35 +89,62 @@ void BufferCache<P>::TickFrame() {
543 } 89 }
544 ++frame_tick; 90 ++frame_tick;
545 delayed_destruction_ring.Tick(); 91 delayed_destruction_ring.Tick();
92
93 if constexpr (IMPLEMENTS_ASYNC_DOWNLOADS) {
94 for (auto& buffer : async_buffers_death_ring) {
95 runtime.FreeDeferredStagingBuffer(buffer);
96 }
97 async_buffers_death_ring.clear();
98 }
546} 99}
547 100
548template <class P> 101template <class P>
549void BufferCache<P>::WriteMemory(VAddr cpu_addr, u64 size) { 102void BufferCache<P>::WriteMemory(VAddr cpu_addr, u64 size) {
550 ForEachBufferInRange(cpu_addr, size, [&](BufferId, Buffer& buffer) { 103 memory_tracker.MarkRegionAsCpuModified(cpu_addr, size);
551 buffer.MarkRegionAsCpuModified(cpu_addr, size); 104 if (memory_tracker.IsRegionGpuModified(cpu_addr, size)) {
552 }); 105 const IntervalType subtract_interval{cpu_addr, cpu_addr + size};
106 ClearDownload(subtract_interval);
107 common_ranges.subtract(subtract_interval);
108 }
553} 109}
554 110
555template <class P> 111template <class P>
556void BufferCache<P>::CachedWriteMemory(VAddr cpu_addr, u64 size) { 112void BufferCache<P>::CachedWriteMemory(VAddr cpu_addr, u64 size) {
557 ForEachBufferInRange(cpu_addr, size, [&](BufferId buffer_id, Buffer& buffer) { 113 memory_tracker.CachedCpuWrite(cpu_addr, size);
558 if (!buffer.HasCachedWrites()) { 114 const IntervalType add_interval{Common::AlignDown(cpu_addr, YUZU_PAGESIZE),
559 cached_write_buffer_ids.push_back(buffer_id); 115 Common::AlignUp(cpu_addr + size, YUZU_PAGESIZE)};
560 } 116 cached_ranges.add(add_interval);
561 buffer.CachedCpuWrite(cpu_addr, size);
562 });
563} 117}
564 118
565template <class P> 119template <class P>
566void BufferCache<P>::DownloadMemory(VAddr cpu_addr, u64 size) { 120void BufferCache<P>::DownloadMemory(VAddr cpu_addr, u64 size) {
121 WaitOnAsyncFlushes(cpu_addr, size);
567 ForEachBufferInRange(cpu_addr, size, [&](BufferId, Buffer& buffer) { 122 ForEachBufferInRange(cpu_addr, size, [&](BufferId, Buffer& buffer) {
568 DownloadBufferMemory(buffer, cpu_addr, size); 123 DownloadBufferMemory(buffer, cpu_addr, size);
569 }); 124 });
570} 125}
571 126
572template <class P> 127template <class P>
128void BufferCache<P>::WaitOnAsyncFlushes(VAddr cpu_addr, u64 size) {
129 bool must_wait = false;
130 ForEachInOverlapCounter(async_downloads, cpu_addr, size,
131 [&](VAddr, VAddr, int) { must_wait = true; });
132 bool must_release = false;
133 ForEachInRangeSet(pending_ranges, cpu_addr, size, [&](VAddr, VAddr) { must_release = true; });
134 if (must_release) {
135 std::function<void()> tmp([]() {});
136 rasterizer.SignalFence(std::move(tmp));
137 }
138 if (must_wait || must_release) {
139 rasterizer.ReleaseFences();
140 }
141}
142
143template <class P>
573void BufferCache<P>::ClearDownload(IntervalType subtract_interval) { 144void BufferCache<P>::ClearDownload(IntervalType subtract_interval) {
145 RemoveEachInOverlapCounter(async_downloads, subtract_interval, -1024);
574 uncommitted_ranges.subtract(subtract_interval); 146 uncommitted_ranges.subtract(subtract_interval);
147 pending_ranges.subtract(subtract_interval);
575 for (auto& interval_set : committed_ranges) { 148 for (auto& interval_set : committed_ranges) {
576 interval_set.subtract(subtract_interval); 149 interval_set.subtract(subtract_interval);
577 } 150 }
@@ -591,6 +164,7 @@ bool BufferCache<P>::DMACopy(GPUVAddr src_address, GPUVAddr dest_address, u64 am
591 } 164 }
592 165
593 const IntervalType subtract_interval{*cpu_dest_address, *cpu_dest_address + amount}; 166 const IntervalType subtract_interval{*cpu_dest_address, *cpu_dest_address + amount};
167 WaitOnAsyncFlushes(*cpu_src_address, static_cast<u32>(amount));
594 ClearDownload(subtract_interval); 168 ClearDownload(subtract_interval);
595 169
596 BufferId buffer_a; 170 BufferId buffer_a;
@@ -616,10 +190,11 @@ bool BufferCache<P>::DMACopy(GPUVAddr src_address, GPUVAddr dest_address, u64 am
616 const VAddr diff = base_address - *cpu_src_address; 190 const VAddr diff = base_address - *cpu_src_address;
617 const VAddr new_base_address = *cpu_dest_address + diff; 191 const VAddr new_base_address = *cpu_dest_address + diff;
618 const IntervalType add_interval{new_base_address, new_base_address + size}; 192 const IntervalType add_interval{new_base_address, new_base_address + size};
619 uncommitted_ranges.add(add_interval);
620 tmp_intervals.push_back(add_interval); 193 tmp_intervals.push_back(add_interval);
194 uncommitted_ranges.add(add_interval);
195 pending_ranges.add(add_interval);
621 }; 196 };
622 ForEachWrittenRange(*cpu_src_address, amount, mirror); 197 ForEachInRangeSet(common_ranges, *cpu_src_address, amount, mirror);
623 // This subtraction in this order is important for overlapping copies. 198 // This subtraction in this order is important for overlapping copies.
624 common_ranges.subtract(subtract_interval); 199 common_ranges.subtract(subtract_interval);
625 const bool has_new_downloads = tmp_intervals.size() != 0; 200 const bool has_new_downloads = tmp_intervals.size() != 0;
@@ -628,7 +203,7 @@ bool BufferCache<P>::DMACopy(GPUVAddr src_address, GPUVAddr dest_address, u64 am
628 } 203 }
629 runtime.CopyBuffer(dest_buffer, src_buffer, copies); 204 runtime.CopyBuffer(dest_buffer, src_buffer, copies);
630 if (has_new_downloads) { 205 if (has_new_downloads) {
631 dest_buffer.MarkRegionAsGpuModified(*cpu_dest_address, amount); 206 memory_tracker.MarkRegionAsGpuModified(*cpu_dest_address, amount);
632 } 207 }
633 std::vector<u8> tmp_buffer(amount); 208 std::vector<u8> tmp_buffer(amount);
634 cpu_memory.ReadBlockUnsafe(*cpu_src_address, tmp_buffer.data(), amount); 209 cpu_memory.ReadBlockUnsafe(*cpu_src_address, tmp_buffer.data(), amount);
@@ -866,10 +441,9 @@ void BufferCache<P>::BindComputeTextureBuffer(size_t tbo_index, GPUVAddr gpu_add
866 441
867template <class P> 442template <class P>
868void BufferCache<P>::FlushCachedWrites() { 443void BufferCache<P>::FlushCachedWrites() {
869 for (const BufferId buffer_id : cached_write_buffer_ids) {
870 slot_buffers[buffer_id].FlushCachedWrites();
871 }
872 cached_write_buffer_ids.clear(); 444 cached_write_buffer_ids.clear();
445 memory_tracker.FlushCachedWrites();
446 cached_ranges.clear();
873} 447}
874 448
875template <class P> 449template <class P>
@@ -879,10 +453,6 @@ bool BufferCache<P>::HasUncommittedFlushes() const noexcept {
879 453
880template <class P> 454template <class P>
881void BufferCache<P>::AccumulateFlushes() { 455void BufferCache<P>::AccumulateFlushes() {
882 if (Settings::values.gpu_accuracy.GetValue() != Settings::GPUAccuracy::High) {
883 uncommitted_ranges.clear();
884 return;
885 }
886 if (uncommitted_ranges.empty()) { 456 if (uncommitted_ranges.empty()) {
887 return; 457 return;
888 } 458 }
@@ -891,7 +461,11 @@ void BufferCache<P>::AccumulateFlushes() {
891 461
892template <class P> 462template <class P>
893bool BufferCache<P>::ShouldWaitAsyncFlushes() const noexcept { 463bool BufferCache<P>::ShouldWaitAsyncFlushes() const noexcept {
894 return false; 464 if constexpr (IMPLEMENTS_ASYNC_DOWNLOADS) {
465 return (!async_buffers.empty() && async_buffers.front().has_value());
466 } else {
467 return false;
468 }
895} 469}
896 470
897template <class P> 471template <class P>
@@ -899,12 +473,16 @@ void BufferCache<P>::CommitAsyncFlushesHigh() {
899 AccumulateFlushes(); 473 AccumulateFlushes();
900 474
901 if (committed_ranges.empty()) { 475 if (committed_ranges.empty()) {
476 if constexpr (IMPLEMENTS_ASYNC_DOWNLOADS) {
477 if (active_async_buffers) {
478 async_buffers.emplace_back(std::optional<Async_Buffer>{});
479 }
480 }
902 return; 481 return;
903 } 482 }
904 MICROPROFILE_SCOPE(GPU_DownloadMemory); 483 MICROPROFILE_SCOPE(GPU_DownloadMemory);
905 const bool is_accuracy_normal =
906 Settings::values.gpu_accuracy.GetValue() == Settings::GPUAccuracy::Normal;
907 484
485 pending_ranges.clear();
908 auto it = committed_ranges.begin(); 486 auto it = committed_ranges.begin();
909 while (it != committed_ranges.end()) { 487 while (it != committed_ranges.end()) {
910 auto& current_intervals = *it; 488 auto& current_intervals = *it;
@@ -926,11 +504,12 @@ void BufferCache<P>::CommitAsyncFlushesHigh() {
926 const std::size_t size = interval.upper() - interval.lower(); 504 const std::size_t size = interval.upper() - interval.lower();
927 const VAddr cpu_addr = interval.lower(); 505 const VAddr cpu_addr = interval.lower();
928 ForEachBufferInRange(cpu_addr, size, [&](BufferId buffer_id, Buffer& buffer) { 506 ForEachBufferInRange(cpu_addr, size, [&](BufferId buffer_id, Buffer& buffer) {
929 buffer.ForEachDownloadRangeAndClear( 507 const VAddr buffer_start = buffer.CpuAddr();
930 cpu_addr, size, [&](u64 range_offset, u64 range_size) { 508 const VAddr buffer_end = buffer_start + buffer.SizeBytes();
931 if (is_accuracy_normal) { 509 const VAddr new_start = std::max(buffer_start, cpu_addr);
932 return; 510 const VAddr new_end = std::min(buffer_end, cpu_addr + size);
933 } 511 memory_tracker.ForEachDownloadRange(
512 new_start, new_end - new_start, false, [&](u64 cpu_addr_out, u64 range_size) {
934 const VAddr buffer_addr = buffer.CpuAddr(); 513 const VAddr buffer_addr = buffer.CpuAddr();
935 const auto add_download = [&](VAddr start, VAddr end) { 514 const auto add_download = [&](VAddr start, VAddr end) {
936 const u64 new_offset = start - buffer_addr; 515 const u64 new_offset = start - buffer_addr;
@@ -944,92 +523,142 @@ void BufferCache<P>::CommitAsyncFlushesHigh() {
944 buffer_id, 523 buffer_id,
945 }); 524 });
946 // Align up to avoid cache conflicts 525 // Align up to avoid cache conflicts
947 constexpr u64 align = 8ULL; 526 constexpr u64 align = 64ULL;
948 constexpr u64 mask = ~(align - 1ULL); 527 constexpr u64 mask = ~(align - 1ULL);
949 total_size_bytes += (new_size + align - 1) & mask; 528 total_size_bytes += (new_size + align - 1) & mask;
950 largest_copy = std::max(largest_copy, new_size); 529 largest_copy = std::max(largest_copy, new_size);
951 }; 530 };
952 531
953 const VAddr start_address = buffer_addr + range_offset; 532 ForEachInRangeSet(common_ranges, cpu_addr_out, range_size, add_download);
954 const VAddr end_address = start_address + range_size;
955 ForEachWrittenRange(start_address, range_size, add_download);
956 const IntervalType subtract_interval{start_address, end_address};
957 common_ranges.subtract(subtract_interval);
958 }); 533 });
959 }); 534 });
960 } 535 }
961 } 536 }
962 committed_ranges.clear(); 537 committed_ranges.clear();
963 if (downloads.empty()) { 538 if (downloads.empty()) {
539 if constexpr (IMPLEMENTS_ASYNC_DOWNLOADS) {
540 if (active_async_buffers) {
541 async_buffers.emplace_back(std::optional<Async_Buffer>{});
542 }
543 }
964 return; 544 return;
965 } 545 }
966 if constexpr (USE_MEMORY_MAPS) { 546 if (active_async_buffers) {
967 auto download_staging = runtime.DownloadStagingBuffer(total_size_bytes); 547 if constexpr (IMPLEMENTS_ASYNC_DOWNLOADS) {
968 runtime.PreCopyBarrier(); 548 auto download_staging = runtime.DownloadStagingBuffer(total_size_bytes, true);
969 for (auto& [copy, buffer_id] : downloads) { 549 boost::container::small_vector<BufferCopy, 4> normalized_copies;
970 // Have in mind the staging buffer offset for the copy 550 IntervalSet new_async_range{};
971 copy.dst_offset += download_staging.offset; 551 runtime.PreCopyBarrier();
972 const std::array copies{copy}; 552 for (auto& [copy, buffer_id] : downloads) {
973 runtime.CopyBuffer(download_staging.buffer, slot_buffers[buffer_id], copies, false); 553 copy.dst_offset += download_staging.offset;
974 } 554 const std::array copies{copy};
975 runtime.PostCopyBarrier(); 555 BufferCopy second_copy{copy};
976 runtime.Finish(); 556 Buffer& buffer = slot_buffers[buffer_id];
977 for (const auto& [copy, buffer_id] : downloads) { 557 second_copy.src_offset = static_cast<size_t>(buffer.CpuAddr()) + copy.src_offset;
978 const Buffer& buffer = slot_buffers[buffer_id]; 558 VAddr orig_cpu_addr = static_cast<VAddr>(second_copy.src_offset);
979 const VAddr cpu_addr = buffer.CpuAddr() + copy.src_offset; 559 const IntervalType base_interval{orig_cpu_addr, orig_cpu_addr + copy.size};
980 // Undo the modified offset 560 async_downloads += std::make_pair(base_interval, 1);
981 const u64 dst_offset = copy.dst_offset - download_staging.offset; 561 runtime.CopyBuffer(download_staging.buffer, buffer, copies, false);
982 const u8* read_mapped_memory = download_staging.mapped_span.data() + dst_offset; 562 normalized_copies.push_back(second_copy);
983 cpu_memory.WriteBlockUnsafe(cpu_addr, read_mapped_memory, copy.size); 563 }
564 runtime.PostCopyBarrier();
565 pending_downloads.emplace_back(std::move(normalized_copies));
566 async_buffers.emplace_back(download_staging);
567 } else {
568 committed_ranges.clear();
569 uncommitted_ranges.clear();
984 } 570 }
985 } else { 571 } else {
986 const std::span<u8> immediate_buffer = ImmediateBuffer(largest_copy); 572 if constexpr (USE_MEMORY_MAPS) {
987 for (const auto& [copy, buffer_id] : downloads) { 573 auto download_staging = runtime.DownloadStagingBuffer(total_size_bytes);
988 Buffer& buffer = slot_buffers[buffer_id]; 574 runtime.PreCopyBarrier();
989 buffer.ImmediateDownload(copy.src_offset, immediate_buffer.subspan(0, copy.size)); 575 for (auto& [copy, buffer_id] : downloads) {
990 const VAddr cpu_addr = buffer.CpuAddr() + copy.src_offset; 576 // Have in mind the staging buffer offset for the copy
991 cpu_memory.WriteBlockUnsafe(cpu_addr, immediate_buffer.data(), copy.size); 577 copy.dst_offset += download_staging.offset;
578 const std::array copies{copy};
579 runtime.CopyBuffer(download_staging.buffer, slot_buffers[buffer_id], copies, false);
580 }
581 runtime.PostCopyBarrier();
582 runtime.Finish();
583 for (const auto& [copy, buffer_id] : downloads) {
584 const Buffer& buffer = slot_buffers[buffer_id];
585 const VAddr cpu_addr = buffer.CpuAddr() + copy.src_offset;
586 // Undo the modified offset
587 const u64 dst_offset = copy.dst_offset - download_staging.offset;
588 const u8* read_mapped_memory = download_staging.mapped_span.data() + dst_offset;
589 cpu_memory.WriteBlockUnsafe(cpu_addr, read_mapped_memory, copy.size);
590 }
591 } else {
592 const std::span<u8> immediate_buffer = ImmediateBuffer(largest_copy);
593 for (const auto& [copy, buffer_id] : downloads) {
594 Buffer& buffer = slot_buffers[buffer_id];
595 buffer.ImmediateDownload(copy.src_offset, immediate_buffer.subspan(0, copy.size));
596 const VAddr cpu_addr = buffer.CpuAddr() + copy.src_offset;
597 cpu_memory.WriteBlockUnsafe(cpu_addr, immediate_buffer.data(), copy.size);
598 }
992 } 599 }
993 } 600 }
994} 601}
995 602
996template <class P> 603template <class P>
997void BufferCache<P>::CommitAsyncFlushes() { 604void BufferCache<P>::CommitAsyncFlushes() {
998 if (Settings::values.gpu_accuracy.GetValue() == Settings::GPUAccuracy::High) { 605 CommitAsyncFlushesHigh();
999 CommitAsyncFlushesHigh();
1000 } else {
1001 uncommitted_ranges.clear();
1002 committed_ranges.clear();
1003 }
1004} 606}
1005 607
1006template <class P> 608template <class P>
1007void BufferCache<P>::PopAsyncFlushes() {} 609void BufferCache<P>::PopAsyncFlushes() {
610 MICROPROFILE_SCOPE(GPU_DownloadMemory);
611 PopAsyncBuffers();
612}
1008 613
1009template <class P> 614template <class P>
1010bool BufferCache<P>::IsRegionGpuModified(VAddr addr, size_t size) { 615void BufferCache<P>::PopAsyncBuffers() {
1011 const u64 page_end = Common::DivCeil(addr + size, YUZU_PAGESIZE); 616 if (async_buffers.empty()) {
1012 for (u64 page = addr >> YUZU_PAGEBITS; page < page_end;) { 617 return;
1013 const BufferId image_id = page_table[page]; 618 }
1014 if (!image_id) { 619 if (!async_buffers.front().has_value()) {
1015 ++page; 620 async_buffers.pop_front();
1016 continue; 621 return;
1017 } 622 }
1018 Buffer& buffer = slot_buffers[image_id]; 623 if constexpr (IMPLEMENTS_ASYNC_DOWNLOADS) {
1019 if (buffer.IsRegionGpuModified(addr, size)) { 624 auto& downloads = pending_downloads.front();
1020 return true; 625 auto& async_buffer = async_buffers.front();
626 u8* base = async_buffer->mapped_span.data();
627 const size_t base_offset = async_buffer->offset;
628 for (const auto& copy : downloads) {
629 const VAddr cpu_addr = static_cast<VAddr>(copy.src_offset);
630 const u64 dst_offset = copy.dst_offset - base_offset;
631 const u8* read_mapped_memory = base + dst_offset;
632 ForEachInOverlapCounter(
633 async_downloads, cpu_addr, copy.size, [&](VAddr start, VAddr end, int count) {
634 cpu_memory.WriteBlockUnsafe(start, &read_mapped_memory[start - cpu_addr],
635 end - start);
636 if (count == 1) {
637 const IntervalType base_interval{start, end};
638 common_ranges.subtract(base_interval);
639 }
640 });
641 const IntervalType subtract_interval{cpu_addr, cpu_addr + copy.size};
642 RemoveEachInOverlapCounter(async_downloads, subtract_interval, -1);
1021 } 643 }
1022 const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes(); 644 async_buffers_death_ring.emplace_back(*async_buffer);
1023 page = Common::DivCeil(end_addr, YUZU_PAGESIZE); 645 async_buffers.pop_front();
646 pending_downloads.pop_front();
1024 } 647 }
1025 return false; 648}
649
650template <class P>
651bool BufferCache<P>::IsRegionGpuModified(VAddr addr, size_t size) {
652 bool is_dirty = false;
653 ForEachInRangeSet(common_ranges, addr, size, [&](VAddr, VAddr) { is_dirty = true; });
654 return is_dirty;
1026} 655}
1027 656
1028template <class P> 657template <class P>
1029bool BufferCache<P>::IsRegionRegistered(VAddr addr, size_t size) { 658bool BufferCache<P>::IsRegionRegistered(VAddr addr, size_t size) {
1030 const VAddr end_addr = addr + size; 659 const VAddr end_addr = addr + size;
1031 const u64 page_end = Common::DivCeil(end_addr, YUZU_PAGESIZE); 660 const u64 page_end = Common::DivCeil(end_addr, CACHING_PAGESIZE);
1032 for (u64 page = addr >> YUZU_PAGEBITS; page < page_end;) { 661 for (u64 page = addr >> CACHING_PAGEBITS; page < page_end;) {
1033 const BufferId buffer_id = page_table[page]; 662 const BufferId buffer_id = page_table[page];
1034 if (!buffer_id) { 663 if (!buffer_id) {
1035 ++page; 664 ++page;
@@ -1041,28 +670,14 @@ bool BufferCache<P>::IsRegionRegistered(VAddr addr, size_t size) {
1041 if (buf_start_addr < end_addr && addr < buf_end_addr) { 670 if (buf_start_addr < end_addr && addr < buf_end_addr) {
1042 return true; 671 return true;
1043 } 672 }
1044 page = Common::DivCeil(end_addr, YUZU_PAGESIZE); 673 page = Common::DivCeil(end_addr, CACHING_PAGESIZE);
1045 } 674 }
1046 return false; 675 return false;
1047} 676}
1048 677
1049template <class P> 678template <class P>
1050bool BufferCache<P>::IsRegionCpuModified(VAddr addr, size_t size) { 679bool BufferCache<P>::IsRegionCpuModified(VAddr addr, size_t size) {
1051 const u64 page_end = Common::DivCeil(addr + size, YUZU_PAGESIZE); 680 return memory_tracker.IsRegionCpuModified(addr, size);
1052 for (u64 page = addr >> YUZU_PAGEBITS; page < page_end;) {
1053 const BufferId image_id = page_table[page];
1054 if (!image_id) {
1055 ++page;
1056 continue;
1057 }
1058 Buffer& buffer = slot_buffers[image_id];
1059 if (buffer.IsRegionCpuModified(addr, size)) {
1060 return true;
1061 }
1062 const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes();
1063 page = Common::DivCeil(end_addr, YUZU_PAGESIZE);
1064 }
1065 return false;
1066} 681}
1067 682
1068template <class P> 683template <class P>
@@ -1072,7 +687,7 @@ void BufferCache<P>::BindHostIndexBuffer() {
1072 const u32 offset = buffer.Offset(index_buffer.cpu_addr); 687 const u32 offset = buffer.Offset(index_buffer.cpu_addr);
1073 const u32 size = index_buffer.size; 688 const u32 size = index_buffer.size;
1074 const auto& draw_state = maxwell3d->draw_manager->GetDrawState(); 689 const auto& draw_state = maxwell3d->draw_manager->GetDrawState();
1075 if (!draw_state.inline_index_draw_indexes.empty()) { 690 if (!draw_state.inline_index_draw_indexes.empty()) [[unlikely]] {
1076 if constexpr (USE_MEMORY_MAPS) { 691 if constexpr (USE_MEMORY_MAPS) {
1077 auto upload_staging = runtime.UploadStagingBuffer(size); 692 auto upload_staging = runtime.UploadStagingBuffer(size);
1078 std::array<BufferCopy, 1> copies{ 693 std::array<BufferCopy, 1> copies{
@@ -1155,7 +770,7 @@ void BufferCache<P>::BindHostGraphicsUniformBuffer(size_t stage, u32 index, u32
1155 TouchBuffer(buffer, binding.buffer_id); 770 TouchBuffer(buffer, binding.buffer_id);
1156 const bool use_fast_buffer = binding.buffer_id != NULL_BUFFER_ID && 771 const bool use_fast_buffer = binding.buffer_id != NULL_BUFFER_ID &&
1157 size <= uniform_buffer_skip_cache_size && 772 size <= uniform_buffer_skip_cache_size &&
1158 !buffer.IsRegionGpuModified(cpu_addr, size); 773 !memory_tracker.IsRegionGpuModified(cpu_addr, size);
1159 if (use_fast_buffer) { 774 if (use_fast_buffer) {
1160 if constexpr (IS_OPENGL) { 775 if constexpr (IS_OPENGL) {
1161 if (runtime.HasFastBufferSubData()) { 776 if (runtime.HasFastBufferSubData()) {
@@ -1378,27 +993,36 @@ void BufferCache<P>::UpdateIndexBuffer() {
1378 // We have to check for the dirty flags and index count 993 // We have to check for the dirty flags and index count
1379 // The index count is currently changed without updating the dirty flags 994 // The index count is currently changed without updating the dirty flags
1380 const auto& draw_state = maxwell3d->draw_manager->GetDrawState(); 995 const auto& draw_state = maxwell3d->draw_manager->GetDrawState();
1381 const auto& index_array = draw_state.index_buffer; 996 const auto& index_buffer_ref = draw_state.index_buffer;
1382 auto& flags = maxwell3d->dirty.flags; 997 auto& flags = maxwell3d->dirty.flags;
1383 if (!flags[Dirty::IndexBuffer]) { 998 if (!flags[Dirty::IndexBuffer]) {
1384 return; 999 return;
1385 } 1000 }
1386 flags[Dirty::IndexBuffer] = false; 1001 flags[Dirty::IndexBuffer] = false;
1387 last_index_count = index_array.count; 1002 if (!draw_state.inline_index_draw_indexes.empty()) [[unlikely]] {
1388 if (!draw_state.inline_index_draw_indexes.empty()) {
1389 auto inline_index_size = static_cast<u32>(draw_state.inline_index_draw_indexes.size()); 1003 auto inline_index_size = static_cast<u32>(draw_state.inline_index_draw_indexes.size());
1004 u32 buffer_size = Common::AlignUp(inline_index_size, CACHING_PAGESIZE);
1005 if (inline_buffer_id == NULL_BUFFER_ID) [[unlikely]] {
1006 inline_buffer_id = CreateBuffer(0, buffer_size);
1007 }
1008 if (slot_buffers[inline_buffer_id].SizeBytes() < buffer_size) [[unlikely]] {
1009 slot_buffers.erase(inline_buffer_id);
1010 inline_buffer_id = CreateBuffer(0, buffer_size);
1011 }
1390 index_buffer = Binding{ 1012 index_buffer = Binding{
1391 .cpu_addr = 0, 1013 .cpu_addr = 0,
1392 .size = inline_index_size, 1014 .size = inline_index_size,
1393 .buffer_id = CreateBuffer(0, inline_index_size), 1015 .buffer_id = inline_buffer_id,
1394 }; 1016 };
1395 return; 1017 return;
1396 } 1018 }
1397 const GPUVAddr gpu_addr_begin = index_array.StartAddress(); 1019
1398 const GPUVAddr gpu_addr_end = index_array.EndAddress(); 1020 const GPUVAddr gpu_addr_begin = index_buffer_ref.StartAddress();
1021 const GPUVAddr gpu_addr_end = index_buffer_ref.EndAddress();
1399 const std::optional<VAddr> cpu_addr = gpu_memory->GpuToCpuAddress(gpu_addr_begin); 1022 const std::optional<VAddr> cpu_addr = gpu_memory->GpuToCpuAddress(gpu_addr_begin);
1400 const u32 address_size = static_cast<u32>(gpu_addr_end - gpu_addr_begin); 1023 const u32 address_size = static_cast<u32>(gpu_addr_end - gpu_addr_begin);
1401 const u32 draw_size = (index_array.count + index_array.first) * index_array.FormatSizeInBytes(); 1024 const u32 draw_size =
1025 (index_buffer_ref.count + index_buffer_ref.first) * index_buffer_ref.FormatSizeInBytes();
1402 const u32 size = std::min(address_size, draw_size); 1026 const u32 size = std::min(address_size, draw_size);
1403 if (size == 0 || !cpu_addr) { 1027 if (size == 0 || !cpu_addr) {
1404 index_buffer = NULL_BINDING; 1028 index_buffer = NULL_BINDING;
@@ -1434,17 +1058,15 @@ void BufferCache<P>::UpdateVertexBuffer(u32 index) {
1434 const GPUVAddr gpu_addr_begin = array.Address(); 1058 const GPUVAddr gpu_addr_begin = array.Address();
1435 const GPUVAddr gpu_addr_end = limit.Address() + 1; 1059 const GPUVAddr gpu_addr_end = limit.Address() + 1;
1436 const std::optional<VAddr> cpu_addr = gpu_memory->GpuToCpuAddress(gpu_addr_begin); 1060 const std::optional<VAddr> cpu_addr = gpu_memory->GpuToCpuAddress(gpu_addr_begin);
1437 u32 address_size = static_cast<u32>( 1061 const u32 address_size = static_cast<u32>(gpu_addr_end - gpu_addr_begin);
1438 std::min(gpu_addr_end - gpu_addr_begin, static_cast<u64>(std::numeric_limits<u32>::max()))); 1062 u32 size = address_size; // TODO: Analyze stride and number of vertices
1439 if (array.enable == 0 || address_size == 0 || !cpu_addr) { 1063 if (array.enable == 0 || size == 0 || !cpu_addr) {
1440 vertex_buffers[index] = NULL_BINDING; 1064 vertex_buffers[index] = NULL_BINDING;
1441 return; 1065 return;
1442 } 1066 }
1443 if (!gpu_memory->IsWithinGPUAddressRange(gpu_addr_end)) { 1067 if (!gpu_memory->IsWithinGPUAddressRange(gpu_addr_end)) {
1444 address_size = 1068 size = static_cast<u32>(gpu_memory->MaxContinuousRange(gpu_addr_begin, size));
1445 static_cast<u32>(gpu_memory->MaxContinuousRange(gpu_addr_begin, address_size));
1446 } 1069 }
1447 const u32 size = address_size; // TODO: Analyze stride and number of vertices
1448 vertex_buffers[index] = Binding{ 1070 vertex_buffers[index] = Binding{
1449 .cpu_addr = *cpu_addr, 1071 .cpu_addr = *cpu_addr,
1450 .size = size, 1072 .size = size,
@@ -1591,17 +1213,16 @@ void BufferCache<P>::UpdateComputeTextureBuffers() {
1591 1213
1592template <class P> 1214template <class P>
1593void BufferCache<P>::MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 size) { 1215void BufferCache<P>::MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 size) {
1594 Buffer& buffer = slot_buffers[buffer_id]; 1216 memory_tracker.MarkRegionAsGpuModified(cpu_addr, size);
1595 buffer.MarkRegionAsGpuModified(cpu_addr, size); 1217
1218 if (memory_tracker.IsRegionCpuModified(cpu_addr, size)) {
1219 SynchronizeBuffer(slot_buffers[buffer_id], cpu_addr, size);
1220 }
1596 1221
1597 const IntervalType base_interval{cpu_addr, cpu_addr + size}; 1222 const IntervalType base_interval{cpu_addr, cpu_addr + size};
1598 common_ranges.add(base_interval); 1223 common_ranges.add(base_interval);
1599
1600 const bool is_async = Settings::values.use_asynchronous_gpu_emulation.GetValue();
1601 if (!is_async) {
1602 return;
1603 }
1604 uncommitted_ranges.add(base_interval); 1224 uncommitted_ranges.add(base_interval);
1225 pending_ranges.add(base_interval);
1605} 1226}
1606 1227
1607template <class P> 1228template <class P>
@@ -1609,7 +1230,7 @@ BufferId BufferCache<P>::FindBuffer(VAddr cpu_addr, u32 size) {
1609 if (cpu_addr == 0) { 1230 if (cpu_addr == 0) {
1610 return NULL_BUFFER_ID; 1231 return NULL_BUFFER_ID;
1611 } 1232 }
1612 const u64 page = cpu_addr >> YUZU_PAGEBITS; 1233 const u64 page = cpu_addr >> CACHING_PAGEBITS;
1613 const BufferId buffer_id = page_table[page]; 1234 const BufferId buffer_id = page_table[page];
1614 if (!buffer_id) { 1235 if (!buffer_id) {
1615 return CreateBuffer(cpu_addr, size); 1236 return CreateBuffer(cpu_addr, size);
@@ -1638,9 +1259,9 @@ typename BufferCache<P>::OverlapResult BufferCache<P>::ResolveOverlaps(VAddr cpu
1638 .has_stream_leap = has_stream_leap, 1259 .has_stream_leap = has_stream_leap,
1639 }; 1260 };
1640 } 1261 }
1641 for (; cpu_addr >> YUZU_PAGEBITS < Common::DivCeil(end, YUZU_PAGESIZE); 1262 for (; cpu_addr >> CACHING_PAGEBITS < Common::DivCeil(end, CACHING_PAGESIZE);
1642 cpu_addr += YUZU_PAGESIZE) { 1263 cpu_addr += CACHING_PAGESIZE) {
1643 const BufferId overlap_id = page_table[cpu_addr >> YUZU_PAGEBITS]; 1264 const BufferId overlap_id = page_table[cpu_addr >> CACHING_PAGEBITS];
1644 if (!overlap_id) { 1265 if (!overlap_id) {
1645 continue; 1266 continue;
1646 } 1267 }
@@ -1666,11 +1287,11 @@ typename BufferCache<P>::OverlapResult BufferCache<P>::ResolveOverlaps(VAddr cpu
1666 // as a stream buffer. Increase the size to skip constantly recreating buffers. 1287 // as a stream buffer. Increase the size to skip constantly recreating buffers.
1667 has_stream_leap = true; 1288 has_stream_leap = true;
1668 if (expands_right) { 1289 if (expands_right) {
1669 begin -= YUZU_PAGESIZE * 256; 1290 begin -= CACHING_PAGESIZE * 256;
1670 cpu_addr = begin; 1291 cpu_addr = begin;
1671 } 1292 }
1672 if (expands_left) { 1293 if (expands_left) {
1673 end += YUZU_PAGESIZE * 256; 1294 end += CACHING_PAGESIZE * 256;
1674 } 1295 }
1675 } 1296 }
1676 } 1297 }
@@ -1690,25 +1311,22 @@ void BufferCache<P>::JoinOverlap(BufferId new_buffer_id, BufferId overlap_id,
1690 if (accumulate_stream_score) { 1311 if (accumulate_stream_score) {
1691 new_buffer.IncreaseStreamScore(overlap.StreamScore() + 1); 1312 new_buffer.IncreaseStreamScore(overlap.StreamScore() + 1);
1692 } 1313 }
1693 std::vector<BufferCopy> copies; 1314 boost::container::small_vector<BufferCopy, 1> copies;
1694 const size_t dst_base_offset = overlap.CpuAddr() - new_buffer.CpuAddr(); 1315 const size_t dst_base_offset = overlap.CpuAddr() - new_buffer.CpuAddr();
1695 overlap.ForEachDownloadRange([&](u64 begin, u64 range_size) { 1316 copies.push_back(BufferCopy{
1696 copies.push_back(BufferCopy{ 1317 .src_offset = 0,
1697 .src_offset = begin, 1318 .dst_offset = dst_base_offset,
1698 .dst_offset = dst_base_offset + begin, 1319 .size = overlap.SizeBytes(),
1699 .size = range_size,
1700 });
1701 new_buffer.UnmarkRegionAsCpuModified(begin, range_size);
1702 new_buffer.MarkRegionAsGpuModified(begin, range_size);
1703 }); 1320 });
1704 if (!copies.empty()) { 1321 runtime.CopyBuffer(new_buffer, overlap, copies);
1705 runtime.CopyBuffer(slot_buffers[new_buffer_id], overlap, copies); 1322 DeleteBuffer(overlap_id, true);
1706 }
1707 DeleteBuffer(overlap_id);
1708} 1323}
1709 1324
1710template <class P> 1325template <class P>
1711BufferId BufferCache<P>::CreateBuffer(VAddr cpu_addr, u32 wanted_size) { 1326BufferId BufferCache<P>::CreateBuffer(VAddr cpu_addr, u32 wanted_size) {
1327 VAddr cpu_addr_end = Common::AlignUp(cpu_addr + wanted_size, CACHING_PAGESIZE);
1328 cpu_addr = Common::AlignDown(cpu_addr, CACHING_PAGESIZE);
1329 wanted_size = static_cast<u32>(cpu_addr_end - cpu_addr);
1712 const OverlapResult overlap = ResolveOverlaps(cpu_addr, wanted_size); 1330 const OverlapResult overlap = ResolveOverlaps(cpu_addr, wanted_size);
1713 const u32 size = static_cast<u32>(overlap.end - overlap.begin); 1331 const u32 size = static_cast<u32>(overlap.end - overlap.begin);
1714 const BufferId new_buffer_id = slot_buffers.insert(runtime, rasterizer, overlap.begin, size); 1332 const BufferId new_buffer_id = slot_buffers.insert(runtime, rasterizer, overlap.begin, size);
@@ -1718,7 +1336,7 @@ BufferId BufferCache<P>::CreateBuffer(VAddr cpu_addr, u32 wanted_size) {
1718 JoinOverlap(new_buffer_id, overlap_id, !overlap.has_stream_leap); 1336 JoinOverlap(new_buffer_id, overlap_id, !overlap.has_stream_leap);
1719 } 1337 }
1720 Register(new_buffer_id); 1338 Register(new_buffer_id);
1721 TouchBuffer(slot_buffers[new_buffer_id], new_buffer_id); 1339 TouchBuffer(new_buffer, new_buffer_id);
1722 return new_buffer_id; 1340 return new_buffer_id;
1723} 1341}
1724 1342
@@ -1746,8 +1364,8 @@ void BufferCache<P>::ChangeRegister(BufferId buffer_id) {
1746 } 1364 }
1747 const VAddr cpu_addr_begin = buffer.CpuAddr(); 1365 const VAddr cpu_addr_begin = buffer.CpuAddr();
1748 const VAddr cpu_addr_end = cpu_addr_begin + size; 1366 const VAddr cpu_addr_end = cpu_addr_begin + size;
1749 const u64 page_begin = cpu_addr_begin / YUZU_PAGESIZE; 1367 const u64 page_begin = cpu_addr_begin / CACHING_PAGESIZE;
1750 const u64 page_end = Common::DivCeil(cpu_addr_end, YUZU_PAGESIZE); 1368 const u64 page_end = Common::DivCeil(cpu_addr_end, CACHING_PAGESIZE);
1751 for (u64 page = page_begin; page != page_end; ++page) { 1369 for (u64 page = page_begin; page != page_end; ++page) {
1752 if constexpr (insert) { 1370 if constexpr (insert) {
1753 page_table[page] = buffer_id; 1371 page_table[page] = buffer_id;
@@ -1766,9 +1384,6 @@ void BufferCache<P>::TouchBuffer(Buffer& buffer, BufferId buffer_id) noexcept {
1766 1384
1767template <class P> 1385template <class P>
1768bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, VAddr cpu_addr, u32 size) { 1386bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, VAddr cpu_addr, u32 size) {
1769 if (buffer.CpuAddr() == 0) {
1770 return true;
1771 }
1772 return SynchronizeBufferImpl(buffer, cpu_addr, size); 1387 return SynchronizeBufferImpl(buffer, cpu_addr, size);
1773} 1388}
1774 1389
@@ -1777,10 +1392,11 @@ bool BufferCache<P>::SynchronizeBufferImpl(Buffer& buffer, VAddr cpu_addr, u32 s
1777 boost::container::small_vector<BufferCopy, 4> copies; 1392 boost::container::small_vector<BufferCopy, 4> copies;
1778 u64 total_size_bytes = 0; 1393 u64 total_size_bytes = 0;
1779 u64 largest_copy = 0; 1394 u64 largest_copy = 0;
1780 buffer.ForEachUploadRange(cpu_addr, size, [&](u64 range_offset, u64 range_size) { 1395 VAddr buffer_start = buffer.CpuAddr();
1396 memory_tracker.ForEachUploadRange(cpu_addr, size, [&](u64 cpu_addr_out, u64 range_size) {
1781 copies.push_back(BufferCopy{ 1397 copies.push_back(BufferCopy{
1782 .src_offset = total_size_bytes, 1398 .src_offset = total_size_bytes,
1783 .dst_offset = range_offset, 1399 .dst_offset = cpu_addr_out - buffer_start,
1784 .size = range_size, 1400 .size = range_size,
1785 }); 1401 });
1786 total_size_bytes += range_size; 1402 total_size_bytes += range_size;
@@ -1795,6 +1411,51 @@ bool BufferCache<P>::SynchronizeBufferImpl(Buffer& buffer, VAddr cpu_addr, u32 s
1795} 1411}
1796 1412
1797template <class P> 1413template <class P>
1414bool BufferCache<P>::SynchronizeBufferNoModified(Buffer& buffer, VAddr cpu_addr, u32 size) {
1415 boost::container::small_vector<BufferCopy, 4> copies;
1416 u64 total_size_bytes = 0;
1417 u64 largest_copy = 0;
1418 IntervalSet found_sets{};
1419 auto make_copies = [&] {
1420 for (auto& interval : found_sets) {
1421 const std::size_t sub_size = interval.upper() - interval.lower();
1422 const VAddr cpu_addr_ = interval.lower();
1423 copies.push_back(BufferCopy{
1424 .src_offset = total_size_bytes,
1425 .dst_offset = cpu_addr_ - buffer.CpuAddr(),
1426 .size = sub_size,
1427 });
1428 total_size_bytes += sub_size;
1429 largest_copy = std::max(largest_copy, sub_size);
1430 }
1431 const std::span<BufferCopy> copies_span(copies.data(), copies.size());
1432 UploadMemory(buffer, total_size_bytes, largest_copy, copies_span);
1433 };
1434 memory_tracker.ForEachUploadRange(cpu_addr, size, [&](u64 cpu_addr_out, u64 range_size) {
1435 const VAddr base_adr = cpu_addr_out;
1436 const VAddr end_adr = base_adr + range_size;
1437 const IntervalType add_interval{base_adr, end_adr};
1438 found_sets.add(add_interval);
1439 });
1440 if (found_sets.empty()) {
1441 return true;
1442 }
1443 const IntervalType search_interval{cpu_addr, cpu_addr + size};
1444 auto it = common_ranges.lower_bound(search_interval);
1445 auto it_end = common_ranges.upper_bound(search_interval);
1446 if (it == common_ranges.end()) {
1447 make_copies();
1448 return false;
1449 }
1450 while (it != it_end) {
1451 found_sets.subtract(*it);
1452 it++;
1453 }
1454 make_copies();
1455 return false;
1456}
1457
1458template <class P>
1798void BufferCache<P>::UploadMemory(Buffer& buffer, u64 total_size_bytes, u64 largest_copy, 1459void BufferCache<P>::UploadMemory(Buffer& buffer, u64 total_size_bytes, u64 largest_copy,
1799 std::span<BufferCopy> copies) { 1460 std::span<BufferCopy> copies) {
1800 if constexpr (USE_MEMORY_MAPS) { 1461 if constexpr (USE_MEMORY_MAPS) {
@@ -1805,39 +1466,45 @@ void BufferCache<P>::UploadMemory(Buffer& buffer, u64 total_size_bytes, u64 larg
1805} 1466}
1806 1467
1807template <class P> 1468template <class P>
1808void BufferCache<P>::ImmediateUploadMemory(Buffer& buffer, u64 largest_copy, 1469void BufferCache<P>::ImmediateUploadMemory([[maybe_unused]] Buffer& buffer,
1809 std::span<const BufferCopy> copies) { 1470 [[maybe_unused]] u64 largest_copy,
1810 std::span<u8> immediate_buffer; 1471 [[maybe_unused]] std::span<const BufferCopy> copies) {
1811 for (const BufferCopy& copy : copies) { 1472 if constexpr (!USE_MEMORY_MAPS) {
1812 std::span<const u8> upload_span; 1473 std::span<u8> immediate_buffer;
1813 const VAddr cpu_addr = buffer.CpuAddr() + copy.dst_offset; 1474 for (const BufferCopy& copy : copies) {
1814 if (IsRangeGranular(cpu_addr, copy.size)) { 1475 std::span<const u8> upload_span;
1815 upload_span = std::span(cpu_memory.GetPointer(cpu_addr), copy.size); 1476 const VAddr cpu_addr = buffer.CpuAddr() + copy.dst_offset;
1816 } else { 1477 if (IsRangeGranular(cpu_addr, copy.size)) {
1817 if (immediate_buffer.empty()) { 1478 upload_span = std::span(cpu_memory.GetPointer(cpu_addr), copy.size);
1818 immediate_buffer = ImmediateBuffer(largest_copy); 1479 } else {
1480 if (immediate_buffer.empty()) {
1481 immediate_buffer = ImmediateBuffer(largest_copy);
1482 }
1483 cpu_memory.ReadBlockUnsafe(cpu_addr, immediate_buffer.data(), copy.size);
1484 upload_span = immediate_buffer.subspan(0, copy.size);
1819 } 1485 }
1820 cpu_memory.ReadBlockUnsafe(cpu_addr, immediate_buffer.data(), copy.size); 1486 buffer.ImmediateUpload(copy.dst_offset, upload_span);
1821 upload_span = immediate_buffer.subspan(0, copy.size);
1822 } 1487 }
1823 buffer.ImmediateUpload(copy.dst_offset, upload_span);
1824 } 1488 }
1825} 1489}
1826 1490
1827template <class P> 1491template <class P>
1828void BufferCache<P>::MappedUploadMemory(Buffer& buffer, u64 total_size_bytes, 1492void BufferCache<P>::MappedUploadMemory([[maybe_unused]] Buffer& buffer,
1829 std::span<BufferCopy> copies) { 1493 [[maybe_unused]] u64 total_size_bytes,
1830 auto upload_staging = runtime.UploadStagingBuffer(total_size_bytes); 1494 [[maybe_unused]] std::span<BufferCopy> copies) {
1831 const std::span<u8> staging_pointer = upload_staging.mapped_span; 1495 if constexpr (USE_MEMORY_MAPS) {
1832 for (BufferCopy& copy : copies) { 1496 auto upload_staging = runtime.UploadStagingBuffer(total_size_bytes);
1833 u8* const src_pointer = staging_pointer.data() + copy.src_offset; 1497 const std::span<u8> staging_pointer = upload_staging.mapped_span;
1834 const VAddr cpu_addr = buffer.CpuAddr() + copy.dst_offset; 1498 for (BufferCopy& copy : copies) {
1835 cpu_memory.ReadBlockUnsafe(cpu_addr, src_pointer, copy.size); 1499 u8* const src_pointer = staging_pointer.data() + copy.src_offset;
1500 const VAddr cpu_addr = buffer.CpuAddr() + copy.dst_offset;
1501 cpu_memory.ReadBlockUnsafe(cpu_addr, src_pointer, copy.size);
1836 1502
1837 // Apply the staging offset 1503 // Apply the staging offset
1838 copy.src_offset += upload_staging.offset; 1504 copy.src_offset += upload_staging.offset;
1505 }
1506 runtime.CopyBuffer(buffer, upload_staging.buffer, copies);
1839 } 1507 }
1840 runtime.CopyBuffer(buffer, upload_staging.buffer, copies);
1841} 1508}
1842 1509
1843template <class P> 1510template <class P>
@@ -1847,7 +1514,9 @@ bool BufferCache<P>::InlineMemory(VAddr dest_address, size_t copy_size,
1847 if (!is_dirty) { 1514 if (!is_dirty) {
1848 return false; 1515 return false;
1849 } 1516 }
1850 if (!IsRegionGpuModified(dest_address, copy_size)) { 1517 VAddr aligned_start = Common::AlignDown(dest_address, YUZU_PAGESIZE);
1518 VAddr aligned_end = Common::AlignUp(dest_address + copy_size, YUZU_PAGESIZE);
1519 if (!IsRegionGpuModified(aligned_start, aligned_end - aligned_start)) {
1851 return false; 1520 return false;
1852 } 1521 }
1853 1522
@@ -1886,30 +1555,31 @@ void BufferCache<P>::DownloadBufferMemory(Buffer& buffer, VAddr cpu_addr, u64 si
1886 boost::container::small_vector<BufferCopy, 1> copies; 1555 boost::container::small_vector<BufferCopy, 1> copies;
1887 u64 total_size_bytes = 0; 1556 u64 total_size_bytes = 0;
1888 u64 largest_copy = 0; 1557 u64 largest_copy = 0;
1889 buffer.ForEachDownloadRangeAndClear(cpu_addr, size, [&](u64 range_offset, u64 range_size) { 1558 memory_tracker.ForEachDownloadRangeAndClear(
1890 const VAddr buffer_addr = buffer.CpuAddr(); 1559 cpu_addr, size, [&](u64 cpu_addr_out, u64 range_size) {
1891 const auto add_download = [&](VAddr start, VAddr end) { 1560 const VAddr buffer_addr = buffer.CpuAddr();
1892 const u64 new_offset = start - buffer_addr; 1561 const auto add_download = [&](VAddr start, VAddr end) {
1893 const u64 new_size = end - start; 1562 const u64 new_offset = start - buffer_addr;
1894 copies.push_back(BufferCopy{ 1563 const u64 new_size = end - start;
1895 .src_offset = new_offset, 1564 copies.push_back(BufferCopy{
1896 .dst_offset = total_size_bytes, 1565 .src_offset = new_offset,
1897 .size = new_size, 1566 .dst_offset = total_size_bytes,
1898 }); 1567 .size = new_size,
1899 // Align up to avoid cache conflicts 1568 });
1900 constexpr u64 align = 256ULL; 1569 // Align up to avoid cache conflicts
1901 constexpr u64 mask = ~(align - 1ULL); 1570 constexpr u64 align = 64ULL;
1902 total_size_bytes += (new_size + align - 1) & mask; 1571 constexpr u64 mask = ~(align - 1ULL);
1903 largest_copy = std::max(largest_copy, new_size); 1572 total_size_bytes += (new_size + align - 1) & mask;
1904 }; 1573 largest_copy = std::max(largest_copy, new_size);
1905 1574 };
1906 const VAddr start_address = buffer_addr + range_offset; 1575
1907 const VAddr end_address = start_address + range_size; 1576 const VAddr start_address = cpu_addr_out;
1908 ForEachWrittenRange(start_address, range_size, add_download); 1577 const VAddr end_address = start_address + range_size;
1909 const IntervalType subtract_interval{start_address, end_address}; 1578 ForEachInRangeSet(common_ranges, start_address, range_size, add_download);
1910 ClearDownload(subtract_interval); 1579 const IntervalType subtract_interval{start_address, end_address};
1911 common_ranges.subtract(subtract_interval); 1580 ClearDownload(subtract_interval);
1912 }); 1581 common_ranges.subtract(subtract_interval);
1582 });
1913 if (total_size_bytes == 0) { 1583 if (total_size_bytes == 0) {
1914 return; 1584 return;
1915 } 1585 }
@@ -1943,7 +1613,7 @@ void BufferCache<P>::DownloadBufferMemory(Buffer& buffer, VAddr cpu_addr, u64 si
1943} 1613}
1944 1614
1945template <class P> 1615template <class P>
1946void BufferCache<P>::DeleteBuffer(BufferId buffer_id) { 1616void BufferCache<P>::DeleteBuffer(BufferId buffer_id, bool do_not_mark) {
1947 const auto scalar_replace = [buffer_id](Binding& binding) { 1617 const auto scalar_replace = [buffer_id](Binding& binding) {
1948 if (binding.buffer_id == buffer_id) { 1618 if (binding.buffer_id == buffer_id) {
1949 binding.buffer_id = BufferId{}; 1619 binding.buffer_id = BufferId{};
@@ -1962,8 +1632,10 @@ void BufferCache<P>::DeleteBuffer(BufferId buffer_id) {
1962 std::erase(cached_write_buffer_ids, buffer_id); 1632 std::erase(cached_write_buffer_ids, buffer_id);
1963 1633
1964 // Mark the whole buffer as CPU written to stop tracking CPU writes 1634 // Mark the whole buffer as CPU written to stop tracking CPU writes
1965 Buffer& buffer = slot_buffers[buffer_id]; 1635 if (!do_not_mark) {
1966 buffer.MarkRegionAsCpuModified(buffer.CpuAddr(), buffer.SizeBytes()); 1636 Buffer& buffer = slot_buffers[buffer_id];
1637 memory_tracker.MarkRegionAsCpuModified(buffer.CpuAddr(), buffer.SizeBytes());
1638 }
1967 1639
1968 Unregister(buffer_id); 1640 Unregister(buffer_id);
1969 delayed_destruction_ring.Push(std::move(slot_buffers[buffer_id])); 1641 delayed_destruction_ring.Push(std::move(slot_buffers[buffer_id]));
@@ -2011,7 +1683,7 @@ typename BufferCache<P>::Binding BufferCache<P>::StorageBufferBinding(GPUVAddr s
2011 LOG_WARNING(HW_GPU, "Failed to find storage buffer for cbuf index {}", cbuf_index); 1683 LOG_WARNING(HW_GPU, "Failed to find storage buffer for cbuf index {}", cbuf_index);
2012 return NULL_BINDING; 1684 return NULL_BINDING;
2013 } 1685 }
2014 const VAddr cpu_end = Common::AlignUp(*cpu_addr + size, Core::Memory::YUZU_PAGESIZE); 1686 const VAddr cpu_end = Common::AlignUp(*cpu_addr + size, YUZU_PAGESIZE);
2015 const Binding binding{ 1687 const Binding binding{
2016 .cpu_addr = *cpu_addr, 1688 .cpu_addr = *cpu_addr,
2017 .size = is_written ? size : static_cast<u32>(cpu_end - *cpu_addr), 1689 .size = is_written ? size : static_cast<u32>(cpu_end - *cpu_addr),
diff --git a/src/video_core/buffer_cache/buffer_cache_base.h b/src/video_core/buffer_cache/buffer_cache_base.h
new file mode 100644
index 000000000..656baa550
--- /dev/null
+++ b/src/video_core/buffer_cache/buffer_cache_base.h
@@ -0,0 +1,580 @@
1// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <algorithm>
7#include <array>
8#include <functional>
9#include <memory>
10#include <mutex>
11#include <numeric>
12#include <span>
13#include <unordered_map>
14#include <vector>
15
16#include <boost/container/small_vector.hpp>
17#define BOOST_NO_MT
18#include <boost/pool/detail/mutex.hpp>
19#undef BOOST_NO_MT
20#include <boost/icl/interval.hpp>
21#include <boost/icl/interval_base_set.hpp>
22#include <boost/icl/interval_set.hpp>
23#include <boost/icl/split_interval_map.hpp>
24#include <boost/pool/pool.hpp>
25#include <boost/pool/pool_alloc.hpp>
26#include <boost/pool/poolfwd.hpp>
27
28#include "common/common_types.h"
29#include "common/div_ceil.h"
30#include "common/literals.h"
31#include "common/lru_cache.h"
32#include "common/microprofile.h"
33#include "common/scope_exit.h"
34#include "common/settings.h"
35#include "core/memory.h"
36#include "video_core/buffer_cache/buffer_base.h"
37#include "video_core/control/channel_state_cache.h"
38#include "video_core/delayed_destruction_ring.h"
39#include "video_core/dirty_flags.h"
40#include "video_core/engines/draw_manager.h"
41#include "video_core/engines/kepler_compute.h"
42#include "video_core/engines/maxwell_3d.h"
43#include "video_core/memory_manager.h"
44#include "video_core/rasterizer_interface.h"
45#include "video_core/surface.h"
46#include "video_core/texture_cache/slot_vector.h"
47#include "video_core/texture_cache/types.h"
48
49namespace boost {
50template <typename T>
51class fast_pool_allocator<T, default_user_allocator_new_delete, details::pool::null_mutex, 4096, 0>;
52}
53
54namespace VideoCommon {
55
56MICROPROFILE_DECLARE(GPU_PrepareBuffers);
57MICROPROFILE_DECLARE(GPU_BindUploadBuffers);
58MICROPROFILE_DECLARE(GPU_DownloadMemory);
59
60using BufferId = SlotId;
61
62using VideoCore::Surface::PixelFormat;
63using namespace Common::Literals;
64
65constexpr u32 NUM_VERTEX_BUFFERS = 32;
66constexpr u32 NUM_TRANSFORM_FEEDBACK_BUFFERS = 4;
67constexpr u32 NUM_GRAPHICS_UNIFORM_BUFFERS = 18;
68constexpr u32 NUM_COMPUTE_UNIFORM_BUFFERS = 8;
69constexpr u32 NUM_STORAGE_BUFFERS = 16;
70constexpr u32 NUM_TEXTURE_BUFFERS = 16;
71constexpr u32 NUM_STAGES = 5;
72
73using UniformBufferSizes = std::array<std::array<u32, NUM_GRAPHICS_UNIFORM_BUFFERS>, NUM_STAGES>;
74using ComputeUniformBufferSizes = std::array<u32, NUM_COMPUTE_UNIFORM_BUFFERS>;
75
76enum class ObtainBufferSynchronize : u32 {
77 NoSynchronize = 0,
78 FullSynchronize = 1,
79 SynchronizeNoDirty = 2,
80};
81
82enum class ObtainBufferOperation : u32 {
83 DoNothing = 0,
84 MarkAsWritten = 1,
85 DiscardWrite = 2,
86 MarkQuery = 3,
87};
88
89template <typename P>
90class BufferCache : public VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> {
91 // Page size for caching purposes.
92 // This is unrelated to the CPU page size and it can be changed as it seems optimal.
93 static constexpr u32 CACHING_PAGEBITS = 16;
94 static constexpr u64 CACHING_PAGESIZE = u64{1} << CACHING_PAGEBITS;
95
96 static constexpr bool IS_OPENGL = P::IS_OPENGL;
97 static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS =
98 P::HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS;
99 static constexpr bool HAS_FULL_INDEX_AND_PRIMITIVE_SUPPORT =
100 P::HAS_FULL_INDEX_AND_PRIMITIVE_SUPPORT;
101 static constexpr bool NEEDS_BIND_UNIFORM_INDEX = P::NEEDS_BIND_UNIFORM_INDEX;
102 static constexpr bool NEEDS_BIND_STORAGE_INDEX = P::NEEDS_BIND_STORAGE_INDEX;
103 static constexpr bool USE_MEMORY_MAPS = P::USE_MEMORY_MAPS;
104 static constexpr bool SEPARATE_IMAGE_BUFFERS_BINDINGS = P::SEPARATE_IMAGE_BUFFER_BINDINGS;
105 static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = P::IMPLEMENTS_ASYNC_DOWNLOADS;
106
107 static constexpr BufferId NULL_BUFFER_ID{0};
108
109 static constexpr s64 DEFAULT_EXPECTED_MEMORY = 512_MiB;
110 static constexpr s64 DEFAULT_CRITICAL_MEMORY = 1_GiB;
111 static constexpr s64 TARGET_THRESHOLD = 4_GiB;
112
113 // Debug Flags.
114
115 static constexpr bool DISABLE_DOWNLOADS = true;
116
117 using Maxwell = Tegra::Engines::Maxwell3D::Regs;
118
119 using Runtime = typename P::Runtime;
120 using Buffer = typename P::Buffer;
121 using Async_Buffer = typename P::Async_Buffer;
122 using MemoryTracker = typename P::MemoryTracker;
123
124 using IntervalCompare = std::less<VAddr>;
125 using IntervalInstance = boost::icl::interval_type_default<VAddr, std::less>;
126 using IntervalAllocator = boost::fast_pool_allocator<VAddr>;
127 using IntervalSet = boost::icl::interval_set<VAddr>;
128 using IntervalType = typename IntervalSet::interval_type;
129
130 template <typename Type>
131 struct counter_add_functor : public boost::icl::identity_based_inplace_combine<Type> {
132 // types
133 typedef counter_add_functor<Type> type;
134 typedef boost::icl::identity_based_inplace_combine<Type> base_type;
135
136 // public member functions
137 void operator()(Type& current, const Type& added) const {
138 current += added;
139 if (current < base_type::identity_element()) {
140 current = base_type::identity_element();
141 }
142 }
143
144 // public static functions
145 static void version(Type&){};
146 };
147
148 using OverlapCombine = counter_add_functor<int>;
149 using OverlapSection = boost::icl::inter_section<int>;
150 using OverlapCounter = boost::icl::split_interval_map<VAddr, int>;
151
152 struct Empty {};
153
154 struct OverlapResult {
155 std::vector<BufferId> ids;
156 VAddr begin;
157 VAddr end;
158 bool has_stream_leap = false;
159 };
160
161 struct Binding {
162 VAddr cpu_addr{};
163 u32 size{};
164 BufferId buffer_id;
165 };
166
167 struct TextureBufferBinding : Binding {
168 PixelFormat format;
169 };
170
171 static constexpr Binding NULL_BINDING{
172 .cpu_addr = 0,
173 .size = 0,
174 .buffer_id = NULL_BUFFER_ID,
175 };
176
177public:
178 static constexpr u32 DEFAULT_SKIP_CACHE_SIZE = static_cast<u32>(4_KiB);
179
180 explicit BufferCache(VideoCore::RasterizerInterface& rasterizer_,
181 Core::Memory::Memory& cpu_memory_, Runtime& runtime_);
182
183 void TickFrame();
184
185 void WriteMemory(VAddr cpu_addr, u64 size);
186
187 void CachedWriteMemory(VAddr cpu_addr, u64 size);
188
189 void DownloadMemory(VAddr cpu_addr, u64 size);
190
191 bool InlineMemory(VAddr dest_address, size_t copy_size, std::span<const u8> inlined_buffer);
192
193 void BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr gpu_addr, u32 size);
194
195 void DisableGraphicsUniformBuffer(size_t stage, u32 index);
196
197 void UpdateGraphicsBuffers(bool is_indexed);
198
199 void UpdateComputeBuffers();
200
201 void BindHostGeometryBuffers(bool is_indexed);
202
203 void BindHostStageBuffers(size_t stage);
204
205 void BindHostComputeBuffers();
206
207 void SetUniformBuffersState(const std::array<u32, NUM_STAGES>& mask,
208 const UniformBufferSizes* sizes);
209
210 void SetComputeUniformBufferState(u32 mask, const ComputeUniformBufferSizes* sizes);
211
212 void UnbindGraphicsStorageBuffers(size_t stage);
213
214 void BindGraphicsStorageBuffer(size_t stage, size_t ssbo_index, u32 cbuf_index, u32 cbuf_offset,
215 bool is_written);
216
217 void UnbindGraphicsTextureBuffers(size_t stage);
218
219 void BindGraphicsTextureBuffer(size_t stage, size_t tbo_index, GPUVAddr gpu_addr, u32 size,
220 PixelFormat format, bool is_written, bool is_image);
221
222 void UnbindComputeStorageBuffers();
223
224 void BindComputeStorageBuffer(size_t ssbo_index, u32 cbuf_index, u32 cbuf_offset,
225 bool is_written);
226
227 void UnbindComputeTextureBuffers();
228
229 void BindComputeTextureBuffer(size_t tbo_index, GPUVAddr gpu_addr, u32 size, PixelFormat format,
230 bool is_written, bool is_image);
231
232 [[nodiscard]] std::pair<Buffer*, u32> ObtainBuffer(GPUVAddr gpu_addr, u32 size,
233 ObtainBufferSynchronize sync_info,
234 ObtainBufferOperation post_op);
235 void FlushCachedWrites();
236
237 /// Return true when there are uncommitted buffers to be downloaded
238 [[nodiscard]] bool HasUncommittedFlushes() const noexcept;
239
240 void AccumulateFlushes();
241
242 /// Return true when the caller should wait for async downloads
243 [[nodiscard]] bool ShouldWaitAsyncFlushes() const noexcept;
244
245 /// Commit asynchronous downloads
246 void CommitAsyncFlushes();
247 void CommitAsyncFlushesHigh();
248
249 /// Pop asynchronous downloads
250 void PopAsyncFlushes();
251 void PopAsyncBuffers();
252
253 bool DMACopy(GPUVAddr src_address, GPUVAddr dest_address, u64 amount);
254
255 bool DMAClear(GPUVAddr src_address, u64 amount, u32 value);
256
257 /// Return true when a CPU region is modified from the GPU
258 [[nodiscard]] bool IsRegionGpuModified(VAddr addr, size_t size);
259
260 /// Return true when a region is registered on the cache
261 [[nodiscard]] bool IsRegionRegistered(VAddr addr, size_t size);
262
263 /// Return true when a CPU region is modified from the CPU
264 [[nodiscard]] bool IsRegionCpuModified(VAddr addr, size_t size);
265
266 void SetDrawIndirect(
267 const Tegra::Engines::DrawManager::IndirectParams* current_draw_indirect_) {
268 current_draw_indirect = current_draw_indirect_;
269 }
270
271 [[nodiscard]] std::pair<Buffer*, u32> GetDrawIndirectCount();
272
273 [[nodiscard]] std::pair<Buffer*, u32> GetDrawIndirectBuffer();
274
275 std::recursive_mutex mutex;
276 Runtime& runtime;
277
278private:
279 template <typename Func>
280 static void ForEachEnabledBit(u32 enabled_mask, Func&& func) {
281 for (u32 index = 0; enabled_mask != 0; ++index, enabled_mask >>= 1) {
282 const int disabled_bits = std::countr_zero(enabled_mask);
283 index += disabled_bits;
284 enabled_mask >>= disabled_bits;
285 func(index);
286 }
287 }
288
289 template <typename Func>
290 void ForEachBufferInRange(VAddr cpu_addr, u64 size, Func&& func) {
291 const u64 page_end = Common::DivCeil(cpu_addr + size, CACHING_PAGESIZE);
292 for (u64 page = cpu_addr >> CACHING_PAGEBITS; page < page_end;) {
293 const BufferId buffer_id = page_table[page];
294 if (!buffer_id) {
295 ++page;
296 continue;
297 }
298 Buffer& buffer = slot_buffers[buffer_id];
299 func(buffer_id, buffer);
300
301 const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes();
302 page = Common::DivCeil(end_addr, CACHING_PAGESIZE);
303 }
304 }
305
306 template <typename Func>
307 void ForEachInRangeSet(IntervalSet& current_range, VAddr cpu_addr, u64 size, Func&& func) {
308 const VAddr start_address = cpu_addr;
309 const VAddr end_address = start_address + size;
310 const IntervalType search_interval{start_address, end_address};
311 auto it = current_range.lower_bound(search_interval);
312 if (it == current_range.end()) {
313 return;
314 }
315 auto end_it = current_range.upper_bound(search_interval);
316 for (; it != end_it; it++) {
317 VAddr inter_addr_end = it->upper();
318 VAddr inter_addr = it->lower();
319 if (inter_addr_end > end_address) {
320 inter_addr_end = end_address;
321 }
322 if (inter_addr < start_address) {
323 inter_addr = start_address;
324 }
325 func(inter_addr, inter_addr_end);
326 }
327 }
328
329 template <typename Func>
330 void ForEachInOverlapCounter(OverlapCounter& current_range, VAddr cpu_addr, u64 size,
331 Func&& func) {
332 const VAddr start_address = cpu_addr;
333 const VAddr end_address = start_address + size;
334 const IntervalType search_interval{start_address, end_address};
335 auto it = current_range.lower_bound(search_interval);
336 if (it == current_range.end()) {
337 return;
338 }
339 auto end_it = current_range.upper_bound(search_interval);
340 for (; it != end_it; it++) {
341 auto& inter = it->first;
342 VAddr inter_addr_end = inter.upper();
343 VAddr inter_addr = inter.lower();
344 if (inter_addr_end > end_address) {
345 inter_addr_end = end_address;
346 }
347 if (inter_addr < start_address) {
348 inter_addr = start_address;
349 }
350 func(inter_addr, inter_addr_end, it->second);
351 }
352 }
353
354 void RemoveEachInOverlapCounter(OverlapCounter& current_range,
355 const IntervalType search_interval, int subtract_value) {
356 bool any_removals = false;
357 current_range.add(std::make_pair(search_interval, subtract_value));
358 do {
359 any_removals = false;
360 auto it = current_range.lower_bound(search_interval);
361 if (it == current_range.end()) {
362 return;
363 }
364 auto end_it = current_range.upper_bound(search_interval);
365 for (; it != end_it; it++) {
366 if (it->second <= 0) {
367 any_removals = true;
368 current_range.erase(it);
369 break;
370 }
371 }
372 } while (any_removals);
373 }
374
375 static bool IsRangeGranular(VAddr cpu_addr, size_t size) {
376 return (cpu_addr & ~Core::Memory::YUZU_PAGEMASK) ==
377 ((cpu_addr + size) & ~Core::Memory::YUZU_PAGEMASK);
378 }
379
380 void RunGarbageCollector();
381
382 void WaitOnAsyncFlushes(VAddr cpu_addr, u64 size);
383
384 void BindHostIndexBuffer();
385
386 void BindHostVertexBuffers();
387
388 void BindHostDrawIndirectBuffers();
389
390 void BindHostGraphicsUniformBuffers(size_t stage);
391
392 void BindHostGraphicsUniformBuffer(size_t stage, u32 index, u32 binding_index, bool needs_bind);
393
394 void BindHostGraphicsStorageBuffers(size_t stage);
395
396 void BindHostGraphicsTextureBuffers(size_t stage);
397
398 void BindHostTransformFeedbackBuffers();
399
400 void BindHostComputeUniformBuffers();
401
402 void BindHostComputeStorageBuffers();
403
404 void BindHostComputeTextureBuffers();
405
406 void DoUpdateGraphicsBuffers(bool is_indexed);
407
408 void DoUpdateComputeBuffers();
409
410 void UpdateIndexBuffer();
411
412 void UpdateVertexBuffers();
413
414 void UpdateVertexBuffer(u32 index);
415
416 void UpdateDrawIndirect();
417
418 void UpdateUniformBuffers(size_t stage);
419
420 void UpdateStorageBuffers(size_t stage);
421
422 void UpdateTextureBuffers(size_t stage);
423
424 void UpdateTransformFeedbackBuffers();
425
426 void UpdateTransformFeedbackBuffer(u32 index);
427
428 void UpdateComputeUniformBuffers();
429
430 void UpdateComputeStorageBuffers();
431
432 void UpdateComputeTextureBuffers();
433
434 void MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 size);
435
436 [[nodiscard]] BufferId FindBuffer(VAddr cpu_addr, u32 size);
437
438 [[nodiscard]] OverlapResult ResolveOverlaps(VAddr cpu_addr, u32 wanted_size);
439
440 void JoinOverlap(BufferId new_buffer_id, BufferId overlap_id, bool accumulate_stream_score);
441
442 [[nodiscard]] BufferId CreateBuffer(VAddr cpu_addr, u32 wanted_size);
443
444 void Register(BufferId buffer_id);
445
446 void Unregister(BufferId buffer_id);
447
448 template <bool insert>
449 void ChangeRegister(BufferId buffer_id);
450
451 void TouchBuffer(Buffer& buffer, BufferId buffer_id) noexcept;
452
453 bool SynchronizeBuffer(Buffer& buffer, VAddr cpu_addr, u32 size);
454
455 bool SynchronizeBufferImpl(Buffer& buffer, VAddr cpu_addr, u32 size);
456
457 bool SynchronizeBufferNoModified(Buffer& buffer, VAddr cpu_addr, u32 size);
458
459 void UploadMemory(Buffer& buffer, u64 total_size_bytes, u64 largest_copy,
460 std::span<BufferCopy> copies);
461
462 void ImmediateUploadMemory(Buffer& buffer, u64 largest_copy,
463 std::span<const BufferCopy> copies);
464
465 void MappedUploadMemory(Buffer& buffer, u64 total_size_bytes, std::span<BufferCopy> copies);
466
467 void DownloadBufferMemory(Buffer& buffer_id);
468
469 void DownloadBufferMemory(Buffer& buffer_id, VAddr cpu_addr, u64 size);
470
471 void DeleteBuffer(BufferId buffer_id, bool do_not_mark = false);
472
473 void NotifyBufferDeletion();
474
475 [[nodiscard]] Binding StorageBufferBinding(GPUVAddr ssbo_addr, u32 cbuf_index,
476 bool is_written) const;
477
478 [[nodiscard]] TextureBufferBinding GetTextureBufferBinding(GPUVAddr gpu_addr, u32 size,
479 PixelFormat format);
480
481 [[nodiscard]] std::span<const u8> ImmediateBufferWithData(VAddr cpu_addr, size_t size);
482
483 [[nodiscard]] std::span<u8> ImmediateBuffer(size_t wanted_capacity);
484
485 [[nodiscard]] bool HasFastUniformBufferBound(size_t stage, u32 binding_index) const noexcept;
486
487 void ClearDownload(IntervalType subtract_interval);
488
489 VideoCore::RasterizerInterface& rasterizer;
490 Core::Memory::Memory& cpu_memory;
491
492 SlotVector<Buffer> slot_buffers;
493 DelayedDestructionRing<Buffer, 8> delayed_destruction_ring;
494
495 const Tegra::Engines::DrawManager::IndirectParams* current_draw_indirect{};
496
497 u32 last_index_count = 0;
498
499 Binding index_buffer;
500 std::array<Binding, NUM_VERTEX_BUFFERS> vertex_buffers;
501 std::array<std::array<Binding, NUM_GRAPHICS_UNIFORM_BUFFERS>, NUM_STAGES> uniform_buffers;
502 std::array<std::array<Binding, NUM_STORAGE_BUFFERS>, NUM_STAGES> storage_buffers;
503 std::array<std::array<TextureBufferBinding, NUM_TEXTURE_BUFFERS>, NUM_STAGES> texture_buffers;
504 std::array<Binding, NUM_TRANSFORM_FEEDBACK_BUFFERS> transform_feedback_buffers;
505 Binding count_buffer_binding;
506 Binding indirect_buffer_binding;
507
508 std::array<Binding, NUM_COMPUTE_UNIFORM_BUFFERS> compute_uniform_buffers;
509 std::array<Binding, NUM_STORAGE_BUFFERS> compute_storage_buffers;
510 std::array<TextureBufferBinding, NUM_TEXTURE_BUFFERS> compute_texture_buffers;
511
512 std::array<u32, NUM_STAGES> enabled_uniform_buffer_masks{};
513 u32 enabled_compute_uniform_buffer_mask = 0;
514
515 const UniformBufferSizes* uniform_buffer_sizes{};
516 const ComputeUniformBufferSizes* compute_uniform_buffer_sizes{};
517
518 std::array<u32, NUM_STAGES> enabled_storage_buffers{};
519 std::array<u32, NUM_STAGES> written_storage_buffers{};
520 u32 enabled_compute_storage_buffers = 0;
521 u32 written_compute_storage_buffers = 0;
522
523 std::array<u32, NUM_STAGES> enabled_texture_buffers{};
524 std::array<u32, NUM_STAGES> written_texture_buffers{};
525 std::array<u32, NUM_STAGES> image_texture_buffers{};
526 u32 enabled_compute_texture_buffers = 0;
527 u32 written_compute_texture_buffers = 0;
528 u32 image_compute_texture_buffers = 0;
529
530 std::array<u32, 16> uniform_cache_hits{};
531 std::array<u32, 16> uniform_cache_shots{};
532
533 u32 uniform_buffer_skip_cache_size = DEFAULT_SKIP_CACHE_SIZE;
534
535 bool has_deleted_buffers = false;
536
537 std::conditional_t<HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS, std::array<u32, NUM_STAGES>, Empty>
538 dirty_uniform_buffers{};
539 std::conditional_t<IS_OPENGL, std::array<u32, NUM_STAGES>, Empty> fast_bound_uniform_buffers{};
540 std::conditional_t<HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS,
541 std::array<std::array<u32, NUM_GRAPHICS_UNIFORM_BUFFERS>, NUM_STAGES>, Empty>
542 uniform_buffer_binding_sizes{};
543
544 std::vector<BufferId> cached_write_buffer_ids;
545
546 MemoryTracker memory_tracker;
547 IntervalSet uncommitted_ranges;
548 IntervalSet common_ranges;
549 IntervalSet cached_ranges;
550 IntervalSet pending_ranges;
551 std::deque<IntervalSet> committed_ranges;
552
553 // Async Buffers
554 OverlapCounter async_downloads;
555 std::deque<std::optional<Async_Buffer>> async_buffers;
556 std::deque<boost::container::small_vector<BufferCopy, 4>> pending_downloads;
557 std::optional<Async_Buffer> current_buffer;
558
559 std::deque<Async_Buffer> async_buffers_death_ring;
560
561 size_t immediate_buffer_capacity = 0;
562 Common::ScratchBuffer<u8> immediate_buffer_alloc;
563
564 struct LRUItemParams {
565 using ObjectType = BufferId;
566 using TickType = u64;
567 };
568 Common::LeastRecentlyUsedCache<LRUItemParams> lru_cache;
569 u64 frame_tick = 0;
570 u64 total_used_memory = 0;
571 u64 minimum_memory = 0;
572 u64 critical_memory = 0;
573 BufferId inline_buffer_id;
574
575 bool active_async_buffers = false;
576
577 std::array<BufferId, ((1ULL << 39) >> CACHING_PAGEBITS)> page_table;
578};
579
580} // namespace VideoCommon
diff --git a/src/video_core/buffer_cache/memory_tracker_base.h b/src/video_core/buffer_cache/memory_tracker_base.h
new file mode 100644
index 000000000..4bc59017f
--- /dev/null
+++ b/src/video_core/buffer_cache/memory_tracker_base.h
@@ -0,0 +1,271 @@
1// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <algorithm>
7#include <bit>
8#include <deque>
9#include <limits>
10#include <type_traits>
11#include <unordered_set>
12#include <utility>
13
14#include "common/alignment.h"
15#include "common/common_types.h"
16#include "video_core/buffer_cache/word_manager.h"
17
18namespace VideoCommon {
19
20template <class RasterizerInterface>
21class MemoryTrackerBase {
22 static constexpr size_t MAX_CPU_PAGE_BITS = 39;
23 static constexpr size_t HIGHER_PAGE_BITS = 22;
24 static constexpr size_t HIGHER_PAGE_SIZE = 1ULL << HIGHER_PAGE_BITS;
25 static constexpr size_t HIGHER_PAGE_MASK = HIGHER_PAGE_SIZE - 1ULL;
26 static constexpr size_t NUM_HIGH_PAGES = 1ULL << (MAX_CPU_PAGE_BITS - HIGHER_PAGE_BITS);
27 static constexpr size_t MANAGER_POOL_SIZE = 32;
28 static constexpr size_t WORDS_STACK_NEEDED = HIGHER_PAGE_SIZE / BYTES_PER_WORD;
29 using Manager = WordManager<RasterizerInterface, WORDS_STACK_NEEDED>;
30
31public:
32 MemoryTrackerBase(RasterizerInterface& rasterizer_) : rasterizer{&rasterizer_} {}
33 ~MemoryTrackerBase() = default;
34
35 /// Returns the inclusive CPU modified range in a begin end pair
36 [[nodiscard]] std::pair<u64, u64> ModifiedCpuRegion(VAddr query_cpu_addr,
37 u64 query_size) noexcept {
38 return IteratePairs<true>(
39 query_cpu_addr, query_size, [](Manager* manager, u64 offset, size_t size) {
40 return manager->template ModifiedRegion<Type::CPU>(offset, size);
41 });
42 }
43
44 /// Returns the inclusive GPU modified range in a begin end pair
45 [[nodiscard]] std::pair<u64, u64> ModifiedGpuRegion(VAddr query_cpu_addr,
46 u64 query_size) noexcept {
47 return IteratePairs<false>(
48 query_cpu_addr, query_size, [](Manager* manager, u64 offset, size_t size) {
49 return manager->template ModifiedRegion<Type::GPU>(offset, size);
50 });
51 }
52
53 /// Returns true if a region has been modified from the CPU
54 [[nodiscard]] bool IsRegionCpuModified(VAddr query_cpu_addr, u64 query_size) noexcept {
55 return IteratePages<true>(
56 query_cpu_addr, query_size, [](Manager* manager, u64 offset, size_t size) {
57 return manager->template IsRegionModified<Type::CPU>(offset, size);
58 });
59 }
60
61 /// Returns true if a region has been modified from the GPU
62 [[nodiscard]] bool IsRegionGpuModified(VAddr query_cpu_addr, u64 query_size) noexcept {
63 return IteratePages<false>(
64 query_cpu_addr, query_size, [](Manager* manager, u64 offset, size_t size) {
65 return manager->template IsRegionModified<Type::GPU>(offset, size);
66 });
67 }
68
69 /// Mark region as CPU modified, notifying the rasterizer about this change
70 void MarkRegionAsCpuModified(VAddr dirty_cpu_addr, u64 query_size) {
71 IteratePages<true>(dirty_cpu_addr, query_size,
72 [](Manager* manager, u64 offset, size_t size) {
73 manager->template ChangeRegionState<Type::CPU, true>(
74 manager->GetCpuAddr() + offset, size);
75 });
76 }
77
78 /// Unmark region as CPU modified, notifying the rasterizer about this change
79 void UnmarkRegionAsCpuModified(VAddr dirty_cpu_addr, u64 query_size) {
80 IteratePages<true>(dirty_cpu_addr, query_size,
81 [](Manager* manager, u64 offset, size_t size) {
82 manager->template ChangeRegionState<Type::CPU, false>(
83 manager->GetCpuAddr() + offset, size);
84 });
85 }
86
87 /// Mark region as modified from the host GPU
88 void MarkRegionAsGpuModified(VAddr dirty_cpu_addr, u64 query_size) noexcept {
89 IteratePages<true>(dirty_cpu_addr, query_size,
90 [](Manager* manager, u64 offset, size_t size) {
91 manager->template ChangeRegionState<Type::GPU, true>(
92 manager->GetCpuAddr() + offset, size);
93 });
94 }
95
96 /// Unmark region as modified from the host GPU
97 void UnmarkRegionAsGpuModified(VAddr dirty_cpu_addr, u64 query_size) noexcept {
98 IteratePages<true>(dirty_cpu_addr, query_size,
99 [](Manager* manager, u64 offset, size_t size) {
100 manager->template ChangeRegionState<Type::GPU, false>(
101 manager->GetCpuAddr() + offset, size);
102 });
103 }
104
105 /// Mark region as modified from the CPU
106 /// but don't mark it as modified until FlusHCachedWrites is called.
107 void CachedCpuWrite(VAddr dirty_cpu_addr, u64 query_size) {
108 IteratePages<true>(
109 dirty_cpu_addr, query_size, [this](Manager* manager, u64 offset, size_t size) {
110 const VAddr cpu_address = manager->GetCpuAddr() + offset;
111 manager->template ChangeRegionState<Type::CachedCPU, true>(cpu_address, size);
112 cached_pages.insert(static_cast<u32>(cpu_address >> HIGHER_PAGE_BITS));
113 });
114 }
115
116 /// Flushes cached CPU writes, and notify the rasterizer about the deltas
117 void FlushCachedWrites(VAddr query_cpu_addr, u64 query_size) noexcept {
118 IteratePages<false>(query_cpu_addr, query_size,
119 [](Manager* manager, [[maybe_unused]] u64 offset,
120 [[maybe_unused]] size_t size) { manager->FlushCachedWrites(); });
121 }
122
123 void FlushCachedWrites() noexcept {
124 for (auto id : cached_pages) {
125 top_tier[id]->FlushCachedWrites();
126 }
127 cached_pages.clear();
128 }
129
130 /// Call 'func' for each CPU modified range and unmark those pages as CPU modified
131 template <typename Func>
132 void ForEachUploadRange(VAddr query_cpu_range, u64 query_size, Func&& func) {
133 IteratePages<true>(query_cpu_range, query_size,
134 [&func](Manager* manager, u64 offset, size_t size) {
135 manager->template ForEachModifiedRange<Type::CPU, true>(
136 manager->GetCpuAddr() + offset, size, func);
137 });
138 }
139
140 /// Call 'func' for each GPU modified range and unmark those pages as GPU modified
141 template <typename Func>
142 void ForEachDownloadRange(VAddr query_cpu_range, u64 query_size, bool clear, Func&& func) {
143 IteratePages<false>(query_cpu_range, query_size,
144 [&func, clear](Manager* manager, u64 offset, size_t size) {
145 if (clear) {
146 manager->template ForEachModifiedRange<Type::GPU, true>(
147 manager->GetCpuAddr() + offset, size, func);
148 } else {
149 manager->template ForEachModifiedRange<Type::GPU, false>(
150 manager->GetCpuAddr() + offset, size, func);
151 }
152 });
153 }
154
155 template <typename Func>
156 void ForEachDownloadRangeAndClear(VAddr query_cpu_range, u64 query_size, Func&& func) {
157 IteratePages<false>(query_cpu_range, query_size,
158 [&func](Manager* manager, u64 offset, size_t size) {
159 manager->template ForEachModifiedRange<Type::GPU, true>(
160 manager->GetCpuAddr() + offset, size, func);
161 });
162 }
163
164private:
165 template <bool create_region_on_fail, typename Func>
166 bool IteratePages(VAddr cpu_address, size_t size, Func&& func) {
167 using FuncReturn = typename std::invoke_result<Func, Manager*, u64, size_t>::type;
168 static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>;
169 std::size_t remaining_size{size};
170 std::size_t page_index{cpu_address >> HIGHER_PAGE_BITS};
171 u64 page_offset{cpu_address & HIGHER_PAGE_MASK};
172 while (remaining_size > 0) {
173 const std::size_t copy_amount{std::min(HIGHER_PAGE_SIZE - page_offset, remaining_size)};
174 auto* manager{top_tier[page_index]};
175 if (manager) {
176 if constexpr (BOOL_BREAK) {
177 if (func(manager, page_offset, copy_amount)) {
178 return true;
179 }
180 } else {
181 func(manager, page_offset, copy_amount);
182 }
183 } else if constexpr (create_region_on_fail) {
184 CreateRegion(page_index);
185 manager = top_tier[page_index];
186 if constexpr (BOOL_BREAK) {
187 if (func(manager, page_offset, copy_amount)) {
188 return true;
189 }
190 } else {
191 func(manager, page_offset, copy_amount);
192 }
193 }
194 page_index++;
195 page_offset = 0;
196 remaining_size -= copy_amount;
197 }
198 return false;
199 }
200
201 template <bool create_region_on_fail, typename Func>
202 std::pair<u64, u64> IteratePairs(VAddr cpu_address, size_t size, Func&& func) {
203 std::size_t remaining_size{size};
204 std::size_t page_index{cpu_address >> HIGHER_PAGE_BITS};
205 u64 page_offset{cpu_address & HIGHER_PAGE_MASK};
206 u64 begin = std::numeric_limits<u64>::max();
207 u64 end = 0;
208 while (remaining_size > 0) {
209 const std::size_t copy_amount{std::min(HIGHER_PAGE_SIZE - page_offset, remaining_size)};
210 auto* manager{top_tier[page_index]};
211 const auto execute = [&] {
212 auto [new_begin, new_end] = func(manager, page_offset, copy_amount);
213 if (new_begin != 0 || new_end != 0) {
214 const u64 base_address = page_index << HIGHER_PAGE_BITS;
215 begin = std::min(new_begin + base_address, begin);
216 end = std::max(new_end + base_address, end);
217 }
218 };
219 if (manager) {
220 execute();
221 } else if constexpr (create_region_on_fail) {
222 CreateRegion(page_index);
223 manager = top_tier[page_index];
224 execute();
225 }
226 page_index++;
227 page_offset = 0;
228 remaining_size -= copy_amount;
229 }
230 if (begin < end) {
231 return std::make_pair(begin, end);
232 } else {
233 return std::make_pair(0ULL, 0ULL);
234 }
235 }
236
237 void CreateRegion(std::size_t page_index) {
238 const VAddr base_cpu_addr = page_index << HIGHER_PAGE_BITS;
239 top_tier[page_index] = GetNewManager(base_cpu_addr);
240 }
241
242 Manager* GetNewManager(VAddr base_cpu_addess) {
243 const auto on_return = [&] {
244 auto* new_manager = free_managers.front();
245 new_manager->SetCpuAddress(base_cpu_addess);
246 free_managers.pop_front();
247 return new_manager;
248 };
249 if (!free_managers.empty()) {
250 return on_return();
251 }
252 manager_pool.emplace_back();
253 auto& last_pool = manager_pool.back();
254 for (size_t i = 0; i < MANAGER_POOL_SIZE; i++) {
255 new (&last_pool[i]) Manager(0, *rasterizer, HIGHER_PAGE_SIZE);
256 free_managers.push_back(&last_pool[i]);
257 }
258 return on_return();
259 }
260
261 std::deque<std::array<Manager, MANAGER_POOL_SIZE>> manager_pool;
262 std::deque<Manager*> free_managers;
263
264 std::array<Manager*, NUM_HIGH_PAGES> top_tier{};
265
266 std::unordered_set<u32> cached_pages;
267
268 RasterizerInterface* rasterizer = nullptr;
269};
270
271} // namespace VideoCommon
diff --git a/src/video_core/buffer_cache/word_manager.h b/src/video_core/buffer_cache/word_manager.h
new file mode 100644
index 000000000..a42455045
--- /dev/null
+++ b/src/video_core/buffer_cache/word_manager.h
@@ -0,0 +1,462 @@
1// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <algorithm>
7#include <bit>
8#include <limits>
9#include <span>
10#include <utility>
11
12#include "common/alignment.h"
13#include "common/common_funcs.h"
14#include "common/common_types.h"
15#include "common/div_ceil.h"
16#include "core/memory.h"
17
18namespace VideoCommon {
19
20constexpr u64 PAGES_PER_WORD = 64;
21constexpr u64 BYTES_PER_PAGE = Core::Memory::YUZU_PAGESIZE;
22constexpr u64 BYTES_PER_WORD = PAGES_PER_WORD * BYTES_PER_PAGE;
23
24enum class Type {
25 CPU,
26 GPU,
27 CachedCPU,
28 Untracked,
29};
30
31/// Vector tracking modified pages tightly packed with small vector optimization
32template <size_t stack_words = 1>
33struct WordsArray {
34 /// Returns the pointer to the words state
35 [[nodiscard]] const u64* Pointer(bool is_short) const noexcept {
36 return is_short ? stack.data() : heap;
37 }
38
39 /// Returns the pointer to the words state
40 [[nodiscard]] u64* Pointer(bool is_short) noexcept {
41 return is_short ? stack.data() : heap;
42 }
43
44 std::array<u64, stack_words> stack{}; ///< Small buffers storage
45 u64* heap; ///< Not-small buffers pointer to the storage
46};
47
48template <size_t stack_words = 1>
49struct Words {
50 explicit Words() = default;
51 explicit Words(u64 size_bytes_) : size_bytes{size_bytes_} {
52 num_words = Common::DivCeil(size_bytes, BYTES_PER_WORD);
53 if (IsShort()) {
54 cpu.stack.fill(~u64{0});
55 gpu.stack.fill(0);
56 cached_cpu.stack.fill(0);
57 untracked.stack.fill(~u64{0});
58 } else {
59 // Share allocation between CPU and GPU pages and set their default values
60 u64* const alloc = new u64[num_words * 4];
61 cpu.heap = alloc;
62 gpu.heap = alloc + num_words;
63 cached_cpu.heap = alloc + num_words * 2;
64 untracked.heap = alloc + num_words * 3;
65 std::fill_n(cpu.heap, num_words, ~u64{0});
66 std::fill_n(gpu.heap, num_words, 0);
67 std::fill_n(cached_cpu.heap, num_words, 0);
68 std::fill_n(untracked.heap, num_words, ~u64{0});
69 }
70 // Clean up tailing bits
71 const u64 last_word_size = size_bytes % BYTES_PER_WORD;
72 const u64 last_local_page = Common::DivCeil(last_word_size, BYTES_PER_PAGE);
73 const u64 shift = (PAGES_PER_WORD - last_local_page) % PAGES_PER_WORD;
74 const u64 last_word = (~u64{0} << shift) >> shift;
75 cpu.Pointer(IsShort())[NumWords() - 1] = last_word;
76 untracked.Pointer(IsShort())[NumWords() - 1] = last_word;
77 }
78
79 ~Words() {
80 Release();
81 }
82
83 Words& operator=(Words&& rhs) noexcept {
84 Release();
85 size_bytes = rhs.size_bytes;
86 num_words = rhs.num_words;
87 cpu = rhs.cpu;
88 gpu = rhs.gpu;
89 cached_cpu = rhs.cached_cpu;
90 untracked = rhs.untracked;
91 rhs.cpu.heap = nullptr;
92 return *this;
93 }
94
95 Words(Words&& rhs) noexcept
96 : size_bytes{rhs.size_bytes}, num_words{rhs.num_words}, cpu{rhs.cpu}, gpu{rhs.gpu},
97 cached_cpu{rhs.cached_cpu}, untracked{rhs.untracked} {
98 rhs.cpu.heap = nullptr;
99 }
100
101 Words& operator=(const Words&) = delete;
102 Words(const Words&) = delete;
103
104 /// Returns true when the buffer fits in the small vector optimization
105 [[nodiscard]] bool IsShort() const noexcept {
106 return num_words <= stack_words;
107 }
108
109 /// Returns the number of words of the buffer
110 [[nodiscard]] size_t NumWords() const noexcept {
111 return num_words;
112 }
113
114 /// Release buffer resources
115 void Release() {
116 if (!IsShort()) {
117 // CPU written words is the base for the heap allocation
118 delete[] cpu.heap;
119 }
120 }
121
122 template <Type type>
123 std::span<u64> Span() noexcept {
124 if constexpr (type == Type::CPU) {
125 return std::span<u64>(cpu.Pointer(IsShort()), num_words);
126 } else if constexpr (type == Type::GPU) {
127 return std::span<u64>(gpu.Pointer(IsShort()), num_words);
128 } else if constexpr (type == Type::CachedCPU) {
129 return std::span<u64>(cached_cpu.Pointer(IsShort()), num_words);
130 } else if constexpr (type == Type::Untracked) {
131 return std::span<u64>(untracked.Pointer(IsShort()), num_words);
132 }
133 }
134
135 template <Type type>
136 std::span<const u64> Span() const noexcept {
137 if constexpr (type == Type::CPU) {
138 return std::span<const u64>(cpu.Pointer(IsShort()), num_words);
139 } else if constexpr (type == Type::GPU) {
140 return std::span<const u64>(gpu.Pointer(IsShort()), num_words);
141 } else if constexpr (type == Type::CachedCPU) {
142 return std::span<const u64>(cached_cpu.Pointer(IsShort()), num_words);
143 } else if constexpr (type == Type::Untracked) {
144 return std::span<const u64>(untracked.Pointer(IsShort()), num_words);
145 }
146 }
147
148 u64 size_bytes = 0;
149 size_t num_words = 0;
150 WordsArray<stack_words> cpu;
151 WordsArray<stack_words> gpu;
152 WordsArray<stack_words> cached_cpu;
153 WordsArray<stack_words> untracked;
154};
155
156template <class RasterizerInterface, size_t stack_words = 1>
157class WordManager {
158public:
159 explicit WordManager(VAddr cpu_addr_, RasterizerInterface& rasterizer_, u64 size_bytes)
160 : cpu_addr{cpu_addr_}, rasterizer{&rasterizer_}, words{size_bytes} {}
161
162 explicit WordManager() = default;
163
164 void SetCpuAddress(VAddr new_cpu_addr) {
165 cpu_addr = new_cpu_addr;
166 }
167
168 VAddr GetCpuAddr() const {
169 return cpu_addr;
170 }
171
172 static u64 ExtractBits(u64 word, size_t page_start, size_t page_end) {
173 constexpr size_t number_bits = sizeof(u64) * 8;
174 const size_t limit_page_end = number_bits - std::min(page_end, number_bits);
175 u64 bits = (word >> page_start) << page_start;
176 bits = (bits << limit_page_end) >> limit_page_end;
177 return bits;
178 }
179
180 static std::pair<size_t, size_t> GetWordPage(VAddr address) {
181 const size_t converted_address = static_cast<size_t>(address);
182 const size_t word_number = converted_address / BYTES_PER_WORD;
183 const size_t amount_pages = converted_address % BYTES_PER_WORD;
184 return std::make_pair(word_number, amount_pages / BYTES_PER_PAGE);
185 }
186
187 template <typename Func>
188 void IterateWords(size_t offset, size_t size, Func&& func) const {
189 using FuncReturn = std::invoke_result_t<Func, std::size_t, u64>;
190 static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>;
191 const size_t start = static_cast<size_t>(std::max<s64>(static_cast<s64>(offset), 0LL));
192 const size_t end = static_cast<size_t>(std::max<s64>(static_cast<s64>(offset + size), 0LL));
193 if (start >= SizeBytes() || end <= start) {
194 return;
195 }
196 auto [start_word, start_page] = GetWordPage(start);
197 auto [end_word, end_page] = GetWordPage(end + BYTES_PER_PAGE - 1ULL);
198 const size_t num_words = NumWords();
199 start_word = std::min(start_word, num_words);
200 end_word = std::min(end_word, num_words);
201 const size_t diff = end_word - start_word;
202 end_word += (end_page + PAGES_PER_WORD - 1ULL) / PAGES_PER_WORD;
203 end_word = std::min(end_word, num_words);
204 end_page += diff * PAGES_PER_WORD;
205 constexpr u64 base_mask{~0ULL};
206 for (size_t word_index = start_word; word_index < end_word; word_index++) {
207 const u64 mask = ExtractBits(base_mask, start_page, end_page);
208 start_page = 0;
209 end_page -= PAGES_PER_WORD;
210 if constexpr (BOOL_BREAK) {
211 if (func(word_index, mask)) {
212 return;
213 }
214 } else {
215 func(word_index, mask);
216 }
217 }
218 }
219
220 template <typename Func>
221 void IteratePages(u64 mask, Func&& func) const {
222 size_t offset = 0;
223 while (mask != 0) {
224 const size_t empty_bits = std::countr_zero(mask);
225 offset += empty_bits;
226 mask = mask >> empty_bits;
227
228 const size_t continuous_bits = std::countr_one(mask);
229 func(offset, continuous_bits);
230 mask = continuous_bits < PAGES_PER_WORD ? (mask >> continuous_bits) : 0;
231 offset += continuous_bits;
232 }
233 }
234
235 /**
236 * Change the state of a range of pages
237 *
238 * @param dirty_addr Base address to mark or unmark as modified
239 * @param size Size in bytes to mark or unmark as modified
240 */
241 template <Type type, bool enable>
242 void ChangeRegionState(u64 dirty_addr, u64 size) noexcept(type == Type::GPU) {
243 std::span<u64> state_words = words.template Span<type>();
244 [[maybe_unused]] std::span<u64> untracked_words = words.template Span<Type::Untracked>();
245 [[maybe_unused]] std::span<u64> cached_words = words.template Span<Type::CachedCPU>();
246 IterateWords(dirty_addr - cpu_addr, size, [&](size_t index, u64 mask) {
247 if constexpr (type == Type::CPU || type == Type::CachedCPU) {
248 NotifyRasterizer<!enable>(index, untracked_words[index], mask);
249 }
250 if constexpr (enable) {
251 state_words[index] |= mask;
252 if constexpr (type == Type::CPU || type == Type::CachedCPU) {
253 untracked_words[index] |= mask;
254 }
255 if constexpr (type == Type::CPU) {
256 cached_words[index] &= ~mask;
257 }
258 } else {
259 if constexpr (type == Type::CPU) {
260 const u64 word = state_words[index] & mask;
261 cached_words[index] &= ~word;
262 }
263 state_words[index] &= ~mask;
264 if constexpr (type == Type::CPU || type == Type::CachedCPU) {
265 untracked_words[index] &= ~mask;
266 }
267 }
268 });
269 }
270
271 /**
272 * Loop over each page in the given range, turn off those bits and notify the rasterizer if
273 * needed. Call the given function on each turned off range.
274 *
275 * @param query_cpu_range Base CPU address to loop over
276 * @param size Size in bytes of the CPU range to loop over
277 * @param func Function to call for each turned off region
278 */
279 template <Type type, bool clear, typename Func>
280 void ForEachModifiedRange(VAddr query_cpu_range, s64 size, Func&& func) {
281 static_assert(type != Type::Untracked);
282
283 std::span<u64> state_words = words.template Span<type>();
284 [[maybe_unused]] std::span<u64> untracked_words = words.template Span<Type::Untracked>();
285 [[maybe_unused]] std::span<u64> cached_words = words.template Span<Type::CachedCPU>();
286 const size_t offset = query_cpu_range - cpu_addr;
287 bool pending = false;
288 size_t pending_offset{};
289 size_t pending_pointer{};
290 const auto release = [&]() {
291 func(cpu_addr + pending_offset * BYTES_PER_PAGE,
292 (pending_pointer - pending_offset) * BYTES_PER_PAGE);
293 };
294 IterateWords(offset, size, [&](size_t index, u64 mask) {
295 const u64 word = state_words[index] & mask;
296 if constexpr (clear) {
297 if constexpr (type == Type::CPU || type == Type::CachedCPU) {
298 NotifyRasterizer<true>(index, untracked_words[index], mask);
299 }
300 state_words[index] &= ~mask;
301 if constexpr (type == Type::CPU || type == Type::CachedCPU) {
302 untracked_words[index] &= ~mask;
303 }
304 if constexpr (type == Type::CPU) {
305 cached_words[index] &= ~word;
306 }
307 }
308 const size_t base_offset = index * PAGES_PER_WORD;
309 IteratePages(word, [&](size_t pages_offset, size_t pages_size) {
310 const auto reset = [&]() {
311 pending_offset = base_offset + pages_offset;
312 pending_pointer = base_offset + pages_offset + pages_size;
313 };
314 if (!pending) {
315 reset();
316 pending = true;
317 return;
318 }
319 if (pending_pointer == base_offset + pages_offset) {
320 pending_pointer += pages_size;
321 return;
322 }
323 release();
324 reset();
325 });
326 });
327 if (pending) {
328 release();
329 }
330 }
331
332 /**
333 * Returns true when a region has been modified
334 *
335 * @param offset Offset in bytes from the start of the buffer
336 * @param size Size in bytes of the region to query for modifications
337 */
338 template <Type type>
339 [[nodiscard]] bool IsRegionModified(u64 offset, u64 size) const noexcept {
340 static_assert(type != Type::Untracked);
341
342 const std::span<const u64> state_words = words.template Span<type>();
343 bool result = false;
344 IterateWords(offset, size, [&](size_t index, u64 mask) {
345 const u64 word = state_words[index] & mask;
346 if (word != 0) {
347 result = true;
348 return true;
349 }
350 return false;
351 });
352 return result;
353 }
354
355 /**
356 * Returns a begin end pair with the inclusive modified region
357 *
358 * @param offset Offset in bytes from the start of the buffer
359 * @param size Size in bytes of the region to query for modifications
360 */
361 template <Type type>
362 [[nodiscard]] std::pair<u64, u64> ModifiedRegion(u64 offset, u64 size) const noexcept {
363 static_assert(type != Type::Untracked);
364 const std::span<const u64> state_words = words.template Span<type>();
365 u64 begin = std::numeric_limits<u64>::max();
366 u64 end = 0;
367 IterateWords(offset, size, [&](size_t index, u64 mask) {
368 const u64 word = state_words[index] & mask;
369 if (word == 0) {
370 return;
371 }
372 const u64 local_page_begin = std::countr_zero(word);
373 const u64 local_page_end = PAGES_PER_WORD - std::countl_zero(word);
374 const u64 page_index = index * PAGES_PER_WORD;
375 begin = std::min(begin, page_index + local_page_begin);
376 end = page_index + local_page_end;
377 });
378 static constexpr std::pair<u64, u64> EMPTY{0, 0};
379 return begin < end ? std::make_pair(begin * BYTES_PER_PAGE, end * BYTES_PER_PAGE) : EMPTY;
380 }
381
382 /// Returns the number of words of the manager
383 [[nodiscard]] size_t NumWords() const noexcept {
384 return words.NumWords();
385 }
386
387 /// Returns the size in bytes of the manager
388 [[nodiscard]] u64 SizeBytes() const noexcept {
389 return words.size_bytes;
390 }
391
392 /// Returns true when the buffer fits in the small vector optimization
393 [[nodiscard]] bool IsShort() const noexcept {
394 return words.IsShort();
395 }
396
397 void FlushCachedWrites() noexcept {
398 const u64 num_words = NumWords();
399 u64* const cached_words = Array<Type::CachedCPU>();
400 u64* const untracked_words = Array<Type::Untracked>();
401 u64* const cpu_words = Array<Type::CPU>();
402 for (u64 word_index = 0; word_index < num_words; ++word_index) {
403 const u64 cached_bits = cached_words[word_index];
404 NotifyRasterizer<false>(word_index, untracked_words[word_index], cached_bits);
405 untracked_words[word_index] |= cached_bits;
406 cpu_words[word_index] |= cached_bits;
407 cached_words[word_index] = 0;
408 }
409 }
410
411private:
412 template <Type type>
413 u64* Array() noexcept {
414 if constexpr (type == Type::CPU) {
415 return words.cpu.Pointer(IsShort());
416 } else if constexpr (type == Type::GPU) {
417 return words.gpu.Pointer(IsShort());
418 } else if constexpr (type == Type::CachedCPU) {
419 return words.cached_cpu.Pointer(IsShort());
420 } else if constexpr (type == Type::Untracked) {
421 return words.untracked.Pointer(IsShort());
422 }
423 }
424
425 template <Type type>
426 const u64* Array() const noexcept {
427 if constexpr (type == Type::CPU) {
428 return words.cpu.Pointer(IsShort());
429 } else if constexpr (type == Type::GPU) {
430 return words.gpu.Pointer(IsShort());
431 } else if constexpr (type == Type::CachedCPU) {
432 return words.cached_cpu.Pointer(IsShort());
433 } else if constexpr (type == Type::Untracked) {
434 return words.untracked.Pointer(IsShort());
435 }
436 }
437
438 /**
439 * Notify rasterizer about changes in the CPU tracking state of a word in the buffer
440 *
441 * @param word_index Index to the word to notify to the rasterizer
442 * @param current_bits Current state of the word
443 * @param new_bits New state of the word
444 *
445 * @tparam add_to_rasterizer True when the rasterizer should start tracking the new pages
446 */
447 template <bool add_to_rasterizer>
448 void NotifyRasterizer(u64 word_index, u64 current_bits, u64 new_bits) const {
449 u64 changed_bits = (add_to_rasterizer ? current_bits : ~current_bits) & new_bits;
450 VAddr addr = cpu_addr + word_index * BYTES_PER_WORD;
451 IteratePages(changed_bits, [&](size_t offset, size_t size) {
452 rasterizer->UpdatePagesCachedCount(addr + offset * BYTES_PER_PAGE,
453 size * BYTES_PER_PAGE, add_to_rasterizer ? 1 : -1);
454 });
455 }
456
457 VAddr cpu_addr = 0;
458 RasterizerInterface* rasterizer = nullptr;
459 Words<stack_words> words;
460};
461
462} // namespace VideoCommon
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index a8c3f8b67..18d3c3ac0 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.h
@@ -8,6 +8,7 @@
8 8
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "video_core/buffer_cache/buffer_cache.h" 10#include "video_core/buffer_cache/buffer_cache.h"
11#include "video_core/buffer_cache/memory_tracker_base.h"
11#include "video_core/rasterizer_interface.h" 12#include "video_core/rasterizer_interface.h"
12#include "video_core/renderer_opengl/gl_device.h" 13#include "video_core/renderer_opengl/gl_device.h"
13#include "video_core/renderer_opengl/gl_resource_manager.h" 14#include "video_core/renderer_opengl/gl_resource_manager.h"
@@ -200,6 +201,8 @@ private:
200struct BufferCacheParams { 201struct BufferCacheParams {
201 using Runtime = OpenGL::BufferCacheRuntime; 202 using Runtime = OpenGL::BufferCacheRuntime;
202 using Buffer = OpenGL::Buffer; 203 using Buffer = OpenGL::Buffer;
204 using Async_Buffer = u32;
205 using MemoryTracker = VideoCommon::MemoryTrackerBase<VideoCore::RasterizerInterface>;
203 206
204 static constexpr bool IS_OPENGL = true; 207 static constexpr bool IS_OPENGL = true;
205 static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS = true; 208 static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS = true;
@@ -208,6 +211,7 @@ struct BufferCacheParams {
208 static constexpr bool NEEDS_BIND_STORAGE_INDEX = true; 211 static constexpr bool NEEDS_BIND_STORAGE_INDEX = true;
209 static constexpr bool USE_MEMORY_MAPS = false; 212 static constexpr bool USE_MEMORY_MAPS = false;
210 static constexpr bool SEPARATE_IMAGE_BUFFER_BINDINGS = true; 213 static constexpr bool SEPARATE_IMAGE_BUFFER_BINDINGS = true;
214 static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = false;
211}; 215};
212 216
213using BufferCache = VideoCommon::BufferCache<BufferCacheParams>; 217using BufferCache = VideoCommon::BufferCache<BufferCacheParams>;
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache_base.cpp b/src/video_core/renderer_opengl/gl_buffer_cache_base.cpp
new file mode 100644
index 000000000..f15ae8e25
--- /dev/null
+++ b/src/video_core/renderer_opengl/gl_buffer_cache_base.cpp
@@ -0,0 +1,9 @@
1// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#include "video_core/buffer_cache/buffer_cache.h"
5#include "video_core/renderer_opengl/gl_buffer_cache.h"
6
7namespace VideoCommon {
8template class VideoCommon::BufferCache<OpenGL::BufferCacheParams>;
9}
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
index 9cbcb3c8f..510602e8e 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
@@ -314,8 +314,12 @@ StagingBufferRef BufferCacheRuntime::UploadStagingBuffer(size_t size) {
314 return staging_pool.Request(size, MemoryUsage::Upload); 314 return staging_pool.Request(size, MemoryUsage::Upload);
315} 315}
316 316
317StagingBufferRef BufferCacheRuntime::DownloadStagingBuffer(size_t size) { 317StagingBufferRef BufferCacheRuntime::DownloadStagingBuffer(size_t size, bool deferred) {
318 return staging_pool.Request(size, MemoryUsage::Download); 318 return staging_pool.Request(size, MemoryUsage::Download, deferred);
319}
320
321void BufferCacheRuntime::FreeDeferredStagingBuffer(StagingBufferRef& ref) {
322 staging_pool.FreeDeferred(ref);
319} 323}
320 324
321u64 BufferCacheRuntime::GetDeviceLocalMemory() const { 325u64 BufferCacheRuntime::GetDeviceLocalMemory() const {
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h
index 183b33632..879f1ed94 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.h
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h
@@ -3,7 +3,8 @@
3 3
4#pragma once 4#pragma once
5 5
6#include "video_core/buffer_cache/buffer_cache.h" 6#include "video_core/buffer_cache/buffer_cache_base.h"
7#include "video_core/buffer_cache/memory_tracker_base.h"
7#include "video_core/engines/maxwell_3d.h" 8#include "video_core/engines/maxwell_3d.h"
8#include "video_core/renderer_vulkan/vk_compute_pass.h" 9#include "video_core/renderer_vulkan/vk_compute_pass.h"
9#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h" 10#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h"
@@ -75,7 +76,9 @@ public:
75 76
76 [[nodiscard]] StagingBufferRef UploadStagingBuffer(size_t size); 77 [[nodiscard]] StagingBufferRef UploadStagingBuffer(size_t size);
77 78
78 [[nodiscard]] StagingBufferRef DownloadStagingBuffer(size_t size); 79 [[nodiscard]] StagingBufferRef DownloadStagingBuffer(size_t size, bool deferred = false);
80
81 void FreeDeferredStagingBuffer(StagingBufferRef& ref);
79 82
80 void PreCopyBarrier(); 83 void PreCopyBarrier();
81 84
@@ -142,6 +145,8 @@ private:
142struct BufferCacheParams { 145struct BufferCacheParams {
143 using Runtime = Vulkan::BufferCacheRuntime; 146 using Runtime = Vulkan::BufferCacheRuntime;
144 using Buffer = Vulkan::Buffer; 147 using Buffer = Vulkan::Buffer;
148 using Async_Buffer = Vulkan::StagingBufferRef;
149 using MemoryTracker = VideoCommon::MemoryTrackerBase<VideoCore::RasterizerInterface>;
145 150
146 static constexpr bool IS_OPENGL = false; 151 static constexpr bool IS_OPENGL = false;
147 static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS = false; 152 static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS = false;
@@ -150,6 +155,7 @@ struct BufferCacheParams {
150 static constexpr bool NEEDS_BIND_STORAGE_INDEX = false; 155 static constexpr bool NEEDS_BIND_STORAGE_INDEX = false;
151 static constexpr bool USE_MEMORY_MAPS = true; 156 static constexpr bool USE_MEMORY_MAPS = true;
152 static constexpr bool SEPARATE_IMAGE_BUFFER_BINDINGS = false; 157 static constexpr bool SEPARATE_IMAGE_BUFFER_BINDINGS = false;
158 static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = true;
153}; 159};
154 160
155using BufferCache = VideoCommon::BufferCache<BufferCacheParams>; 161using BufferCache = VideoCommon::BufferCache<BufferCacheParams>;
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache_base.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache_base.cpp
new file mode 100644
index 000000000..f9e271507
--- /dev/null
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache_base.cpp
@@ -0,0 +1,9 @@
1// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "video_core/buffer_cache/buffer_cache.h"
5#include "video_core/renderer_vulkan/vk_buffer_cache.h"
6
7namespace VideoCommon {
8template class VideoCommon::BufferCache<Vulkan::BufferCacheParams>;
9}