Compare commits

..

37 Commits

Author SHA1 Message Date
CamilleLaVey 6cb9e3a9da [TEST] Line/ conservative rasterization adjustment 2026-07-29 04:28:38 -04:00
CamilleLaVey 7e1fc154c7 [TEST] Quick corrections 2026-07-29 04:04:37 -04:00
CamilleLaVey 828220977b [TEST] depth clip enable implementation 2026-07-29 03:20:58 -04:00
CamilleLaVey 0684757788 [TEST] Debug viewport geometry 2026-07-29 02:30:30 -04:00
CamilleLaVey 30c44934e7 [TEST] Debug depths on viewports 2026-07-29 01:52:30 -04:00
CamilleLaVey 81efd5f1d1 [TEST] Adjustments on memory reclamations 2026-07-29 00:37:37 -04:00
CamilleLaVey c51b9fed0f [TEST] Rework Android CPU affinity/ threading 2 2026-07-29 00:27:04 -04:00
CamilleLaVey 5157251457 Revert "[android] Support Joy-Con D-pad buttons (#4225)" 2026-07-29 00:19:40 -04:00
CamilleLaVey 71b9d8d3df [TEST] Rework Android CPU affinity/ threading 2026-07-28 23:42:46 -04:00
CamilleLaVey b6959029ca [TEST] Adjustments on TransformFeedback 2026-07-28 23:12:30 -04:00
CamilleLaVey 81aaf67c97 [TEST] Adjustments on framepacing submit calls 2026-07-28 22:47:34 -04:00
CamilleLaVey 9289f5f55a [TEST] Refinements on RAII 2026-07-28 21:31:24 -04:00
CamilleLaVey b38556d4f6 [TEST] ASTC fixes 2026-07-28 19:57:34 -04:00
CamilleLaVey 1616d19279 [TEST] Miscellaneous changes 2026-07-28 18:38:14 -04:00
CamilleLaVey 40756bbc52 Lizzie get meowed, please. 2026-07-28 16:19:05 -04:00
CamilleLaVey 424eb62cdb [TEST] Adjusments on deferred destruction implementation 2026-07-28 16:07:59 -04:00
CamilleLaVey e755504ed8 [TEST] Overlap image on non implemented path 2026-07-28 14:36:49 -04:00
CamilleLaVey b5d82311f6 [TEST] Debug 3D image copy 2026-07-28 13:52:22 -04:00
CamilleLaVey 6b65b2b6fc [TEST] Fallback on TICEntry out of bounds 2026-07-28 13:12:28 -04:00
CamilleLaVey 7fcdd9c9e4 Meow 2026-07-28 12:17:35 -04:00
CamilleLaVey df681d1bd2 [TEST] Debug TICEntry shader pass 2026-07-28 11:20:23 -04:00
CamilleLaVey bee168c5fa [TEST] Adjust ternary on pipeline barriers 2026-07-28 11:12:41 -04:00
CamilleLaVey d754fef20e [TEST] Upload on depth MSAACopy pass 2026-07-28 03:38:25 -04:00
CamilleLaVey 0408db7adb [TEST] Adjustments on descriptors payloads 2026-07-28 03:08:46 -04:00
CamilleLaVey ead7505d00 [TEST] Smolios forever 2026-07-28 02:29:10 -04:00
CamilleLaVey 65568e320d [TEST] Test anti-smolios 2026-07-28 02:26:05 -04:00
CamilleLaVey 4154787b51 [TEST] debug MSAA texture missing handling 2026-07-28 01:55:25 -04:00
CamilleLaVey 6f3e1b4471 Revert "[TEST] Some miscellaneous changes within buffers queue and RAII deallocations" 2026-07-28 01:24:06 -04:00
CamilleLaVey 240b65d61e Revert "[TEST] Another miscellaneous change 2" 2026-07-28 01:23:39 -04:00
CamilleLaVey 461fa8ab6e [TEST] Another miscellaneous change 2 2026-07-28 01:09:16 -04:00
CamilleLaVey 0ef8acd602 [TEST] Some miscellaneous changes within buffers queue and RAII deallocations 2026-07-28 00:26:43 -04:00
CamilleLaVey dbf5ee4e1f [TEST] Keep tuning the drain/ memory allocation 2026-07-28 00:06:09 -04:00
CamilleLaVey e248832967 Fix build 2026-07-27 23:49:20 -04:00
CamilleLaVey 17167a27dc Fix license headers 2026-07-27 23:23:36 -04:00
CamilleLaVey a4bcb4a1e1 [TEST] Adjustments on memory collection 2026-07-27 22:39:10 -04:00
CamilleLaVey b9ec214553 [TEST] Adjustments on memory collection + removal dead code 2026-07-27 22:38:33 -04:00
CamilleLaVey 43b28d3731 [TEST] Refactor on memory collections 2026-07-27 21:38:15 -04:00
83 changed files with 2626 additions and 2058 deletions
+45 -45
View File
@@ -4332,58 +4332,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation>[انتظار]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>ملف تعريف جديد</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>أدخل اسم ملف التعريف:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>إنشاء ملف تعريف الإدخال</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>اسم ملف التعريف المحدد غير صالح!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; فشل في إنشاء ملف تعريف الإدخال</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>حذف ملف تعريف الإدخال</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; فشل في مسح ملف تعريف الإدخال</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>تحميل ملف تعريف الإدخال</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; فشل في تحميل ملف تعريف الإدخال</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>حفظ ملف تعريف الإدخال</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; فشل في حفظ ملف تعريف الإدخال</translation>
</message>
@@ -5997,50 +5997,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL غير متوفر!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>OpenGL لا يتم دعم السياقات المشتركة</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>OpenGL لم يتم تجميع إيدن بدعم</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>OpenGL حدث خطأ أثناء تهيئة</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>أو قد لا يكون لديك أحدث برنامج تشغيل للرسومات OpenGL قد لا تدعم بطاقة الرسومات الخاصة بك</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>OpenGL 4.6 حدث خطأ أثناء تهيئة</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>أو قد لا يكون لديك أحدث برنامج تشغيل للرسومات OpenGL 4.6 قد لا تدعم بطاقة الرسومات الخاصة بك.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>قد لا تدعم وحدة معالجة الرسومات لديك ملحقًا واحدًا أو أكثر من ملحقات OpenGL المطلوبة. يُرجى التأكد من تثبيت أحدث برنامج تشغيل للرسومات.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;1%&lt;br&gt;&lt;br&gt;إضافات غير مدعومة: &lt;br&gt;2%</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation>هذا الإصدار لا يدعم OpenGL.</translation>
</message>
@@ -8683,8 +8683,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8697,10 +8697,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8715,9 +8715,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8879,50 +8879,50 @@ p, li { white-space: pre-wrap; }
<translation>[غير معرف]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[غير صالح]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Hat %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2محور %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2محور %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2حركة %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2زر %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[غير مستخدم]</translation>
+45 -45
View File
@@ -4266,58 +4266,58 @@ Per invertir els eixos, primer moveu el joystick verticalment i després horitzo
<translation>[esperant]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Nou perfil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Introdueixi un nom de perfil:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Crear perfil d&apos;entrada</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>El nom de perfil introduït no és vàlid!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Error al crear el perfil d&apos;entrada &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Eliminar perfil d&apos;entrada</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Error al eliminar el perfil d&apos;entrada &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Carregar perfil d&apos;entrada</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Error al carregar el perfil d&apos;entrada &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Guardar perfil d&apos;entrada</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Error al guardar el perfil d&apos;entrada &quot;%1&quot;</translation>
</message>
@@ -5923,50 +5923,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL no disponible!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Error al inicialitzar OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>La seva GPU no suporta OpenGL, o no instal·lat els últims controladors gràfics.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Error inicialitzant OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>La seva GPU no suporta OpenGL 4.6, o no instal·lats els últims controladors gràfics.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>És possible que la seva GPU no suporti una o més extensions necessàries d&apos;OpenGL. Si us plau, asseguris de tenir els últims controladors de la tarjeta gràfica.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Extensions no suportades:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation>Aquesta compilació no suport per a OpenGL.</translation>
</message>
@@ -8569,8 +8569,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8583,10 +8583,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8601,9 +8601,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8765,50 +8765,50 @@ p, li { white-space: pre-wrap; }
<translation>[indefinit]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[invàlid]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Rotació %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Eix %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Eixos %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Moviment %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Botó %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[sense ús]</translation>
+45 -45
View File
@@ -4258,58 +4258,58 @@ Pro převrácení os nejprve posuňte joystick vertikálně, poté horizontáln
<translation>[čekání]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Nový profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Zadejte název profilu:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Vytvořit profil vstupu</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Zadaný název profilu není platný!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Nepodařilo se vytvořit profil vstupu &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Odstranit profil vstupu</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Nepodařilo se odstranit profil vstupu &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Načíst profil vstupu</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Nepodařilo se načíst profil vstupu &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Uložit profil vstupu</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Nepodařilo se uložit profil vstupu &quot;%1&quot;</translation>
</message>
@@ -5914,50 +5914,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL není k dispozici!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Chyba při inicializaci OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Vaše grafická karta pravděpodobně nepodporuje OpenGL nebo nejsou nainstalovány nejnovější ovladače.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Chyba při inicializaci OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Vaše grafická karta pravděpodobně nepodporuje OpenGL 4.6 nebo nejsou nainstalovány nejnovější ovladače.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Vaše grafická karta pravděpodobně nepodporuje jedno nebo více rozšíření OpenGL. Ujistěte se prosím, že jsou nainstalovány nejnovější ovladače.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Nepodporované rozšíření:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8557,8 +8557,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8571,10 +8571,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8589,9 +8589,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8753,50 +8753,50 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[nepoužito]</translation>
+45 -45
View File
@@ -4266,58 +4266,58 @@ Bevæg, for at omvende akserne, først din styrepind lodret og så vandret.</tra
<translation>[venter]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Ny Profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Indtast et profilnavn:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Opret Input-Profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Det angivne profilnavn er ikke gyldigt!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Oprettelse af input-profil &quot;%1&quot; mislykkedes</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Slet Input-Profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Sletning af input-profil &quot;%1&quot; mislykkedes</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Indlæs Input-Profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Indlæsning af input-profil &quot;%1&quot; mislykkedes</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Gem Input-Profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Lagring af input-profil &quot;%1&quot; mislykkedes</translation>
</message>
@@ -5922,50 +5922,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8561,8 +8561,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8575,10 +8575,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8593,9 +8593,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8757,50 +8757,50 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[ubrugt]</translation>
+45 -45
View File
@@ -4342,58 +4342,58 @@ Um die Achsen umzukehren, bewege den Joystick zuerst vertikal und dann horizonta
<translation>[wartet]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Neues Profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Profilnamen eingeben:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Eingabeprofil erstellen</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Angegebener Profilname ist nicht gültig!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Erstellen des Eingabeprofils &quot;%1&quot; ist fehlgeschlagen</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Eingabeprofil löschen</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Löschen des Eingabeprofils &quot;%1&quot; ist fehlgeschlagen</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Eingabeprofil laden</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Laden des Eingabeprofils &quot;%1&quot; ist fehlgeschlagen</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Eingabeprofil speichern</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Speichern des Eingabeprofils &quot;%1&quot; ist fehlgeschlagen</translation>
</message>
@@ -6007,50 +6007,50 @@ Bitte gehe zu „Konfigurieren“ -&gt; „System“ -&gt; „Netzwerk“ und tr
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL nicht verfügbar!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Gemeinsame OpenGL-Kontexte werden nicht unterstützt.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden wurde nicht mit OpenGL-Unterstützung kompiliert.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Fehler beim Initialisieren von OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Deine Grafikkarte unterstützt kein OpenGL oder du hast nicht den neusten Treiber installiert.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Fehler beim Initialisieren von OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Deine Grafikkarte unterstützt OpenGL 4.6 nicht, oder du benutzt nicht die neuste Treiberversion.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Deine Grafikkarte unterstützt anscheinend nicht eine oder mehrere von yuzu benötigten OpenGL-Erweiterungen. Bitte stelle sicher, dass du den neusten Grafiktreiber installiert hast.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Nicht unterstützte Erweiterungen:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation>Diese Version bietet keine OpenGL-Unterstützung.</translation>
</message>
@@ -8679,8 +8679,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8693,10 +8693,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8711,9 +8711,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8875,50 +8875,50 @@ p, li { white-space: pre-wrap; }
<translation>[undefiniert]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[ungültig]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Hat %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Achse %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Achse %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Bewegung %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Knopf %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[unbenutzt]</translation>
+45 -45
View File
@@ -4258,58 +4258,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation>[αναμονή]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Νέο Προφίλ</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Εισαγάγετε ένα όνομα προφίλ:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Δημιουργία Προφίλ Χειρισμού</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Το όνομα του προφίλ δεν είναι έγκυρο!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Η δημιουργία του προφίλ χειρισμού &quot;%1&quot; απέτυχε</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Διαγραφή Προφίλ Χειρισμού</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Η διαγραφή του προφίλ χειρισμού &quot;%1&quot; απέτυχε</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Φόρτωση Προφίλ Χειρισμού</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Η φόρτωση του προφίλ χειρισμού &quot;%1&quot; απέτυχε</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Αποθήκευση Προφίλ Χειρισμού</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Η αποθήκευση του προφίλ χειρισμού &quot;%1&quot; απέτυχε</translation>
</message>
@@ -5913,50 +5913,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>Το OpenGL δεν είναι διαθέσιμο!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Σφάλμα κατα την αρχικοποίηση του OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8553,8 +8553,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8567,10 +8567,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8585,9 +8585,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8749,50 +8749,50 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[άδειο]</translation>
+45 -45
View File
@@ -4340,58 +4340,58 @@ Para invertir los ejes, mueve primero el joystick de manera vertical, y luego ho
<translation>[esperando]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Nuevo perfil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Introduce un nombre de perfil:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Crear perfil de entrada</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>¡El nombre de perfil introducido no es válido!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Error al crear el perfil de entrada &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Eliminar perfil de entrada</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Error al eliminar el perfil de entrada &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Cargar perfil de entrada</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Error al cargar el perfil de entrada &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Guardar perfil de entrada</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Error al guardar el perfil de entrada &quot;%1&quot;</translation>
</message>
@@ -6004,50 +6004,50 @@ Por favor, vaya a Configuración -&gt; Sistema -&gt; Red y selecciona una interf
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>¡OpenGL no está disponible!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Los contextos compartidos de OpenGL no son compatibles.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden no ha sido compilado con soporte para OpenGL.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>¡Error al inicializar OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Tu GPU no soporta OpenGL, o no tienes instalados los últimos controladores gráficos.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>¡Error al iniciar OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Tu GPU no soporta OpenGL 4.6, o no tienes instalado el último controlador de la tarjeta gráfica.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Es posible que la GPU no soporte una o más extensiones necesarias de OpenGL . Por favor, asegúrate de tener los últimos controladores de la tarjeta gráfica.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Extensiones no soportadas:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation>Esta compilación no tiene soporte para OpenGL.</translation>
</message>
@@ -8681,8 +8681,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8695,10 +8695,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8713,9 +8713,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8877,50 +8877,50 @@ p, li { white-space: pre-wrap; }
<translation>[sin definir]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[inválido]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Rotación %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Eje %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Eje %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Movimiento %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Botón %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[no usado]</translation>
+45 -45
View File
@@ -4236,58 +4236,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation type="unfinished"/>
</message>
@@ -5891,50 +5891,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>openGL ei ole saatavilla!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Virhe käynnistäessä OpenGL ydintä!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8530,8 +8530,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8544,10 +8544,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8562,9 +8562,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8726,50 +8726,50 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[ei käytössä]</translation>
+45 -45
View File
@@ -4320,58 +4320,58 @@ Pour inverser les axes, bougez d&apos;abord votre joystick verticalement, puis h
<translation>[en attente]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Nouveau Profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Entrez un nom de profil :</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Créer un profil d&apos;entrée </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Le nom de profil donné est invalide !</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Échec de la création du profil d&apos;entrée &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Supprimer le profil d&apos;entrée</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Échec de la suppression du profil d&apos;entrée &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Charger le profil d&apos;entrée</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Échec du chargement du profil d&apos;entrée &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Sauvegarder le profil d&apos;entrée</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Échec de la sauvegarde du profil d&apos;entrée &quot;%1&quot;</translation>
</message>
@@ -5980,50 +5980,50 @@ Veuillez aller dans Configurer -&gt; Système -&gt; Réseau puis en choisir une.
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL n&apos;est pas disponible !</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Les contextes OpenGL partagés ne sont pas pris en charge.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden n&apos;a pas é compilé avec le support OpenGL</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Erreur lors de l&apos;initialisation d&apos;OpenGL !</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Votre GPU peut ne pas prendre en charge OpenGL, ou vous n&apos;avez pas les derniers pilotes graphiques.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Erreur lors de l&apos;initialisation d&apos;OpenGL 4.6 !</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Votre GPU peut ne pas prendre en charge OpenGL 4.6 ou vous ne disposez pas du dernier pilote graphique: %1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Votre GPU peut ne pas prendre en charge une ou plusieurs extensions OpenGL requises. Veuillez vous assurer que vous disposez du dernier pilote graphique.&lt;br&gt;&lt;br&gt;GL Renderer :&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Extensions non prises en charge :&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8640,8 +8640,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8654,10 +8654,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8672,9 +8672,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8836,50 +8836,50 @@ p, li { white-space: pre-wrap; }
<translation>[non défini]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[invalide]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Chapeau %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Axe %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Axe %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Mouvement %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Bouton %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[inutilisé]</translation>
+45 -45
View File
@@ -4248,58 +4248,58 @@ A tengely megfordításához mozgasd a kart először függőlegesen, majd vízs
<translation>[várakozás]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Új profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Add meg a profil nevét:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Beviteli profil létrehozása</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>A megadott profilnév érvénytelen!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>A &quot;%1&quot; beviteli profilt nem sikerült létrehozni</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Beviteli profil törlése</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>A &quot;%1&quot; beviteli profilt nem sikerült eltávolítani</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Beviteli profil betöltése</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>A &quot;%1&quot; beviteli profilt nem sikerült betölteni</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Beviteli profil mentése</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>A &quot;%1&quot; beviteli profilt nem sikerült elmenteni</translation>
</message>
@@ -5906,50 +5906,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL nem elérhető!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Hiba történt az OpenGL inicializálása során!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Lehetséges, hogy a GPU-d nem támogatja az OpenGL-t, vagy nem a legfrissebb grafikus illesztőprogram van telepítve.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Hiba történt az OpenGL 4.6 inicializálása során!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Lehetséges, hogy a GPU-d nem támogatja az OpenGL 4.6-ot, vagy nem a legfrissebb grafikus illesztőprogram van telepítve.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Előfordulhat, hogy a GPU-d nem támogat egy vagy több szükséges OpenGL kiterjesztést. Győződj meg róla, hogy a legújabb videokártya-illesztőprogramot használod.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Nem támogatott kiterjesztések:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8552,8 +8552,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8566,10 +8566,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8584,9 +8584,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8748,50 +8748,50 @@ p, li { white-space: pre-wrap; }
<translation>[nem definiált]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[érvénytelen]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Tengely %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Tengely %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Gomb %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[nem használt]</translation>
+45 -45
View File
@@ -4287,58 +4287,58 @@ Untuk membalikkan sumbu, pertama gerakkan joystik secara tegak lurus, lalu menda
<translation>[menunggu]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Profil Baru</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Masukkan nama profil:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Ciptakan Profil Masukan</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Nama profil yang diberi tidak sah!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Gagal membuat profil masukan &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Hapus Profil Masukan</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Gagal menghapus profil masukan &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Muat Profil Masukan</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Gagal memuat profil masukan &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Simpat Profil Masukan</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Gagal menyimpan profil masukan &quot;%1&quot;</translation>
</message>
@@ -5942,50 +5942,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL tidak tersedia!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Terjadi kesalahan menginisialisasi OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>VGA anda mungkin tidak mendukung OpenGL, atau anda tidak memiliki pemacu piranti (driver) grafis terbaharu.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Terjadi kesalahan menginisialisasi OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>VGA anda mungkin tidak mendukung OpenGL 4.6, atau anda tidak memiliki pemacu piranti (driver) grafis terbaharu.&lt;br&gt;&lt;br&gt;Pemuat GL:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>VGA anda mungkin tidak mendukung satu atau lebih ekstensi OpenGL. Mohon pastikan bahwa anda memiliki pemacu piranti (driver) grafis terbaharu.&lt;br&gt;&lt;br&gt;Pemuat GL:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Ekstensi yang tidak didukung:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8581,8 +8581,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8595,10 +8595,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8613,9 +8613,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8777,50 +8777,50 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Gerakan %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation type="unfinished"/>
+45 -45
View File
@@ -4332,58 +4332,58 @@ Per invertire gli assi, prima muovi la levetta verticalmente, e poi orizzontalme
<translation>[in attesa]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Nuovo profilo</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Inserisci un nome profilo:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Crea un profilo di input</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Il nome profilo inserito non è valido!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Impossibile creare il profilo di input &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Elimina un profilo di input</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Impossibile eliminare il profilo di input &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Carica un profilo di input</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Impossibile caricare il profilo di input &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Salva un profilo di Input</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Impossibile creare il profilo di input &quot;%1&quot;</translation>
</message>
@@ -6001,50 +6001,50 @@ Vai su Configura -&gt; Sistema -&gt; Rete e selezionane una.</translation>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL non disponibile!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Gli shared context di OpenGL non sono supportati.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden non è stato compilato con il supporto a OpenGL.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Errore durante l&apos;inizializzazione di OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>La tua GPU potrebbe non supportare OpenGL, o non hai installato l&apos;ultima versione dei driver video.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Errore durante l&apos;inizializzazione di OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>La tua GPU potrebbe non supportare OpenGL 4.6, o non hai installato l&apos;ultima versione dei driver video.&lt;br&gt;&lt;br&gt;Renderer GL:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>La tua GPU potrebbe non supportare una o più estensioni OpenGL richieste. Assicurati di aver installato i driver video più recenti.&lt;br&gt;&lt;br&gt;Renderer GL:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Estensioni non supportate:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8666,8 +8666,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8680,10 +8680,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8698,9 +8698,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8862,50 +8862,50 @@ p, li { white-space: pre-wrap; }
<translation>[indefinito]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[non valido]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Freccia %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Asse %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Asse %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Movimento %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Pulsante %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[inutilizzato]</translation>
+45 -45
View File
@@ -4272,58 +4272,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation> &quot;%1&quot; </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation> &quot;%1&quot; </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation> &quot;%1&quot; </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation> &quot;%1&quot; </translation>
</message>
@@ -5929,50 +5929,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGLは使用できません</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>OpenGL初期化エラー</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>GPUがOpenGLをサポートしていないか</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>OpenGL4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>GPUがOpenGL4.6&lt;br&gt;&lt;br&gt;GL :&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>GPUが1つ以上の必要なOpenGL拡張機能をサポートしていない可能性があります使&lt;br&gt;&lt;br&gt;GL :&lt;br&gt;%1&lt;br&gt;&lt;br&gt;:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8575,8 +8575,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8589,10 +8589,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8607,9 +8607,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8771,50 +8771,50 @@ p, li { white-space: pre-wrap; }
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[使]</translation>
+45 -45
View File
@@ -4353,58 +4353,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation> </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation> :</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation> </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation> !</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation> </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation> </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation> </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; </translation>
</message>
@@ -6017,50 +6017,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL을 !</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>OpenGL .</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden은 OpenGL .</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>OpenGL을 !</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation> GPU가 OpenGL을 , .</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>OpenGL 4.6 !</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation> GPU가 OpenGL 4.6 .&lt;br&gt;&lt;br&gt;GL :&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation> GPU가 OpenGL . .&lt;br&gt;&lt;br&gt;GL :&lt;br&gt;%1&lt;br&gt;&lt;br&gt; :&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation> OpenGL을 .</translation>
</message>
@@ -8688,8 +8688,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8702,10 +8702,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8720,9 +8720,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8884,50 +8884,50 @@ p, li { white-space: pre-wrap; }
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2 %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[]</translation>
+45 -45
View File
@@ -4269,58 +4269,58 @@ For å invertere aksene, flytt først stikken vertikalt, og så horistonalt.</tr
<translation>[venter]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Ny profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Skriv inn et profilnavn:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Opprett inndataprofil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Det oppgitte profilenavnet er ugyldig!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Klarte ikke lage inndataprofil &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Slett inndataprofil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Klarte ikke slette inndataprofil &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Last inn inndataprofil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Klarte ikke laste inn inndataprofil &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Lagre inndataprofil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Klarte ikke lagre inndataprofil &quot;%1&quot;</translation>
</message>
@@ -5926,50 +5926,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL ikke tilgjengelig!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Delte OpenGL-kontekster støttes ikke.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Feil under initialisering av OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Det kan hende at GPU-en din ikke støtter OpenGL, eller at du ikke har den nyeste grafikkdriveren.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Feil under initialisering av OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Det kan hende at GPU-en din ikke støtter OpenGL 4.6, eller at du ikke har den nyeste grafikkdriveren.&lt;br&gt;&lt;br&gt;GL-renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Det kan hende at GPU-en din ikke støtter én eller flere nødvendige OpenGL-utvidelser. Vennligst sørg for at du har den nyeste grafikkdriveren.&lt;br&gt;&lt;br&gt;GL-renderer: &lt;br&gt;%1&lt;br&gt;&lt;br&gt;Ikke-støttede utvidelser:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8574,8 +8574,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8588,10 +8588,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8606,9 +8606,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8770,50 +8770,50 @@ p, li { white-space: pre-wrap; }
<translation>[udefinert]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[ugyldig]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Hat %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Akse %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Akse %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Bevegelse %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Knapp %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[ubrukt]</translation>
+45 -45
View File
@@ -4266,58 +4266,58 @@ Om de assen om te keren, beweeg je de joystick eerst verticaal en vervolgens hor
<translation>[aan het wachten]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Nieuw Profiel</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Voer een profielnaam in:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Maak Invoerprofiel</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>De ingevoerde profielnaam is niet geldig!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Kon invoerprofiel &quot;%1&quot; niet maken</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Verwijder Invoerprofiel</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Kon invoerprofiel &quot;%1&quot; niet verwijderen</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Laad Invoerprofiel</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Kon invoerprofiel &quot;%1&quot; niet laden</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Sla Invoerprofiel op</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Kon invoerprofiel &quot;%1&quot; niet opslaan</translation>
</message>
@@ -5924,50 +5924,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL niet beschikbaar!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>OpenGL gedeelde contexten worden niet ondersteund.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Fout tijdens het initialiseren van OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Je GPU ondersteunt mogelijk geen OpenGL, of je hebt niet de laatste grafische stuurprogramma.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Fout tijdens het initialiseren van OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<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>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<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>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8570,8 +8570,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8584,10 +8584,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8602,9 +8602,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8766,50 +8766,50 @@ p, li { white-space: pre-wrap; }
<translation>[ongedefinieerd]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[ongeldig]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Hat %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2As %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2As %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Beweging %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Knop %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[ongebruikt]</translation>
+45 -45
View File
@@ -4330,58 +4330,58 @@ Aby odwrócić osie, najpierw przesuń joystick pionowo, a następnie poziomo.</
<translation>[oczekiwanie]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Nowy profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Wpisz nazwę profilu:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Utwórz profil wejściowy</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Podana nazwa profilu jest nieprawidłowa!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Nie udało się utworzyć profilu wejściowego &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Usuń profil wejściowy</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Nie udało się usunąć profilu wejściowego &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Załaduj profil wejściowy</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Nie udało się wczytać profilu wejściowego &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Zapisz profil wejściowy</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Nie udało się zapisać profilu wejściowego &quot;%1&quot;</translation>
</message>
@@ -5990,50 +5990,50 @@ Przejdź do sekcji Konfiguracja -&gt; System -&gt; Sieć i dokonaj wyboru.</tran
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL niedostępny!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Współdzielone konteksty OpenGL nie obsługiwane.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden nie został skompilowany z obsługą OpenGL.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Błąd podczas inicjowania OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Twoja karta graficzna może nie obsługiwać OpenGL lub nie masz najnowszych sterowników karty graficznej.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Błąd podczas inicjowania OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Twoja karta graficzna może nie obsługiwać OpenGL 4.6 lub nie masz najnowszych sterowników karty graficznej.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Twoja karta graficzna może nie obsługiwać co najmniej jednego wymaganego rozszerzenia OpenGL. Upewnij się, że masz najnowsze sterowniki karty graficznej&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Nieobsługiwane rozszerzenia:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8669,8 +8669,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8683,10 +8683,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8701,9 +8701,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8865,50 +8865,50 @@ p, li { white-space: pre-wrap; }
<translation>[niezdefiniowane]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[niepoprawne]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Drążek %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2 %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Ruch %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Przycisk %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[nieużywane]</translation>
+45 -45
View File
@@ -4332,58 +4332,58 @@ Para inverter os eixos, mova o seu analógico primeiro verticalmente e depois ho
<translation>[em espera]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Novo Perfil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Introduza um novo nome de perfil:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Criar perfil de controlo</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>O nome de perfil dado não é válido!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Falha ao criar o perfil de controlo &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Apagar Perfil de Controlo</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Falha ao apagar o perfil de controlo &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Carregar perfil de controlo</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Falha ao carregar o perfil de controlo &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Salvar perfil de controle</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Falha ao salvar o perfil de controle &quot;%1&quot;</translation>
</message>
@@ -5997,50 +5997,50 @@ Por favor vá para Configuração -&gt; Sistema -&gt; Rede e selecione.</transla
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL não está disponível!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Shared contexts do OpenGL não são suportados.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden não foi compilado com suporte a OpenGL.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Erro ao inicializar OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>O seu GPU pode não suportar OpenGL, ou não tem os drivers gráficos mais recentes.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Erro ao inicializar o OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>A sua GPU não tem suporte a OpenGL 4.6, talvez você não esteja usando os drivers gráficos mais atuais.&lt;br&gt;&lt;br&gt;Renderizador GL:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Sua GPU pode não suportar uma ou mais extensões necessárias do OpenGL. Verifique se você possui a última versão dos drivers gráficos.&lt;br&gt;&lt;br&gt;Renderizador GL:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Extensões não suportadas:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation>Essa build não suporte a OpenGL.</translation>
</message>
@@ -8647,8 +8647,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8661,10 +8661,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8679,9 +8679,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8843,50 +8843,50 @@ p, li { white-space: pre-wrap; }
<translation>[indefinido]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[inválido]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Direcional %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Eixo %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Eixo %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Movimentação %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Botão %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[sem uso]</translation>
+45 -45
View File
@@ -4269,58 +4269,58 @@ Para inverter os eixos, mova o seu analógico primeiro verticalmente e depois ho
<translation>[em espera]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Novo Perfil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Introduza um novo nome de perfil:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Criar perfil de controlo</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>O nome de perfil dado não é válido!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Falha ao criar o perfil de controlo &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Apagar Perfil de Controlo</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Falha ao apagar o perfil de controlo &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Carregar perfil de controlo</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Falha ao carregar o perfil de controlo &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Guardar perfil de controlo</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Falha ao guardar o perfil de controlo &quot;%1&quot;</translation>
</message>
@@ -5927,50 +5927,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL não está disponível!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Shared contexts do OpenGL não são suportados.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Erro ao inicializar OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>O seu GPU pode não suportar OpenGL, ou não tem os drivers gráficos mais recentes.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Erro ao inicializar o OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>O teu GPU pode não suportar OpenGL 4.6, ou não tem os drivers gráficos mais recentes.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Sua GPU pode não suportar uma ou mais extensões necessárias do OpenGL. Verifique se você possui a última versão dos drivers gráficos.&lt;br&gt;&lt;br&gt;Renderizador GL:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Extensões não suportadas:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8573,8 +8573,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8587,10 +8587,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8605,9 +8605,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8769,50 +8769,50 @@ p, li { white-space: pre-wrap; }
<translation>[indefinido]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[inválido]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Direcional %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Eixo %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Eixo %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Movimentação %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Botão %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[sem uso]</translation>
+45 -45
View File
@@ -4339,58 +4339,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation>[ожидание]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Новый профиль</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Введите имя профиля:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Создать профиль управления</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Заданное имя профиля недействительно!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Не удалось создать профиль управления &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Удалить профиль управления</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Не удалось удалить профиль управления &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Загрузить профиль управления</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Не удалось загрузить профиль управления &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Сохранить профиль управления</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Не удалось сохранить профиль управления &quot;%1&quot;</translation>
</message>
@@ -6005,50 +6005,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL не доступен!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Общие контексты OpenGL не поддерживаются.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden не был скомпилирован с поддержкой OpenGL.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Ошибка при инициализации OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Ваш ГП может не поддерживать OpenGL, или у вас установлен устаревший графический драйвер.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Ошибка при инициализации OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Ваш ГП может не поддерживать OpenGL 4.6, или у вас установлен устаревший графический драйвер.&lt;br&gt;&lt;br&gt;Рендерер GL:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Ваш ГП может не поддерживать одно или несколько требуемых расширений OpenGL. Пожалуйста, убедитесь в том, что у вас установлен последний графический драйвер.&lt;br&gt;&lt;br&gt;Рендерер GL:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Неподдерживаемые расширения:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation>В этой сборке отсутствует поддержка OpenGL.</translation>
</message>
@@ -8685,8 +8685,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8699,10 +8699,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8717,9 +8717,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8881,50 +8881,50 @@ p, li { white-space: pre-wrap; }
<translation>[не определено]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[недопустимо]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Крест. %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Ось %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Ось %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Движение %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Кнопка %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[не используется]</translation>
+45 -45
View File
@@ -4347,58 +4347,58 @@ Om du vill invertera axlarna för du joysticken först vertikalt och sedan horis
<translation>[väntar]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Ny profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Ange ett profilnamn:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Skapa inmatningsprofil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Det angivna profilnamnet är inte giltigt!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Misslyckades med att skapa inmatningsprofilen &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Radera inmatningsprofil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Misslyckades med att ta bort inmatningsprofilen &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Läs in inmatningsprofil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Misslyckades med att läsa in inmatningsprofilen &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Spara inmatningsprofil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Misslyckades med att spara inmatningsprofilen &quot;%1&quot;</translation>
</message>
@@ -6012,50 +6012,50 @@ Gå till Konfigurera -&gt; System -&gt; Nätverk och gör ett val.</translation>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL är inte tillgängligt!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Delade OpenGL-kontexter stöds inte.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden har inte kompilerats med OpenGL-stöd.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Fel vid initiering av OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Din GPU kanske inte stöder OpenGL, eller har du inte den senaste grafikdrivrutinen.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Fel vid initiering av OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Din GPU kanske inte stöder OpenGL 4.6, eller har du inte den senaste grafikdrivrutinen.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Din GPU kanske inte stöder ett eller flera av de nödvändiga OpenGL-tilläggen. Se till att du har den senaste grafikdrivrutinen.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Tillägg som inte stöds:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8686,8 +8686,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8700,10 +8700,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8718,9 +8718,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8882,50 +8882,50 @@ p, li { white-space: pre-wrap; }
<translation>[odefinierad]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[ogiltig]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Hatt %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Axel %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Axel %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Motion %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Knapp %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[oanvänd]</translation>
+45 -45
View File
@@ -4297,58 +4297,58 @@ Eksenleri ters çevirmek için, önce joystickinizi dikey sonra yatay olarak har
<translation>[bekleniyor]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Yeni Profil</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Bir profil ismi girin:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Kontrol Profili Oluştur</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Girilen profil ismi geçerli değil!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; kontrol profili oluşturulamadı </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Kontrol Profilini Kaldır</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; kontrol profili kaldırılamadı</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Kontrol Profilini Yükle</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; kontrol profili yüklenemedi</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Kontrol Profilini Kaydet</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>&quot;%1&quot; kontrol profili kaydedilemedi</translation>
</message>
@@ -5955,50 +5955,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL kullanıma uygun değil!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>OpenGL paylaşılan bağlam desteklenmiyor.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>OpenGl başlatılırken bir hata oluştu!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>GPU&apos;nuz OpenGL desteklemiyor veya güncel bir grafik sürücüsüne sahip değilsiniz.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>OpenGl 4.6 başlatılırken bir hata oluştu!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>GPU&apos;nuz OpenGL 4.6&apos;yı desteklemiyor veya güncel bir grafik sürücüsüne sahip değilsiniz.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>GPU&apos;nuz gereken bir yada daha fazla OpenGL eklentisini desteklemiyor Lütfen güncel bir grafik sürücüsüne sahip olduğunuzdan emin olun.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt; Desteklenmeyen Eklentiler:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8601,8 +8601,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8615,10 +8615,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8633,9 +8633,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8797,50 +8797,50 @@ p, li { white-space: pre-wrap; }
<translation>[belirsiz]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[geçersiz]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Hat %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Eksen %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Eksen %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Hareket %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Tuş %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[kullanılmayan]</translation>
+45 -45
View File
@@ -4344,58 +4344,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation>[очікування]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Новий профіль</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Введіть назву профілю:</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Створити профіль введення</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Задана назва профілю неправильна!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Не вдалося створити профіль введення «%1»</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Видалити профіль введення</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Не вдалося видалити профіль введення «%1»</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Завантажити профіль введення</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Не вдалося завантажити профіль введення «%1»</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Зберегти профіль введення</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Не вдалося зберегти профіль введення «%1»</translation>
</message>
@@ -6009,50 +6009,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL недоступний!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Спільні контексти OpenGL не підтримуються.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden не скомпільовано з підтримкою OpenGL.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Помилка під час ініціалізації OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>Ваш ГП може не підтримувати OpenGL або у вас встановлено застарілий графічний драйвер.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Помилка під час ініціалізації OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>Ваш ГП може не підтримувати OpenGL 4.6 або у вас встановлено застарілий графічний драйвер.&lt;br&gt;&lt;br&gt;Візуалізатор GL:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>Ваш ГП може не підтримувати одне або кілька розширень, необхідних для OpenGL. Переконайтеся, що у вас встановлено останній графічний драйвер.&lt;br&gt;&lt;br&gt;Візуалізатор GL:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Непідтримувані розширення:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation>Ця збірка не підтримує OpenGL.</translation>
</message>
@@ -8689,8 +8689,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8703,10 +8703,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8721,9 +8721,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8885,50 +8885,50 @@ p, li { white-space: pre-wrap; }
<translation>[невизначено]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[неправильно]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Напр. %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Вісь %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Вісь %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Рух %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Кнопка %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[не використано]</translation>
+45 -45
View File
@@ -4269,58 +4269,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation>[đang chờ]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Hồ mới</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Nhập tên hồ :</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Tạo hồ đu vào</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Tên hồ không hợp lệ!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Thất bại khi tạo hồ đu vào &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Xoá hồ đu vào</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Thất bại khi xoá hồ đu vào &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Nạp hồ đu vào</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Thất bại khi nạp hồ đu vào &quot;%1&quot;</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Lưu hồ đu vào</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Thất bại khi lưu hồ dầu vào &quot;%1&quot;</translation>
</message>
@@ -5927,50 +5927,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL không khả dụng!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Các ngữ cảnh OpenGL chung không đưc hỗ trợ.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Lỗi khi khởi tạo OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>GPU của bạn thể không hỗ trợ OpenGL, hoặc bạn không driver đ hoạ mới nhất.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Lỗi khi khởi tạo OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>GPU của bạn thể không hỗ trợ OpenGL 4.6, hoặc bạn không driver đ hoạ mới nhất.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>GPU của bạn thể không hỗ trợ một hoặc nhiều tiện ích OpenGL cần thiết. Vui lòng đm bảo bạn driver đ hoạ mới nhất.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Tiện ích không hỗ trợ:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8573,8 +8573,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8587,10 +8587,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8605,9 +8605,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8769,50 +8769,50 @@ p, li { white-space: pre-wrap; }
<translation>[không xác đnh]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[không hợp lệ]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Trục %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Trục %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Chuyển đng %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Nút %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[không sử dụng]</translation>
+45 -45
View File
@@ -4269,58 +4269,58 @@ Nếu muốn đảo ngược hướng cần điều khiển, di chuyển cần s
<translation>[Chờ]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation>Hồ mới</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation>Nhập tên hồ :</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation>Tạo Hồ Phím</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation>Tên hồ không hợp lệ!</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>Quá trình tạo hồ phím &quot;%1&quot; thất bại</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation>Xóa Hồ Phím</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>Quá trình xóa hồ phím &quot;%1&quot; thất bại</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation>Nạp Hồ Phím</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>Quá trình nạp hồ phím &quot;%1&quot; thất bại</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation>Lưu Hồ Phím</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>Quá trình lưu hồ phím &quot;%1&quot; thất bại</translation>
</message>
@@ -5927,50 +5927,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>Không sẵn OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation>Các ngữ cảnh OpenGL chung không đưc hỗ trợ.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation>Đã xảy ra lỗi khi khởi tạo OpenGL!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation>GPU của bạn thể không hỗ trợ OpenGL, hoặc bạn không driver đ hoạ mới nhất.</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation>Lỗi khi khởi tạo OpenGL 4.6!</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation>GPU của bạn thể không hỗ trợ OpenGL 4.6, hoặc bạn không driver đ hoạ mới nhất.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation>GPU của bạn thể không hỗ trợ một hoặc nhiều tiện ích OpenGL cần thiết. Vui lòng đm bảo bạn driver đ hoạ mới nhất.&lt;br&gt;&lt;br&gt;GL Renderer:&lt;br&gt;%1&lt;br&gt;&lt;br&gt;Tiện ích không hỗ trợ:&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8573,8 +8573,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8587,10 +8587,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8605,9 +8605,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8769,50 +8769,50 @@ p, li { white-space: pre-wrap; }
<translation>[không xác đnh]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[không hợp lệ]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2Trục %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2Trục %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2Chuyển đng %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2Nút %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[không sử dụng]</translation>
+45 -45
View File
@@ -4332,58 +4332,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation> &quot;%1&quot; </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation> &quot;%1&quot; </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation> &quot;%1&quot; </translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation> &quot;%1&quot; </translation>
</message>
@@ -5995,50 +5995,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>OpenGL </translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation> OpenGL </translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation>Eden OpenGL</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation> OpenGL </translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation> GPU OpenGL </translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation> OpenGL 4.6 </translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation> GPU OpenGL 4.6 &lt;br&gt;&lt;br&gt;GL &lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation> GPU OpenGL &lt;br&gt;&lt;br&gt;GL &lt;br&gt;%1&lt;br&gt;&lt;br&gt;&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation> OpenGL</translation>
</message>
@@ -8664,8 +8664,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8678,10 +8678,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8696,9 +8696,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8860,50 +8860,50 @@ p, li { white-space: pre-wrap; }
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2 %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[使]</translation>
+45 -45
View File
@@ -4296,58 +4296,58 @@ To invert the axes, first move your joystick vertically, and then horizontally.<
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>New Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1578"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1576"/>
<source>Enter a profile name:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1586"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1594"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1584"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1592"/>
<source>Create Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1587"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1585"/>
<source>The given profile name is not valid!</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1595"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1593"/>
<source>Failed to create the input profile &quot;%1&quot;</source>
<translation>%1</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1615"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1613"/>
<source>Delete Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1616"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1614"/>
<source>Failed to delete the input profile &quot;%1&quot;</source>
<translation>%1</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1638"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1636"/>
<source>Load Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1639"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1637"/>
<source>Failed to load the input profile &quot;%1&quot;</source>
<translation>%1</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1664"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1662"/>
<source>Save Input Profile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1665"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="1663"/>
<source>Failed to save the input profile &quot;%1&quot;</source>
<translation>%1</translation>
</message>
@@ -5954,50 +5954,50 @@ Please go to Configure -&gt; System -&gt; Network and make a selection.</source>
<context>
<name>GRenderWindow</name>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="850"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="867"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="845"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="862"/>
<source>OpenGL not available!</source>
<translation>使 OpenGL </translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="851"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="846"/>
<source>OpenGL shared contexts are not supported.</source>
<translation> OpenGL </translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="868"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="863"/>
<source>Eden has not been compiled with OpenGL support.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="892"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="910"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="920"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="887"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="905"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="915"/>
<source>Error while initializing OpenGL!</source>
<translation> OpenGL </translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="893"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="888"/>
<source>Your GPU may not support OpenGL, or you do not have the latest graphics driver.</source>
<translation> GPU OpenGL</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="902"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="897"/>
<source>Error while initializing OpenGL 4.6!</source>
<translation> OpenGL 4.6 </translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="903"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="898"/>
<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>
<translation> GPU OpenGL 4.6&lt;br&gt;&lt;br&gt;GL &lt;br&gt;%1</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="911"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="906"/>
<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>
<translation> GPU OpenGL &lt;br&gt;&lt;br&gt;GL &lt;br&gt;%1&lt;br&gt;&lt;br&gt;&lt;br&gt;%2</translation>
</message>
<message>
<location filename="../../src/yuzu/bootmanager.cpp" line="921"/>
<location filename="../../src/yuzu/bootmanager.cpp" line="916"/>
<source>This build doesn&apos;t have OpenGL support.</source>
<translation type="unfinished"/>
</message>
@@ -8599,8 +8599,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="35"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="396"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="462"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="395"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="461"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="183"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="251"/>
<source>[not set]</source>
@@ -8613,10 +8613,10 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="54"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="485"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="489"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="493"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="497"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="484"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="488"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="492"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="496"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="274"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="278"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="282"/>
@@ -8631,9 +8631,9 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_touch_from_button.cpp" line="66"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="456"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="470"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="500"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="455"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="469"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="499"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="245"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="259"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="289"/>
@@ -8795,50 +8795,50 @@ p, li { white-space: pre-wrap; }
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="406"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="405"/>
<source>%1%2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="410"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="409"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="199"/>
<source>[invalid]</source>
<translation>[]</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="420"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="444"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="419"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="443"/>
<source>%1%2Hat %3</source>
<translation>%1%2Hat %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="424"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="447"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="450"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="423"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="446"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="449"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="239"/>
<source>%1%2Axis %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="430"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="429"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="219"/>
<source>%1%2Axis %3,%4,%5</source>
<translation>%1%2 %3,%4,%5</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="434"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="433"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/>
<source>%1%2Motion %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="438"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="453"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="437"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="452"/>
<source>%1%2Button %3</source>
<translation>%1%2 %3</translation>
</message>
<message>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="480"/>
<location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="479"/>
<location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="269"/>
<source>[unused]</source>
<translation>[使]</translation>
+1 -1
View File
@@ -65,7 +65,7 @@ android {
defaultConfig {
applicationId = "dev.eden.eden_emulator"
minSdk = 24
minSdk = 33
targetSdk = 36
versionName = getGitVersion()
versionCode = autoVersion
@@ -594,7 +594,7 @@ abstract class SettingsItem(
IntSetting.ANDROID_PIPELINE_WORKERS,
titleId = R.string.pipeline_worker_cores,
descriptionId = R.string.pipeline_worker_cores_description,
min = 4,
min = 2,
max = 8,
units = "cores"
)
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2024 yuzu Emulator Project
@@ -169,7 +169,7 @@ class InputDialogFragment : DialogFragment() {
NativeInput.onGamePadButtonEvent(
controllerData.getGUID(),
controllerData.getPort(),
InputHandler.getButtonIdFromEvent(event),
event.keyCode,
action
)
onInputReceived(event.device)
@@ -49,12 +49,6 @@ object InputHandler {
MotionEvent.AXIS_RTRIGGER
)
// Currently, Android doesn't support Joy-Con D-pad buttons. We fall back to the scan code
private const val LINUX_BUTTON_DPAD_UP = 0x220
private const val LINUX_BUTTON_DPAD_DOWN = 0x221
private const val LINUX_BUTTON_DPAD_LEFT = 0x222
private const val LINUX_BUTTON_DPAD_RIGHT = 0x223
fun isPhysicalGameController(device: InputDevice?): Boolean {
device ?: return false
@@ -93,25 +87,12 @@ object InputHandler {
NativeInput.onGamePadButtonEvent(
controllerData.getGUID(),
controllerData.getPort(),
getButtonIdFromEvent(event),
event.keyCode,
action
)
return true
}
fun getButtonIdFromEvent(event: KeyEvent): Int {
if (event.keyCode == 0) {
return when (event.scanCode) {
LINUX_BUTTON_DPAD_UP -> KeyEvent.KEYCODE_DPAD_UP
LINUX_BUTTON_DPAD_DOWN -> KeyEvent.KEYCODE_DPAD_DOWN
LINUX_BUTTON_DPAD_LEFT -> KeyEvent.KEYCODE_DPAD_LEFT
LINUX_BUTTON_DPAD_RIGHT -> KeyEvent.KEYCODE_DPAD_RIGHT
else -> return 0
}
}
return event.keyCode
}
fun dispatchGenericMotionEvent(event: MotionEvent): Boolean {
val controllerData =
androidControllers[event.device.controllerNumber] ?: return false
@@ -300,9 +300,9 @@
<string name="app_settings_description">自訂Eden的主題與介面</string>
<string name="no_file_manager">找不到檔案管理員</string>
<string name="notification_no_directory_link">無法開啟 Eden 目錄</string>
<string name="notification_no_directory_link_description">請使用檔案管理員的側邊面板手動定位到使用者資料夾</string>
<string name="notification_no_directory_link_description">請使用檔案管理員的側邊面板手動定位到使用者資料夾</string>
<string name="manage_save_data">管理儲存資料</string>
<string name="manage_save_data_description">導入/導出遊戲的儲存資料\n\n壓縮檔中首個子資料夾名稱必須為遊戲 ID</string>
<string name="manage_save_data_description">導入/導出遊戲的儲存資料</string>
<string name="import_save_warning">導入儲存資料</string>
<string name="import_save_warning_description">這將會以提供的檔案覆寫現有的該遊戲儲存資料,您確定要繼續嗎?</string>
<string name="save_files_importing">正在導入儲存資料…</string>
+140 -21
View File
@@ -1,5 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2013 Dolphin Emulator Project
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -39,6 +40,110 @@
#include <unistd.h>
#endif
#ifdef __ANDROID__
#include <sys/resource.h>
#include <algorithm>
#include <fstream>
#include <utility>
#include <vector>
namespace {
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_URGENT_AUDIO = -19;
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_AUDIO = -16;
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_URGENT_DISPLAY = -8;
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_DISPLAY = -4;
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_FOREGROUND = -2;
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_MORE_FAVORABLE = -1;
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_DEFAULT = 0;
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_LESS_FAVORABLE = 1;
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_BACKGROUND = 10;
[[maybe_unused]] constexpr int ANDROID_THREAD_PRIORITY_LOWEST = 19;
constexpr size_t ANDROID_MINIMUM_PERFORMANCE_CORES = 4;
cpu_set_t ComputePerformanceCoreMask() {
cpu_set_t mask;
CPU_ZERO(&mask);
cpu_set_t allowed;
CPU_ZERO(&allowed);
if (sched_getaffinity(gettid(), sizeof(allowed), &allowed) != 0) {
return mask;
}
std::vector<std::pair<long, int>> cores;
const int total = static_cast<int>(std::thread::hardware_concurrency());
for (int cpu = 0; cpu < total; ++cpu) {
if (!CPU_ISSET(cpu, &allowed)) {
continue;
}
long max_frequency = 0;
std::ifstream file("/sys/devices/system/cpu/cpu" + std::to_string(cpu) +
"/cpufreq/cpuinfo_max_freq");
if (!file || !(file >> max_frequency) || max_frequency <= 0) {
CPU_ZERO(&mask);
return mask;
}
cores.emplace_back(max_frequency, cpu);
}
if (cores.empty()) {
return mask;
}
std::sort(cores.begin(), cores.end(),
[](const auto& lhs, const auto& rhs) { return lhs.first > rhs.first; });
size_t taken = 0;
long cluster_frequency = cores.front().first;
for (const auto& [frequency, cpu] : cores) {
if (frequency != cluster_frequency) {
if (taken >= ANDROID_MINIMUM_PERFORMANCE_CORES) {
break;
}
cluster_frequency = frequency;
}
CPU_SET(cpu, &mask);
++taken;
}
return mask;
}
const cpu_set_t& PerformanceCoreMask() {
static const cpu_set_t mask = ComputePerformanceCoreMask();
return mask;
}
cpu_set_t ComputeEfficiencyCoreMask() {
cpu_set_t mask;
CPU_ZERO(&mask);
const cpu_set_t& performance = PerformanceCoreMask();
if (CPU_COUNT(&performance) == 0) {
return mask;
}
cpu_set_t allowed;
CPU_ZERO(&allowed);
if (sched_getaffinity(gettid(), sizeof(allowed), &allowed) != 0) {
return mask;
}
const int total = static_cast<int>(std::thread::hardware_concurrency());
for (int cpu = 0; cpu < total; ++cpu) {
if (CPU_ISSET(cpu, &allowed) && !CPU_ISSET(cpu, &performance)) {
CPU_SET(cpu, &mask);
}
}
return mask;
}
const cpu_set_t& EfficiencyCoreMask() {
static const cpu_set_t mask = ComputeEfficiencyCoreMask();
return mask;
}
} // Anonymous namespace
#endif
#include "common/cpu_features.h"
#ifdef ARCHITECTURE_x86_64
#ifdef _MSC_VER
@@ -78,6 +183,21 @@ void SetCurrentThreadPriority(ThreadPriority new_priority) {
}
}();
set_thread_priority(find_thread(NULL), priority);
#elif defined(__ANDROID__)
const int nice_value = [&]() {
switch (new_priority) {
case ThreadPriority::Low: return ANDROID_THREAD_PRIORITY_BACKGROUND;
case ThreadPriority::Normal: return ANDROID_THREAD_PRIORITY_DEFAULT;
case ThreadPriority::High: return ANDROID_THREAD_PRIORITY_DISPLAY;
case ThreadPriority::VeryHigh: return ANDROID_THREAD_PRIORITY_URGENT_DISPLAY;
case ThreadPriority::Critical: return ANDROID_THREAD_PRIORITY_AUDIO;
default: return ANDROID_THREAD_PRIORITY_DEFAULT;
}
}();
if (setpriority(PRIO_PROCESS, static_cast<id_t>(gettid()), nice_value) != 0) {
LOG_DEBUG(Common, "Could not set thread nice value to {}: {}", nice_value,
GetLastErrorMsg());
}
#else
pthread_t this_thread = pthread_self();
const auto scheduling_type = SCHED_OTHER;
@@ -132,29 +252,28 @@ void SetCurrentThreadName(const char* name) {
#endif
}
void PinCurrentThreadToPerformanceCore(size_t core_id) {
ASSERT(core_id < 4);
// If we set a flag for a CPU that doesn't exist, the thread may not be allowed to
// run in ANY processor!
auto const total_cores = std::thread::hardware_concurrency();
if (core_id < total_cores) {
void SetCurrentThreadToPerformanceCores() {
#if defined(__ANDROID__)
cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(core_id, &set);
sched_setaffinity(pthread_self(), sizeof(set), &set);
#elif defined(__linux__) || defined(__FreeBSD__)
cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(core_id, &set);
pthread_setaffinity_np(pthread_self(), sizeof(set), &set);
#elif defined(_WIN32)
DWORD set = 1UL << core_id;
SetThreadAffinityMask(GetCurrentThread(), set);
#else
// No pin functionality implemented
#endif
const cpu_set_t& mask = PerformanceCoreMask();
if (CPU_COUNT(&mask) == 0) {
return;
}
if (sched_setaffinity(gettid(), sizeof(mask), &mask) != 0) {
LOG_DEBUG(Common, "Could not restrict thread to performance cores: {}", GetLastErrorMsg());
}
#endif
}
void SetCurrentThreadToEfficiencyCores() {
#if defined(__ANDROID__)
const cpu_set_t& mask = EfficiencyCoreMask();
if (CPU_COUNT(&mask) == 0) {
return;
}
if (sched_setaffinity(gettid(), sizeof(mask), &mask) != 0) {
LOG_DEBUG(Common, "Could not restrict thread to efficiency cores: {}", GetLastErrorMsg());
}
#endif
}
#ifdef ARCHITECTURE_x86_64
+7 -1
View File
@@ -99,8 +99,14 @@ enum class ThreadPriority : u32 {
Critical = 4,
};
enum class ThreadPlacement : u32 {
Default = 0,
Background = 1,
};
void SetCurrentThreadPriority(ThreadPriority new_priority);
void SetCurrentThreadName(const char* name);
void PinCurrentThreadToPerformanceCore(size_t core_id);
void SetCurrentThreadToPerformanceCores();
void SetCurrentThreadToEfficiencyCores();
} // namespace Common
+8 -3
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
@@ -37,10 +37,15 @@ class StatefulThreadWorker {
using StateMaker = std::conditional_t<with_state, std::function<StateType()>, DummyCallable>;
public:
explicit StatefulThreadWorker(size_t num_workers, std::string name, StateMaker func = {})
explicit StatefulThreadWorker(size_t num_workers, std::string name, StateMaker func = {},
ThreadPlacement placement = ThreadPlacement::Default)
: workers_queued{num_workers}, thread_name{std::move(name)} {
const auto lambda = [this, func](std::stop_token stop_token) {
const auto lambda = [this, func, placement](std::stop_token stop_token) {
Common::SetCurrentThreadName(thread_name.c_str());
if (placement == ThreadPlacement::Background) {
Common::SetCurrentThreadPriority(ThreadPriority::Low);
Common::SetCurrentThreadToEfficiencyCores();
}
{
[[maybe_unused]] std::conditional_t<with_state, StateType, int> state{func()};
while (!stop_token.stop_requested()) {
+1 -6
View File
@@ -174,12 +174,7 @@ void CpuManager::RunThread(std::stop_token token, std::size_t core) {
std::string name = is_multicore ? ("CPUCore_" + std::to_string(core)) : std::string{"CPUThread"};
Common::SetCurrentThreadName(name.c_str());
Common::SetCurrentThreadPriority(Common::ThreadPriority::Critical);
#ifdef __ANDROID__
// Aimed specifically for Snapdragon 8 Elite devices
// This kills performance on desktop, but boosts perf for UMA devices
// like the S8E. Mediatek and Mali likely won't suffer.
Common::PinCurrentThreadToPerformanceCore(core);
#endif
Common::SetCurrentThreadToPerformanceCores();
auto& data = core_data[core];
data.host_context = Common::Fiber::ThreadToFiber();
@@ -100,7 +100,6 @@ void EmulatedConsole::ReloadInput() {
motion.gyro = emulated_motion.GetGyroscope();
motion.rotation = emulated_motion.GetRotations();
motion.orientation = emulated_motion.GetOrientation();
motion.quaternion = emulated_motion.GetQuaternion();
motion.is_at_rest = !emulated_motion.IsMoving(motion_sensitivity);
// Unique index for identifying touch device source
+1 -1
View File
@@ -33,7 +33,7 @@ add_library(video_core STATIC
control/channel_state_cache.h
control/scheduler.cpp
control/scheduler.h
delayed_destruction_ring.h
deferred_destruction_queue.h
dirty_flags.cpp
dirty_flags.h
dma_pusher.cpp
+62 -32
View File
@@ -31,44 +31,77 @@ BufferCache<P>::BufferCache(Tegra::MaxwellDeviceMemoryManager& device_memory_, R
immediately_free = (Settings::values.vram_usage_mode.GetValue() == Settings::VramUsageMode::Aggressive);
#endif
if (!runtime.CanReportMemoryUsage()) {
minimum_memory = DEFAULT_EXPECTED_MEMORY;
critical_memory = DEFAULT_CRITICAL_MEMORY;
memory_budget = FALLBACK_MEMORY_BUDGET;
return;
}
const s64 device_local_memory = static_cast<s64>(runtime.GetDeviceLocalMemory());
const s64 min_spacing_expected = device_local_memory - 1_GiB;
const s64 min_spacing_critical = device_local_memory - 512_MiB;
const s64 mem_threshold = (std::min)(device_local_memory, TARGET_THRESHOLD);
const s64 min_vacancy_expected = (6 * mem_threshold) / 10;
const s64 min_vacancy_critical = (2 * mem_threshold) / 10;
minimum_memory = static_cast<u64>(
(std::max)((std::min)(device_local_memory - min_vacancy_expected, min_spacing_expected),
DEFAULT_EXPECTED_MEMORY));
critical_memory = static_cast<u64>(
(std::max)((std::min)(device_local_memory - min_vacancy_critical, min_spacing_critical),
DEFAULT_CRITICAL_MEMORY));
memory_budget = runtime.GetDeviceLocalMemory();
}
template <class P>
BufferCache<P>::~BufferCache() = default;
template <class P>
void BufferCache<P>::RunGarbageCollector() {
const bool aggressive_gc = total_used_memory >= critical_memory;
const u64 ticks_to_destroy = aggressive_gc ? 60 : 120;
int num_iterations = aggressive_gc ? 64 : 32;
const auto clean_up = [this, &num_iterations](BufferId buffer_id) {
if (num_iterations == 0) {
u64 BufferCache<P>::DeviceUsage(bool force_refresh) {
if (!runtime.CanReportAllocationUsage()) {
return total_used_memory;
}
if (force_refresh || usage_refresh_countdown == 0) {
cached_device_usage = runtime.GetDeviceAllocationUsage();
usage_refresh_countdown = USAGE_REFRESH_INTERVAL;
} else {
--usage_refresh_countdown;
}
return cached_device_usage;
}
template <class P>
u64 BufferCache<P>::ReclaimMemory(u64 target_bytes, bool allow_download) {
if (target_bytes == 0 || in_reclaim) {
return 0;
}
in_reclaim = true;
sentenced_buffers.Reclaim(runtime.CompletedSyncPoint());
u64 freed = 0;
const auto clean_up = [&](BufferId buffer_id) {
if (freed >= target_bytes) {
return true;
}
--num_iterations;
auto& buffer = slot_buffers[buffer_id];
if (!allow_download && IsRegionGpuModified(buffer.CpuAddr(), buffer.SizeBytes())) {
return false;
}
const u64 buffer_bytes = Common::AlignUp(buffer.SizeBytes(), 1024);
DownloadBufferMemory(buffer);
DeleteBuffer(buffer_id);
freed += buffer_bytes;
return false;
};
lru_cache.ForEachItemBelow(frame_tick - ticks_to_destroy, clean_up);
const u64 cold_tick =
frame_tick > RECLAIM_GUARD_FRAMES ? frame_tick - RECLAIM_GUARD_FRAMES : 0;
lru_cache.ForEachItemBelow(cold_tick, clean_up);
if (freed < target_bytes) {
lru_cache.ForEachItemBelow(frame_tick > 0 ? frame_tick - 1 : 0, clean_up);
}
sentenced_buffers.Reclaim(runtime.CompletedSyncPoint());
in_reclaim = false;
usage_refresh_countdown = 0;
reclaim_stalled = freed == 0;
return freed;
}
template <class P>
void BufferCache<P>::EnsureHeadroom(bool allow_download) {
if (reclaim_stalled) {
return;
}
const u64 limit = memory_budget > RECLAIM_HEADROOM ? memory_budget - RECLAIM_HEADROOM : 0;
const u64 usage = DeviceUsage(false);
if (usage <= limit) {
return;
}
const u64 target = (limit / 100) * RECLAIM_TARGET_PERCENT;
ReclaimMemory((std::min)(usage - target, total_used_memory), allow_download);
}
template <class P>
@@ -96,15 +129,11 @@ void BufferCache<P>::TickFrame() {
const bool skip_preferred = hits * 256 < shots * 251;
channel_state->uniform_buffer_skip_cache_size = skip_preferred ? DEFAULT_SKIP_CACHE_SIZE : 0;
// If we can obtain the memory info, use it instead of the estimate.
if (runtime.CanReportMemoryUsage()) {
total_used_memory = runtime.GetDeviceMemoryUsage();
}
if (total_used_memory >= minimum_memory) {
RunGarbageCollector();
}
usage_refresh_countdown = 0;
reclaim_stalled = false;
EnsureHeadroom(true);
++frame_tick;
delayed_destruction_ring.Tick();
sentenced_buffers.Reclaim(runtime.CompletedSyncPoint());
for (auto& buffer : async_buffers_death_ring) {
runtime.FreeDeferredStagingBuffer(buffer);
@@ -1576,6 +1605,7 @@ void BufferCache<P>::JoinOverlap(BufferId new_buffer_id, BufferId overlap_id,
template <class P>
BufferId BufferCache<P>::CreateBuffer(DAddr device_addr, u32 wanted_size) {
EnsureHeadroom(false);
DAddr device_addr_end = Common::AlignUp(device_addr + wanted_size, CACHING_PAGESIZE);
device_addr = Common::AlignDown(device_addr, CACHING_PAGESIZE);
wanted_size = static_cast<u32>(device_addr_end - device_addr);
@@ -1613,7 +1643,7 @@ void BufferCache<P>::ChangeRegister(BufferId buffer_id) {
total_used_memory += Common::AlignUp(size, 1024);
buffer.setLRUID(lru_cache.Insert(buffer_id, frame_tick));
} else {
total_used_memory -= Common::AlignUp(size, 1024);
total_used_memory -= std::min<u64>(total_used_memory, Common::AlignUp(size, 1024));
lru_cache.Free(buffer.getLRUID());
}
const DAddr device_addr_begin = buffer.CpuAddr();
@@ -1872,7 +1902,7 @@ void BufferCache<P>::DeleteBuffer(BufferId buffer_id, bool do_not_mark) {
#ifdef YUZU_LEGACY
if (!do_not_mark || !immediately_free)
#endif
delayed_destruction_ring.Push(std::move(slot_buffers[buffer_id]));
sentenced_buffers.Push(std::move(slot_buffers[buffer_id]), runtime.CurrentSyncPoint());
slot_buffers.erase(buffer_id);
+19 -14
View File
@@ -9,6 +9,7 @@
#include <algorithm>
#include <array>
#include <bit>
#include <deque>
#include <functional>
#include <memory>
#include <mutex>
@@ -30,7 +31,7 @@
#include "common/slot_vector.h"
#include "video_core/buffer_cache/buffer_base.h"
#include "video_core/control/channel_state_cache.h"
#include "video_core/delayed_destruction_ring.h"
#include "video_core/deferred_destruction_queue.h"
#include "video_core/dirty_flags.h"
#include "video_core/engines/maxwell_3d.h"
#include "video_core/engines/kepler_compute.h"
@@ -182,13 +183,15 @@ class BufferCache : public VideoCommon::ChannelSetupCaches<BufferCacheChannelInf
static constexpr bool USE_MEMORY_MAPS_FOR_UPLOADS = P::USE_MEMORY_MAPS_FOR_UPLOADS;
#ifdef YUZU_LEGACY
static constexpr s64 TARGET_THRESHOLD = 3_GiB;
static constexpr u64 RECLAIM_HEADROOM = 384_MiB;
#else
static constexpr s64 TARGET_THRESHOLD = 4_GiB;
static constexpr u64 RECLAIM_HEADROOM = 512_MiB;
#endif
static constexpr s64 DEFAULT_EXPECTED_MEMORY = 512_MiB;
static constexpr s64 DEFAULT_CRITICAL_MEMORY = 1_GiB;
static constexpr u64 FALLBACK_MEMORY_BUDGET = 2_GiB;
static constexpr u32 USAGE_REFRESH_INTERVAL = 16;
static constexpr u64 RECLAIM_GUARD_FRAMES = 8;
static constexpr u64 RECLAIM_TARGET_PERCENT = 88;
// Debug Flags.
@@ -215,6 +218,8 @@ public:
void TickFrame();
u64 ReclaimMemory(u64 target_bytes, bool allow_download);
void WriteMemory(DAddr device_addr, u64 size);
void CachedWriteMemory(DAddr device_addr, u64 size);
@@ -358,7 +363,9 @@ private:
((device_addr + size) & ~Core::DEVICE_PAGEMASK);
}
void RunGarbageCollector();
u64 DeviceUsage(bool force_refresh);
void EnsureHeadroom(bool allow_download);
void BindHostIndexBuffer();
@@ -475,12 +482,7 @@ private:
Tegra::MaxwellDeviceMemoryManager& device_memory;
Common::SlotVector<Buffer> slot_buffers;
#ifdef YUZU_LEGACY
static constexpr size_t TICKS_TO_DESTROY = 6;
#else
static constexpr size_t TICKS_TO_DESTROY = 8;
#endif
DelayedDestructionRing<Buffer, TICKS_TO_DESTROY> delayed_destruction_ring;
DeferredDestructionQueue<Buffer> sentenced_buffers;
const Tegra::Engines::Maxwell3D::DrawManager::IndirectParams* current_draw_indirect{};
@@ -515,8 +517,11 @@ private:
Common::LeastRecentlyUsedCache<LRUItemParams> lru_cache;
u64 frame_tick = 0;
u64 total_used_memory = 0;
u64 minimum_memory = 0;
u64 critical_memory = 0;
u64 memory_budget = 0;
u64 cached_device_usage = 0;
u32 usage_refresh_countdown = 0;
bool in_reclaim = false;
bool reclaim_stalled = false;
BufferId inline_buffer_id;
#ifdef YUZU_LEGACY
bool immediately_free = false;
@@ -0,0 +1,56 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <cstddef>
#include <utility>
#include <boost/container/deque.hpp>
#include <boost/container/options.hpp>
#include "common/common_types.h"
namespace VideoCommon {
template <typename T>
class DeferredDestructionQueue {
public:
void Push(T&& object, u64 sync_point) {
entries.emplace_back(std::move(object), sync_point);
}
void Reclaim(u64 completed_sync_point) {
while (!entries.empty() && entries.front().sync_point <= completed_sync_point) {
entries.pop_front();
}
}
void Clear() {
entries.clear();
}
[[nodiscard]] size_t Size() const noexcept {
return entries.size();
}
[[nodiscard]] bool Empty() const noexcept {
return entries.empty();
}
private:
struct Entry {
Entry(T&& object_, u64 sync_point_) noexcept
: object{std::move(object_)}, sync_point{sync_point_} {}
T object;
u64 sync_point;
};
using EntryDequeOptions =
boost::container::deque_options<boost::container::block_size<8u>>::type;
boost::container::deque<Entry, void, EntryDequeOptions> entries;
};
} // namespace VideoCommon
-34
View File
@@ -1,34 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <array>
#include <cstddef>
#include <utility>
#include <vector>
namespace VideoCommon {
/// Container to push objects to be destroyed a few ticks in the future
template <typename T, size_t TICKS_TO_DESTROY>
class DelayedDestructionRing {
public:
void Tick() {
index = (index + 1) % TICKS_TO_DESTROY;
elements[index].clear();
}
void Push(T&& object) {
elements[index].push_back(std::move(object));
}
private:
size_t index = 0;
std::array<std::vector<T>, TICKS_TO_DESTROY> elements;
};
} // namespace VideoCommon
+8 -5
View File
@@ -18,7 +18,7 @@
#include "common/common_types.h"
#include "common/settings.h"
#include "common/thread.h"
#include "video_core/delayed_destruction_ring.h"
#include "video_core/deferred_destruction_queue.h"
#include "video_core/gpu.h"
#include "video_core/host1x/host1x.h"
#include "video_core/host1x/syncpoint_manager.h"
@@ -50,7 +50,8 @@ public:
/// Notify the fence manager about a new frame
void TickFrame() {
std::unique_lock lock(ring_guard);
delayed_destruction_ring.Tick();
++retire_tick;
sentenced_fences.Reclaim(retire_tick > RETIRE_DELAY ? retire_tick - RETIRE_DELAY : 0);
}
// Unlike other fences, this one doesn't
@@ -186,7 +187,7 @@ private:
}
{
std::unique_lock lock(ring_guard);
delayed_destruction_ring.Push(std::move(current_fence));
sentenced_fences.Push(std::move(current_fence), retire_tick);
}
fences.pop();
}
@@ -219,7 +220,7 @@ private:
}
{
std::unique_lock lock(ring_guard);
delayed_destruction_ring.Push(std::move(current_fence));
sentenced_fences.Push(std::move(current_fence), retire_tick);
}
}
}
@@ -264,7 +265,9 @@ private:
std::jthread fence_thread;
DelayedDestructionRing<TFence, 8> delayed_destruction_ring;
static constexpr u64 RETIRE_DELAY = 8;
u64 retire_tick = 1;
DeferredDestructionQueue<TFence> sentenced_fences;
};
} // namespace VideoCommon
+1
View File
@@ -30,6 +30,7 @@ void ThreadManager::StartThread(VideoCore::RendererBase& renderer, Core::Fronten
thread = std::jthread([&](std::stop_token stop_token) {
Common::SetCurrentThreadName("GPU");
Common::SetCurrentThreadPriority(Common::ThreadPriority::Critical);
Common::SetCurrentThreadToPerformanceCores();
system.RegisterHostThread();
auto current_context = context.Acquire();
@@ -32,6 +32,7 @@ set(SHADER_FILES
${CMAKE_CURRENT_SOURCE_DIR}/convert_msaa_to_non_msaa.frag
${CMAKE_CURRENT_SOURCE_DIR}/convert_non_msaa_to_msaa.comp
${CMAKE_CURRENT_SOURCE_DIR}/convert_non_msaa_to_msaa.frag
${CMAKE_CURRENT_SOURCE_DIR}/convert_non_msaa_to_msaa_depth.frag
${CMAKE_CURRENT_SOURCE_DIR}/convert_s8d24_to_abgr8.frag
${CMAKE_CURRENT_SOURCE_DIR}/full_screen_triangle.vert
${CMAKE_CURRENT_SOURCE_DIR}/fxaa.frag
@@ -1384,11 +1384,7 @@ void DecompressBlock(ivec3 coord) {
p = Cf / 65535.0f;
}
#ifdef VULKAN
imageStore(dest_image, coord + ivec3(i, j, 0), p.gbar);
#else
imageStore(dest_image, coord + ivec3(i, j, 0), clamp(p, 0.0f, 1.0f).gbar);
#endif
}
}
}
@@ -0,0 +1,19 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#version 450 core
layout(binding = 0) uniform sampler2D img_in;
layout(push_constant) uniform PushConstants {
ivec2 dst_offset;
ivec2 src_offset;
ivec2 scale;
};
void main() {
const ivec2 msaa_coord = ivec2(gl_FragCoord.xy) - dst_offset;
const ivec2 sample_offset = ivec2(gl_SampleID % scale.x, gl_SampleID / scale.x);
const ivec2 coord = msaa_coord * scale + sample_offset + src_offset;
gl_FragDepth = texelFetch(img_in, coord, 0).r;
}
+76 -80
View File
@@ -417,6 +417,14 @@ void HLE_TransformFeedbackSetup::Execute(Core::System& system, Engines::Maxwell3
default: return std::monostate{};
}
}
[[nodiscard]] inline bool CanBeHLEProgram(u64 hash) noexcept {
switch (hash) {
#define HLE_MACRO_ELEM(HASH, TY, VAL) case HASH: return true;
HLE_MACRO_LIST
#undef HLE_MACRO_ELEM
default: return false;
}
}
void MacroInterpreterImpl::Execute(Core::System& system, Engines::Maxwell3D& maxwell3d, std::span<const u32> params, u32 method) {
Reset();
@@ -1337,92 +1345,80 @@ static void Dump(u64 hash, std::span<const u32> code, bool decompiled = false) {
macro_file.write(reinterpret_cast<const char*>(code.data()), code.size_bytes());
}
void MacroEngine::Execute(Core::System& system, Engines::Maxwell3D& maxwell3d, u32 method,
std::span<const u32> parameters) {
const auto execute_variant = [&system, &maxwell3d, &parameters,
method](AnyCachedMacro& cached) {
if (std::holds_alternative<MacroInterpreterImpl>(cached) ||
std::holds_alternative<std::unique_ptr<DynamicCachedMacro>>(cached) ||
Settings::values.disable_macro_hle) {
maxwell3d.RefreshParameters();
}
if (auto program = std::get_if<HLE_DrawArraysIndirect>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_DrawIndexedIndirect>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_MultiDrawIndexedIndirectCount>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_MultiLayerClear>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_C713C83D8F63CCF3>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_D7333D26E0A93EDE>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_BindShader>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_SetRasterBoundingBox>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_ClearConstBuffer>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_ClearMemory>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_TransformFeedbackSetup>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<HLE_DrawIndirectByteCount>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<MacroInterpreterImpl>(&cached))
return program->Execute(system, maxwell3d, parameters, method);
if (auto program = std::get_if<std::unique_ptr<DynamicCachedMacro>>(&cached))
return program->get()->Execute(system, maxwell3d, parameters, method);
UNREACHABLE();
void MacroEngine::Execute(Core::System& system, Engines::Maxwell3D& maxwell3d, u32 method, std::span<const u32> parameters) {
auto const execute_variant = [&system, &maxwell3d, &parameters, method](AnyCachedMacro& acm) {
if (auto a = std::get_if<HLE_DrawArraysIndirect>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_DrawIndexedIndirect>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_MultiDrawIndexedIndirectCount>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_MultiLayerClear>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_C713C83D8F63CCF3>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_D7333D26E0A93EDE>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_BindShader>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_SetRasterBoundingBox>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_ClearConstBuffer>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_ClearMemory>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_TransformFeedbackSetup>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<HLE_DrawIndirectByteCount>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<MacroInterpreterImpl>(&acm))
return a->Execute(system, maxwell3d, parameters, method);
if (auto a = std::get_if<std::unique_ptr<DynamicCachedMacro>>(&acm))
return a->get()->Execute(system, maxwell3d, parameters, method);
};
if (auto const it = macro_cache.find(method); it != macro_cache.end()) {
execute_variant(it->second.program);
return;
}
// Macro not compiled, check if it's uploaded and if so, compile it
std::span<const u32> code;
auto macro_code = uploaded_macro_code.find(method);
if (macro_code == uploaded_macro_code.end()) {
auto& ci = it->second;
if (!CanBeHLEProgram(ci.hash) || Settings::values.disable_macro_hle)
maxwell3d.RefreshParameters(); //LLE must reload parameters
execute_variant(ci.program);
} else {
// Macro not compiled, check if it's uploaded and if so, compile it
std::optional<u32> mid_method;
for (const auto& [method_base, uploaded_code] : uploaded_macro_code) {
if (method >= method_base && (method - method_base) < uploaded_code.size()) {
mid_method = method_base;
break;
const auto macro_code = uploaded_macro_code.find(method);
if (macro_code == uploaded_macro_code.end()) {
for (const auto& [method_base, code] : uploaded_macro_code) {
if (method >= method_base && (method - method_base) < code.size()) {
mid_method = method_base;
break;
}
}
if (!mid_method.has_value()) {
ASSERT_MSG(false, "Macro 0x{0:x} was not uploaded", method);
return;
}
}
if (!mid_method) {
ASSERT_MSG(false, "Macro 0x{0:x} was not uploaded", method);
return;
auto& ci = macro_cache[method];
if (mid_method) {
const auto& macro_cached = uploaded_macro_code[mid_method.value()];
const auto rebased_method = method - mid_method.value();
auto& code = uploaded_macro_code[method];
code.resize(macro_cached.size() - rebased_method);
std::memcpy(code.data(), macro_cached.data() + rebased_method, code.size() * sizeof(u32));
ci.hash = Common::HashValue(code);
ci.program = Compile(system, maxwell3d, code);
} else {
ci.program = Compile(system, maxwell3d, macro_code->second);
ci.hash = Common::HashValue(macro_code->second);
}
if (CanBeHLEProgram(ci.hash) && !Settings::values.disable_macro_hle) {
ci.program = GetHLEProgram(ci.hash);
} else {
maxwell3d.RefreshParameters();
}
execute_variant(ci.program);
if (Settings::values.dump_macros) {
Dump(ci.hash, macro_code->second, !std::holds_alternative<std::monostate>(ci.program));
}
const auto source = uploaded_macro_code.find(*mid_method);
ASSERT(source != uploaded_macro_code.end());
const auto rebased_method = method - *mid_method;
std::vector<u32> rebased_code(source->second.begin() + rebased_method,
source->second.end());
const auto [it, inserted] = uploaded_macro_code.emplace(method, std::move(rebased_code));
ASSERT(inserted);
code = it->second;
} else {
code = macro_code->second;
}
auto& ci = macro_cache[method];
ci.hash = Common::HashRange(code.begin(), code.end());
if (!Settings::values.disable_macro_hle) {
ci.program = GetHLEProgram(ci.hash);
}
if (std::holds_alternative<std::monostate>(ci.program)) {
ci.program = Compile(system, maxwell3d, code);
}
execute_variant(ci.program);
if (Settings::values.dump_macros) {
Dump(ci.hash, code, !std::holds_alternative<std::monostate>(ci.program));
}
}
@@ -93,7 +93,17 @@ public:
void PostCopyBarrier();
void Finish();
void TickFrame(Common::SlotVector<Buffer>&) noexcept {}
void TickFrame(Common::SlotVector<Buffer>&) noexcept {
++sync_point;
}
u64 CurrentSyncPoint() const noexcept {
return sync_point;
}
u64 CompletedSyncPoint() const noexcept {
return sync_point > SYNC_POINT_DELAY ? sync_point - SYNC_POINT_DELAY : 0;
}
void ClearBuffer(Buffer& dest_buffer, u32 offset, size_t size, u32 value);
@@ -128,6 +138,14 @@ public:
u64 GetDeviceMemoryUsage() const;
u64 GetDeviceAllocationUsage() const {
return GetDeviceMemoryUsage();
}
bool CanReportAllocationUsage() const {
return device.CanReportMemoryUsage();
}
void BindFastUniformBuffer(size_t stage, u32 binding_index, u32 size) {
const GLuint handle = fast_uniforms[stage][binding_index].handle;
const GLsizeiptr gl_size = static_cast<GLsizeiptr>(size);
@@ -213,9 +231,13 @@ private:
GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV,
};
static constexpr u64 SYNC_POINT_DELAY = 8;
const Device& device;
StagingBufferPool& staging_buffer_pool;
u64 sync_point = 1;
bool has_fast_buffer_sub_data = false;
bool use_assembly_shaders = false;
bool has_unified_vertex_buffers = false;
@@ -87,6 +87,14 @@ public:
u64 GetDeviceMemoryUsage() const;
u64 GetDeviceAllocationUsage() const {
return GetDeviceMemoryUsage();
}
bool CanReportAllocationUsage() const {
return device.CanReportMemoryUsage();
}
bool CanReportMemoryUsage() const {
return device.CanReportMemoryUsage();
}
@@ -139,7 +147,19 @@ public:
bool HasNativeASTC() const noexcept;
void TickFrame() {}
void TickFrame() {
++sync_point;
}
u64 CurrentSyncPoint() const noexcept {
return sync_point;
}
u64 CompletedSyncPoint() const noexcept {
return sync_point > SYNC_POINT_DELAY ? sync_point - SYNC_POINT_DELAY : 0;
}
void WaitSyncPoint(u64) {}
StateTracker& GetStateTracker() {
return state_tracker;
@@ -174,6 +194,9 @@ private:
std::array<OGLFramebuffer, 4> rescale_read_fbos;
const Settings::ResolutionScalingInfo& resolution;
u64 device_access_memory;
static constexpr u64 SYNC_POINT_DELAY = 8;
u64 sync_point = 1;
};
class Image : public VideoCommon::ImageBase {
@@ -370,6 +393,7 @@ struct TextureCacheParams {
static constexpr bool HAS_EMULATED_COPIES = true;
static constexpr bool HAS_DEVICE_MEMORY_INFO = true;
static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = true;
static constexpr bool HAS_TIMELINE_SYNC_POINTS = false;
using Runtime = OpenGL::TextureCacheRuntime;
using Image = OpenGL::Image;
+91 -27
View File
@@ -21,6 +21,7 @@
#include "video_core/host_shaders/convert_depth_to_float_frag_spv.h"
#include "video_core/host_shaders/convert_float_to_depth_frag_spv.h"
#include "video_core/host_shaders/convert_msaa_to_non_msaa_frag_spv.h"
#include "video_core/host_shaders/convert_non_msaa_to_msaa_depth_frag_spv.h"
#include "video_core/host_shaders/convert_non_msaa_to_msaa_frag_spv.h"
#include "video_core/host_shaders/convert_s8d24_to_abgr8_frag_spv.h"
#include "video_core/host_shaders/full_screen_triangle_vert_spv.h"
@@ -519,7 +520,8 @@ void RecordShaderReadBarrier(Scheduler& scheduler, const ImageView& image_view)
}
[[nodiscard]] vk::ImageView MakeMSAACopyView(const vk::Device& device, VkImage image,
VkFormat format, u32 base_level) {
VkFormat format, u32 base_level,
VkImageAspectFlags aspect_mask) {
return device.CreateImageView(VkImageViewCreateInfo{
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
.pNext = nullptr,
@@ -534,7 +536,7 @@ void RecordShaderReadBarrier(Scheduler& scheduler, const ImageView& image_view)
.a = VK_COMPONENT_SWIZZLE_IDENTITY,
},
.subresourceRange{
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
.aspectMask = aspect_mask,
.baseMipLevel = base_level,
.levelCount = 1,
.baseArrayLayer = 0,
@@ -610,6 +612,8 @@ BlitImageHelper::BlitImageHelper(const Device& device_, Scheduler& scheduler_,
convert_s8d24_to_abgr8_frag(BuildShader(device, CONVERT_S8D24_TO_ABGR8_FRAG_SPV)),
convert_msaa_to_non_msaa_frag(BuildShader(device, CONVERT_MSAA_TO_NON_MSAA_FRAG_SPV)),
convert_non_msaa_to_msaa_frag(BuildShader(device, CONVERT_NON_MSAA_TO_MSAA_FRAG_SPV)),
convert_non_msaa_to_msaa_depth_frag(
BuildShader(device, CONVERT_NON_MSAA_TO_MSAA_DEPTH_FRAG_SPV)),
linear_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO<VK_FILTER_LINEAR>)),
nearest_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO<VK_FILTER_NEAREST>)) {}
@@ -895,16 +899,34 @@ void BlitImageHelper::CopyMSAA(RenderPassCache& render_pass_cache, VkImage dst_i
const s32 scale_y = 1 << samples_y;
const VkSampleCountFlagBits samples =
msaa_to_non_msaa ? VK_SAMPLE_COUNT_1_BIT : SampleCountFlag(num_samples);
const auto dst_surface_type = VideoCore::Surface::GetFormatType(dst_format);
const bool is_depth = dst_surface_type == VideoCore::Surface::SurfaceType::Depth ||
dst_surface_type == VideoCore::Surface::SurfaceType::DepthStencil;
const bool has_stencil = dst_surface_type == VideoCore::Surface::SurfaceType::DepthStencil;
const VkImageAspectFlags view_aspect =
is_depth ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT;
VkImageAspectFlags barrier_aspect = VK_IMAGE_ASPECT_COLOR_BIT;
if (is_depth) {
barrier_aspect = VK_IMAGE_ASPECT_DEPTH_BIT;
if (has_stencil) {
barrier_aspect |= VK_IMAGE_ASPECT_STENCIL_BIT;
}
}
RenderPassKey renderpass_key{};
renderpass_key.color_formats.fill(VideoCore::Surface::PixelFormat::Invalid);
renderpass_key.color_formats[0] = dst_format;
renderpass_key.depth_format = VideoCore::Surface::PixelFormat::Invalid;
if (is_depth) {
renderpass_key.depth_format = dst_format;
} else {
renderpass_key.color_formats[0] = dst_format;
renderpass_key.depth_format = VideoCore::Surface::PixelFormat::Invalid;
}
renderpass_key.samples = samples;
const VkRenderPass renderpass = render_pass_cache.Get(renderpass_key);
const MSAACopyPipelineKey key{
.renderpass = renderpass,
.samples = samples,
.msaa_to_non_msaa = msaa_to_non_msaa,
.is_depth = is_depth,
};
const VkPipeline pipeline = FindOrEmplaceMSAACopyPipeline(key);
const VkPipelineLayout layout = *msaa_copy_pipeline_layout;
@@ -920,10 +942,10 @@ void BlitImageHelper::CopyMSAA(RenderPassCache& render_pass_cache, VkImage dst_i
ASSERT(copy.dst_subresource.num_layers == 1);
vk::ImageView src_view =
MakeMSAACopyView(device.GetLogical(), src_image, src_vk_format,
static_cast<u32>(copy.src_subresource.base_level));
static_cast<u32>(copy.src_subresource.base_level), view_aspect);
vk::ImageView dst_view =
MakeMSAACopyView(device.GetLogical(), dst_image, dst_vk_format,
static_cast<u32>(copy.dst_subresource.base_level));
static_cast<u32>(copy.dst_subresource.base_level), view_aspect);
const VkOffset2D dst_offset{copy.dst_offset.x, copy.dst_offset.y};
const VkExtent2D dst_extent{copy.extent.width, copy.extent.height};
const VkRect2D render_area{
@@ -949,50 +971,64 @@ void BlitImageHelper::CopyMSAA(RenderPassCache& render_pass_cache, VkImage dst_i
scheduler.RequestOutsideRenderPassOperationContext();
scheduler.Record([this, pipeline, layout, sampler, renderpass,
framebuffer_handle = *framebuffer, src_view_handle = *src_view,
src = src_image, dst = dst_image, render_area,
src = src_image, dst = dst_image, render_area, is_depth, barrier_aspect,
push_constants](vk::CommandBuffer cmdbuf) {
constexpr VkImageSubresourceRange color_range{
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
const VkImageSubresourceRange src_range{
.aspectMask = barrier_aspect,
.baseMipLevel = 0,
.levelCount = VK_REMAINING_MIP_LEVELS,
.baseArrayLayer = 0,
.layerCount = VK_REMAINING_ARRAY_LAYERS,
};
const VkImageSubresourceRange dst_range = src_range;
const VkAccessFlags attachment_read =
is_depth ? VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
: VK_ACCESS_COLOR_ATTACHMENT_READ_BIT;
const VkAccessFlags attachment_write =
is_depth ? VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
: VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
const VkPipelineStageFlags depth_stage =
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;
const VkPipelineStageFlags attachment_stage =
is_depth ? depth_stage
: static_cast<VkPipelineStageFlags>(
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
const std::array pre_barriers{
VkImageMemoryBarrier{
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT,
.srcAccessMask = attachment_write | VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_TRANSFER_WRITE_BIT,
.dstAccessMask = VK_ACCESS_SHADER_READ_BIT,
.oldLayout = VK_IMAGE_LAYOUT_GENERAL,
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.image = src,
.subresourceRange = color_range,
.subresourceRange = src_range,
},
VkImageMemoryBarrier{
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT,
.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
.srcAccessMask = attachment_write | VK_ACCESS_SHADER_WRITE_BIT |
VK_ACCESS_TRANSFER_WRITE_BIT,
.dstAccessMask = attachment_read | attachment_write,
.oldLayout = VK_IMAGE_LAYOUT_GENERAL,
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.image = dst,
.subresourceRange = color_range,
.subresourceRange = dst_range,
},
};
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | attachment_stage,
0, nullptr, nullptr, pre_barriers);
const VkRenderPassBeginInfo renderpass_bi{
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
@@ -1025,16 +1061,16 @@ void BlitImageHelper::CopyMSAA(RenderPassCache& render_pass_cache, VkImage dst_i
const VkImageMemoryBarrier post_barrier{
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
.srcAccessMask = attachment_write,
.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_TRANSFER_READ_BIT,
.oldLayout = VK_IMAGE_LAYOUT_GENERAL,
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.image = dst,
.subresourceRange = color_range,
.subresourceRange = dst_range,
};
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
cmdbuf.PipelineBarrier(attachment_stage,
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
VK_PIPELINE_STAGE_TRANSFER_BIT,
@@ -1423,9 +1459,36 @@ VkPipeline BlitImageHelper::FindOrEmplaceMSAACopyPipeline(const MSAACopyPipeline
return *msaa_copy_pipelines[std::distance(msaa_copy_keys.begin(), it)];
}
msaa_copy_keys.push_back(key);
const std::array stages = MakeStages(*clear_color_vert, key.msaa_to_non_msaa
? *convert_msaa_to_non_msaa_frag
: *convert_non_msaa_to_msaa_frag);
const VkShaderModule frag_module =
key.msaa_to_non_msaa
? *convert_msaa_to_non_msaa_frag
: (key.is_depth ? *convert_non_msaa_to_msaa_depth_frag
: *convert_non_msaa_to_msaa_frag);
const std::array stages = MakeStages(*clear_color_vert, frag_module);
const VkPipelineDepthStencilStateCreateInfo depth_stencil_ci{
.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
.pNext = nullptr,
.flags = 0,
.depthTestEnable = VK_TRUE,
.depthWriteEnable = VK_TRUE,
.depthCompareOp = VK_COMPARE_OP_ALWAYS,
.depthBoundsTestEnable = VK_FALSE,
.stencilTestEnable = VK_FALSE,
.front = {},
.back = {},
.minDepthBounds = 0.0f,
.maxDepthBounds = 0.0f,
};
static constexpr VkPipelineColorBlendStateCreateInfo no_color_blend_ci{
.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
.pNext = nullptr,
.flags = 0,
.logicOpEnable = VK_FALSE,
.logicOp = VK_LOGIC_OP_CLEAR,
.attachmentCount = 0,
.pAttachments = nullptr,
.blendConstants = {0.0f, 0.0f, 0.0f, 0.0f},
};
const VkPipelineMultisampleStateCreateInfo multisample_ci{
.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
.pNext = nullptr,
@@ -1450,8 +1513,9 @@ VkPipeline BlitImageHelper::FindOrEmplaceMSAACopyPipeline(const MSAACopyPipeline
.pViewportState = &PIPELINE_VIEWPORT_STATE_CREATE_INFO,
.pRasterizationState = &PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
.pMultisampleState = &multisample_ci,
.pDepthStencilState = nullptr,
.pColorBlendState = &PIPELINE_COLOR_BLEND_STATE_GENERIC_CREATE_INFO,
.pDepthStencilState = key.is_depth ? &depth_stencil_ci : nullptr,
.pColorBlendState = key.is_depth ? &no_color_blend_ci
: &PIPELINE_COLOR_BLEND_STATE_GENERIC_CREATE_INFO,
.pDynamicState = &PIPELINE_DYNAMIC_STATE_CREATE_INFO,
.layout = *msaa_copy_pipeline_layout,
.renderPass = key.renderpass,
@@ -51,6 +51,7 @@ struct MSAACopyPipelineKey {
VkRenderPass renderpass;
VkSampleCountFlagBits samples;
bool msaa_to_non_msaa;
bool is_depth;
};
struct BlitMSAAPipelineKey {
@@ -180,6 +181,7 @@ private:
vk::ShaderModule convert_s8d24_to_abgr8_frag;
vk::ShaderModule convert_msaa_to_non_msaa_frag;
vk::ShaderModule convert_non_msaa_to_msaa_frag;
vk::ShaderModule convert_non_msaa_to_msaa_depth_frag;
vk::Sampler linear_sampler;
vk::Sampler nearest_sampler;
@@ -164,7 +164,9 @@ void FixedPipelineState::Refresh(Tegra::Engines::Maxwell3D& maxwell3d, DynamicFe
}
provoking_vertex_last.Assign(use_last_provoking_vertex ? 1 : 0);
conservative_raster_enable.Assign(regs.conservative_raster_enable != 0 ? 1 : 0);
if (!features.has_dynamic_state3_conservative_raster_mode) {
conservative_raster_enable.Assign(regs.conservative_raster_enable != 0 ? 1 : 0);
}
smooth_lines.Assign(regs.line_anti_alias_enable != 0 ? 1 : 0);
alpha_to_coverage_enabled.Assign(regs.anti_alias_alpha_control.alpha_to_coverage != 0 ? 1 : 0);
alpha_to_one_enabled.Assign(regs.anti_alias_alpha_control.alpha_to_one != 0 ? 1 : 0);
@@ -360,18 +362,35 @@ void FixedPipelineState::DynamicState::Refresh2(const Maxwell& regs,
depth_bias_enable.Assign(enabled_lut[POLYGON_OFFSET_ENABLE_LUT[topology_index]] != 0 ? 1 : 0);
}
bool IsDepthClipEnabled(const Maxwell& regs) {
const auto clip = regs.viewport_clip_control.geometry_clip.Value();
return clip == Maxwell::ViewportClipControl::GeometryClip::Passthrough ||
clip == Maxwell::ViewportClipControl::GeometryClip::FrustumXYZ ||
clip == Maxwell::ViewportClipControl::GeometryClip::FrustumZ;
}
bool IsDepthClampEnabled(const Maxwell& regs, bool has_depth_clip_enable) {
if (!IsDepthClipEnabled(regs)) {
return true;
}
if (!has_depth_clip_enable) {
return false;
}
return regs.viewport_clip_control.pixel_min_z.Value() != 0 ||
regs.viewport_clip_control.pixel_max_z.Value() != 0;
}
void FixedPipelineState::DynamicState::Refresh3(const Maxwell& regs,
const DynamicFeatures& features) {
if (!features.has_dynamic_state3_logic_op_enable) {
logic_op_enable.Assign(regs.logic_op.enable != 0 ? 1 : 0);
}
if (features.has_depth_clip_enable) {
depth_clip_disabled.Assign(IsDepthClipEnabled(regs) ? 0 : 1);
}
if (!features.has_dynamic_state3_depth_clamp_enable) {
depth_clamp_disabled.Assign(regs.viewport_clip_control.geometry_clip ==
Maxwell::ViewportClipControl::GeometryClip::Passthrough ||
regs.viewport_clip_control.geometry_clip ==
Maxwell::ViewportClipControl::GeometryClip::FrustumXYZ ||
regs.viewport_clip_control.geometry_clip ==
Maxwell::ViewportClipControl::GeometryClip::FrustumZ);
depth_clamp_disabled.Assign(
IsDepthClampEnabled(regs, features.has_depth_clip_enable) ? 0 : 1);
}
if (!features.has_dynamic_state3_line_stipple_enable) {
line_stipple_enable.Assign(regs.line_stipple_enable);
@@ -30,6 +30,8 @@ struct DynamicFeatures {
bool has_extended_dynamic_state_3_blend;
bool has_extended_dynamic_state_3_enables;
bool has_dynamic_state3_depth_clamp_enable;
bool has_dynamic_state3_conservative_raster_mode;
bool has_depth_clip_enable;
bool has_dynamic_state3_logic_op_enable;
bool has_dynamic_state3_line_stipple_enable;
bool has_dynamic_vertex_input;
@@ -165,6 +167,7 @@ struct FixedPipelineState {
BitField<10, 1, u32> logic_op_enable;
BitField<11, 1, u32> depth_clamp_disabled;
BitField<12, 1, u32> line_stipple_enable;
BitField<13, 1, u32> depth_clip_disabled;
};
union {
u32 raw2;
@@ -298,6 +301,9 @@ static_assert(std::has_unique_object_representations_v<FixedPipelineState>);
static_assert(std::is_trivially_copyable_v<FixedPipelineState>);
static_assert(std::is_trivially_constructible_v<FixedPipelineState>);
bool IsDepthClipEnabled(const Maxwell& regs);
bool IsDepthClampEnabled(const Maxwell& regs, bool has_depth_clip_enable);
} // namespace Vulkan
namespace std {
@@ -246,7 +246,6 @@ protected:
StagingBufferPool& staging_pool;
vk::Buffer buffer{};
MemoryCommit memory_commit{};
VkIndexType index_type{};
u32 num_indices = 0;
};
@@ -376,6 +375,10 @@ u64 BufferCacheRuntime::GetDeviceMemoryUsage() const {
return device.GetDeviceMemoryUsage();
}
u64 BufferCacheRuntime::GetDeviceAllocationUsage() const {
return device.GetMemoryBudgetInfo().allocation_bytes;
}
bool BufferCacheRuntime::CanReportMemoryUsage() const {
return device.CanReportMemoryUsage();
}
@@ -404,6 +407,16 @@ u64 BufferCacheRuntime::KnownGpuTick() {
return scheduler.GetMasterSemaphore().KnownGpuTick();
}
u64 BufferCacheRuntime::CurrentSyncPoint() const noexcept {
return scheduler.GetMasterSemaphore().CurrentTick();
}
u64 BufferCacheRuntime::CompletedSyncPoint() const {
auto& master_semaphore = scheduler.GetMasterSemaphore();
master_semaphore.Refresh();
return master_semaphore.KnownGpuTick();
}
void BufferCacheRuntime::Wait(u64 buffer_tick) {
scheduler.Wait(buffer_tick);
}
@@ -641,6 +654,7 @@ void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, VkBuffer buffer,
offset = 0;
size = 0;
}
scheduler.MarkTransformFeedbackUsed();
scheduler.Record([index, buffer, offset, size](vk::CommandBuffer cmdbuf) {
const VkDeviceSize vk_offset = offset;
const VkDeviceSize vk_size = size;
@@ -653,19 +667,26 @@ void BufferCacheRuntime::BindTransformFeedbackBuffers(VideoCommon::HostBindings<
// Already logged in the rasterizer
return;
}
boost::container::static_vector<VkBuffer, VideoCommon::NUM_VERTEX_BUFFERS> buffer_handles(bindings.buffers.size());
for (u32 i = 0; i < bindings.buffers.size(); ++i) {
const u32 count = std::min<u32>(static_cast<u32>(bindings.buffers.size()),
VideoCommon::NUM_TRANSFORM_FEEDBACK_BUFFERS);
std::array<VkBuffer, VideoCommon::NUM_TRANSFORM_FEEDBACK_BUFFERS> handles{};
std::array<VkDeviceSize, VideoCommon::NUM_TRANSFORM_FEEDBACK_BUFFERS> offsets{};
std::array<VkDeviceSize, VideoCommon::NUM_TRANSFORM_FEEDBACK_BUFFERS> sizes{};
for (u32 i = 0; i < count; ++i) {
auto handle = bindings.buffers[i]->Handle();
if (handle == VK_NULL_HANDLE) {
ReserveNullBuffer();
handle = *null_buffer;
bindings.offsets[i] = 0;
bindings.sizes[i] = 0;
} else {
offsets[i] = bindings.offsets[i];
sizes[i] = bindings.sizes[i];
}
buffer_handles[i] = handle;
handles[i] = handle;
}
scheduler.Record([bindings_ = std::move(bindings), buffer_handles_ = std::move(buffer_handles)](vk::CommandBuffer cmdbuf) {
cmdbuf.BindTransformFeedbackBuffersEXT(0, u32(buffer_handles_.size()), buffer_handles_.data(), bindings_.offsets.data(), bindings_.sizes.data());
scheduler.MarkTransformFeedbackUsed();
scheduler.Record([count, handles, offsets, sizes](vk::CommandBuffer cmdbuf) {
cmdbuf.BindTransformFeedbackBuffersEXT(0, count, handles.data(), offsets.data(),
sizes.data());
});
}
@@ -100,10 +100,20 @@ public:
void Finish();
u64 CurrentSyncPoint() const noexcept;
u64 CompletedSyncPoint() const;
u64 GetDeviceLocalMemory() const;
u64 GetDeviceMemoryUsage() const;
u64 GetDeviceAllocationUsage() const;
bool CanReportAllocationUsage() const noexcept {
return true;
}
bool CanReportMemoryUsage() const;
u32 GetUniformBufferAlignment() const;
@@ -37,7 +37,7 @@ void InnerFence::Wait() {
if (is_stubbed) {
return;
}
scheduler.Wait(wait_tick);
scheduler.WaitSubmitted(wait_tick);
}
FenceManager::FenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_,
@@ -757,16 +757,13 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
.lineWidth = 1.0f,
// TODO(alekpop): Transfer from regs
};
const bool smooth_lines_supported =
device.IsExtLineRasterizationSupported() && device.SupportsSmoothLines();
const bool stippled_lines_supported =
device.IsExtLineRasterizationSupported() && device.SupportsStippledRectangularLines();
const VkLineRasterizationModeEXT line_raster_mode =
device.GetLineRasterizationMode(key.state.smooth_lines != 0);
const bool stippled_lines_supported = device.SupportsStippleForMode(line_raster_mode);
VkPipelineRasterizationLineStateCreateInfoEXT line_state{
.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT,
.pNext = nullptr,
.lineRasterizationMode = key.state.smooth_lines != 0 && smooth_lines_supported
? VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT
: VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT,
.lineRasterizationMode = line_raster_mode,
.stippledLineEnable =
(dynamic.line_stipple_enable && stippled_lines_supported) ? VK_TRUE : VK_FALSE,
.lineStippleFactor = key.state.line_stipple_factor,
@@ -805,6 +802,16 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
if (device.IsExtProvokingVertexSupported()) {
provoking_vertex.pNext = std::exchange(rasterization_ci.pNext, &provoking_vertex);
}
VkPipelineRasterizationDepthClipStateCreateInfoEXT depth_clip_state{
.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT,
.pNext = nullptr,
.flags = 0,
.depthClipEnable = static_cast<VkBool32>(dynamic.depth_clip_disabled == 0 ? VK_TRUE
: VK_FALSE),
};
if (device.IsExtDepthClipEnableSupported()) {
depth_clip_state.pNext = std::exchange(rasterization_ci.pNext, &depth_clip_state);
}
const bool supports_alpha_output = fragment_has_color0_output;
const bool alpha_to_one_supported = device.SupportsAlphaToOne();
@@ -305,7 +305,7 @@ size_t GetTotalPipelineWorkers() {
std::max<size_t>(static_cast<size_t>(std::thread::hardware_concurrency()), 2ULL) - 1ULL;
#ifdef __ANDROID__
const int configured = AndroidSettings::values.pipeline_worker_count.GetValue();
const int clamped = std::clamp(configured, 4, 8);
const int clamped = std::clamp(configured, 2, 8);
const size_t desired = static_cast<size_t>(clamped);
if (desired == 0) {
return 1ULL;
@@ -349,8 +349,9 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_,
use_asynchronous_shaders{Settings::values.use_asynchronous_shaders.GetValue()},
use_vulkan_pipeline_cache{Settings::values.use_vulkan_driver_pipeline_cache.GetValue()},
workers(device.HasBrokenParallelShaderCompiling() ? 1ULL : GetTotalPipelineWorkers(),
"VkPipelineBuilder"),
serialization_thread(1, "VkPipelineSerialization") {
"VkPipelineBuilder", {}, Common::ThreadPlacement::Background),
serialization_thread(1, "VkPipelineSerialization", {},
Common::ThreadPlacement::Background) {
const auto& float_control{device.FloatControlProperties()};
const VkDriverId driver_id{device.GetDriverID()};
const VkShaderStageFlags subgroup_stages{device.GetSubgroupSupportedStages()};
@@ -514,6 +515,11 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_,
dynamic_features.has_dynamic_state3_depth_clamp_enable =
dynamic_features.has_extended_dynamic_state_3_enables &&
device.SupportsDynamicState3DepthClampEnable();
dynamic_features.has_dynamic_state3_conservative_raster_mode =
dynamic_features.has_extended_dynamic_state_3_enables &&
device.SupportsDynamicState3ConservativeRasterizationMode();
dynamic_features.has_depth_clip_enable =
device.IsExtDepthClipEnableSupported();
dynamic_features.has_dynamic_state3_logic_op_enable =
dynamic_features.has_extended_dynamic_state_3_enables &&
device.SupportsDynamicState3LogicOpEnable();
@@ -526,7 +532,8 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_,
device.IsExtVertexInputDynamicStateSupported() &&
Settings::values.vertex_input_dynamic_state.GetValue();
dynamic_features.has_provoking_vertex = device.IsExtProvokingVertexSupported();
dynamic_features.has_provoking_vertex =
device.IsExtProvokingVertexSupported();
dynamic_features.has_provoking_vertex_first_mode =
device.SupportsProvokingVertexFirstMode();
dynamic_features.has_provoking_vertex_last_mode =
@@ -296,9 +296,6 @@ void PresentManager::RecreateSwapchain(Frame* frame) {
}
void PresentManager::SetImageCount() {
// We cannot have more than 7 images in flight at any given time.
// FRAMES_IN_FLIGHT is 8, and the cache TICKS_TO_DESTROY is 8.
// Mali drivers will give us 6.
image_count = std::min<size_t>(swapchain.GetImageCount(), 7);
}
@@ -919,7 +919,7 @@ private:
return;
}
has_flushed_end_pending = true;
// Refresh buffers state before beginning transform feedback so counters are up-to-date
scheduler.MarkTransformFeedbackUsed();
UpdateBuffers();
if (!has_started || buffers_count == 0) {
// No counter buffers available: begin without counters
@@ -6,6 +6,7 @@
#include <algorithm>
#include <array>
#include <limits>
#include <memory>
#include <mutex>
@@ -203,7 +204,8 @@ RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra
: gpu{gpu_}, device_memory{device_memory_}, device{device_},
memory_allocator{memory_allocator_}, state_tracker{state_tracker_}, scheduler{scheduler_},
staging_pool(device, memory_allocator, scheduler), descriptor_pool(device, scheduler),
guest_descriptor_queue(device), compute_pass_descriptor_queue(device),
guest_descriptor_queue(device, UpdateDescriptorQueue::GUEST_FRAME_PAYLOAD_SIZE),
compute_pass_descriptor_queue(device, UpdateDescriptorQueue::COMPUTE_FRAME_PAYLOAD_SIZE),
blit_image(device, scheduler, state_tracker, descriptor_pool), render_pass_cache(device),
texture_cache_runtime{
device, scheduler, memory_allocator, staging_pool,
@@ -221,9 +223,23 @@ RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra
fence_manager(*this, gpu, texture_cache, buffer_cache, query_cache, device, scheduler),
wfi_event(device.GetLogical().CreateEvent()) {
scheduler.SetQueryCache(query_cache);
memory_allocator.SetReclaimCallback([this](u64 bytes) -> u64 {
u64 freed = staging_pool.ReclaimMemory(bytes);
if (freed < bytes) {
freed += texture_cache.ReclaimMemory(bytes - freed, false);
}
if (freed < bytes) {
freed += buffer_cache.ReclaimMemory(bytes - freed, false);
}
auto& master_semaphore = scheduler.GetMasterSemaphore();
master_semaphore.Refresh();
vk::TickDeletionQueue(master_semaphore.KnownGpuTick());
return freed;
});
}
RasterizerVulkan::~RasterizerVulkan() {
memory_allocator.SetReclaimCallback(nullptr);
scheduler.WaitWorker();
scheduler.Finish();
}
@@ -880,6 +896,9 @@ void RasterizerVulkan::FlushCommands() {
void RasterizerVulkan::TickFrame() {
draw_counter = 0;
auto& master_semaphore = scheduler.GetMasterSemaphore();
master_semaphore.Refresh();
vk::TickDeletionQueue(master_semaphore.KnownGpuTick());
guest_descriptor_queue.TickFrame();
compute_pass_descriptor_queue.TickFrame();
fence_manager.TickFrame();
@@ -1451,7 +1470,10 @@ void RasterizerVulkan::UpdateLineWidth(Tegra::Engines::Maxwell3D::Regs& regs) {
}
const float width =
regs.line_anti_alias_enable ? regs.line_width_smooth : regs.line_width_aliased;
scheduler.Record([width](vk::CommandBuffer cmdbuf) { cmdbuf.SetLineWidth(width); });
const float clamped_width = device.ClampLineWidth(width);
scheduler.Record([clamped_width](vk::CommandBuffer cmdbuf) {
cmdbuf.SetLineWidth(clamped_width);
});
}
void RasterizerVulkan::UpdateCullMode(Tegra::Engines::Maxwell3D::Regs& regs) {
@@ -1548,7 +1570,10 @@ void RasterizerVulkan::UpdateLineStippleEnable(Tegra::Engines::Maxwell3D::Regs&
return;
}
scheduler.Record([enable = regs.line_stipple_enable](vk::CommandBuffer cmdbuf) {
const VkLineRasterizationModeEXT mode =
device.GetLineRasterizationMode(regs.line_anti_alias_enable != 0);
const bool enable = regs.line_stipple_enable != 0 && device.SupportsStippleForMode(mode);
scheduler.Record([enable](vk::CommandBuffer cmdbuf) {
cmdbuf.SetLineStippleEnableEXT(enable);
});
}
@@ -1562,28 +1587,24 @@ void RasterizerVulkan::UpdateLineRasterizationMode(Tegra::Engines::Maxwell3D::Re
}
if (!device.SupportsDynamicState3LineRasterizationMode()) {
static std::once_flag warn_missing_rect;
std::call_once(warn_missing_rect, [] {
static std::once_flag warn_missing_dynamic_state;
std::call_once(warn_missing_dynamic_state, [] {
LOG_WARNING(Render_Vulkan,
"Driver lacks rectangular line rasterization support; skipping dynamic "
"line state updates");
"Driver lacks dynamic line rasterization mode; the pipeline static value "
"is used instead");
});
return;
}
const bool wants_smooth = regs.line_anti_alias_enable != 0;
VkLineRasterizationModeEXT mode = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT;
if (wants_smooth) {
if (device.SupportsSmoothLines()) {
mode = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT;
} else {
static std::once_flag warn_missing_smooth;
std::call_once(warn_missing_smooth, [] {
LOG_WARNING(Render_Vulkan,
"Line anti-aliasing requested but smoothLines feature unavailable; "
"using rectangular rasterization");
});
}
const VkLineRasterizationModeEXT mode = device.GetLineRasterizationMode(wants_smooth);
if (wants_smooth && mode != VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT) {
static std::once_flag warn_missing_smooth;
std::call_once(warn_missing_smooth, [] {
LOG_WARNING(Render_Vulkan,
"Line anti-aliasing requested but smoothLines feature unavailable; "
"falling back to the closest supported mode");
});
}
scheduler.Record([mode](vk::CommandBuffer cmdbuf) {
cmdbuf.SetLineRasterizationModeEXT(mode);
@@ -1643,12 +1664,7 @@ void RasterizerVulkan::UpdateDepthClampEnable(Tegra::Engines::Maxwell3D::Regs& r
if (!device.SupportsDynamicState3DepthClampEnable()) {
return;
}
bool is_enabled = !(regs.viewport_clip_control.geometry_clip ==
Maxwell::ViewportClipControl::GeometryClip::Passthrough ||
regs.viewport_clip_control.geometry_clip ==
Maxwell::ViewportClipControl::GeometryClip::FrustumXYZ ||
regs.viewport_clip_control.geometry_clip ==
Maxwell::ViewportClipControl::GeometryClip::FrustumZ);
const bool is_enabled = IsDepthClampEnabled(regs, device.IsExtDepthClipEnableSupported());
scheduler.Record(
[is_enabled](vk::CommandBuffer cmdbuf) { cmdbuf.SetDepthClampEnableEXT(is_enabled); });
}
@@ -179,7 +179,6 @@ private:
void UpdateRasterizerDiscardEnable(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateConservativeRasterizationMode(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateLineStippleEnable(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateLineStipple(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateLineRasterizationMode(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateDepthBiasEnable(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateLogicOpEnable(Tegra::Engines::Maxwell3D::Regs& regs);
@@ -47,6 +47,7 @@ Scheduler::Scheduler(const Device& device_, StateTracker& state_tracker_)
master_semaphore{std::make_unique<MasterSemaphore>(device)},
command_pool{std::make_unique<CommandPool>(*master_semaphore, device)} {
vk::SetDeletionTimeline(master_semaphore->CurrentTick());
AcquireNewChunk();
AllocateWorkerCommandBuffer();
worker_thread = std::jthread([this](std::stop_token token) { WorkerThread(token); });
@@ -322,6 +323,7 @@ u64 Scheduler::SubmitExecution(VkSemaphore signal_semaphore, VkSemaphore wait_se
InvalidateState();
const u64 signal_value = master_semaphore->NextTick();
vk::SetDeletionTimeline(master_semaphore->CurrentTick());
RecordWithUploadBuffer([signal_semaphore, wait_semaphore, signal_value,
this](vk::CommandBuffer cmdbuf, vk::CommandBuffer upload_cmdbuf) {
static constexpr VkMemoryBarrier WRITE_BARRIER{
@@ -398,7 +400,7 @@ void Scheduler::EndRenderPass()
Record([num_images = num_renderpass_images,
images = renderpass_images,
ranges = renderpass_image_ranges,
has_transform_feedback = device.IsExtTransformFeedbackSupported()](
has_transform_feedback = state.uses_transform_feedback](
vk::CommandBuffer cmdbuf) {
std::array<VkImageMemoryBarrier, 9> barriers;
for (size_t i = 0; i < num_images; ++i) {
@@ -453,6 +455,7 @@ void Scheduler::EndRenderPass()
});
state.renderpass = VkRenderPass{};
state.uses_transform_feedback = false;
num_renderpass_images = 0;
}
+43 -25
View File
@@ -74,6 +74,11 @@ public:
return state.renderpass != VK_NULL_HANDLE;
}
/// Flags that transform feedback writes have been recorded since the last render pass end.
void MarkTransformFeedbackUsed() noexcept {
state.uses_transform_feedback = true;
}
/// Update the pipeline to the current execution context.
bool UpdateGraphicsPipeline(GraphicsPipeline* pipeline);
@@ -131,33 +136,16 @@ public:
}
master_semaphore->Wait(tick);
}
if (Settings::values.use_speed_limit.GetValue() && target_fps > 0.0) {
auto now = std::chrono::steady_clock::now();
if (last_target_fps != target_fps) {
frame_interval = std::chrono::duration_cast<std::chrono::steady_clock::duration>(std::chrono::duration<double>(1.0 / target_fps));
max_frame_count = static_cast<int>(0.1 * target_fps);
last_target_fps = target_fps;
frame_counter = 0;
start_time = now;
}
frame_counter++;
auto target_time = start_time + frame_interval * frame_counter;
if (target_time >= now) {
auto sleep_time = target_time - now;
if (sleep_time > std::chrono::milliseconds(15)) {
std::this_thread::sleep_for(sleep_time - std::chrono::milliseconds(1));
}
while (std::chrono::steady_clock::now() < target_time) {
std::this_thread::yield();
}
} else if (frame_counter > max_frame_count) {
frame_counter = 0;
start_time = now;
}
}
ApplyFramePacing(target_fps);
}
void WaitSubmitted(u64 tick, double target_fps = 0.0) {
if (tick > 0 && tick < master_semaphore->CurrentTick()) {
master_semaphore->Wait(tick);
}
ApplyFramePacing(target_fps);
}
/// Returns the master timeline semaphore.
[[nodiscard]] MasterSemaphore& GetMasterSemaphore() const noexcept {
return *master_semaphore;
}
@@ -165,6 +153,35 @@ public:
std::mutex submit_mutex;
private:
void ApplyFramePacing(double target_fps) {
if (!Settings::values.use_speed_limit.GetValue() || target_fps <= 0.0) {
return;
}
auto now = std::chrono::steady_clock::now();
if (last_target_fps != target_fps) {
frame_interval = std::chrono::duration_cast<std::chrono::steady_clock::duration>(
std::chrono::duration<double>(1.0 / target_fps));
max_frame_count = static_cast<int>(0.1 * target_fps);
last_target_fps = target_fps;
frame_counter = 0;
start_time = now;
}
frame_counter++;
auto target_time = start_time + frame_interval * frame_counter;
if (target_time >= now) {
auto sleep_time = target_time - now;
if (sleep_time > std::chrono::milliseconds(15)) {
std::this_thread::sleep_for(sleep_time - std::chrono::milliseconds(1));
}
while (std::chrono::steady_clock::now() < target_time) {
std::this_thread::yield();
}
} else if (frame_counter > max_frame_count) {
frame_counter = 0;
start_time = now;
}
}
class Command {
public:
virtual ~Command() = default;
@@ -255,6 +272,7 @@ private:
bool is_rescaling = false;
bool rescaling_defined = false;
bool needs_state_enable_refresh = false;
bool uses_transform_feedback = false;
};
struct DeferredClear {
@@ -252,25 +252,62 @@ void StagingBufferPool::ReleaseLevel(StagingBuffersCache& cache, size_t log2) {
constexpr size_t deletions_per_tick = 16;
auto& staging = cache[log2];
auto& entries = staging.entries;
const size_t old_size = entries.size();
if (entries.empty()) {
staging.delete_index = 0;
staging.iterate_index = 0;
return;
}
const auto is_deletable = [this](const StagingBuffer& entry) {
return scheduler.IsFree(entry.tick);
};
const size_t begin_offset = staging.delete_index;
const size_t end_offset = (std::min)(begin_offset + deletions_per_tick, old_size);
const size_t begin_offset = (std::min)(staging.delete_index, entries.size());
const size_t end_offset = (std::min)(begin_offset + deletions_per_tick, entries.size());
const auto begin = entries.begin() + begin_offset;
const auto end = entries.begin() + end_offset;
entries.erase(std::remove_if(begin, end, is_deletable), end);
const auto surviving_end = std::remove_if(begin, end, is_deletable);
const size_t removed = static_cast<size_t>(std::distance(surviving_end, end));
entries.erase(surviving_end, end);
const size_t new_size = entries.size();
staging.delete_index += deletions_per_tick;
if (staging.delete_index >= new_size) {
staging.delete_index = end_offset - removed;
if (staging.delete_index >= entries.size()) {
staging.delete_index = 0;
}
if (staging.iterate_index > new_size) {
if (staging.iterate_index > entries.size()) {
staging.iterate_index = 0;
}
}
u64 StagingBufferPool::ReclaimMemory(u64 target_bytes) {
u64 freed = 0;
const auto is_deletable = [this](const StagingBuffer& entry) {
return scheduler.IsFree(entry.tick);
};
const auto reclaim_cache = [&](StagingBuffersCache& cache) {
for (size_t level = NUM_LEVELS; level-- > 0 && freed < target_bytes;) {
auto& staging = cache[level];
auto& entries = staging.entries;
if (entries.empty()) {
continue;
}
const u64 entry_bytes = 1ULL << level;
auto it = entries.begin();
while (it != entries.end() && freed < target_bytes) {
if (is_deletable(*it)) {
it = entries.erase(it);
freed += entry_bytes;
} else {
++it;
}
}
staging.delete_index = 0;
staging.iterate_index = 0;
}
};
reclaim_cache(device_local_cache);
reclaim_cache(upload_cache);
reclaim_cache(download_cache);
return freed;
}
} // namespace Vulkan
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -42,6 +45,8 @@ public:
void TickFrame();
u64 ReclaimMemory(u64 target_bytes);
private:
struct StreamBufferCommit {
size_t upper_bound;
@@ -9,10 +9,6 @@
#include <limits>
#include <vector>
#ifdef __ANDROID__
#include <android/api-level.h>
#endif
#include "common/logging.h"
#include "common/settings.h"
#include "common/settings_enums.h"
@@ -176,34 +172,26 @@ bool Swapchain::AcquireNextImage() {
break;
}
const auto wait_with_frame_pacing = [this] {
#ifdef __ANDROID__
scheduler.WaitSubmitted(resource_ticks[image_index]);
#else
switch (Settings::values.frame_pacing_mode.GetValue()) {
case Settings::FramePacingMode::Target_Auto:
scheduler.Wait(resource_ticks[image_index]);
scheduler.WaitSubmitted(resource_ticks[image_index]);
break;
case Settings::FramePacingMode::Target_30:
scheduler.Wait(resource_ticks[image_index], 30.0);
scheduler.WaitSubmitted(resource_ticks[image_index], 30.0);
break;
case Settings::FramePacingMode::Target_60:
scheduler.Wait(resource_ticks[image_index], 60.0);
scheduler.WaitSubmitted(resource_ticks[image_index], 60.0);
break;
case Settings::FramePacingMode::Target_90:
scheduler.Wait(resource_ticks[image_index], 90.0);
scheduler.WaitSubmitted(resource_ticks[image_index], 90.0);
break;
case Settings::FramePacingMode::Target_120:
scheduler.Wait(resource_ticks[image_index], 120.0);
scheduler.WaitSubmitted(resource_ticks[image_index], 120.0);
break;
}
};
#ifdef __ANDROID__
if (android_get_device_api_level() >= 30) {
scheduler.Wait(resource_ticks[image_index]);
} else {
wait_with_frame_pacing();
}
#else
wait_with_frame_pacing();
#endif
resource_ticks[image_index] = scheduler.CurrentTick();
@@ -144,11 +144,6 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) {
info.size.depth == 1;
}
[[nodiscard]] bool WillUseWidenedAstcFormat(const Device& device, const ImageInfo& info) {
return WillUseAcceleratedAstcDecode(device, info) &&
!VideoCore::Surface::IsPixelFormatSRGB(info.format);
}
[[nodiscard]] VkImageCreateInfo MakeImageCreateInfo(const Device& device, const ImageInfo& info,
std::optional<VkFormat> format_override = {}) {
auto format_info =
@@ -212,7 +207,11 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) {
return device.IsFormatSupported(view_format, VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,
FormatType::Optimal);
});
if (has_storage_compatible_view) {
const bool storage_allowed_for_samples =
image_ci.samples == VK_SAMPLE_COUNT_1_BIT ||
(device.GetStorageImageSampleCounts() &
static_cast<VkSampleCountFlags>(image_ci.samples)) != 0;
if (has_storage_compatible_view && storage_allowed_for_samples) {
image_ci.usage |= VK_IMAGE_USAGE_STORAGE_BIT;
}
@@ -896,6 +895,15 @@ void BlitScale(Scheduler& scheduler, VkImage src_image, VkImage dst_image, const
0, nullptr, nullptr, write_barriers);
});
}
[[nodiscard]] bool CanBlitNatively(const Device& device, PixelFormat format) {
static constexpr auto OPTIMAL_FORMAT = FormatType::Optimal;
static constexpr VkFormatFeatureFlags BLIT_USAGE =
VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT;
const VkFormat vk_format =
MaxwellToVK::SurfaceFormat(device, OPTIMAL_FORMAT, false, format).format;
return device.IsFormatSupported(vk_format, BLIT_USAGE, OPTIMAL_FORMAT);
}
} // Anonymous namespace
TextureCacheRuntime::TextureCacheRuntime(const Device& device_, Scheduler& scheduler_,
@@ -1228,27 +1236,19 @@ void TextureCacheRuntime::BlitImage(Framebuffer* dst_framebuffer, ImageView& dst
blit_image_helper.ResolveDepthStencil(dst_framebuffer, src, dst_region, src_region);
return;
}
if (aspect_mask == (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
const auto format = src.format;
const auto can_blit_depth_stencil = [this, format] {
switch (format) {
case VideoCore::Surface::PixelFormat::D24_UNORM_S8_UINT:
case VideoCore::Surface::PixelFormat::S8_UINT_D24_UNORM:
return device.IsBlitDepth24Stencil8Supported();
case VideoCore::Surface::PixelFormat::D32_FLOAT_S8_UINT:
return device.IsBlitDepth32Stencil8Supported();
default:
UNREACHABLE();
}
}();
// Use shader-based depth/stencil blits if hardware doesn't support the format
// Note: MSAA resolves (MSAA->single) use vkCmdResolveImage which works fine
if (!can_blit_depth_stencil) {
UNIMPLEMENTED_IF(is_src_msaa || is_dst_msaa);
blit_image_helper.BlitDepthStencil(dst_framebuffer, src, dst_region, src_region,
filter, operation);
static constexpr VkImageAspectFlags DEPTH_STENCIL_ASPECTS =
VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
if ((aspect_mask & DEPTH_STENCIL_ASPECTS) != 0 && !CanBlitNatively(device, src.format)) {
if (aspect_mask != DEPTH_STENCIL_ASPECTS) {
UNIMPLEMENTED_MSG("Host cannot blit format {} and no helper path exists for aspect "
"mask 0x{:x}",
src.format, aspect_mask);
return;
}
UNIMPLEMENTED_IF(is_src_msaa || is_dst_msaa);
blit_image_helper.BlitDepthStencil(dst_framebuffer, src, dst_region, src_region, filter,
operation);
return;
}
ASSERT(!(is_dst_msaa && !is_src_msaa));
ASSERT(operation == Fermi2D::Operation::SrcCopy);
@@ -1643,7 +1643,14 @@ void TextureCacheRuntime::CopyImageMSAA(Image& dst, Image& src,
const u32 num_samples = msaa_to_non_msaa ? src.info.num_samples : dst.info.num_samples;
if (dst.AspectMask() != VK_IMAGE_ASPECT_COLOR_BIT ||
VideoCore::Surface::IsPixelFormatInteger(dst.info.format)) {
UNIMPLEMENTED_MSG("Copying images with different samples is not supported.");
const u64 key{(static_cast<u64>(dst.AspectMask()) << 32) |
static_cast<u64>(dst.info.format)};
if (unsupported_msaa_resolves.insert(key).second) {
LOG_WARNING(Render_Vulkan,
"MSAA resolve unsupported: format={}, aspect={:#x}, samples {}->{}",
dst.info.format, dst.AspectMask(), src.info.num_samples,
dst.info.num_samples);
}
return;
}
if (ENABLE_MSAA_RESOLVE_CONSUME && msaa_to_non_msaa && copies.size() == 1 &&
@@ -1753,6 +1760,20 @@ void TextureCacheRuntime::CopyImageMSAA(Image& dst, Image& src,
src.info.format, num_samples, copies, msaa_to_non_msaa);
}
u64 TextureCacheRuntime::CurrentSyncPoint() const noexcept {
return scheduler.CurrentTick();
}
u64 TextureCacheRuntime::CompletedSyncPoint() const {
auto& master_semaphore = scheduler.GetMasterSemaphore();
master_semaphore.Refresh();
return master_semaphore.KnownGpuTick();
}
void TextureCacheRuntime::WaitSyncPoint(u64 sync_point) {
scheduler.Wait(sync_point);
}
u64 TextureCacheRuntime::GetDeviceLocalMemory() const {
return device.GetDeviceLocalMemory();
}
@@ -1761,6 +1782,10 @@ u64 TextureCacheRuntime::GetDeviceMemoryUsage() const {
return device.GetDeviceMemoryUsage();
}
u64 TextureCacheRuntime::GetDeviceAllocationUsage() const {
return device.GetMemoryBudgetInfo().allocation_bytes;
}
bool TextureCacheRuntime::CanReportMemoryUsage() const {
return device.CanReportMemoryUsage();
}
@@ -1770,6 +1795,7 @@ std::optional<size_t> TextureCacheRuntime::GetSamplerHeapBudget() const {
}
void TextureCacheRuntime::TickFrame() {
device.TickAllocatorFrame();
std::erase_if(pending_msaa_images, [this](const auto& pending) {
return scheduler.IsFree(pending.first);
});
@@ -1780,12 +1806,7 @@ Image::Image(TextureCacheRuntime& runtime_, const ImageInfo& info_, GPUVAddr gpu
: VideoCommon::ImageBase(info_, gpu_addr_, cpu_addr_), scheduler{&runtime_.scheduler},
runtime{&runtime_},
original_image(MakeImage(runtime_.device, runtime_.memory_allocator, info,
WillUseWidenedAstcFormat(runtime_.device, info)
? std::span<const VkFormat>{}
: runtime->ViewFormats(info.format),
WillUseWidenedAstcFormat(runtime_.device, info)
? std::make_optional(VK_FORMAT_R32G32B32A32_SFLOAT)
: std::nullopt)),
runtime->ViewFormats(info.format))),
aspect_mask(ImageAspectMask(info.format)) {
if (IsPixelFormatASTC(info.format) && !runtime->device.IsOptimalAstcSupported()) {
switch (Settings::values.accelerate_astc.GetValue()) {
@@ -1816,9 +1837,7 @@ Image::Image(TextureCacheRuntime& runtime_, const ImageInfo& info_, GPUVAddr gpu
Settings::values.astc_recompression.GetValue() ==
Settings::AstcRecompression::Uncompressed) {
const auto& device = runtime->device.GetLogical();
const VkFormat storage_format = WillUseWidenedAstcFormat(runtime->device, info)
? VK_FORMAT_R32G32B32A32_SFLOAT
: VK_FORMAT_A8B8G8R8_UNORM_PACK32;
const VkFormat storage_format = VK_FORMAT_A8B8G8R8_UNORM_PACK32;
for (s32 level = 0; level < info.resources.levels; ++level) {
storage_image_views[level] =
MakeStorageView(device, level, *original_image, storage_format);
@@ -1892,9 +1911,11 @@ void Image::UploadMemory(VkBuffer buffer, VkDeviceSize offset,
ScaleDown(true);
}
const bool wants_msaa_upload = info.num_samples > 1
&& (aspect_mask & VK_IMAGE_ASPECT_COLOR_BIT) != 0
const bool is_color_upload = (aspect_mask & VK_IMAGE_ASPECT_COLOR_BIT) != 0
&& !VideoCore::Surface::IsPixelFormatInteger(info.format);
const bool is_depth_upload = (aspect_mask & VK_IMAGE_ASPECT_DEPTH_BIT) != 0;
const bool wants_msaa_upload =
info.num_samples > 1 && (is_color_upload || is_depth_upload);
if (wants_msaa_upload) {
ImageInfo temp_info = info;
@@ -1933,10 +1954,10 @@ void Image::UploadMemory(VkBuffer buffer, VkDeviceSize offset,
image_copies.push_back(image_copy);
}
runtime->TransitionImageLayout(*this);
runtime->blit_image_helper.CopyMSAA(runtime->render_pass_cache, Handle(), info.format,
temp_vk_image, info.format, info.num_samples,
image_copies, false);
initialized = true;
runtime->pending_msaa_images.emplace_back(scheduler->CurrentTick(), std::move(temp_image));
if (is_rescaled) {
@@ -1947,6 +1968,9 @@ void Image::UploadMemory(VkBuffer buffer, VkDeviceSize offset,
if (info.num_samples > 1) {
LOG_WARNING(Render_Vulkan, "MSAA upload not implemented for format {}", info.format);
if (runtime != nullptr) {
runtime->TransitionImageLayout(*this);
}
if (is_rescaled) {
ScaleUp();
}
@@ -2204,9 +2228,7 @@ VkImageView Image::StorageImageView(s32 level) noexcept {
auto format_info =
MaxwellToVK::SurfaceFormat(runtime->device, FormatType::Optimal, true, info.format);
if (WillUseAcceleratedAstcDecode(runtime->device, info)) {
format_info.format = WillUseWidenedAstcFormat(runtime->device, info)
? VK_FORMAT_R32G32B32A32_SFLOAT
: VK_FORMAT_A8B8G8R8_UNORM_PACK32;
format_info.format = VK_FORMAT_A8B8G8R8_UNORM_PACK32;
}
view = MakeStorageView(runtime->device.GetLogical(), level, *(this->*current_image),
format_info.format);
@@ -2382,11 +2404,7 @@ ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewI
SanitizeDepthStencilSwizzle(swizzle, device->SupportsDepthStencilSwizzleOne());
}
}
uses_widened_astc_format = WillUseWidenedAstcFormat(*device, image.info);
auto format_info = MaxwellToVK::SurfaceFormat(*device, FormatType::Optimal, true, format);
if (uses_widened_astc_format) {
format_info.format = VK_FORMAT_R32G32B32A32_SFLOAT;
}
if (device->ApiVersion() >= VK_API_VERSION_1_3) {
const VkFormatProperties3 properties3 =
device->GetPhysical().GetFormatProperties3(format_info.format);
@@ -2529,14 +2547,12 @@ VkImageView ImageView::StorageView(Shader::TextureType texture_type,
Shader::ImageFormat image_format) {
if (image_handle) {
if (image_format == Shader::ImageFormat::Typeless) {
if (!typeless_storage_view) {
auto& view{typeless_storage_views[static_cast<size_t>(texture_type)]};
if (!view) {
auto info = MaxwellToVK::SurfaceFormat(*device, FormatType::Optimal, true, format);
if (uses_widened_astc_format) {
info.format = VK_FORMAT_R32G32B32A32_SFLOAT;
}
typeless_storage_view = MakeView(info.format, VK_IMAGE_ASPECT_COLOR_BIT, texture_type);
view = MakeView(info.format, VK_IMAGE_ASPECT_COLOR_BIT, texture_type);
}
return *typeless_storage_view;
return *view;
}
const bool is_signed = image_format == Shader::ImageFormat::R8_SINT
|| image_format == Shader::ImageFormat::R16_SINT;
@@ -60,10 +60,22 @@ public:
void TickFrame();
u64 CurrentSyncPoint() const noexcept;
u64 CompletedSyncPoint() const;
void WaitSyncPoint(u64 sync_point);
u64 GetDeviceLocalMemory() const;
u64 GetDeviceMemoryUsage() const;
u64 GetDeviceAllocationUsage() const;
bool CanReportAllocationUsage() const noexcept {
return true;
}
bool CanReportMemoryUsage() const;
std::optional<size_t> GetSamplerHeapBudget() const;
@@ -156,6 +168,7 @@ public:
std::array<vk::Buffer, indexing_slots> buffers{};
std::vector<std::pair<u64, vk::Image>> pending_msaa_images;
ankerl::unordered_dense::map<VkImage, ResolveShadow> resolve_shadows;
ankerl::unordered_dense::set<u64> unsupported_msaa_resolves;
};
class Framebuffer {
@@ -426,7 +439,7 @@ private:
std::array<vk::ImageView, Shader::NUM_TEXTURE_TYPES> image_views;
std::optional<StorageViews> storage_views;
vk::ImageView typeless_storage_view;
std::array<vk::ImageView, Shader::NUM_TEXTURE_TYPES> typeless_storage_views;
vk::ImageView depth_view;
vk::ImageView stencil_view;
vk::ImageView color_view;
@@ -436,7 +449,6 @@ private:
VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT;
u32 buffer_size = 0;
bool uses_widened_astc_format = false;
bool supports_depth_comparison = false;
};
@@ -487,6 +499,7 @@ struct TextureCacheParams {
static constexpr bool HAS_EMULATED_COPIES = false;
static constexpr bool HAS_DEVICE_MEMORY_INFO = true;
static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = true;
static constexpr bool HAS_TIMELINE_SYNC_POINTS = true;
using Runtime = Vulkan::TextureCacheRuntime;
using Image = Vulkan::Image;
@@ -16,8 +16,9 @@
namespace Vulkan {
UpdateDescriptorQueue::UpdateDescriptorQueue(const Device& device_)
: device{device_}
UpdateDescriptorQueue::UpdateDescriptorQueue(const Device& device_, size_t frame_payload_size_)
: device{device_}, frame_payload_size{frame_payload_size_},
payload(frame_payload_size_ * FRAMES_IN_FLIGHT)
{
payload_start = payload.data();
payload_cursor = payload.data();
@@ -29,19 +30,19 @@ void UpdateDescriptorQueue::TickFrame() {
if (++frame_index >= FRAMES_IN_FLIGHT) {
frame_index = 0;
}
payload_start = payload.data() + frame_index * FRAME_PAYLOAD_SIZE;
payload_start = payload.data() + frame_index * frame_payload_size;
payload_cursor = payload_start;
}
void UpdateDescriptorQueue::Acquire(Scheduler& scheduler, size_t required_entries) {
static constexpr size_t DEFAULT_REQUIRED_ENTRIES = 0x400;
const size_t reserve = required_entries > 0 ? required_entries : DEFAULT_REQUIRED_ENTRIES;
ASSERT_MSG(reserve < FRAME_PAYLOAD_SIZE, "Descriptor reservation {} >= frame capacity {}",
reserve, FRAME_PAYLOAD_SIZE);
ASSERT_MSG(reserve < frame_payload_size, "Descriptor reservation {} >= frame capacity {}",
reserve, frame_payload_size);
const size_t used = static_cast<size_t>(std::distance(payload_start, payload_cursor));
if (used + reserve >= FRAME_PAYLOAD_SIZE) {
if (used + reserve >= frame_payload_size) {
LOG_WARNING(Render_Vulkan, "Payload overflow (used={}, reserve={}, capacity={})",
used, reserve, FRAME_PAYLOAD_SIZE);
used, reserve, frame_payload_size);
scheduler.WaitWorker();
payload_cursor = payload_start;
}
@@ -6,8 +6,8 @@
#pragma once
#include <array>
#include <variant>
#include <vector>
#include "video_core/vulkan_common/vulkan_wrapper.h"
namespace Vulkan {
@@ -30,11 +30,12 @@ class UpdateDescriptorQueue final {
// This should be plenty for the vast majority of cases. Most desktop platforms only
// provide up to 3 swapchain images.
static constexpr size_t FRAMES_IN_FLIGHT = 8;
static constexpr size_t FRAME_PAYLOAD_SIZE = 0x20000;
static constexpr size_t PAYLOAD_SIZE = FRAME_PAYLOAD_SIZE * FRAMES_IN_FLIGHT;
public:
explicit UpdateDescriptorQueue(const Device& device_);
static constexpr size_t GUEST_FRAME_PAYLOAD_SIZE = 0x80000;
static constexpr size_t COMPUTE_FRAME_PAYLOAD_SIZE = 0x20000;
explicit UpdateDescriptorQueue(const Device& device_, size_t frame_payload_size_);
~UpdateDescriptorQueue();
void TickFrame();
@@ -74,11 +75,12 @@ public:
private:
const Device& device;
const size_t frame_payload_size;
size_t frame_index{0};
DescriptorUpdateEntry* payload_cursor = nullptr;
DescriptorUpdateEntry* payload_start = nullptr;
const DescriptorUpdateEntry* upload_start = nullptr;
std::array<DescriptorUpdateEntry, PAYLOAD_SIZE> payload;
std::vector<DescriptorUpdateEntry> payload;
};
// TODO: should these be separate classes instead?
+18 -1
View File
@@ -284,7 +284,24 @@ std::optional<u64> GenericEnvironment::TryFindSize() {
Tegra::Texture::TICEntry GenericEnvironment::ReadTextureInfo(GPUVAddr tic_addr, u32 tic_limit,
bool via_header_index, u32 raw) {
const auto handle{Tegra::Texture::TexturePair(raw, via_header_index)};
ASSERT(handle.first <= tic_limit);
if (handle.first > tic_limit) {
LOG_CRITICAL(Shader,
"TIC index out of range: raw=0x{:08x} tic_index={} tsc_index={} tic_limit={} "
"tic_addr=0x{:x} via_header_index={} stage={} program_base=0x{:x} "
"start_address=0x{:x}",
raw, handle.first, handle.second, tic_limit, tic_addr, via_header_index,
static_cast<u32>(stage), program_base, start_address);
ASSERT(handle.first <= tic_limit);
Tegra::Texture::TICEntry fallback{};
fallback.format.Assign(Tegra::Texture::TextureFormat::A8B8G8R8);
fallback.r_type.Assign(Tegra::Texture::ComponentType::UNORM);
fallback.g_type.Assign(Tegra::Texture::ComponentType::UNORM);
fallback.b_type.Assign(Tegra::Texture::ComponentType::UNORM);
fallback.a_type.Assign(Tegra::Texture::ComponentType::UNORM);
fallback.texture_type.Assign(Tegra::Texture::TextureType::Texture2D);
fallback.normalized_coords.Assign(1);
return fallback;
}
const GPUVAddr descriptor_addr{tic_addr + handle.first * sizeof(Tegra::Texture::TICEntry)};
Tegra::Texture::TICEntry entry;
gpu_memory->ReadBlock(descriptor_addr, &entry, sizeof(entry));
+181 -98
View File
@@ -58,23 +58,9 @@ TextureCache<P>::TextureCache(Runtime& runtime_, Tegra::MaxwellDeviceMemoryManag
void(slot_samplers.insert(runtime, sampler_descriptor));
if constexpr (HAS_DEVICE_MEMORY_INFO) {
const s64 device_local_memory = static_cast<s64>(runtime.GetDeviceLocalMemory());
const s64 min_spacing_expected = device_local_memory - 1_GiB;
const s64 min_spacing_critical = device_local_memory - 512_MiB;
const s64 mem_threshold = (std::min)(device_local_memory, TARGET_THRESHOLD);
const s64 min_vacancy_expected = (6 * mem_threshold) / 10;
const s64 min_vacancy_critical = (2 * mem_threshold) / 10;
expected_memory = static_cast<u64>(
(std::max)((std::min)(device_local_memory - min_vacancy_expected, min_spacing_expected),
DEFAULT_EXPECTED_MEMORY));
critical_memory = static_cast<u64>(
(std::max)((std::min)(device_local_memory - min_vacancy_critical, min_spacing_critical),
DEFAULT_CRITICAL_MEMORY));
minimum_memory = static_cast<u64>((device_local_memory - mem_threshold) / 2);
memory_budget = runtime.GetDeviceLocalMemory();
} else {
expected_memory = DEFAULT_EXPECTED_MEMORY + 512_MiB;
critical_memory = DEFAULT_CRITICAL_MEMORY + 1_GiB;
minimum_memory = 0;
memory_budget = FALLBACK_MEMORY_BUDGET;
}
const bool gpu_unswizzle_enabled = Settings::values.gpu_unswizzle_enabled.GetValue();
@@ -114,71 +100,154 @@ TextureCache<P>::TextureCache(Runtime& runtime_, Tegra::MaxwellDeviceMemoryManag
}
template <class P>
void TextureCache<P>::RunGarbageCollector() {
bool high_priority_mode = false;
bool aggressive_mode = false;
u64 ticks_to_destroy = 0;
size_t num_iterations = 0;
const auto Configure = [&](bool allow_aggressive) {
high_priority_mode = total_used_memory >= expected_memory;
aggressive_mode = allow_aggressive && total_used_memory >= critical_memory;
ticks_to_destroy = aggressive_mode ? 10ULL : high_priority_mode ? 25ULL : 50ULL;
num_iterations = aggressive_mode ? 40 : (high_priority_mode ? 20 : 10);
};
const auto Cleanup = [this, &num_iterations, &high_priority_mode, &aggressive_mode](ImageId image_id) {
if (num_iterations == 0) {
return true;
}
--num_iterations;
auto& image = slot_images[image_id];
if (True(image.flags & ImageFlagBits::IsDecoding)) {
return false;
}
const bool must_download = image.IsSafeDownload() && False(image.flags & ImageFlagBits::BadOverlap);
if ((!aggressive_mode && True(image.flags & ImageFlagBits::CostlyLoad)) || (!high_priority_mode && must_download)) {
return false;
}
if (must_download) {
auto map = runtime.DownloadStagingBuffer(image.unswizzled_size_bytes);
const auto copies = FixSmallVectorADL(FullDownloadCopies(image.info));
image.DownloadMemory(map, copies);
runtime.Finish();
SwizzleImage(*gpu_memory, image.gpu_addr, image.info, copies, map.mapped_span, swizzle_data_buffer);
}
if (True(image.flags & ImageFlagBits::Tracked)) {
UntrackImage(image, image_id);
}
UnregisterImage(image_id);
DeleteImage(image_id, image.scale_tick > frame_tick + 5);
if (aggressive_mode && total_used_memory < critical_memory) {
num_iterations >>= 2;
aggressive_mode = false;
} else if (high_priority_mode && total_used_memory < expected_memory) {
num_iterations >>= 1;
high_priority_mode = false;
}
return false;
};
Configure(false);
lru_cache.ForEachItemBelow(frame_tick - ticks_to_destroy, Cleanup);
if (total_used_memory >= critical_memory) {
Configure(true);
lru_cache.ForEachItemBelow(frame_tick - ticks_to_destroy, Cleanup);
void TextureCache<P>::QueueEvictionDownload(Image& image) {
auto copies = FullDownloadCopies(image.info);
auto staging = runtime.DownloadStagingBuffer(image.unswizzled_size_bytes, true);
image.DownloadMemory(staging, FixSmallVectorADL(copies));
pending_eviction_downloads.push_back(PendingEvictionDownload{
.staging = staging,
.gpu_memory = gpu_memory,
.copies = std::move(copies),
.info = image.info,
.gpu_addr = image.gpu_addr,
.sync_point = runtime.CurrentSyncPoint(),
});
}
template <class P>
void TextureCache<P>::TickEvictionDownloads(u64 completed_sync_point) {
while (!pending_eviction_downloads.empty() &&
pending_eviction_downloads.front().sync_point <= completed_sync_point) {
auto& entry = pending_eviction_downloads.front();
SwizzleImage(*entry.gpu_memory, entry.gpu_addr, entry.info, FixSmallVectorADL(entry.copies),
entry.staging.mapped_span.subspan(entry.staging.offset), swizzle_data_buffer);
runtime.FreeDeferredStagingBuffer(entry.staging);
pending_eviction_downloads.pop_front();
}
}
template <class P>
void TextureCache<P>::FlushEvictionDownloads() {
if (pending_eviction_downloads.empty()) {
return;
}
const u64 last_sync_point = pending_eviction_downloads.back().sync_point;
runtime.WaitSyncPoint(last_sync_point);
TickEvictionDownloads(last_sync_point);
}
template <class P>
u64 TextureCache<P>::ImageSizeBytes(const ImageBase& image) {
u64 tentative_size = (std::max)(image.guest_size_bytes, image.unswizzled_size_bytes);
if ((IsPixelFormatASTC(image.info.format) &&
True(image.flags & ImageFlagBits::AcceleratedUpload)) ||
True(image.flags & ImageFlagBits::Converted)) {
tentative_size = TranscodedAstcSize(tentative_size, image.info.format);
}
u64 size = Common::AlignUp(tentative_size, 1024);
if (image.HasScaled()) {
size += GetScaledImageSizeBytes(image);
}
return size;
}
template <class P>
u64 TextureCache<P>::DeviceUsage(bool force_refresh) {
if (!runtime.CanReportAllocationUsage()) {
return total_used_memory;
}
if (force_refresh || usage_refresh_countdown == 0) {
cached_device_usage = runtime.GetDeviceAllocationUsage();
usage_refresh_countdown = USAGE_REFRESH_INTERVAL;
} else {
--usage_refresh_countdown;
}
return cached_device_usage;
}
template <class P>
u64 TextureCache<P>::ReclaimMemory(u64 target_bytes, bool allow_download) {
if (target_bytes == 0 || in_reclaim) {
return 0;
}
in_reclaim = true;
const u64 drain_point = runtime.CompletedSyncPoint();
TickEvictionDownloads(drain_point);
sentenced_images.Reclaim(drain_point);
sentenced_image_view.Reclaim(drain_point);
sentenced_framebuffers.Reclaim(drain_point);
u64 freed = 0;
const auto evict = [&](ImageId image_id) {
if (freed >= target_bytes) {
return true;
}
auto& image = slot_images[image_id];
if (True(image.flags & ImageFlagBits::IsDecoding)) {
return false;
}
const bool must_download =
image.IsSafeDownload() && False(image.flags & ImageFlagBits::BadOverlap);
bool queued_download = false;
if (must_download) {
if constexpr (HAS_TIMELINE_SYNC_POINTS) {
if (!allow_download) {
return false;
}
QueueEvictionDownload(image);
queued_download = true;
} else {
return false;
}
}
const u64 image_bytes = ImageSizeBytes(image);
if (True(image.flags & ImageFlagBits::Tracked)) {
UntrackImage(image, image_id);
}
UnregisterImage(image_id);
DeleteImage(image_id, !queued_download && image.scale_tick > frame_tick + 5);
freed += image_bytes;
return false;
};
const u64 cold_tick =
frame_tick > RECLAIM_GUARD_FRAMES ? frame_tick - RECLAIM_GUARD_FRAMES : 0;
lru_cache.ForEachItemBelow(cold_tick, evict);
if (freed < target_bytes) {
lru_cache.ForEachItemBelow(frame_tick > 0 ? frame_tick - 1 : 0, evict);
}
const u64 exit_point = runtime.CompletedSyncPoint();
sentenced_images.Reclaim(exit_point);
sentenced_image_view.Reclaim(exit_point);
sentenced_framebuffers.Reclaim(exit_point);
in_reclaim = false;
usage_refresh_countdown = 0;
reclaim_stalled = freed == 0;
return freed;
}
template <class P>
void TextureCache<P>::EnsureHeadroom(bool allow_download) {
if (reclaim_stalled) {
return;
}
const u64 limit = memory_budget > RECLAIM_HEADROOM ? memory_budget - RECLAIM_HEADROOM : 0;
const u64 usage = DeviceUsage(false);
if (usage <= limit) {
return;
}
const u64 target = (limit / 100) * RECLAIM_TARGET_PERCENT;
ReclaimMemory((std::min)(usage - target, total_used_memory), allow_download);
}
template <class P>
void TextureCache<P>::TickFrame() {
// If we can obtain the memory info, use it instead of the estimate.
if (runtime.CanReportMemoryUsage()) {
total_used_memory = runtime.GetDeviceMemoryUsage();
}
if (total_used_memory > minimum_memory) {
RunGarbageCollector();
}
sentenced_images.Tick();
sentenced_framebuffers.Tick();
sentenced_image_view.Tick();
usage_refresh_countdown = 0;
reclaim_stalled = false;
EnsureHeadroom(true);
const u64 completed_sync_point = runtime.CompletedSyncPoint();
TickEvictionDownloads(completed_sync_point);
sentenced_images.Reclaim(completed_sync_point);
sentenced_framebuffers.Reclaim(completed_sync_point);
sentenced_image_view.Reclaim(completed_sync_point);
TickAsyncDecode();
TickAsyncUnswizzle();
@@ -596,6 +665,7 @@ void TextureCache<P>::WriteMemory(DAddr cpu_addr, size_t size) {
template <class P>
void TextureCache<P>::DownloadMemory(DAddr cpu_addr, size_t size) {
FlushEvictionDownloads();
boost::container::small_vector<ImageId, 16> images;
ForEachImageInRegion(cpu_addr, size, [&images](ImageId image_id, ImageBase& image) {
if (!image.IsSafeDownload()) {
@@ -894,6 +964,7 @@ void TextureCache<P>::CommitAsyncFlushes() {
template <class P>
void TextureCache<P>::PopAsyncFlushes() {
TickEvictionDownloads(runtime.CompletedSyncPoint());
if (committed_downloads.empty()) {
return;
}
@@ -1294,8 +1365,9 @@ void TextureCache<P>::InvalidateScale(Image& image) {
}
RemoveImageViewReferences(image_view_ids);
RemoveFramebuffers(image_view_ids);
const u64 sync_point = runtime.CurrentSyncPoint();
for (const ImageViewId image_view_id : image_view_ids) {
sentenced_image_view.Push(std::move(slot_image_views[image_view_id]));
sentenced_image_view.Push(std::move(slot_image_views[image_view_id]), sync_point);
slot_image_views.erase(image_view_id);
}
image.image_view_ids.clear();
@@ -1331,6 +1403,7 @@ void TextureCache<P>::QueueAsyncDecode(Image& image, ImageId image_id) {
LOG_INFO(HW_GPU, "Queuing async texture decode");
image.flags |= ImageFlagBits::IsDecoding;
runtime.TransitionImageLayout(image);
auto decode = std::make_unique<AsyncDecodeContext>();
auto* decode_ptr = decode.get();
decode->image_id = image_id;
@@ -1363,6 +1436,7 @@ void TextureCache<P>::QueueAsyncUnswizzle(Image& image, ImageId image_id) {
}
image.flags |= ImageFlagBits::IsDecoding;
runtime.TransitionImageLayout(image);
unswizzle_queue.push_back({
.image_id = image_id,
@@ -1523,6 +1597,7 @@ ImageId TextureCache<P>::InsertImage(const ImageInfo& info, GPUVAddr gpu_addr,
template <class P>
ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, DAddr cpu_addr) {
EnsureHeadroom(false);
ImageInfo new_info = info;
const size_t size_bytes = CalculateGuestSizeInBytes(new_info);
const bool broken_views = runtime.HasBrokenTextureViewFormats();
@@ -1631,7 +1706,28 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, DA
for (const ImageId overlap_id : join_ignore_textures) {
Image& overlap = slot_images[overlap_id];
if (True(overlap.flags & ImageFlagBits::GpuModified)) {
UNIMPLEMENTED();
if (new_image.TryFindBase(overlap.gpu_addr) &&
(!can_rescale || ImageCanRescale(overlap))) {
if (can_rescale) {
ScaleUp(overlap);
} else {
ScaleDown(overlap);
}
join_copies_to_do.emplace_back(JoinCopy{false, overlap_id});
continue;
}
if (overlap.IsSafeDownload() && False(overlap.flags & ImageFlagBits::BadOverlap) &&
gpu_memory->GpuToCpuAddress(overlap.gpu_addr).has_value()) {
QueueEvictionDownload(overlap);
} else {
LOG_WARNING(HW_GPU,
"Dropping GPU modified overlap, contents are not recoverable: "
"gpu_addr=0x{:x} format={} size={}x{}x{} levels={} layers={}",
overlap.gpu_addr, static_cast<int>(overlap.info.format),
overlap.info.size.width, overlap.info.size.height,
overlap.info.size.depth, overlap.info.resources.levels,
overlap.info.resources.layers);
}
}
if (True(overlap.flags & ImageFlagBits::Tracked)) {
UntrackImage(overlap, overlap_id);
@@ -2185,13 +2281,7 @@ void TextureCache<P>::RegisterImage(ImageId image_id) {
ASSERT_MSG(False(image.flags & ImageFlagBits::Registered),
"Trying to register an already registered image");
image.flags |= ImageFlagBits::Registered;
u64 tentative_size = (std::max)(image.guest_size_bytes, image.unswizzled_size_bytes);
if ((IsPixelFormatASTC(image.info.format) &&
True(image.flags & ImageFlagBits::AcceleratedUpload)) ||
True(image.flags & ImageFlagBits::Converted)) {
tentative_size = TranscodedAstcSize(tentative_size, image.info.format);
}
total_used_memory += Common::AlignUp(tentative_size, 1024);
total_used_memory += ImageSizeBytes(image);
image.lru_index = lru_cache.Insert(image_id, frame_tick);
ForEachGPUPage(image.gpu_addr, image.guest_size_bytes, [this, image_id](u64 page) {
@@ -2354,16 +2444,7 @@ void TextureCache<P>::UntrackImage(ImageBase& image, ImageId image_id) {
template <class P>
void TextureCache<P>::DeleteImage(ImageId image_id, bool immediate_delete) {
ImageBase& image = slot_images[image_id];
if (image.HasScaled()) {
total_used_memory -= GetScaledImageSizeBytes(image);
}
u64 tentative_size = (std::max)(image.guest_size_bytes, image.unswizzled_size_bytes);
if ((IsPixelFormatASTC(image.info.format) &&
True(image.flags & ImageFlagBits::AcceleratedUpload)) ||
True(image.flags & ImageFlagBits::Converted)) {
tentative_size = TranscodedAstcSize(tentative_size, image.info.format);
}
total_used_memory -= Common::AlignUp(tentative_size, 1024);
total_used_memory -= std::min<u64>(total_used_memory, ImageSizeBytes(image));
const GPUVAddr gpu_addr = image.gpu_addr;
const auto alloc_it = image_allocs_table.find(gpu_addr);
if (alloc_it == image_allocs_table.end()) {
@@ -2417,14 +2498,15 @@ void TextureCache<P>::DeleteImage(ImageId image_id, bool immediate_delete) {
ASSERT_MSG(num_removed_overlaps == 1, "Invalid number of removed overlapps: {}",
num_removed_overlaps);
}
const u64 sync_point = runtime.CurrentSyncPoint();
for (const ImageViewId image_view_id : image_view_ids) {
if (!immediate_delete) {
sentenced_image_view.Push(std::move(slot_image_views[image_view_id]));
sentenced_image_view.Push(std::move(slot_image_views[image_view_id]), sync_point);
}
slot_image_views.erase(image_view_id);
}
if (!immediate_delete) {
sentenced_images.Push(std::move(slot_images[image_id]));
sentenced_images.Push(std::move(slot_images[image_id]), sync_point);
}
slot_images.erase(image_id);
@@ -2470,7 +2552,8 @@ void TextureCache<P>::RemoveFramebuffers(std::span<const ImageViewId> removed_vi
last_framebuffer_id = {};
last_framebuffer_serial = 0;
}
sentenced_framebuffers.Push(std::move(slot_framebuffers[framebuffer_id]));
sentenced_framebuffers.Push(std::move(slot_framebuffers[framebuffer_id]),
runtime.CurrentSyncPoint());
it = framebuffers.erase(it);
} else {
++it;
@@ -30,7 +30,7 @@
#include "common/thread_worker.h"
#include "video_core/compatible_formats.h"
#include "video_core/control/channel_state_cache.h"
#include "video_core/delayed_destruction_ring.h"
#include "video_core/deferred_destruction_queue.h"
#include "video_core/engines/fermi_2d.h"
#include "video_core/surface.h"
#include "video_core/texture_cache/descriptor_table.h"
@@ -108,18 +108,20 @@ class TextureCache : public VideoCommon::ChannelSetupCaches<TextureCacheChannelI
static constexpr bool HAS_DEVICE_MEMORY_INFO = P::HAS_DEVICE_MEMORY_INFO;
/// True when the API can do asynchronous texture downloads.
static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = P::IMPLEMENTS_ASYNC_DOWNLOADS;
static constexpr bool HAS_TIMELINE_SYNC_POINTS = P::HAS_TIMELINE_SYNC_POINTS;
static constexpr size_t UNSET_CHANNEL{(std::numeric_limits<size_t>::max)()};
#ifdef YUZU_LEGACY
static constexpr s64 TARGET_THRESHOLD = 3_GiB;
static constexpr u64 RECLAIM_HEADROOM = 384_MiB;
#else
static constexpr s64 TARGET_THRESHOLD = 4_GiB;
static constexpr u64 RECLAIM_HEADROOM = 512_MiB;
#endif
static constexpr s64 DEFAULT_EXPECTED_MEMORY = 1_GiB + 125_MiB;
static constexpr s64 DEFAULT_CRITICAL_MEMORY = 1_GiB + 625_MiB;
static constexpr size_t GC_EMERGENCY_COUNTS = 2;
static constexpr u64 FALLBACK_MEMORY_BUDGET = 2_GiB;
static constexpr u32 USAGE_REFRESH_INTERVAL = 16;
static constexpr u64 RECLAIM_GUARD_FRAMES = 8;
static constexpr u64 RECLAIM_TARGET_PERCENT = 88;
using Runtime = typename P::Runtime;
using Image = typename P::Image;
@@ -154,6 +156,8 @@ public:
/// Notify the cache that a new frame has been queued
void TickFrame();
u64 ReclaimMemory(u64 target_bytes, bool allow_download);
/// Return a constant reference to the given image view id
[[nodiscard]] const ImageView& GetImageView(ImageViewId id) const noexcept;
@@ -293,8 +297,17 @@ private:
void OnGPUASRegister(size_t map_id) final override;
/// Runs the Garbage Collector.
void RunGarbageCollector();
u64 ImageSizeBytes(const ImageBase& image);
u64 DeviceUsage(bool force_refresh);
void EnsureHeadroom(bool allow_download);
void QueueEvictionDownload(Image& image);
void TickEvictionDownloads(u64 completed_sync_point);
void FlushEvictionDownloads();
/// Find or create an image view in the guest descriptor table
ImageViewId VisitImageView(u32 index, bool compute);
@@ -451,9 +464,11 @@ private:
bool has_deleted_images = false;
bool is_rescaling = false;
u64 total_used_memory = 0;
u64 minimum_memory;
u64 expected_memory;
u64 critical_memory;
u64 memory_budget = 0;
u64 cached_device_usage = 0;
u32 usage_refresh_countdown = 0;
bool in_reclaim = false;
bool reclaim_stalled = false;
size_t gpu_unswizzle_maxsize = 0;
size_t swizzle_chunk_size = 0;
u32 swizzle_slices_per_batch = 0;
@@ -491,14 +506,19 @@ private:
};
Common::LeastRecentlyUsedCache<LRUItemParams> lru_cache;
#ifdef YUZU_LEGACY
static constexpr size_t TICKS_TO_DESTROY = 6;
#else
static constexpr size_t TICKS_TO_DESTROY = 8;
#endif
DelayedDestructionRing<Image, TICKS_TO_DESTROY> sentenced_images;
DelayedDestructionRing<ImageView, TICKS_TO_DESTROY> sentenced_image_view;
DelayedDestructionRing<Framebuffer, TICKS_TO_DESTROY> sentenced_framebuffers;
DeferredDestructionQueue<Image> sentenced_images;
DeferredDestructionQueue<ImageView> sentenced_image_view;
DeferredDestructionQueue<Framebuffer> sentenced_framebuffers;
struct PendingEvictionDownload {
AsyncBuffer staging;
Tegra::MemoryManager* gpu_memory;
boost::container::small_vector<VideoCommon::BufferImageCopy, 16> copies;
VideoCommon::ImageInfo info;
GPUVAddr gpu_addr;
u64 sync_point;
};
std::deque<PendingEvictionDownload> pending_eviction_downloads;
ankerl::unordered_dense::map<GPUVAddr, ImageAllocId> image_allocs_table;
@@ -509,7 +529,8 @@ private:
u64 frame_tick = 0;
u64 last_sampler_gc_frame = (std::numeric_limits<u64>::max)();
Common::ThreadWorker texture_decode_worker{1, "TextureDecoder"};
Common::ThreadWorker texture_decode_worker{1, "TextureDecoder", {},
Common::ThreadPlacement::Background};
std::vector<std::unique_ptr<AsyncDecodeContext>> async_decodes;
std::deque<PendingUnswizzle> unswizzle_queue;
+2 -2
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
@@ -747,7 +747,7 @@ boost::container::small_vector<ImageCopy, 16> MakeShrinkImageCopies(const ImageI
const bool is_dst_3d = dst.type == ImageType::e3D;
if (is_dst_3d) {
ASSERT(src.type == ImageType::e3D);
ASSERT(src.type == ImageType::e3D || src.resources.layers == 1);
ASSERT(src.resources.levels == 1);
}
const bool both_2d{src.type == ImageType::e2D && dst.type == ImageType::e2D};
+3 -2
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
@@ -10,7 +10,8 @@ namespace Tegra::Texture {
Common::ThreadWorker& GetThreadWorkers() {
static Common::ThreadWorker workers{(std::max)(std::thread::hardware_concurrency(), 2U) / 2,
"ImageTranscode"};
"ImageTranscode", {},
Common::ThreadPlacement::Background};
return workers;
}
+57 -5
View File
@@ -5,6 +5,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include <algorithm>
#include <array>
#include <bitset>
#include <chrono>
#include <optional>
@@ -732,7 +733,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
.device = *logical,
.preferredLargeHeapBlockSize = is_integrated
? (64u * 1024u * 1024u)
: (256u * 1024u * 1024u),
: (128u * 1024u * 1024u),
.pAllocationCallbacks = nullptr,
.pDeviceMemoryCallbacks = nullptr,
.pHeapSizeLimit = nullptr,
@@ -744,12 +745,32 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
vk::Check(vmaCreateAllocator(&allocator_info, &allocator));
{
const auto& limits = properties.properties.limits;
LOG_INFO(Render_Vulkan, "MSAA sample count support:");
LOG_INFO(Render_Vulkan, " framebufferColorSampleCounts: {:#x}",
limits.framebufferColorSampleCounts);
LOG_INFO(Render_Vulkan, " framebufferDepthSampleCounts: {:#x}",
limits.framebufferDepthSampleCounts);
LOG_INFO(Render_Vulkan, " framebufferStencilSampleCounts: {:#x}",
limits.framebufferStencilSampleCounts);
LOG_INFO(Render_Vulkan, " sampledImageColorSampleCounts: {:#x}",
limits.sampledImageColorSampleCounts);
LOG_INFO(Render_Vulkan, " sampledImageDepthSampleCounts: {:#x}",
limits.sampledImageDepthSampleCounts);
LOG_INFO(Render_Vulkan, " sampledImageIntegerSampleCounts:{:#x}",
limits.sampledImageIntegerSampleCounts);
LOG_INFO(Render_Vulkan, " storageImageSampleCounts: {:#x}",
limits.storageImageSampleCounts);
}
// Initialize GPU logging if enabled
InitializeGPULogging();
}
Device::~Device() {
ShutdownGPULogging();
vk::FlushDeletionQueue();
vmaDestroyAllocator(allocator);
}
@@ -817,7 +838,8 @@ bool Device::ComputeIsOptimalAstcSupported() const {
VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
};
if (!features.features.textureCompressionASTC_LDR) {
if (!features.features.textureCompressionASTC_LDR ||
!features.texture_compression_astc_hdr.textureCompressionASTC_HDR) {
return false;
}
const auto format_feature_usage{VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
@@ -1209,10 +1231,20 @@ void Device::RemoveUnsuitableExtensions() {
RemoveExtensionFeatureIfUnsuitable(extensions.depth_bias_control, features.depth_bias_control,
VK_EXT_DEPTH_BIAS_CONTROL_EXTENSION_NAME);
// VK_EXT_depth_clamp_zero_one
extensions.depth_clamp_zero_one = features.depth_clamp_zero_one.depthClampZeroOne;
RemoveExtensionFeatureIfUnsuitable(extensions.depth_clamp_zero_one,
features.depth_clamp_zero_one,
VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME);
// VK_EXT_depth_clip_control
extensions.depth_clip_control = features.depth_clip_control.depthClipControl;
RemoveExtensionFeatureIfUnsuitable(extensions.depth_clip_control, features.depth_clip_control,
VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME);
// VK_EXT_depth_clip_enable
extensions.depth_clip_enable = features.depth_clip_enable.depthClipEnable;
RemoveExtensionFeatureIfUnsuitable(extensions.depth_clip_enable, features.depth_clip_enable,
VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME);
// VK_EXT_extended_dynamic_state
extensions.extended_dynamic_state = features.extended_dynamic_state.extendedDynamicState;
@@ -1444,6 +1476,23 @@ std::optional<size_t> Device::GetSamplerHeapBudget() const {
return sampler_heap_budget;
}
Device::MemoryBudgetInfo Device::GetMemoryBudgetInfo() const {
std::array<VmaBudget, VK_MAX_MEMORY_HEAPS> budgets{};
vmaGetHeapBudgets(allocator, budgets.data());
MemoryBudgetInfo info{};
for (const size_t heap : valid_heap_memory) {
info.usage += budgets[heap].usage;
info.budget += budgets[heap].budget;
info.block_bytes += budgets[heap].statistics.blockBytes;
info.allocation_bytes += budgets[heap].statistics.allocationBytes;
}
return info;
}
void Device::TickAllocatorFrame() const {
vmaSetCurrentFrameIndex(allocator, ++allocator_frame_index);
}
u64 Device::GetDeviceMemoryUsage() const {
VkPhysicalDeviceMemoryBudgetPropertiesEXT budget;
budget.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT;
@@ -1493,9 +1542,12 @@ void Device::CollectPhysicalMemoryInfo() {
device_access_memory -= reserve_memory;
if (Settings::values.vram_usage_mode.GetValue() != Settings::VramUsageMode::Aggressive) {
// Account for resolution scaling in memory limits
const size_t normal_memory = 6_GiB;
const size_t scaler_memory = 1_GiB * Settings::values.resolution_info.ScaleUp(1);
device_access_memory = std::min<u64>(device_access_memory, normal_memory + scaler_memory);
const u64 normal_memory = 6_GiB;
const u64 scaler_memory = 1_GiB * Settings::values.resolution_info.ScaleUp(1);
const u64 baseline = normal_memory + scaler_memory;
const u64 proportional = (device_access_memory / 4) * 3;
device_access_memory =
std::min<u64>(device_access_memory, std::max<u64>(baseline, proportional));
}
}
}
+61 -2
View File
@@ -54,7 +54,9 @@ VK_DEFINE_HANDLE(VmaAllocator)
FEATURE(EXT, ColorWriteEnable, COLOR_WRITE_ENABLE, color_write_enable) \
FEATURE(EXT, CustomBorderColor, CUSTOM_BORDER_COLOR, custom_border_color) \
FEATURE(EXT, DepthBiasControl, DEPTH_BIAS_CONTROL, depth_bias_control) \
FEATURE(EXT, DepthClampZeroOne, DEPTH_CLAMP_ZERO_ONE, depth_clamp_zero_one) \
FEATURE(EXT, DepthClipControl, DEPTH_CLIP_CONTROL, depth_clip_control) \
FEATURE(EXT, DepthClipEnable, DEPTH_CLIP_ENABLE, depth_clip_enable) \
FEATURE(EXT, ExtendedDynamicState, EXTENDED_DYNAMIC_STATE, extended_dynamic_state) \
FEATURE(EXT, ExtendedDynamicState2, EXTENDED_DYNAMIC_STATE_2, extended_dynamic_state2) \
FEATURE(EXT, ExtendedDynamicState3, EXTENDED_DYNAMIC_STATE_3, extended_dynamic_state3) \
@@ -255,6 +257,17 @@ public:
return allocator;
}
struct MemoryBudgetInfo {
u64 usage;
u64 budget;
u64 block_bytes;
u64 allocation_bytes;
};
MemoryBudgetInfo GetMemoryBudgetInfo() const;
void TickAllocatorFrame() const;
/// Returns the logical device.
const vk::Device& GetLogical() const {
return logical;
@@ -369,8 +382,7 @@ FN_MAX_LIMIT_LIST
}
bool IsOptimalAstcSupported() const {
return features.features.textureCompressionASTC_LDR &&
features.texture_compression_astc_hdr.textureCompressionASTC_HDR;
return is_optimal_astc_supported;
}
/// Returns true if BCn is natively supported.
@@ -602,6 +614,16 @@ FN_MAX_LIMIT_LIST
return extensions.depth_clip_control;
}
/// Returns true if the device supports VK_EXT_depth_clamp_zero_one.
bool IsExtDepthClampZeroOneSupported() const {
return extensions.depth_clamp_zero_one;
}
/// Returns true if the device supports VK_EXT_depth_clip_enable.
bool IsExtDepthClipEnableSupported() const {
return extensions.depth_clip_enable;
}
/// Returns true if the device supports VK_EXT_depth_bias_control.
bool IsExtDepthBiasControlSupported() const {
return extensions.depth_bias_control;
@@ -734,6 +756,38 @@ FN_MAX_LIMIT_LIST
return features.line_rasterization.stippledRectangularLines != VK_FALSE;
}
VkLineRasterizationModeEXT GetLineRasterizationMode(bool wants_smooth) const {
if (wants_smooth && SupportsSmoothLines()) {
return VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT;
}
if (SupportsRectangularLines()) {
return VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT;
}
return VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT;
}
bool SupportsStippleForMode(VkLineRasterizationModeEXT mode) const {
switch (mode) {
case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT:
return features.line_rasterization.stippledSmoothLines != VK_FALSE;
case VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT:
return features.line_rasterization.stippledBresenhamLines != VK_FALSE;
default:
return features.line_rasterization.stippledRectangularLines != VK_FALSE;
}
}
float ClampLineWidth(float width) const {
if (!features.features.wideLines) {
return 1.0f;
}
const auto& range = properties.properties.limits.lineWidthRange;
if (!(width >= range[0])) {
return range[0];
}
return width > range[1] ? range[1] : width;
}
bool SupportsAlphaToOne() const {
return features.features.alphaToOne != VK_FALSE;
}
@@ -876,6 +930,10 @@ FN_MAX_LIMIT_LIST
u64 GetDeviceMemoryUsage() const;
VkSampleCountFlags GetStorageImageSampleCounts() const {
return properties.properties.limits.storageImageSampleCounts;
}
u32 GetSetsPerPool() const {
return sets_per_pool;
}
@@ -1060,6 +1118,7 @@ private:
private:
VkInstance instance; ///< Vulkan instance.
VmaAllocator allocator; ///< VMA allocator.
mutable u32 allocator_frame_index{};
vk::DeviceDispatch dld; ///< Device function pointers.
vk::PhysicalDevice physical; ///< Physical device.
vk::Device logical; ///< Logical device.
@@ -30,26 +30,6 @@ namespace Vulkan {
// Helpers translating MemoryUsage to flags/usage
[[maybe_unused]] VkMemoryPropertyFlags MemoryUsagePropertyFlags(MemoryUsage usage) {
switch (usage) {
case MemoryUsage::DeviceLocal:
return VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
case MemoryUsage::Upload:
return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
case MemoryUsage::Download:
return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
case MemoryUsage::Stream:
return VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
}
ASSERT_MSG(false, "Invalid memory usage={}", usage);
return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
}
[[nodiscard]] VkMemoryPropertyFlags MemoryUsagePreferredVmaFlags(MemoryUsage usage) {
if (usage == MemoryUsage::Download) {
return VK_MEMORY_PROPERTY_HOST_CACHED_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
@@ -86,125 +66,11 @@ namespace Vulkan {
}
// This avoids calling vkGetBufferMemoryRequirements* directly.
template<typename T>
static VkBuffer GetVkHandleFromBuffer(const T &buf) {
if constexpr (requires { static_cast<VkBuffer>(buf); }) {
return static_cast<VkBuffer>(buf);
} else if constexpr (requires {{ buf.GetHandle() } -> std::convertible_to<VkBuffer>; }) {
return buf.GetHandle();
} else if constexpr (requires {{ buf.Handle() } -> std::convertible_to<VkBuffer>; }) {
return buf.Handle();
} else if constexpr (requires {{ buf.vk_handle() } -> std::convertible_to<VkBuffer>; }) {
return buf.vk_handle();
} else {
static_assert(sizeof(T) == 0, "Cannot extract VkBuffer handle from vk::Buffer");
return VK_NULL_HANDLE;
}
}
} // namespace
//MemoryCommit is now VMA-backed
MemoryCommit::MemoryCommit(VmaAllocator alloc, VmaAllocation a,
const VmaAllocationInfo &info) noexcept
: allocator{alloc}, allocation{a}, memory{info.deviceMemory},
offset{info.offset}, size{info.size}, mapped_ptr{info.pMappedData} {
// Log GPU memory allocation
if (GPU::Logging::IsActive() &&
Settings::values.gpu_log_memory_tracking.GetValue()) {
GPU::Logging::GPULogger::GetInstance().LogMemoryAllocation(
reinterpret_cast<uintptr_t>(memory),
static_cast<u64>(size),
0 // Memory property flags (not easily available from VMA)
);
}
}
MemoryCommit::~MemoryCommit() { Release(); }
MemoryCommit::MemoryCommit(MemoryCommit &&rhs) noexcept
: allocator{std::exchange(rhs.allocator, nullptr)},
allocation{std::exchange(rhs.allocation, nullptr)},
memory{std::exchange(rhs.memory, VK_NULL_HANDLE)},
offset{std::exchange(rhs.offset, 0)},
size{std::exchange(rhs.size, 0)},
mapped_ptr{std::exchange(rhs.mapped_ptr, nullptr)} {}
MemoryCommit &MemoryCommit::operator=(MemoryCommit &&rhs) noexcept {
if (this != &rhs) {
Release();
allocator = std::exchange(rhs.allocator, nullptr);
allocation = std::exchange(rhs.allocation, nullptr);
memory = std::exchange(rhs.memory, VK_NULL_HANDLE);
offset = std::exchange(rhs.offset, 0);
size = std::exchange(rhs.size, 0);
mapped_ptr = std::exchange(rhs.mapped_ptr, nullptr);
}
return *this;
}
std::span<u8> MemoryCommit::Map()
{
if (!allocation) return {};
if (!mapped_ptr) {
if (vmaMapMemory(allocator, allocation, &mapped_ptr) != VK_SUCCESS) return {};
}
const size_t n = static_cast<size_t>(std::min<VkDeviceSize>(size,
(std::numeric_limits<size_t>::max)()));
return std::span<u8>{static_cast<u8 *>(mapped_ptr), n};
}
std::span<const u8> MemoryCommit::Map() const
{
if (!allocation) return {};
if (!mapped_ptr) {
void *p = nullptr;
if (vmaMapMemory(allocator, allocation, &p) != VK_SUCCESS) return {};
const_cast<MemoryCommit *>(this)->mapped_ptr = p;
}
const size_t n = static_cast<size_t>(std::min<VkDeviceSize>(size,
(std::numeric_limits<size_t>::max)()));
return std::span<const u8>{static_cast<const u8 *>(mapped_ptr), n};
}
void MemoryCommit::Unmap()
{
if (allocation && mapped_ptr) {
vmaUnmapMemory(allocator, allocation);
mapped_ptr = nullptr;
}
}
void MemoryCommit::Release() {
if (allocation && allocator) {
// Log GPU memory deallocation
if (GPU::Logging::IsActive() &&
Settings::values.gpu_log_memory_tracking.GetValue() &&
memory != VK_NULL_HANDLE) {
GPU::Logging::GPULogger::GetInstance().LogMemoryDeallocation(
reinterpret_cast<uintptr_t>(memory)
);
}
if (mapped_ptr) {
vmaUnmapMemory(allocator, allocation);
mapped_ptr = nullptr;
}
vmaFreeMemory(allocator, allocation);
}
allocation = nullptr;
allocator = nullptr;
memory = VK_NULL_HANDLE;
offset = 0;
size = 0;
}
MemoryAllocator::MemoryAllocator(const Device &device_)
: device{device_}, allocator{device.GetAllocator()},
properties{device_.GetPhysical().GetMemoryProperties().memoryProperties},
buffer_image_granularity{
device_.GetPhysical().GetProperties().limits.bufferImageGranularity} {
properties{device_.GetPhysical().GetMemoryProperties().memoryProperties} {
// Preserve the previous "RenderDoc small heap" trimming behavior that we had in original vma minus the heap bug
if (device.HasDebuggingToolAttached())
@@ -224,6 +90,21 @@ namespace Vulkan {
MemoryAllocator::~MemoryAllocator() = default;
void MemoryAllocator::SetReclaimCallback(ReclaimCallback callback) {
reclaim_callback = std::move(callback);
vk::SetAllocatorOwnerThread();
}
bool MemoryAllocator::ReclaimAtLeast(u64 hint_bytes) const {
if (!reclaim_callback || in_reclaim) {
return false;
}
in_reclaim = true;
const u64 freed = reclaim_callback(hint_bytes);
in_reclaim = false;
return freed > 0;
}
vk::Image MemoryAllocator::CreateImage(const VkImageCreateInfo &ci) const
{
const VmaAllocationCreateInfo alloc_ci = {
@@ -240,7 +121,26 @@ namespace Vulkan {
VkImage handle{};
VmaAllocation allocation{};
VmaAllocationInfo alloc_info{};
vk::Check(vmaCreateImage(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info));
DEBUG_ASSERT(vk::OnAllocatorOwnerThread());
VkResult res = vmaCreateImage(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info);
if (res != VK_SUCCESS && ReclaimAtLeast(IMAGE_RECLAIM_HINT)) {
res = vmaCreateImage(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info);
}
if (res != VK_SUCCESS) {
auto relaxed_ci = alloc_ci;
relaxed_ci.flags &= ~VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT;
res = vmaCreateImage(allocator, &ci, &relaxed_ci, &handle, &allocation, &alloc_info);
if (res != VK_SUCCESS) {
relaxed_ci.preferredFlags &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
res = vmaCreateImage(allocator, &ci, &relaxed_ci, &handle, &allocation, &alloc_info);
}
}
vk::Check(res);
// Log GPU memory allocation for images
if (GPU::Logging::IsActive() &&
@@ -277,7 +177,28 @@ namespace Vulkan {
VmaAllocation allocation{};
VkMemoryPropertyFlags property_flags{};
vk::Check(vmaCreateBuffer(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info));
DEBUG_ASSERT(vk::OnAllocatorOwnerThread());
VkResult res = vmaCreateBuffer(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info);
if (res != VK_SUCCESS && ReclaimAtLeast(ci.size)) {
res = vmaCreateBuffer(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info);
}
if (res != VK_SUCCESS) {
auto relaxed_ci = alloc_ci;
relaxed_ci.flags &= ~VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT;
res = vmaCreateBuffer(allocator, &ci, &relaxed_ci, &handle, &allocation, &alloc_info);
if (res != VK_SUCCESS &&
(relaxed_ci.preferredFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)) {
relaxed_ci.preferredFlags &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
res = vmaCreateBuffer(allocator, &ci, &relaxed_ci, &handle, &allocation,
&alloc_info);
}
}
vk::Check(res);
vmaGetAllocationMemoryProperties(allocator, allocation, &property_flags);
// Log GPU memory allocation for buffers
@@ -299,77 +220,4 @@ namespace Vulkan {
device.GetDispatchLoader());
}
MemoryCommit MemoryAllocator::Commit(const VkMemoryRequirements &reqs, MemoryUsage usage)
{
const auto vma_usage = MemoryUsageVma(usage);
VmaAllocationCreateInfo ci{};
ci.flags = VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT | MemoryUsageVmaFlags(usage);
ci.usage = vma_usage;
ci.memoryTypeBits = reqs.memoryTypeBits & valid_memory_types;
ci.requiredFlags = 0;
ci.preferredFlags = MemoryUsagePreferredVmaFlags(usage);
VmaAllocation a{};
VmaAllocationInfo info{};
VkResult res = vmaAllocateMemory(allocator, &reqs, &ci, &a, &info);
if (res != VK_SUCCESS) {
// Relax 1: drop budget constraint
auto ci2 = ci;
ci2.flags &= ~VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT;
res = vmaAllocateMemory(allocator, &reqs, &ci2, &a, &info);
// Relax 2: if we preferred DEVICE_LOCAL, drop that preference
if (res != VK_SUCCESS && (ci.preferredFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)) {
auto ci3 = ci2;
ci3.preferredFlags &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
res = vmaAllocateMemory(allocator, &reqs, &ci3, &a, &info);
}
}
vk::Check(res);
return MemoryCommit(allocator, a, info);
}
MemoryCommit MemoryAllocator::Commit(const vk::Buffer &buffer, MemoryUsage usage) {
// Allocate memory appropriate for this buffer automatically
const auto vma_usage = MemoryUsageVma(usage);
VmaAllocationCreateInfo ci{};
ci.flags = VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT | MemoryUsageVmaFlags(usage);
ci.usage = vma_usage;
ci.requiredFlags = 0;
ci.preferredFlags = MemoryUsagePreferredVmaFlags(usage);
ci.pool = VK_NULL_HANDLE;
ci.pUserData = nullptr;
ci.priority = 0.0f;
const VkBuffer raw = *buffer;
VmaAllocation a{};
VmaAllocationInfo info{};
// Let VMA infer memory requirements from the buffer
VkResult res = vmaAllocateMemoryForBuffer(allocator, raw, &ci, &a, &info);
if (res != VK_SUCCESS) {
auto ci2 = ci;
ci2.flags &= ~VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT;
res = vmaAllocateMemoryForBuffer(allocator, raw, &ci2, &a, &info);
if (res != VK_SUCCESS && (ci.preferredFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)) {
auto ci3 = ci2;
ci3.preferredFlags &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
res = vmaAllocateMemoryForBuffer(allocator, raw, &ci3, &a, &info);
}
}
vk::Check(res);
vk::Check(vmaBindBufferMemory2(allocator, a, 0, raw, nullptr));
return MemoryCommit(allocator, a, info);
}
} // namespace Vulkan
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
@@ -6,6 +6,7 @@
#pragma once
#include <functional>
#include <memory>
#include <span>
#include <vector>
@@ -39,51 +40,6 @@ namespace Vulkan {
}
}
/// Ownership handle of a memory commitment (real VMA allocation).
class MemoryCommit {
public:
MemoryCommit() noexcept = default;
MemoryCommit(VmaAllocator allocator, VmaAllocation allocation,
const VmaAllocationInfo &info) noexcept;
~MemoryCommit();
MemoryCommit(const MemoryCommit &) = delete;
MemoryCommit &operator=(const MemoryCommit &) = delete;
MemoryCommit(MemoryCommit &&) noexcept;
MemoryCommit &operator=(MemoryCommit &&) noexcept;
[[nodiscard]] std::span<u8> Map();
[[nodiscard]] std::span<const u8> Map() const;
void Unmap();
explicit operator bool() const noexcept { return allocation != nullptr; }
VkDeviceMemory Memory() const noexcept { return memory; }
VkDeviceSize Offset() const noexcept { return offset; }
VkDeviceSize Size() const noexcept { return size; }
VmaAllocation Allocation() const noexcept { return allocation; }
private:
void Release();
VmaAllocator allocator{}; ///< VMA allocator
VmaAllocation allocation{}; ///< VMA allocation handle
VkDeviceMemory memory{}; ///< Underlying VkDeviceMemory chosen by VMA
VkDeviceSize offset{}; ///< Offset of this allocation inside VkDeviceMemory
VkDeviceSize size{}; ///< Size of the allocation
void *mapped_ptr{}; ///< Optional persistent mapped pointer
};
/// Memory allocator container.
/// Allocates and releases memory allocations on demand.
class MemoryAllocator {
@@ -107,36 +63,21 @@ namespace Vulkan {
vk::Buffer CreateBuffer(const VkBufferCreateInfo &ci, MemoryUsage usage) const;
/**
* Commits a memory with the specified requirements.
*
* @param requirements Requirements returned from a Vulkan call.
* @param usage Indicates how the memory will be used.
*
* @returns A memory commit.
*/
MemoryCommit Commit(const VkMemoryRequirements &requirements, MemoryUsage usage);
using ReclaimCallback = std::function<u64(u64)>;
/// Commits memory required by the buffer and binds it (for buffers created outside VMA).
MemoryCommit Commit(const vk::Buffer &buffer, MemoryUsage usage);
void SetReclaimCallback(ReclaimCallback callback);
private:
static bool IsAutoUsage(VmaMemoryUsage u) noexcept {
switch (u) {
case VMA_MEMORY_USAGE_AUTO:
case VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE:
case VMA_MEMORY_USAGE_AUTO_PREFER_HOST:
return true;
default:
return false;
}
}
bool ReclaimAtLeast(u64 hint_bytes) const;
static constexpr u64 IMAGE_RECLAIM_HINT = 64ULL * 1024 * 1024;
const Device &device; ///< Device handle.
VmaAllocator allocator; ///< VMA allocator.
const VkPhysicalDeviceMemoryProperties properties; ///< Physical device memory properties.
VkDeviceSize buffer_image_granularity; ///< Adjacent buffer/image granularity
u32 valid_memory_types{~0u};
ReclaimCallback reclaim_callback;
mutable bool in_reclaim{false};
};
} // namespace Vulkan
@@ -5,11 +5,16 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include <algorithm>
#include <atomic>
#include <limits>
#include <memory>
#include <mutex>
#include <optional>
#include <thread>
#include <utility>
#include <vector>
#include "common/assert.h"
#include "common/common_types.h"
#include "common/logging.h"
#include "video_core/vulkan_common/vk_enum_string_helper.h"
@@ -20,6 +25,60 @@ namespace Vulkan::vk {
namespace {
std::thread::id allocator_owner_thread;
template <typename HandleType>
struct PendingRelease {
VmaAllocator allocator;
HandleType handle;
VmaAllocation allocation;
u64 timeline;
};
std::mutex deletion_mutex;
std::atomic<u64> deletion_timeline{1};
std::vector<PendingRelease<VkImage>> pending_images;
std::vector<PendingRelease<VkBuffer>> pending_buffers;
template <typename HandleType>
void PushPendingRelease(std::vector<PendingRelease<HandleType>>& pending, VmaAllocator allocator,
HandleType handle, VmaAllocation allocation) noexcept {
std::scoped_lock lock{deletion_mutex};
pending.push_back(PendingRelease<HandleType>{
.allocator = allocator,
.handle = handle,
.allocation = allocation,
.timeline = deletion_timeline.load(std::memory_order_acquire),
});
}
template <typename HandleType>
void ExtractReleased(std::vector<PendingRelease<HandleType>>& pending,
std::vector<PendingRelease<HandleType>>& released, u64 completed_value) {
const auto split = std::partition(pending.begin(), pending.end(),
[completed_value](const PendingRelease<HandleType>& entry) {
return entry.timeline > completed_value;
});
released.assign(split, pending.end());
pending.erase(split, pending.end());
}
void DrainDeletionQueue(u64 completed_value) noexcept {
std::vector<PendingRelease<VkImage>> images;
std::vector<PendingRelease<VkBuffer>> buffers;
{
std::scoped_lock lock{deletion_mutex};
ExtractReleased(pending_images, images, completed_value);
ExtractReleased(pending_buffers, buffers, completed_value);
}
for (const auto& entry : images) {
vmaDestroyImage(entry.allocator, entry.handle, entry.allocation);
}
for (const auto& entry : buffers) {
vmaDestroyBuffer(entry.allocator, entry.handle, entry.allocation);
}
}
template <typename Func>
void SortPhysicalDevices(std::vector<VkPhysicalDevice>& devices, const InstanceDispatch& dld,
Func&& func) {
@@ -502,13 +561,35 @@ DebugReportCallback Instance::CreateDebugReportCallback(
return DebugReportCallback(object, handle, *dld);
}
void SetAllocatorOwnerThread() {
allocator_owner_thread = std::this_thread::get_id();
}
bool OnAllocatorOwnerThread() noexcept {
return allocator_owner_thread == std::thread::id{} ||
allocator_owner_thread == std::this_thread::get_id();
}
void SetDeletionTimeline(u64 value) noexcept {
deletion_timeline.store(value, std::memory_order_release);
}
void TickDeletionQueue(u64 completed_value) noexcept {
DEBUG_ASSERT(OnAllocatorOwnerThread());
DrainDeletionQueue(completed_value);
}
void FlushDeletionQueue() noexcept {
DrainDeletionQueue((std::numeric_limits<u64>::max)());
}
void Image::SetObjectNameEXT(const char* name) const {
SetObjectName(dld, owner, handle, VK_OBJECT_TYPE_IMAGE, name);
}
void Image::Release() const noexcept {
if (handle) {
vmaDestroyImage(allocator, handle, allocation);
PushPendingRelease(pending_images, allocator, handle, allocation);
}
}
@@ -530,7 +611,7 @@ void Buffer::SetObjectNameEXT(const char* name) const {
void Buffer::Release() const noexcept {
if (handle) {
vmaDestroyBuffer(allocator, handle, allocation);
PushPendingRelease(pending_buffers, allocator, handle, allocation);
}
}
@@ -131,6 +131,16 @@ private:
VkResult result;
};
void SetAllocatorOwnerThread();
[[nodiscard]] bool OnAllocatorOwnerThread() noexcept;
void SetDeletionTimeline(u64 value) noexcept;
void TickDeletionQueue(u64 completed_value) noexcept;
void FlushDeletionQueue() noexcept;
/// Throws a Vulkan exception if result is not success.
inline void Check(VkResult result) {
if (result != VK_SUCCESS) {