Compare commits

..

1 Commits

Author SHA1 Message Date
CamilleLaVey 62c4ab026d [Vulkan] Re-adjusting ASTC resolve 2026-08-04 19:30:37 -04:00
115 changed files with 1645 additions and 4734 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ Eden is free, open-source, copyleft software, licensed under the terms of the [G
### Policies
- No LLM or AI usage, *period*, for patches, pull requests, issues, comments, debugging, brainstorming, etc.
- For details on why, see the [detailed AI policy](docs/policies/AI.md).
- For details on why, see the [detailed AI policy](docs/AI.md).
- New code must follow the same general style as the surrounding codebase. Exceptions may be granted in certain cases.
- Maintainers reserve the right to change your patches and pull requests at will. We will try to avoid this.
- You should respect all decisions made by the [code owners](docs/CODEOWNERS) in your particular subsystem. If you feel they are overstepping or are incorrect, don't be afraid to stand your ground!
+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>
-3
View File
@@ -188,7 +188,6 @@ android {
create("mainline") {
dimension = "version"
isDefault = true
minSdk = 33
manifestPlaceholders += mapOf("appNameBase" to "Eden")
resValue("string", "app_name_suffixed", "Eden")
@@ -200,7 +199,6 @@ android {
create("genshinSpoof") {
dimension = "version"
minSdk = 35
manifestPlaceholders += mapOf("appNameBase" to "Eden Optimized")
resValue("string", "app_name_suffixed", "Eden Optimized")
applicationId = "com.miHoYo.Yuanshen"
@@ -218,7 +216,6 @@ android {
create("legacy") {
dimension = "version"
minSdk = 29
manifestPlaceholders += mapOf("appNameBase" to "Eden Legacy")
resValue("string", "app_name_suffixed", "Eden Legacy")
applicationId = "dev.legacy.eden_emulator"
@@ -218,8 +218,6 @@ object NativeLibrary {
external fun logSettings()
external fun refreshThreadPolicies()
external fun getDebugKnobAt(index: Int): Boolean
/**
@@ -27,7 +27,6 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
RENDERER_ASYNCHRONOUS_GPU_EMULATION("use_asynchronous_gpu_emulation"),
RENDERER_ASYNC_PRESENTATION("async_presentation"),
RENDERER_ASYNCHRONOUS_SHADERS("use_asynchronous_shaders"),
RENDERER_UNIFIED_MEMORY("use_unified_memory"),
RENDERER_REACTIVE_FLUSHING("use_reactive_flushing"),
ENABLE_BUFFER_HISTORY("enable_buffer_history"),
USE_OPTIMIZED_VERTEX_BUFFERS("use_optimized_vertex_buffers"),
@@ -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 = 2,
min = 4,
max = 8,
units = "cores"
)
@@ -685,13 +685,6 @@ abstract class SettingsItem(
descriptionId = R.string.renderer_asynchronous_shaders_description
)
)
put(
SwitchSetting(
BooleanSetting.RENDERER_UNIFIED_MEMORY,
titleId = R.string.renderer_unified_memory,
descriptionId = R.string.renderer_unified_memory_description
)
)
put(
SingleChoiceSetting(
IntSetting.FAST_GPU_TIME,
@@ -250,9 +250,8 @@ class SettingsFragmentPresenter(
add(BooleanSetting.USE_CUSTOM_RTC.key)
add(LongSetting.CUSTOM_RTC.key)
add(HeaderSetting(R.string.clocks))
add(HeaderSetting(R.string.cpu))
add(IntSetting.FAST_CPU_TIME.key)
add(IntSetting.FAST_GPU_TIME.key)
add(BooleanSetting.CORE_SYNC_CORE_SPEED.key)
add(IntSetting.MEMORY_LAYOUT.key)
@@ -299,12 +298,12 @@ class SettingsFragmentPresenter(
add(HeaderSetting(R.string.hacks))
add(IntSetting.FAST_GPU_TIME.key)
add(BooleanSetting.SKIP_CPU_INNER_INVALIDATION.key)
add(BooleanSetting.FIX_BLOOM_EFFECTS.key)
add(BooleanSetting.EMULATE_BGR565.key)
add(BooleanSetting.RESCALE_HACK.key)
add(BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS.key)
add(BooleanSetting.RENDERER_UNIFIED_MEMORY.key)
add(IntSetting.ANDROID_PIPELINE_WORKERS.key)
add(BooleanSetting.RENDERER_ASYNCHRONOUS_GPU_EMULATION.key)
add(BooleanSetting.RENDERER_ASYNC_PRESENTATION.key)
@@ -1451,7 +1451,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
override fun onResume() {
super.onResume()
NativeLibrary.refreshThreadPolicies()
val b = _binding ?: return
updateStatsPosition(IntSetting.PERF_OVERLAY_POSITION.getInt())
updateSocPosition(IntSetting.SOC_OVERLAY_POSITION.getInt())
-5
View File
@@ -50,7 +50,6 @@ extern "C" {
#include "common/scope_exit.h"
#include "common/settings.h"
#include "common/string_util.h"
#include "common/thread.h"
#include "frontend_common/play_time_manager.h"
#include "core/constants.h"
#include "core/core.h"
@@ -1183,10 +1182,6 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_logSettings(JNIEnv* env, jobject jobj
Settings::LogSettings();
}
void Java_org_yuzu_yuzu_1emu_NativeLibrary_refreshThreadPolicies(JNIEnv* env, jobject jobj) {
Common::RefreshThreadPolicies();
}
jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_getDebugKnobAt(JNIEnv* env, jobject jobj, jint index) {
return static_cast<jboolean>(Settings::getDebugKnobAt(static_cast<u8>(index)));
}
@@ -958,6 +958,7 @@
<string name="clock_fast">سريع (2000MHz)</string>
<!-- GPU overclock factors -->
<string name="off">تعطيل</string>
<string name="fast_gpu_medium">متوسط (256)</string>
<string name="fast_gpu_high">مرتفع (512)</string>
@@ -884,6 +884,7 @@ Wirklich fortfahren?</string>
<string name="clock_fast">Schnell (2000MHz)</string>
<!-- GPU overclock factors -->
<string name="off">Aus</string>
<string name="fast_gpu_medium">Mittel (256)</string>
<string name="fast_gpu_high">Hoch (512)</string>
@@ -950,6 +950,7 @@
<string name="clock_fast">Rápido (2000MHz)</string>
<!-- GPU overclock factors -->
<string name="off">Desactivado</string>
<string name="fast_gpu_medium">Medio (256)</string>
<string name="fast_gpu_high">Alto (512)</string>
@@ -897,6 +897,7 @@
<string name="clock_fast">Rapide (2000MHz)</string>
<!-- GPU overclock factors -->
<string name="off">Désactivé</string>
<string name="fast_gpu_medium">Moyen (256)</string>
<string name="fast_gpu_high">Élevé (512)</string>
@@ -871,6 +871,7 @@
<string name="clock_fast">Szybkie (2000MHz)</string>
<!-- GPU overclock factors -->
<string name="off">Wyłączone</string>
<string name="fast_gpu_medium">Średnie (256)</string>
<string name="fast_gpu_high">Wysokie (512)</string>
@@ -954,6 +954,7 @@
<string name="clock_fast">Быстрая (2000MHz)</string>
<!-- GPU overclock factors -->
<string name="off">Выкл.</string>
<string name="fast_gpu_medium">Среднее (256)</string>
<string name="fast_gpu_high">Высокое (512)</string>
@@ -943,6 +943,7 @@
<string name="clock_fast">Швидко (2000 МГц)</string>
<!-- GPU overclock factors -->
<string name="off">Вимкнено</string>
<string name="fast_gpu_medium">Середньо (256)</string>
<string name="fast_gpu_high">Високо (512)</string>
@@ -948,6 +948,7 @@
<string name="clock_fast">快速 (2000MHz)</string>
<!-- GPU overclock factors -->
<string name="off">关闭</string>
<string name="fast_gpu_medium">中 (256)</string>
<string name="fast_gpu_high">高 (512)</string>
@@ -53,7 +53,7 @@
<string name="stats_overlay_options">疊加層</string>
<string name="enable_stats_overlay_">啟用效能統計疊加層</string>
<string name="stats_overlay_options_description">設定疊加層中顯示的資訊</string>
<string name="show_fps">顯示影格率</string>
<string name="show_fps">顯示FPS</string>
<string name="show_fps_description">顯示當前影格率</string>
<string name="show_frametime">顯示影格時間</string>
<string name="show_app_ram_usage">顯示應用程式的記憶體用量</string>
@@ -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>
@@ -34,7 +34,7 @@
</integer-array>
<string-array name="clockNames">
<item>@string/clock_normal</item>
<item>@string/off</item>
<item>@string/clock_boost</item>
<item>@string/clock_fast</item>
</string-array>
@@ -547,7 +547,7 @@
</integer-array>
<string-array name="gpuEntries">
<item>@string/fast_gpu_normal</item>
<item>@string/off</item>
<item>@string/fast_gpu_medium</item>
<item>@string/fast_gpu_high</item>
</string-array>
+11 -15
View File
@@ -450,8 +450,8 @@
<string name="set_custom_rtc">Set custom RTC</string>
<!-- CPU -->
<string name="fast_cpu_time">CPU Clocks</string>
<string name="fast_cpu_time_description">Raises the clock the emulated CPU reports, which removes some FPS limiters. Weaker CPUs may see reduced performance, and certain games may behave improperly.</string>
<string name="fast_cpu_time">CPU Overclock</string>
<string name="fast_cpu_time_description">Forces the emulated CPU to run at a higher clock, reducing certain FPS limiters. Use Boost (1700MHz) to run at the Switch\'s highest native clock, or Fast (2000MHz) to run at 2x clock.</string>
<string name="custom_cpu_ticks">Custom CPU Ticks</string>
<string name="custom_cpu_ticks_description">Set a custom value of CPU ticks. Higher values can increase performance, but may also cause the game to freeze. A range of 7721000 is recommended.</string>
<string name="cpu_ticks">Ticks</string>
@@ -512,8 +512,8 @@
<string name="hacks">Hacks</string>
<string name="fast_gpu_time">GPU Clocks</string>
<string name="fast_gpu_time_description">Makes the game believe GPU work finishes faster than it does, so it stops lowering resolution and render distance to fit the Switch\'s clocks.</string>
<string name="fast_gpu_time">Fast GPU Time</string>
<string name="fast_gpu_time_description">Forces most games to run at their highest native resolution. Use 256 for maximal performance and 512 for maximal graphics fidelity.</string>
<string name="skip_cpu_inner_invalidation">Skip CPU Inner Invalidation</string>
<string name="skip_cpu_inner_invalidation_description">Skips certain CPU-side cache invalidations during memory updates, reducing CPU usage and improving it\'s performance. This may cause glitches or crashes on some games.</string>
<string name="fix_bloom_effects">Fix Bloom Effects</string>
@@ -524,8 +524,6 @@
<string name="rescale_hack_description">Enables a legacy handling for the rescale configuration pass for games by using a quick rescale path</string>
<string name="renderer_asynchronous_shaders">Use asynchronous shaders</string>
<string name="renderer_asynchronous_shaders_description">Compiles shaders asynchronously. This may reduce stutters but may also introduce glitches.</string>
<string name="renderer_unified_memory">Unified memory access</string>
<string name="renderer_unified_memory_description">Allows GPU write buffer readbacks directly into guest memory, skipping the CPU staging copy.</string>
<string name="gpu_unswizzle_settings">GPU Unswizzle Settings</string>
<string name="gpu_unswizzle_settings_description">Configure GPU-based texture unswizzling parameters or disable it entirely. Adjust these settings to balance performance and texture loading quality.</string>
<string name="gpu_unswizzle_enable">Enable GPU Unswizzle</string>
@@ -562,7 +560,6 @@
<!-- Debug settings strings -->
<string name="cpu">CPU</string>
<string name="clocks">Clocks</string>
<string name="use_auto_stub">Use Auto Stub</string>
<string name="use_auto_stub_description">Automatically stub missing services and functions. This may improve compatibility but can cause crashes and stability issues.</string>
@@ -971,15 +968,14 @@
<string name="memory_6gb">6GB (Unsafe)</string>
<string name="memory_8gb">8GB (Unsafe)</string>
<!-- CPU clock levels -->
<string name="clock_normal">Normal</string>
<string name="clock_boost">Boost</string>
<string name="clock_fast">Overclock</string>
<!--CPU clock speeds-->
<string name="clock_boost">Boost (1700MHz)</string>
<string name="clock_fast">Fast (2000MHz)</string>
<!-- GPU clock levels -->
<string name="fast_gpu_normal">Normal</string>
<string name="fast_gpu_medium">Boost</string>
<string name="fast_gpu_high">Overclock</string>
<!-- GPU overclock factors -->
<string name="off">Off</string>
<string name="fast_gpu_medium">Medium (256)</string>
<string name="fast_gpu_high">High (512)</string>
<!-- GPU swizzle texture size -->
<string name="gpu_texturesizeswizzle_verysmall">Very Small (16 MB)</string>
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<game-mode-config
xmlns:android="http://schemas.android.com/apk/res/android"
android:supportsBatteryGameMode="false"
android:supportsBatteryGameMode="true"
android:supportsPerformanceGameMode="true"
android:allowGameDownscaling="false"
android:allowGameFpsOverride="false"/>
@@ -18,15 +18,20 @@
namespace AudioCore::Renderer {
constexpr u32 TempBufferSize = 0x3F00;
constexpr std::array<u8, 3> PitchBySrcQuality = {4, 8, 4};
/// @brief Decode PCM data. Only s16 or f32 is supported.
/// @tparam T - Type to decode. Only s16 and f32 are supported.
/// @param memory - Core memory for reading samples.
/// @param out_buffer - Output mix buffer to receive the samples.
/// @param req - Information for how to decode.
/// @return Number of samples decoded.
/**
* Decode PCM data. Only s16 or f32 is supported.
*
* @tparam T - Type to decode. Only s16 and f32 are supported.
* @param memory - Core memory for reading samples.
* @param out_buffer - Output mix buffer to receive the samples.
* @param req - Information for how to decode.
* @return Number of samples decoded.
*/
template <typename T>
static u32 DecodePcm(Core::Memory::Memory& memory, std::span<s16> out_buffer, const DecodeArg& req) {
static u32 DecodePcm(Core::Memory::Memory& memory, std::span<s16> out_buffer,
const DecodeArg& req) {
constexpr s32 min{(std::numeric_limits<s16>::min)()};
constexpr s32 max{(std::numeric_limits<s16>::max)()};
@@ -89,12 +94,16 @@ static u32 DecodePcm(Core::Memory::Memory& memory, std::span<s16> out_buffer, co
return samples_to_decode;
}
/// @brief Decode ADPCM data.
/// @param memory - Core memory for reading samples.
/// @param out_buffer - Output mix buffer to receive the samples.
/// @param req - Information for how to decode.
/// @return Number of samples decoded.
static u32 DecodeAdpcm(Core::Memory::Memory& memory, std::span<s16> out_buffer, const DecodeArg& req) {
/**
* Decode ADPCM data.
*
* @param memory - Core memory for reading samples.
* @param out_buffer - Output mix buffer to receive the samples.
* @param req - Information for how to decode.
* @return Number of samples decoded.
*/
static u32 DecodeAdpcm(Core::Memory::Memory& memory, std::span<s16> out_buffer,
const DecodeArg& req) {
constexpr u32 SamplesPerFrame{14};
constexpr u32 NibblesPerFrame{16};
@@ -106,7 +115,8 @@ static u32 DecodeAdpcm(Core::Memory::Memory& memory, std::span<s16> out_buffer,
return 0;
}
auto end{(req.end_offset % SamplesPerFrame) + NibblesPerFrame * (req.end_offset / SamplesPerFrame)};
auto end{(req.end_offset % SamplesPerFrame) +
NibblesPerFrame * (req.end_offset / SamplesPerFrame)};
if (req.end_offset % SamplesPerFrame) {
end += 3;
} else {
@@ -123,49 +133,52 @@ static u32 DecodeAdpcm(Core::Memory::Memory& memory, std::span<s16> out_buffer,
return 0;
}
auto samples_to_read = samples_to_process;
auto samples_remaining_in_frame = start_pos % SamplesPerFrame;
auto position_in_frame = (start_pos / SamplesPerFrame) * NibblesPerFrame + samples_remaining_in_frame;
auto samples_to_read{samples_to_process};
auto samples_remaining_in_frame{start_pos % SamplesPerFrame};
auto position_in_frame{(start_pos / SamplesPerFrame) * NibblesPerFrame +
samples_remaining_in_frame};
if (samples_remaining_in_frame) {
position_in_frame += 2;
}
const auto size{(std::max)((samples_to_process / 8U) * SamplesPerFrame, 8U)};
Core::Memory::CpuGuestMemory<u8, Core::Memory::GuestMemoryFlags::UnsafeRead> wavebuffer(memory, req.buffer + position_in_frame / 2, size);
Core::Memory::CpuGuestMemory<u8, Core::Memory::GuestMemoryFlags::UnsafeRead> wavebuffer(
memory, req.buffer + position_in_frame / 2, size);
auto context = req.adpcm_context;
auto header = context->header;
u8 scale = u8(header & 0xfU);
u8 coeff_index = u8((header >> 4U) & 0x7u);
s32 coeff0 = req.coefficients[coeff_index * 2 + 0];
s32 coeff1 = req.coefficients[coeff_index * 2 + 1];
auto context{req.adpcm_context};
auto header{context->header};
u8 coeff_index{static_cast<u8>((header >> 4U) & 0xFU)};
u8 scale{static_cast<u8>(header & 0xFU)};
s32 coeff0{req.coefficients[coeff_index * 2 + 0]};
s32 coeff1{req.coefficients[coeff_index * 2 + 1]};
auto yn0 = context->yn0;
auto yn1 = context->yn1;
auto const get_step = [](u32 index) {
// Emulates the following table
// 0, 1, 2, 3, 4, 5, 6, 7, -8, -7, -6, -5, -4, -3, -2, -1,
constexpr u64 steps_table = 0x1234567876543210ull;
constexpr u64 steps_sign = 0b1111111100000000ull;
auto const r = s32((steps_table >> (index * 4)) & 0xf);
return ((steps_sign >> index) & 1) == 0 ? -r : r;
auto yn0{context->yn0};
auto yn1{context->yn1};
static constexpr std::array<s32, 16> Steps{
0, 1, 2, 3, 4, 5, 6, 7, -8, -7, -6, -5, -4, -3, -2, -1,
};
auto const decode_sample = [&](const s32 code) -> s16 {
const auto decode_sample = [&](const s32 code) -> s16 {
const auto xn = code * (1 << scale);
const auto prediction = coeff0 * yn0 + coeff1 * yn1;
const auto sample = ((xn << 11) + 0x400 + prediction) >> 11;
const auto saturated = std::clamp<s32>(sample, -0x8000, 0x7FFF);
yn1 = yn0;
return yn0 = s16(saturated);
yn0 = static_cast<s16>(saturated);
return yn0;
};
u32 read_index = 0;
for (u32 write_index = 0; samples_to_read > 0 && write_index < out_buffer.size(); ) {
u32 read_index{0};
u32 write_index{0};
while (samples_to_read > 0) {
// Are we at a new frame?
if ((position_in_frame % NibblesPerFrame) == 0) {
header = wavebuffer[read_index++];
scale = header & 0xFu;
coeff_index = (header >> 4) & 0x7u;
coeff_index = (header >> 4) & 0xF;
scale = header & 0xF;
coeff0 = req.coefficients[coeff_index * 2 + 0];
coeff1 = req.coefficients[coeff_index * 2 + 1];
position_in_frame += 2;
@@ -174,12 +187,14 @@ static u32 DecodeAdpcm(Core::Memory::Memory& memory, std::span<s16> out_buffer,
if (samples_to_read >= SamplesPerFrame) {
// Can grab all samples until the next header
for (u32 i = 0; i < SamplesPerFrame / 2; i++) {
auto code0 = get_step((wavebuffer[read_index + i] >> 4) & 0xF);
auto code1 = get_step(wavebuffer[read_index + i] & 0xF);
auto code0{Steps[(wavebuffer[read_index] >> 4) & 0xF]};
auto code1{Steps[wavebuffer[read_index] & 0xF]};
read_index++;
out_buffer[write_index++] = decode_sample(code0);
out_buffer[write_index++] = decode_sample(code1);
}
read_index += SamplesPerFrame / 2;
position_in_frame += SamplesPerFrame;
samples_to_read -= SamplesPerFrame;
continue;
@@ -187,14 +202,15 @@ static u32 DecodeAdpcm(Core::Memory::Memory& memory, std::span<s16> out_buffer,
}
// Decode a single sample
auto code = wavebuffer[read_index];
auto code{wavebuffer[read_index]};
if (position_in_frame & 1) {
code &= 0xF;
read_index++;
} else {
code >>= 4;
}
out_buffer[write_index++] = decode_sample(get_step(code));
out_buffer[write_index++] = decode_sample(Steps[code]);
position_in_frame++;
samples_to_read--;
@@ -203,21 +219,27 @@ static u32 DecodeAdpcm(Core::Memory::Memory& memory, std::span<s16> out_buffer,
context->header = header;
context->yn0 = yn0;
context->yn1 = yn1;
return samples_to_process;
}
/// @brief Decode implementation.
/// Decode wavebuffers according to the given args.
///
/// @param memory - Core memory to read data from.
/// @param args - The wavebuffer data, and information for how to decode it.
/**
* Decode implementation.
* Decode wavebuffers according to the given args.
*
* @param memory - Core memory to read data from.
* @param args - The wavebuffer data, and information for how to decode it.
*/
void DecodeFromWaveBuffers(Core::Memory::Memory& memory, const DecodeFromWaveBuffersArgs& args) {
constexpr auto EndWaveBuffer = [](auto& voice_state, auto& wavebuffer, auto& index, auto& played_samples, auto& consumed) -> void {
static constexpr auto EndWaveBuffer = [](auto& voice_state, auto& wavebuffer, auto& index,
auto& played_samples, auto& consumed) -> void {
voice_state.wave_buffer_valid[index] = false;
voice_state.loop_count = 0;
if (wavebuffer.stream_ended) {
played_samples = 0;
}
index = (index + 1) % MaxWaveBuffers;
consumed++;
};
@@ -233,9 +255,8 @@ void DecodeFromWaveBuffers(Core::Memory::Memory& memory, const DecodeFromWaveBuf
return;
}
// 0 -> 4, 1 -> 8, 2 -> 4
auto pitch = u32((0x040804ul >> (u32(args.src_quality) * 8)) & 0xfful);
if (u32(pitch + size_required.to_int_floor()) > TempBufferSize) {
auto pitch{PitchBySrcQuality[static_cast<u32>(args.src_quality)]};
if (static_cast<u32>(pitch + size_required.to_int_floor()) > TempBufferSize) {
return;
}
@@ -251,7 +272,7 @@ void DecodeFromWaveBuffers(Core::Memory::Memory& memory, const DecodeFromWaveBuf
bool is_buffer_starved{false};
u32 offset{voice_state.offset};
auto output_buffer = args.output;
auto output_buffer{args.output};
std::array<s16, TempBufferSize> temp_buffer{};
while (remaining_sample_count > 0) {
@@ -273,8 +294,8 @@ void DecodeFromWaveBuffers(Core::Memory::Memory& memory, const DecodeFromWaveBuf
if (wavebuffer_index >= MaxWaveBuffers) {
LOG_ERROR(Service_Audio, "Invalid wavebuffer index! {}", wavebuffer_index);
wavebuffer_index = 0;
wavebuffers_consumed = MaxWaveBuffers;
voice_state.wave_buffer_valid.fill(false);
wavebuffers_consumed = MaxWaveBuffers;
}
if (!voice_state.wave_buffer_valid[wavebuffer_index]) {
@@ -282,9 +303,12 @@ void DecodeFromWaveBuffers(Core::Memory::Memory& memory, const DecodeFromWaveBuf
break;
}
auto& wavebuffer = args.wave_buffers[wavebuffer_index];
if (offset == 0 && args.sample_format == SampleFormat::Adpcm && wavebuffer.context != 0) {
memory.ReadBlockUnsafe(wavebuffer.context, &voice_state.adpcm_context, wavebuffer.context_size);
auto& wavebuffer{args.wave_buffers[wavebuffer_index]};
if (offset == 0 && args.sample_format == SampleFormat::Adpcm &&
wavebuffer.context != 0) {
memory.ReadBlockUnsafe(wavebuffer.context, &voice_state.adpcm_context,
wavebuffer.context_size);
}
auto start_offset{wavebuffer.start_offset};
@@ -327,7 +351,9 @@ void DecodeFromWaveBuffers(Core::Memory::Memory& memory, const DecodeFromWaveBuf
case SampleFormat::Adpcm: {
decode_arg.adpcm_context = &voice_state.adpcm_context;
memory.ReadBlockUnsafe(args.data_address, &decode_arg.coefficients, args.data_size);
samples_decoded = DecodeAdpcm( memory, {&temp_buffer[temp_buffer_pos], TempBufferSize - temp_buffer_pos}, decode_arg);
samples_decoded = DecodeAdpcm(
memory, {&temp_buffer[temp_buffer_pos], TempBufferSize - temp_buffer_pos},
decode_arg);
} break;
default:
@@ -1,6 +1,3 @@
// 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-2.0-or-later
@@ -8,13 +5,21 @@
namespace AudioCore::Renderer {
static void ResampleLowQuality(std::span<s32> output, std::span<const s16> input, const Common::FixedPoint<49, 15>& sample_rate_ratio, Common::FixedPoint<49, 15>& fraction, const u32 samples_to_write) {
u32 read_index{0};
for (u32 i = 0; i < samples_to_write; i++) {
output[i] = input[read_index + (fraction >= 0.5f)];
fraction += sample_rate_ratio;
read_index += u32(fraction.to_int_floor());
fraction.clear_int();
static void ResampleLowQuality(std::span<s32> output, std::span<const s16> input,
const Common::FixedPoint<49, 15>& sample_rate_ratio,
Common::FixedPoint<49, 15>& fraction, const u32 samples_to_write) {
if (sample_rate_ratio == 1.0f) {
for (u32 i = 0; i < samples_to_write; i++) {
output[i] = input[i];
}
} else {
u32 read_index{0};
for (u32 i = 0; i < samples_to_write; i++) {
output[i] = input[read_index + (fraction >= 0.5f)];
fraction += sample_rate_ratio;
read_index += static_cast<u32>(fraction.to_int_floor());
fraction.clear_int();
}
}
}
@@ -290,7 +295,7 @@ static void ResampleNormalQuality(std::span<s32> output, std::span<const s16> in
auto lut{get_lut()};
u32 read_index{0};
for (u32 i = 0; i < samples_to_write; i++) {
const auto lut_index = ((fraction.get_frac() >> 8) << 2) & 511;
const auto lut_index{(fraction.get_frac() >> 8) * 4};
const Common::FixedPoint<56, 8> sample0{input[read_index + 0] * lut[lut_index + 0]};
const Common::FixedPoint<56, 8> sample1{input[read_index + 1] * lut[lut_index + 1]};
const Common::FixedPoint<56, 8> sample2{input[read_index + 2] * lut[lut_index + 2]};
@@ -840,7 +845,7 @@ static void ResampleHighQuality(std::span<s32> output, std::span<const s16> inpu
auto lut{get_lut()};
u32 read_index{0};
for (u32 i = 0; i < samples_to_write; i++) {
const auto lut_index = ((fraction.get_frac() >> 8) << 3) & 1023;
const auto lut_index{(fraction.get_frac() >> 8) * 8};
const Common::FixedPoint<56, 8> sample0{input[read_index + 0] * lut[lut_index + 0]};
const Common::FixedPoint<56, 8> sample1{input[read_index + 1] * lut[lut_index + 1]};
const Common::FixedPoint<56, 8> sample2{input[read_index + 2] * lut[lut_index + 2]};
-2
View File
@@ -121,8 +121,6 @@ add_library(
swap.h
thread.cpp
thread.h
adpf.cpp
adpf.h
thread_queue_list.h
thread_worker.h
threadsafe_queue.h
-317
View File
@@ -1,317 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#include "common/adpf.h"
#ifdef __ANDROID__
#include <algorithm>
#include <array>
#include <atomic>
#include <cstdint>
#include <mutex>
#include <vector>
#include <dlfcn.h>
#include <unistd.h>
#include "common/logging.h"
namespace Common::ADPF {
namespace {
constexpr std::chrono::nanoseconds DEFAULT_TARGET = std::chrono::nanoseconds{16'666'667};
struct AHintManager;
struct AHintSession;
using PFN_GetManager = AHintManager* (*)();
using PFN_CreateSession = AHintSession* (*)(AHintManager*, const s32*, size_t, s64);
using PFN_CloseSession = void (*)(AHintSession*);
using PFN_UpdateTarget = int (*)(AHintSession*, s64);
using PFN_ReportActual = int (*)(AHintSession*, s64);
using PFN_SetThreads = int (*)(AHintSession*, const pid_t*, size_t);
using PFN_SetPowerEfficiency = int (*)(AHintSession*, bool);
struct Api {
PFN_GetManager get_manager = nullptr;
PFN_CreateSession create_session = nullptr;
PFN_CloseSession close_session = nullptr;
PFN_UpdateTarget update_target = nullptr;
PFN_ReportActual report_actual = nullptr;
PFN_SetThreads set_threads = nullptr;
PFN_SetPowerEfficiency set_power_efficiency = nullptr;
AHintManager* manager = nullptr;
bool usable = false;
};
const Api& Resolve() {
static const Api api = [] {
Api resolved;
void* library = dlopen("libandroid.so", RTLD_NOW);
if (library == nullptr) {
LOG_INFO(Common, "libandroid.so unavailable, ADPF is disabled");
return resolved;
}
const auto load = [library](const char* name) { return dlsym(library, name); };
resolved.get_manager = reinterpret_cast<PFN_GetManager>(load("APerformanceHint_getManager"));
resolved.create_session =
reinterpret_cast<PFN_CreateSession>(load("APerformanceHint_createSession"));
resolved.close_session =
reinterpret_cast<PFN_CloseSession>(load("APerformanceHint_closeSession"));
resolved.update_target =
reinterpret_cast<PFN_UpdateTarget>(load("APerformanceHint_updateTargetWorkDuration"));
resolved.report_actual =
reinterpret_cast<PFN_ReportActual>(load("APerformanceHint_reportActualWorkDuration"));
resolved.set_threads =
reinterpret_cast<PFN_SetThreads>(load("APerformanceHint_setThreads"));
resolved.set_power_efficiency = reinterpret_cast<PFN_SetPowerEfficiency>(
load("APerformanceHint_setPreferPowerEfficiency"));
if (resolved.get_manager == nullptr || resolved.create_session == nullptr ||
resolved.close_session == nullptr || resolved.update_target == nullptr ||
resolved.report_actual == nullptr) {
LOG_INFO(Common, "Performance hint API not exported, ADPF is disabled");
return resolved;
}
resolved.manager = resolved.get_manager();
if (resolved.manager == nullptr) {
LOG_INFO(Common, "Device does not provide a performance hint manager");
return resolved;
}
resolved.usable = true;
LOG_INFO(Common, "ADPF available, setThreads {}, power efficiency {}",
resolved.set_threads != nullptr ? "yes" : "no",
resolved.set_power_efficiency != nullptr ? "yes" : "no");
return resolved;
}();
return api;
}
struct SessionState {
AHintSession* handle = nullptr;
std::vector<pid_t> threads;
bool unsupported = false;
};
std::mutex g_mutex;
std::array<SessionState, 2> g_sessions;
constexpr s64 MAX_REPORTED_TARGETS = 4;
std::atomic<s64> g_target_ns{DEFAULT_TARGET.count()};
thread_local std::chrono::steady_clock::time_point t_last_frame{};
SessionState& StateOf(Session session) {
return g_sessions[static_cast<size_t>(session)];
}
bool IsBackgroundUsable(const Api& api) {
return api.set_power_efficiency != nullptr;
}
void CloseLocked(SessionState& state) {
if (state.handle != nullptr) {
Resolve().close_session(state.handle);
state.handle = nullptr;
}
}
AHintSession* CreateSessionFor(Session session, const std::vector<pid_t>& threads) {
const Api& api = Resolve();
const s64 target = session == Session::Render ? g_target_ns.load(std::memory_order_relaxed) : 0;
std::vector<s32> ids;
ids.reserve(threads.size());
for (const pid_t tid : threads) {
ids.push_back(static_cast<s32>(tid));
}
AHintSession* handle = api.create_session(api.manager, ids.data(), ids.size(), target);
if (handle == nullptr && target == 0) {
handle = api.create_session(api.manager, ids.data(), ids.size(), DEFAULT_TARGET.count());
}
if (handle == nullptr) {
return nullptr;
}
if (session == Session::Background && api.set_power_efficiency != nullptr) {
api.set_power_efficiency(handle, true);
}
return handle;
}
bool SyncLocked(Session session, SessionState& state) {
if (state.threads.empty()) {
CloseLocked(state);
return false;
}
const Api& api = Resolve();
if (state.handle != nullptr && api.set_threads != nullptr) {
std::vector<pid_t> ids = state.threads;
if (api.set_threads(state.handle, ids.data(), ids.size()) == 0) {
return true;
}
}
AHintSession* const replacement = CreateSessionFor(session, state.threads);
if (replacement == nullptr) {
if (state.handle == nullptr) {
state.unsupported = true;
}
LOG_WARNING(Common, "Could not open a performance hint session for {} threads, falling back",
state.threads.size());
return false;
}
CloseLocked(state);
state.handle = replacement;
return true;
}
} // Anonymous namespace
bool IsSessionSupported(Session session) {
const Api& api = Resolve();
if (!api.usable) {
return false;
}
if (session == Session::Background && !IsBackgroundUsable(api)) {
return false;
}
std::scoped_lock lock{g_mutex};
return !StateOf(session).unsupported;
}
bool AddCurrentThread(Session session) {
if (!IsSessionSupported(session)) {
return false;
}
const pid_t tid = gettid();
std::scoped_lock lock{g_mutex};
for (size_t i = 0; i < g_sessions.size(); ++i) {
SessionState& state = g_sessions[i];
if (static_cast<size_t>(session) == i) {
continue;
}
const auto it = std::find(state.threads.begin(), state.threads.end(), tid);
if (it != state.threads.end()) {
state.threads.erase(it);
SyncLocked(static_cast<Session>(i), state);
}
}
SessionState& state = StateOf(session);
const bool added =
std::find(state.threads.begin(), state.threads.end(), tid) == state.threads.end();
if (added) {
state.threads.push_back(tid);
}
if (!SyncLocked(session, state)) {
if (added) {
std::erase(state.threads, tid);
}
return false;
}
return true;
}
void RemoveCurrentThread() {
if (!Resolve().usable) {
return;
}
const pid_t tid = gettid();
std::scoped_lock lock{g_mutex};
for (size_t i = 0; i < g_sessions.size(); ++i) {
SessionState& state = g_sessions[i];
if (std::erase(state.threads, tid) != 0) {
SyncLocked(static_cast<Session>(i), state);
}
}
}
void SetTargetWorkDuration(std::chrono::nanoseconds target) {
const Api& api = Resolve();
if (!api.usable || target.count() <= 0) {
return;
}
if (g_target_ns.exchange(target.count(), std::memory_order_relaxed) == target.count()) {
return;
}
std::scoped_lock lock{g_mutex};
SessionState& state = StateOf(Session::Render);
if (state.handle != nullptr) {
api.update_target(state.handle, target.count());
}
}
void ReportFrameInterval() {
const Api& api = Resolve();
if (!api.usable) {
return;
}
const auto now = std::chrono::steady_clock::now();
const auto previous = t_last_frame;
t_last_frame = now;
if (previous.time_since_epoch().count() == 0) {
return;
}
s64 actual = std::chrono::duration_cast<std::chrono::nanoseconds>(now - previous).count();
if (actual <= 0) {
return;
}
const s64 ceiling = g_target_ns.load(std::memory_order_relaxed) * MAX_REPORTED_TARGETS;
actual = (std::min)(actual, ceiling);
std::scoped_lock lock{g_mutex};
SessionState& state = StateOf(Session::Render);
if (state.handle != nullptr) {
api.report_actual(state.handle, actual);
}
}
void Shutdown() {
if (!Resolve().usable) {
return;
}
std::scoped_lock lock{g_mutex};
for (SessionState& state : g_sessions) {
CloseLocked(state);
state.threads.clear();
state.unsupported = false;
}
}
} // namespace Common::ADPF
#else
namespace Common::ADPF {
bool IsSessionSupported(Session) {
return false;
}
bool AddCurrentThread(Session) {
return false;
}
void RemoveCurrentThread() {}
void SetTargetWorkDuration(std::chrono::nanoseconds) {}
void ReportFrameInterval() {}
void Shutdown() {}
} // namespace Common::ADPF
#endif
-26
View File
@@ -1,26 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <chrono>
namespace Common::ADPF {
enum class Session {
Render,
Background,
};
bool IsSessionSupported(Session session);
bool AddCurrentThread(Session session);
void RemoveCurrentThread();
void SetTargetWorkDuration(std::chrono::nanoseconds target);
void ReportFrameInterval();
void Shutdown();
} // namespace Common::ADPF
+8 -21
View File
@@ -31,9 +31,7 @@ s64 GetMaxPermissibleResidentMapCount() {
} // namespace
HeapTracker::HeapTracker(Common::HostMemory& buffer)
: m_buffer(buffer),
m_has_hardware_buffer_backing(!buffer.BackingHardwareBuffers().empty()),
m_max_resident_map_count(GetMaxPermissibleResidentMapCount()) {}
: m_buffer(buffer), m_max_resident_map_count(GetMaxPermissibleResidentMapCount()) {}
HeapTracker::~HeapTracker() = default;
void HeapTracker::Map(size_t virtual_offset, size_t host_offset, size_t length,
@@ -87,8 +85,7 @@ void HeapTracker::Unmap(size_t virtual_offset, size_t size, bool is_separate_hea
// If resident, erase from resident map.
if (item->is_resident) {
m_resident_map_count -= this->HostMapCount(item->paddr, item->size);
ASSERT(m_resident_map_count >= 0);
ASSERT(--m_resident_map_count >= 0);
m_resident_mappings.erase(m_resident_mappings.iterator_to(*item));
}
@@ -194,7 +191,7 @@ bool HeapTracker::DeferredMapSeparateHeap(size_t virtual_offset) {
// This map is now resident.
it->is_resident = true;
m_resident_map_count += this->HostMapCount(it->paddr, it->size);
m_resident_map_count++;
m_resident_mappings.insert(*it);
}
@@ -216,17 +213,17 @@ void HeapTracker::RebuildSeparateHeapAddressSpace() {
// Despite being worse in theory, this has proven to be better in practice than more
// regularly dumping a smaller amount, because it significantly reduces average case
// lock contention.
s64 const desired_count = (std::min)(m_resident_map_count, m_max_resident_map_count) / 2;
std::size_t const desired_count = (std::min)(m_resident_map_count, m_max_resident_map_count) / 2;
std::size_t const evict_count = m_resident_map_count - desired_count;
auto it = m_resident_mappings.begin();
while (m_resident_map_count > desired_count && it != m_resident_mappings.end()) {
for (size_t i = 0; i < evict_count && it != m_resident_mappings.end(); i++) {
// Unmark and unmap.
it->is_resident = false;
m_buffer.Unmap(it->vaddr, it->size, false);
// Advance.
m_resident_map_count -= this->HostMapCount(it->paddr, it->size);
ASSERT(m_resident_map_count >= 0);
ASSERT(--m_resident_map_count >= 0);
it = m_resident_mappings.erase(it);
}
}
@@ -248,7 +245,6 @@ void HeapTracker::SplitHeapMapLocked(VAddr offset) {
// Cache the original values.
auto* const left = std::addressof(*it);
const size_t orig_size = left->size;
const s64 orig_host_map_count = this->HostMapCount(left->paddr, orig_size);
// Adjust the left map.
const size_t left_size = offset - left->vaddr;
@@ -270,20 +266,11 @@ void HeapTracker::SplitHeapMapLocked(VAddr offset) {
// If resident, also insert into resident map.
if (right->is_resident) {
m_resident_map_count += this->HostMapCount(left->paddr, left->size) +
this->HostMapCount(right->paddr, right->size) -
orig_host_map_count;
m_resident_map_count++;
m_resident_mappings.insert(*right);
}
}
s64 HeapTracker::HostMapCount(PAddr paddr, size_t size) const {
if (!m_has_hardware_buffer_backing) {
return size != 0 ? 1 : 0;
}
return static_cast<s64>(m_buffer.BackingMapCount(paddr, size));
}
HeapTracker::AddrTree::iterator HeapTracker::GetNearestHeapMapLocked(VAddr offset) {
const SeparateHeapMap key{
.vaddr = offset,
-6
View File
@@ -1,6 +1,3 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -85,13 +82,10 @@ private:
AddrTree::iterator GetNearestHeapMapLocked(VAddr offset);
s64 HostMapCount(PAddr paddr, size_t size) const;
void RebuildSeparateHeapAddressSpace();
private:
Common::HostMemory& m_buffer;
const bool m_has_hardware_buffer_backing;
const s64 m_max_resident_map_count;
std::shared_mutex m_rebuild_lock{};
+6 -368
View File
@@ -51,45 +51,14 @@
#endif // ^^^ POSIX ^^^
#include <atomic>
#include <mutex>
#include <random>
#include <vector>
#include "common/alignment.h"
#include "common/assert.h"
#include "common/free_region_manager.h"
#include "common/host_memory.h"
#include "common/logging.h"
#include "common/memory_detect.h"
#include "common/settings.h"
#ifdef __ANDROID__
#include <dlfcn.h>
#include <android/hardware_buffer.h>
namespace {
struct NativeHandle {
int version;
int numFds;
int numInts;
int data[1];
};
using PFN_AHardwareBuffer_getNativeHandle = const NativeHandle* (*)(const AHardwareBuffer*);
PFN_AHardwareBuffer_getNativeHandle ResolveGetNativeHandle() {
void* const lib = dlopen("libnativewindow.so", RTLD_NOW);
if (lib == nullptr) {
return nullptr;
}
return reinterpret_cast<PFN_AHardwareBuffer_getNativeHandle>(
dlsym(lib, "AHardwareBuffer_getNativeHandle"));
}
} // namespace
#endif
#if defined(__ANDROID__) && __ANDROID_API__ < 30
#include <sys/syscall.h>
@@ -106,12 +75,6 @@ namespace Common {
[[maybe_unused]] constexpr size_t PageAlignment = 0x1000;
[[maybe_unused]] constexpr size_t HugePageSize = 0x200000;
static std::atomic<u64> committed_backing_size{};
u64 GetCommittedBackingSize() noexcept {
return committed_backing_size.load(std::memory_order_relaxed);
}
#ifdef _WIN32
// Manually imported for MinGW compatibility
@@ -160,7 +123,7 @@ static void GetFuncAddress(Common::DynamicLibrary& dll, const char* name, T& pfn
class HostMemory::Impl {
public:
explicit Impl(size_t backing_size_, size_t virtual_size_, size_t)
explicit Impl(size_t backing_size_, size_t virtual_size_)
: backing_size{backing_size_}
, virtual_size{virtual_size_}
, process{GetCurrentProcess()}
@@ -266,10 +229,6 @@ public:
UNREACHABLE();
}
bool IsBackingShared() const noexcept {
return true;
}
const size_t backing_size; ///< Size of the backing memory in bytes
const size_t virtual_size; ///< Size of the virtual address placeholder in bytes
@@ -542,10 +501,9 @@ static int shm_open_anon(int flags, mode_t mode) {
class HostMemory::Impl {
public:
explicit Impl(size_t backing_size_, size_t virtual_size_, size_t preferred_offset_)
explicit Impl(size_t backing_size_, size_t virtual_size_)
: backing_size{backing_size_}
, virtual_size{virtual_size_}
, preferred_offset{preferred_offset_}
{}
bool Init() {
@@ -585,15 +543,10 @@ public:
LOG_WARNING(Common_Memory, "Using private mappings instead of shared ones");
backing_base = static_cast<u8*>(mmap(nullptr, backing_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0));
if (fd > 0) {
fd = -1;
close(fd);
}
fd = -1;
} else {
#ifdef __ANDROID__
if (InitAhbBacking()) {
return InitVirtual();
}
#endif
backing_base = static_cast<u8*>(mmap(nullptr, backing_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0));
}
if (backing_base == MAP_FAILED) {
@@ -601,10 +554,7 @@ public:
return false;
}
return InitVirtual();
}
bool InitVirtual() {
// Virtual memory initialization
virtual_base = virtual_map_base = static_cast<u8*>(ChooseVirtualBase(virtual_size));
if (virtual_base == MAP_FAILED) {
LOG_CRITICAL(HW_Memory, "mmap failed: {}", strerror(errno));
@@ -617,242 +567,6 @@ public:
return true;
}
#ifdef __ANDROID__
static AHardwareBuffer_Desc MakeBlobDesc(size_t len) {
return AHardwareBuffer_Desc{
.width = static_cast<u32>(len),
.height = 1,
.layers = 1,
.format = AHARDWAREBUFFER_FORMAT_BLOB,
.usage = AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN |
AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN |
AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER,
.stride = 0,
.rfu0 = 0,
.rfu1 = 0,
};
}
static bool ProbeAhbBacking(PFN_AHardwareBuffer_getNativeHandle get_native_handle) {
const AHardwareBuffer_Desc desc = MakeBlobDesc(PageAlignment * 2);
AHardwareBuffer* buffer{};
if (AHardwareBuffer_allocate(&desc, &buffer) != 0 || buffer == nullptr) {
return false;
}
const NativeHandle* const handle = get_native_handle(buffer);
if (handle == nullptr || handle->numFds < 1) {
AHardwareBuffer_release(buffer);
return false;
}
const int probe_fd = handle->data[0];
bool ok = true;
const auto try_map = [&](int prot, off_t offset, const char* what) {
if (!ok) {
return;
}
void* const ptr = mmap(nullptr, PageAlignment, prot, MAP_SHARED, probe_fd, offset);
if (ptr == MAP_FAILED) {
ok = false;
return;
}
munmap(ptr, PageAlignment);
};
try_map(PROT_READ | PROT_WRITE, 0, "shared mappings");
try_map(PROT_READ | PROT_WRITE, static_cast<off_t>(PageAlignment), "mappings at an offset");
#ifdef ARCHITECTURE_arm64
try_map(PROT_READ | PROT_EXEC, 0, "executable mappings");
#endif
AHardwareBuffer_release(buffer);
return ok;
}
size_t ComputeAhbBudget(size_t window_size) const {
const u64 total_physical = Common::GetMemInfo().TotalPhysicalMemory;
constexpr u64 BaselineFootprint = 6ULL << 30;
if (total_physical <= BaselineFootprint) {
return 0;
}
const u64 max_map_count = Common::GetMaxMapCount();
constexpr u64 ReservedMaps = 24576;
if (max_map_count == 0 || max_map_count <= ReservedMaps) {
return 0;
}
u64 budget = (total_physical - BaselineFootprint) / 2;
constexpr u64 MapSlotsPerWindow = 4096;
const u64 affordable_windows = (max_map_count - ReservedMaps) / MapSlotsPerWindow;
budget = (std::min)(budget, affordable_windows * window_size);
const u64 available = Common::GetAvailablePhysicalMemory();
if (available != 0) {
budget = (std::min)(budget, available / 2);
}
budget = (std::min)(budget, static_cast<u64>(backing_size));
budget = Common::AlignDown(budget, window_size);
constexpr u64 MinimumBudget = 256ULL << 20;
if (budget < MinimumBudget) {
return 0;
}
return static_cast<size_t>(budget);
}
bool InitAhbBacking() {
if (!Settings::values.use_unified_memory.GetValue()) {
return false;
}
static const PFN_AHardwareBuffer_getNativeHandle get_native_handle =
ResolveGetNativeHandle();
if (get_native_handle == nullptr) {
return false;
}
constexpr size_t window_size = 256ULL << 20;
const size_t budget = ComputeAhbBudget(window_size);
if (budget == 0) {
return false;
}
if (!ProbeAhbBacking(get_native_handle)) {
return false;
}
const size_t aligned_backing = Common::AlignDown(backing_size, window_size);
const size_t max_windows = (std::min)(budget, aligned_backing) / window_size;
std::vector<AHardwareBuffer*> buffers;
std::vector<int> buffer_fds;
const auto cleanup = [&] {
for (AHardwareBuffer* buffer : buffers) {
AHardwareBuffer_release(buffer);
}
buffers.clear();
buffer_fds.clear();
};
for (size_t i = 0; i < max_windows; ++i) {
const AHardwareBuffer_Desc desc = MakeBlobDesc(window_size);
AHardwareBuffer* buffer{};
if (AHardwareBuffer_allocate(&desc, &buffer) != 0 || buffer == nullptr) {
break;
}
const NativeHandle* const handle = get_native_handle(buffer);
if (handle == nullptr || handle->numFds < 1) {
AHardwareBuffer_release(buffer);
break;
}
const int buffer_fd = handle->data[0];
const off_t buffer_len = lseek(buffer_fd, 0, SEEK_END);
if (buffer_len < static_cast<off_t>(window_size)) {
AHardwareBuffer_release(buffer);
break;
}
buffers.push_back(buffer);
buffer_fds.push_back(buffer_fd);
}
const size_t num_windows = buffers.size();
if (num_windows == 0) {
return false;
}
const size_t region_size = num_windows * window_size;
const size_t region_base = Common::AlignDown(
(std::min)(preferred_offset, aligned_backing - region_size), window_size);
u8* const base = static_cast<u8*>(mmap(nullptr, backing_size, PROT_NONE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0));
if (base == MAP_FAILED) {
cleanup();
return false;
}
const auto map_over_reservation = [&](size_t offset, size_t len, int map_fd,
off_t map_offset) {
if (len == 0) {
return true;
}
if (mmap(base + offset, len, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, map_fd,
map_offset) == MAP_FAILED) {
munmap(base, backing_size);
cleanup();
return false;
}
return true;
};
if (!map_over_reservation(0, region_base, fd, 0)) {
return false;
}
for (size_t i = 0; i < num_windows; ++i) {
if (!map_over_reservation(region_base + i * window_size, window_size, buffer_fds[i],
0)) {
return false;
}
}
const size_t tail_offset = region_base + region_size;
if (!map_over_reservation(tail_offset, backing_size - tail_offset, fd,
static_cast<off_t>(tail_offset))) {
return false;
}
backing_base = base;
ahb_windows = std::move(buffers);
ahb_fds = std::move(buffer_fds);
ahb_window_size = window_size;
ahb_base = region_base;
ahb_bytes = region_size;
committed_backing_size.store(region_size, std::memory_order_relaxed);
return true;
}
void MapBackingRange(size_t virtual_offset, size_t host_offset, size_t length, int prot_flags) {
while (length > 0) {
int map_fd = fd;
off_t map_offset = static_cast<off_t>(host_offset);
size_t chunk = length;
if (host_offset < ahb_base) {
chunk = (std::min)(chunk, ahb_base - host_offset);
} else if (host_offset < ahb_base + ahb_bytes) {
const size_t relative = host_offset - ahb_base;
const size_t window = relative / ahb_window_size;
const size_t local = relative % ahb_window_size;
map_fd = ahb_fds[window];
map_offset = static_cast<off_t>(local);
chunk = (std::min)(chunk, ahb_window_size - local);
}
void* const ret = mmap(virtual_base + virtual_offset, chunk, prot_flags,
MAP_SHARED | MAP_FIXED, map_fd, map_offset);
ASSERT_MSG(ret != MAP_FAILED, "mmap: {}", strerror(errno));
virtual_offset += chunk;
host_offset += chunk;
length -= chunk;
}
}
size_t BackingMapCount(size_t host_offset, size_t length) const noexcept {
if (length == 0) {
return 0;
}
if (ahb_bytes == 0) {
return 1;
}
size_t count = 0;
while (length > 0) {
size_t chunk = length;
if (host_offset < ahb_base) {
chunk = (std::min)(chunk, ahb_base - host_offset);
} else if (host_offset < ahb_base + ahb_bytes) {
const size_t local = (host_offset - ahb_base) % ahb_window_size;
chunk = (std::min)(chunk, ahb_window_size - local);
}
host_offset += chunk;
length -= chunk;
++count;
}
return count;
}
std::span<AHardwareBuffer* const> AhbWindows() const noexcept {
return ahb_windows;
}
size_t AhbWindowSize() const noexcept {
return ahb_bytes != 0 ? ahb_window_size : 0;
}
size_t AhbBase() const noexcept {
return ahb_base;
}
#endif
~Impl() {
Release();
}
@@ -873,12 +587,6 @@ public:
#ifdef ARCHITECTURE_arm64
if (True(perms & MemoryPermission::Execute))
prot_flags |= PROT_EXEC;
#endif
#ifdef __ANDROID__
if (ahb_bytes != 0) {
MapBackingRange(virtual_offset, host_offset, length, prot_flags);
return;
}
#endif
int flags = (fd >= 0 ? MAP_SHARED : MAP_PRIVATE) | MAP_FIXED;
void* ret = mmap(virtual_base + virtual_offset, length, prot_flags, flags, fd, host_offset);
@@ -924,18 +632,8 @@ public:
virtual_base = nullptr;
}
bool IsBackingShared() const noexcept {
#ifdef __ANDROID__
if (ahb_bytes != 0) {
return true;
}
#endif
return fd >= 0;
}
const size_t backing_size; ///< Size of the backing memory in bytes
const size_t virtual_size; ///< Size of the virtual address placeholder in bytes
const size_t preferred_offset;
u8* backing_base{reinterpret_cast<u8*>(MAP_FAILED)};
u8* virtual_base{reinterpret_cast<u8*>(MAP_FAILED)};
@@ -958,18 +656,6 @@ private:
int ret = close(fd);
ASSERT_MSG(ret == 0, "close failed: {}", strerror(errno));
}
#ifdef __ANDROID__
for (AHardwareBuffer* buffer : ahb_windows) {
AHardwareBuffer_release(buffer);
}
ahb_windows.clear();
ahb_fds.clear();
if (ahb_bytes != 0) {
committed_backing_size.store(0, std::memory_order_relaxed);
ahb_bytes = 0;
}
#endif
}
void AdjustMap(size_t* virtual_offset, size_t* length) {
@@ -995,19 +681,11 @@ private:
int fd{-1}; // memfd file descriptor, -1 is the error value of memfd_create
FreeRegionManager free_manager{};
#ifdef __ANDROID__
std::vector<AHardwareBuffer*> ahb_windows;
std::vector<int> ahb_fds;
size_t ahb_window_size{};
size_t ahb_base{};
size_t ahb_bytes{};
#endif
};
#endif // ^^^ POSIX ^^^
HostMemory::HostMemory(size_t backing_size_, size_t virtual_size_, size_t preferred_offset_)
HostMemory::HostMemory(size_t backing_size_, size_t virtual_size_)
: backing_size(backing_size_)
, virtual_size(virtual_size_)
{
@@ -1019,7 +697,7 @@ HostMemory::HostMemory(size_t backing_size_, size_t virtual_size_, size_t prefer
#else
// Try to allocate a fastmem arena.
// The implementation will fail with std::bad_alloc on errors.
impl = std::make_unique<HostMemory::Impl>(AlignUp(backing_size, PageAlignment), AlignUp(virtual_size, PageAlignment) + HugePageSize, preferred_offset_);
impl = std::make_unique<HostMemory::Impl>(AlignUp(backing_size, PageAlignment), AlignUp(virtual_size, PageAlignment) + HugePageSize);
if (impl->Init()) {
backing_base = impl->backing_base;
virtual_base = impl->virtual_base;
@@ -1089,46 +767,6 @@ void HostMemory::ClearBackingRegion(size_t physical_offset, size_t length, u32 f
std::memset(backing_base + physical_offset, fill_value, length);
}
std::span<AHardwareBuffer* const> HostMemory::BackingHardwareBuffers() const noexcept {
#ifdef __ANDROID__
return impl ? impl->AhbWindows() : std::span<AHardwareBuffer* const>{};
#else
return {};
#endif
}
size_t HostMemory::BackingMapCount(size_t host_offset, size_t length) const noexcept {
#ifdef __ANDROID__
return impl ? impl->BackingMapCount(host_offset, length) : (length != 0 ? 1 : 0);
#else
return length != 0 ? 1 : 0;
#endif
}
size_t HostMemory::BackingHardwareBufferWindowSize() const noexcept {
#ifdef __ANDROID__
return impl ? impl->AhbWindowSize() : 0;
#else
return 0;
#endif
}
bool HostMemory::IsBackingShared() const noexcept {
#if defined(__OPENORBIS__) || defined(__managarm__)
return false;
#else
return impl && impl->IsBackingShared();
#endif
}
size_t HostMemory::BackingHardwareBufferBase() const noexcept {
#ifdef __ANDROID__
return impl ? impl->AhbBase() : 0;
#else
return 0;
#endif
}
void HostMemory::EnableDirectMappedAddress() {
#if !(defined(__OPENORBIS__) || defined(__managarm__))
if (impl) {
+1 -20
View File
@@ -8,17 +8,12 @@
#include <memory>
#include <optional>
#include <span>
#include "common/common_funcs.h"
#include "common/common_types.h"
#include "common/virtual_buffer.h"
struct AHardwareBuffer;
namespace Common {
[[nodiscard]] u64 GetCommittedBackingSize() noexcept;
enum class MemoryPermission : u32 {
Read = 1 << 0,
Write = 1 << 1,
@@ -33,7 +28,7 @@ DECLARE_ENUM_FLAG_OPERATORS(MemoryPermission)
*/
class HostMemory {
public:
explicit HostMemory(size_t backing_size_, size_t virtual_size_, size_t preferred_offset_ = 0);
explicit HostMemory(size_t backing_size_, size_t virtual_size_);
~HostMemory();
/**
@@ -67,20 +62,6 @@ public:
return backing_base;
}
[[nodiscard]] size_t BackingSize() const noexcept {
return backing_size;
}
[[nodiscard]] size_t BackingMapCount(size_t host_offset, size_t length) const noexcept;
[[nodiscard]] std::span<AHardwareBuffer* const> BackingHardwareBuffers() const noexcept;
[[nodiscard]] size_t BackingHardwareBufferWindowSize() const noexcept;
[[nodiscard]] size_t BackingHardwareBufferBase() const noexcept;
[[nodiscard]] bool IsBackingShared() const noexcept;
[[nodiscard]] u8* VirtualBasePointer() noexcept {
return virtual_base;
}
-58
View File
@@ -1,6 +1,3 @@
// SPDX-FileCopyrightText: Copyright 2026 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
@@ -20,10 +17,6 @@
#endif
#endif
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "common/memory_detect.h"
namespace Common {
@@ -76,55 +69,4 @@ const MemoryInfo& GetMemInfo() {
return mem_info;
}
u64 GetAvailablePhysicalMemory() {
#ifdef _WIN32
MEMORYSTATUSEX memorystatus;
memorystatus.dwLength = sizeof(memorystatus);
if (GlobalMemoryStatusEx(&memorystatus)) {
return memorystatus.ullAvailPhys;
}
return 0;
#elif defined(__linux__)
if (std::FILE* const file = std::fopen("/proc/meminfo", "re")) {
char line[256];
u64 available = 0;
while (std::fgets(line, sizeof(line), file) != nullptr) {
if (std::strncmp(line, "MemAvailable:", 13) == 0) {
available = std::strtoull(line + 13, nullptr, 10) * 1024ULL;
break;
}
}
std::fclose(file);
if (available != 0) {
return available;
}
}
struct sysinfo info;
if (sysinfo(&info) == 0) {
const u64 unit = info.mem_unit != 0 ? info.mem_unit : 1ULL;
return (static_cast<u64>(info.freeram) + static_cast<u64>(info.bufferram)) * unit;
}
return 0;
#else
return 0;
#endif
}
u64 GetMaxMapCount() {
#ifdef __linux__
if (std::FILE* const file = std::fopen("/proc/sys/vm/max_map_count", "re")) {
char line[32];
u64 count = 0;
if (std::fgets(line, sizeof(line), file) != nullptr) {
count = std::strtoull(line, nullptr, 10);
}
std::fclose(file);
return count;
}
return 0;
#else
return 0;
#endif
}
} // namespace Common
-7
View File
@@ -1,6 +1,3 @@
// SPDX-FileCopyrightText: Copyright 2026 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
@@ -21,8 +18,4 @@ struct MemoryInfo {
*/
[[nodiscard]] const MemoryInfo& GetMemInfo();
[[nodiscard]] u64 GetAvailablePhysicalMemory();
[[nodiscard]] u64 GetMaxMapCount();
} // namespace Common
+10 -13
View File
@@ -260,10 +260,10 @@ struct Values {
Category::Cpu};
SwitchableSetting<CpuAccuracy, true> cpu_accuracy{linkage, CpuAccuracy::Auto,
"cpu_accuracy", Category::Cpu};
SwitchableSetting<CpuClock> cpu_clock{linkage,
CpuClock::Normal,
SwitchableSetting<CpuClock> fast_cpu_time{linkage,
CpuClock::Off,
"fast_cpu_time",
Category::System,
Category::Cpu,
Specialization::Default,
true,
true};
@@ -540,13 +540,13 @@ struct Values {
#endif
// Renderer Hacks //
SwitchableSetting<GpuClock> gpu_clock{linkage,
GpuClock::Boost,
"fast_gpu_time",
Category::System,
Specialization::Default,
true,
true};
SwitchableSetting<GpuOverclock> fast_gpu_time{linkage,
GpuOverclock::Medium,
"fast_gpu_time",
Category::RendererHacks,
Specialization::Default,
true,
true};
SwitchableSetting<bool> skip_cpu_inner_invalidation{linkage,
false,
@@ -587,9 +587,6 @@ struct Values {
SwitchableSetting<bool> use_asynchronous_shaders{linkage, false, "use_asynchronous_shaders",
Category::RendererHacks};
SwitchableSetting<bool> use_unified_memory{linkage, false, "use_unified_memory",
Category::RendererHacks};
SwitchableSetting<GpuUnswizzleSize> gpu_unswizzle_texture_size{linkage,
GpuUnswizzleSize::Large,
"gpu_unswizzle_texture_size",
+2 -2
View File
@@ -140,7 +140,7 @@ ENUM(DmaAccuracy, Default, Unsafe, Safe);
ENUM(GpuFenceBehavior, Default, Immediate, Balanced, Accurate, Strict);
ENUM(CpuBackend, Dynarmic, Nce);
ENUM(CpuAccuracy, Auto, Accurate, Unsafe, Paranoid, Debugging);
ENUM(CpuClock, Normal, Boost, Overclock)
ENUM(CpuClock, Off, Boost, Fast)
ENUM(MemoryLayout, Memory_4Gb, Memory_6Gb, Memory_8Gb, Memory_10Gb, Memory_12Gb);
ENUM(ConfirmStop, Ask_Always, Ask_Based_On_Game, Ask_Never);
ENUM(FullscreenMode, Borderless, Exclusive);
@@ -152,7 +152,7 @@ ENUM(AspectRatio, R16_9, R4_3, R21_9, R16_10, Stretch);
ENUM(ConsoleMode, Handheld, Docked);
ENUM(AppletMode, HLE, LLE);
ENUM(SpirvOptimizeMode, Never, OnLoad, Always);
ENUM(GpuClock, Normal, Boost, Overclock)
ENUM(GpuOverclock, Normal, Medium, High)
ENUM(GpuUnswizzleSize, VerySmall, Small, Normal, Large, VeryLarge)
ENUM(GpuUnswizzle, VeryLow, Low, Normal, Medium, High)
ENUM(GpuUnswizzleChunk, VeryLow, Low, Normal, Medium, High)
+33 -505
View File
@@ -1,6 +1,5 @@
// 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
@@ -10,7 +9,6 @@
#include <string>
#include <thread>
#include "common/adpf.h"
#include "common/error.h"
#include "common/logging.h"
#include "common/assert.h"
@@ -41,402 +39,6 @@
#include <unistd.h>
#endif
#ifdef __linux__
#include <sys/resource.h>
#include <algorithm>
namespace {
constexpr int NICE_AUDIO = -16;
constexpr int NICE_URGENT_DISPLAY = -8;
constexpr int NICE_DISPLAY = -4;
constexpr int NICE_DEFAULT = 0;
constexpr int NICE_BACKGROUND = 10;
int LowestAllowedNice() {
static const int lowest = [] {
rlimit limit{};
if (getrlimit(RLIMIT_NICE, &limit) != 0) {
return 0;
}
if (limit.rlim_cur >= 40) {
return -20;
}
return 20 - static_cast<int>(limit.rlim_cur);
}();
return lowest;
}
int NiceValueForPriority(Common::ThreadPriority priority) {
const int wanted = [priority] {
switch (priority) {
case Common::ThreadPriority::Low: return NICE_BACKGROUND;
case Common::ThreadPriority::Normal: return NICE_DEFAULT;
case Common::ThreadPriority::High: return NICE_DISPLAY;
case Common::ThreadPriority::VeryHigh: return NICE_URGENT_DISPLAY;
case Common::ThreadPriority::Critical: return NICE_AUDIO;
default: return NICE_DEFAULT;
}
}();
return (std::max)(wanted, (std::min)(NICE_DEFAULT, LowestAllowedNice()));
}
} // Anonymous namespace
#endif
#ifdef __ANDROID__
#include <sys/utsname.h>
#include <atomic>
#include <cerrno>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <mutex>
#include <vector>
namespace {
constexpr size_t ANDROID_MINIMUM_PERFORMANCE_CORES = 4;
// A core counts as a performance core while it is within this much of the fastest one.
constexpr s64 ANDROID_PERFORMANCE_CAPACITY_PERCENT = 50;
constexpr std::chrono::nanoseconds ANDROID_POLICY_POLL_INTERVAL = std::chrono::milliseconds{500};
enum class CoreGroup {
Unrestricted,
Performance,
Efficiency,
};
struct ThreadPolicy {
pid_t tid;
CoreGroup group;
s32 nice_value;
bool has_nice;
};
struct CoreInfo {
s64 weight;
u64 midr;
s32 cpu;
};
struct CpuTopologyState {
std::mutex topology_mutex;
cpu_set_t allowed{};
cpu_set_t performance{};
cpu_set_t efficiency{};
bool separated = false;
bool initialized = false;
pid_t canary_tid = 0;
cpu_set_t canary_mask{};
bool canary_valid = false;
std::atomic<s64> next_poll_ns{0};
std::mutex policy_mutex;
std::vector<ThreadPolicy> policies;
};
CpuTopologyState& State() {
static CpuTopologyState* const state = new CpuTopologyState();
return *state;
}
struct PolicyRegistration {
~PolicyRegistration() {
const pid_t tid = gettid();
::Common::ADPF::RemoveCurrentThread();
CpuTopologyState& state = State();
std::scoped_lock lock{state.policy_mutex};
std::erase_if(state.policies,
[tid](const ThreadPolicy& policy) { return policy.tid == tid; });
}
};
thread_local PolicyRegistration t_policy_registration;
s32 PossibleCpuCount() {
std::ifstream file("/sys/devices/system/cpu/possible");
std::string list;
if (file && std::getline(file, list) && !list.empty()) {
s64 highest = -1;
const char* cursor = list.c_str();
while (*cursor != '\0') {
char* end = nullptr;
const s64 value = std::strtol(cursor, &end, 10);
if (end == cursor) {
break;
}
highest = (std::max)(highest, value);
cursor = end;
while (*cursor == '-' || *cursor == ',') {
++cursor;
}
}
if (highest >= 0) {
return static_cast<s32>((std::min<s64>)(highest + 1, CPU_SETSIZE));
}
}
const s64 configured = sysconf(_SC_NPROCESSORS_CONF);
if (configured > 0) {
return static_cast<s32>((std::min<s64>)(configured, CPU_SETSIZE));
}
return static_cast<s32>((std::min<s64>)(std::thread::hardware_concurrency(), CPU_SETSIZE));
}
s64 ReadCpuScalar(s32 cpu, const char* node) {
s64 value = 0;
std::ifstream file("/sys/devices/system/cpu/cpu" + std::to_string(cpu) + "/" + node);
if (!file || !(file >> value) || value <= 0) {
return 0;
}
return value;
}
u64 ReadCpuMidr(s32 cpu) {
u64 midr = 0;
std::ifstream file("/sys/devices/system/cpu/cpu" + std::to_string(cpu) +
"/regs/identification/midr_el1");
if (!file || !(file >> std::hex >> midr)) {
return 0;
}
return midr;
}
std::vector<CoreInfo> CollectCores(const cpu_set_t& allowed, s32 total, const char* node,
bool require_all) {
std::vector<CoreInfo> cores;
for (s32 cpu = 0; cpu < total; ++cpu) {
if (!CPU_ISSET(cpu, &allowed)) {
continue;
}
const s64 weight = ReadCpuScalar(cpu, node);
if (weight <= 0) {
if (require_all) {
return {};
}
LOG_WARNING(Common, "Could not read {} for CPU {}, treating it as an efficiency core",
node, cpu);
continue;
}
cores.push_back(CoreInfo{weight, ReadCpuMidr(cpu), cpu});
}
return cores;
}
bool WeightsAreUniform(const std::vector<CoreInfo>& cores) {
return std::all_of(cores.begin(), cores.end(),
[&](const CoreInfo& core) { return core.weight == cores.front().weight; });
}
bool MidrsAreDistinct(const std::vector<CoreInfo>& cores) {
return std::none_of(cores.begin(), cores.end(),
[](const CoreInfo& core) { return core.midr == 0; }) &&
std::any_of(cores.begin(), cores.end(),
[&](const CoreInfo& core) { return core.midr != cores.front().midr; });
}
void ComputeTopologyLocked(CpuTopologyState& state) {
state.initialized = true;
state.separated = false;
CPU_ZERO(&state.allowed);
CPU_ZERO(&state.performance);
CPU_ZERO(&state.efficiency);
if (sched_getaffinity(getpid(), sizeof(state.allowed), &state.allowed) != 0) {
LOG_WARNING(Common, "Could not query process CPU affinity: {}",
::Common::GetLastErrorMsg());
return;
}
const s32 total = PossibleCpuCount();
auto cores = CollectCores(state.allowed, total, "cpu_capacity", true);
if (cores.empty() || (WeightsAreUniform(cores) && MidrsAreDistinct(cores))) {
auto by_frequency = CollectCores(state.allowed, total, "cpufreq/cpuinfo_max_freq", false);
if (!by_frequency.empty()) {
cores = std::move(by_frequency);
}
}
if (cores.empty()) {
LOG_WARNING(Common, "Could not determine CPU topology, thread placement is disabled");
return;
}
if (WeightsAreUniform(cores)) {
if (MidrsAreDistinct(cores)) {
LOG_WARNING(Common, "CPU clusters differ but rank identically, thread placement is "
"disabled");
} else {
LOG_INFO(Common, "CPU cores are symmetric, thread placement is disabled");
}
return;
}
std::sort(cores.begin(), cores.end(), [](const CoreInfo& lhs, const CoreInfo& rhs) {
if (lhs.weight != rhs.weight) {
return lhs.weight > rhs.weight;
}
return lhs.cpu < rhs.cpu;
});
const s64 fastest = cores.front().weight;
size_t taken = 0;
for (const auto& core : cores) {
const bool fast_enough =
core.weight * 100 >= fastest * ANDROID_PERFORMANCE_CAPACITY_PERCENT;
if (!fast_enough && taken >= ANDROID_MINIMUM_PERFORMANCE_CORES) {
break;
}
CPU_SET(core.cpu, &state.performance);
++taken;
}
if (taken == 0) {
return;
}
for (s32 cpu = 0; cpu < total; ++cpu) {
if (CPU_ISSET(cpu, &state.allowed) && !CPU_ISSET(cpu, &state.performance)) {
CPU_SET(cpu, &state.efficiency);
}
}
state.separated = CPU_COUNT(&state.efficiency) > 0;
LOG_INFO(Common, "CPU topology: {} performance cores, {} efficiency cores, separation {}",
CPU_COUNT(&state.performance), CPU_COUNT(&state.efficiency),
state.separated ? "enabled" : "unavailable");
}
void EnsureTopologyLocked(CpuTopologyState& state) {
if (!state.initialized) {
ComputeTopologyLocked(state);
}
}
void RefreshTopologyLocked(CpuTopologyState& state) {
if (!state.initialized) {
ComputeTopologyLocked(state);
return;
}
cpu_set_t current;
CPU_ZERO(&current);
if (sched_getaffinity(getpid(), sizeof(current), &current) != 0) {
return;
}
if (std::memcmp(&current, &state.allowed, sizeof(current)) != 0) {
ComputeTopologyLocked(state);
}
}
bool ApplyCoreGroupLocked(CpuTopologyState& state, pid_t tid, CoreGroup group,
bool* gone = nullptr) {
const bool restrict_group = group != CoreGroup::Unrestricted && state.separated;
const cpu_set_t* mask = &state.allowed;
if (restrict_group) {
mask = group == CoreGroup::Performance ? &state.performance : &state.efficiency;
}
if (CPU_COUNT(mask) == 0) {
return false;
}
if (sched_setaffinity(tid, sizeof(*mask), mask) != 0) {
if (gone != nullptr && errno == ESRCH) {
*gone = true;
return false;
}
LOG_WARNING(Common, "Could not restrict thread {} to its core group: {}", tid,
::Common::GetLastErrorMsg());
return false;
}
return true;
}
bool KernelPreservesRequestedAffinity() {
utsname info{};
if (uname(&info) != 0) {
return false;
}
s32 major = 0;
s32 minor = 0;
if (std::sscanf(info.release, "%d.%d", &major, &minor) != 2) {
return false;
}
return major > 6 || (major == 6 && minor >= 2);
}
void SnapshotCanaryLocked(CpuTopologyState& state) {
state.canary_valid = false;
if (!state.separated) {
return;
}
for (const auto& policy : state.policies) {
if (policy.group == CoreGroup::Unrestricted) {
continue;
}
cpu_set_t mask;
CPU_ZERO(&mask);
if (sched_getaffinity(policy.tid, sizeof(mask), &mask) != 0) {
continue;
}
state.canary_tid = policy.tid;
state.canary_mask = mask;
state.canary_valid = true;
return;
}
}
bool DueForPoll(CpuTopologyState& state) {
const auto now = std::chrono::steady_clock::now().time_since_epoch();
const s64 now_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(now).count();
s64 next = state.next_poll_ns.load(std::memory_order_relaxed);
if (now_ns < next) {
return false;
}
return state.next_poll_ns.compare_exchange_strong(
next, now_ns + ANDROID_POLICY_POLL_INTERVAL.count(), std::memory_order_relaxed);
}
ThreadPolicy& AcquirePolicyLocked(CpuTopologyState& state, pid_t tid) {
for (auto& policy : state.policies) {
if (policy.tid == tid) {
return policy;
}
}
return state.policies.emplace_back(ThreadPolicy{tid, CoreGroup::Unrestricted, 0, false});
}
void SetCurrentThreadCoreGroup(CoreGroup group) {
const pid_t tid = gettid();
(void)&t_policy_registration;
CoreGroup effective = group;
if (tid == getpid() && group != CoreGroup::Unrestricted) {
LOG_WARNING(Common, "Refusing to place the main thread: the CPU topology is read from it");
effective = CoreGroup::Unrestricted;
}
CpuTopologyState& state = State();
std::scoped_lock topology_lock{state.topology_mutex};
EnsureTopologyLocked(state);
ApplyCoreGroupLocked(state, tid, effective);
std::scoped_lock policy_lock{state.policy_mutex};
AcquirePolicyLocked(state, tid).group = effective;
if (!state.canary_valid) {
SnapshotCanaryLocked(state);
}
}
void RememberCurrentThreadNice(pid_t tid, s32 nice_value) {
(void)&t_policy_registration;
CpuTopologyState& state = State();
std::scoped_lock lock{state.policy_mutex};
ThreadPolicy& policy = AcquirePolicyLocked(state, tid);
policy.nice_value = nice_value;
policy.has_nice = true;
}
} // Anonymous namespace
#endif
#include "common/cpu_features.h"
#ifdef ARCHITECTURE_x86_64
#ifdef _MSC_VER
@@ -446,6 +48,7 @@ void RememberCurrentThreadNice(pid_t tid, s32 nice_value) {
#endif
#include "common/x64/rdtsc.h"
#endif
#include "core/core_timing.h"
namespace Common {
@@ -475,31 +78,21 @@ void SetCurrentThreadPriority(ThreadPriority new_priority) {
}
}();
set_thread_priority(find_thread(NULL), priority);
#elif defined(__ANDROID__)
const int nice_value = NiceValueForPriority(new_priority);
const pid_t tid = gettid();
if (setpriority(PRIO_PROCESS, static_cast<id_t>(tid), nice_value) != 0) {
LOG_WARNING(Common, "Could not set thread nice value to {}: {}", nice_value,
GetLastErrorMsg());
return;
}
RememberCurrentThreadNice(tid, nice_value);
#elif defined(__linux__)
const int nice_value = NiceValueForPriority(new_priority);
if (setpriority(PRIO_PROCESS, 0, nice_value) != 0) {
LOG_DEBUG(Common, "Could not set thread nice value to {}: {}", nice_value,
GetLastErrorMsg());
}
#else
const s32 max_prio = sched_get_priority_max(SCHED_OTHER);
const s32 min_prio = sched_get_priority_min(SCHED_OTHER);
pthread_t this_thread = pthread_self();
const auto scheduling_type = SCHED_OTHER;
s32 max_prio = sched_get_priority_max(scheduling_type);
s32 min_prio = sched_get_priority_min(scheduling_type);
u32 level = (std::max)(u32(new_priority) + 1, 4U);
struct sched_param params;
if (max_prio > min_prio) {
const u32 level = (std::min)(static_cast<u32>(new_priority), 4U);
sched_param params{};
params.sched_priority =
min_prio + static_cast<s32>(static_cast<u32>(max_prio - min_prio) * level) / 4;
pthread_setschedparam(pthread_self(), SCHED_OTHER, &params);
params.sched_priority = min_prio + ((max_prio - min_prio) * level) / 4;
} else {
params.sched_priority = min_prio - ((min_prio - max_prio) * level) / 4;
}
pthread_setschedparam(this_thread, scheduling_type, &params);
#endif
}
@@ -539,94 +132,29 @@ void SetCurrentThreadName(const char* name) {
#endif
}
void SetCurrentThreadToPerformanceCores() {
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) {
#if defined(__ANDROID__)
if (ADPF::AddCurrentThread(ADPF::Session::Render)) {
SetCurrentThreadCoreGroup(CoreGroup::Unrestricted);
return;
}
SetCurrentThreadCoreGroup(CoreGroup::Performance);
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
}
void SetCurrentThreadToEfficiencyCores() {
#if defined(__ANDROID__)
if (ADPF::AddCurrentThread(ADPF::Session::Background)) {
SetCurrentThreadCoreGroup(CoreGroup::Unrestricted);
return;
}
SetCurrentThreadCoreGroup(CoreGroup::Efficiency);
#endif
}
void SetCurrentThreadToBackgroundWork() {
#if defined(__ANDROID__)
ADPF::AddCurrentThread(ADPF::Session::Background);
SetCurrentThreadCoreGroup(CoreGroup::Unrestricted);
#endif
}
void SetCurrentThreadToAllCores() {
#if defined(__ANDROID__)
ADPF::RemoveCurrentThread();
SetCurrentThreadCoreGroup(CoreGroup::Unrestricted);
#endif
}
void RefreshThreadPolicies() {
#if defined(__ANDROID__)
CpuTopologyState& state = State();
std::scoped_lock topology_lock{state.topology_mutex};
RefreshTopologyLocked(state);
std::scoped_lock policy_lock{state.policy_mutex};
std::erase_if(state.policies, [&state](const ThreadPolicy& policy) {
bool gone = false;
if (policy.has_nice &&
setpriority(PRIO_PROCESS, static_cast<id_t>(policy.tid), policy.nice_value) != 0 &&
errno == ESRCH) {
gone = true;
}
if (!gone) {
ApplyCoreGroupLocked(state, policy.tid, policy.group, &gone);
}
return gone;
});
SnapshotCanaryLocked(state);
#endif
}
void PollThreadPolicies() {
#if defined(__ANDROID__)
static const bool needed = !KernelPreservesRequestedAffinity();
if (!needed) {
return;
}
CpuTopologyState& state = State();
if (!DueForPoll(state)) {
return;
}
pid_t tid;
cpu_set_t expected;
{
std::scoped_lock lock{state.topology_mutex};
if (!state.canary_valid) {
return;
}
tid = state.canary_tid;
expected = state.canary_mask;
}
cpu_set_t current;
CPU_ZERO(&current);
if (sched_getaffinity(tid, sizeof(current), &current) == 0 &&
std::memcmp(&current, &expected, sizeof(current)) == 0) {
return;
}
RefreshThreadPolicies();
#endif
}
#ifdef ARCHITECTURE_x86_64
+1 -13
View File
@@ -99,20 +99,8 @@ enum class ThreadPriority : u32 {
Critical = 4,
};
enum class ThreadPlacement : u32 {
Default = 0,
Background = 1,
Efficiency = 2,
};
void SetCurrentThreadPriority(ThreadPriority new_priority);
void SetCurrentThreadName(const char* name);
void SetCurrentThreadToPerformanceCores();
void SetCurrentThreadToEfficiencyCores();
void SetCurrentThreadToBackgroundWork();
void SetCurrentThreadToAllCores();
void RefreshThreadPolicies();
void PollThreadPolicies();
void PinCurrentThreadToPerformanceCore(size_t core_id);
} // namespace Common
+3 -18
View File
@@ -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: Copyright 2020 yuzu Emulator Project
@@ -37,25 +37,10 @@ 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 = {},
ThreadPlacement placement = ThreadPlacement::Default)
explicit StatefulThreadWorker(size_t num_workers, std::string name, StateMaker func = {})
: workers_queued{num_workers}, thread_name{std::move(name)} {
const auto lambda = [this, func, placement](std::stop_token stop_token) {
const auto lambda = [this, func](std::stop_token stop_token) {
Common::SetCurrentThreadName(thread_name.c_str());
if (placement != ThreadPlacement::Default) {
Common::SetCurrentThreadPriority(ThreadPriority::Low);
}
switch (placement) {
case ThreadPlacement::Efficiency:
Common::SetCurrentThreadToEfficiencyCores();
break;
case ThreadPlacement::Background:
Common::SetCurrentThreadToBackgroundWork();
break;
default:
Common::SetCurrentThreadToAllCores();
break;
}
{
[[maybe_unused]] std::conditional_t<with_state, StateType, int> state{func()};
while (!stop_token.stop_requested()) {
+1 -7
View File
@@ -10,7 +10,6 @@
#include "audio_core/audio_core.h"
#include "common/fs/fs.h"
#include "common/logging.h"
#include "common/adpf.h"
#include "common/settings.h"
#include "common/settings_enums.h"
#include "common/string_util.h"
@@ -119,7 +118,6 @@ struct System::Impl {
is_multicore = Settings::values.use_multi_core.GetValue();
extended_memory_layout = Settings::values.memory_layout_mode.GetValue() != Settings::MemoryLayout::Memory_4Gb;
unified_memory = Settings::values.use_unified_memory.GetValue();
core_timing.SetMulticore(is_multicore);
core_timing.Initialize([&system]() { system.RegisterHostThread(); });
@@ -147,8 +145,7 @@ struct System::Impl {
!device_memory.has_value() ||
is_multicore != Settings::values.use_multi_core.GetValue() ||
extended_memory_layout != (Settings::values.memory_layout_mode.GetValue() !=
Settings::MemoryLayout::Memory_4Gb) ||
unified_memory != Settings::values.use_unified_memory.GetValue();
Settings::MemoryLayout::Memory_4Gb);
if (!must_reinitialize) {
return;
@@ -159,7 +156,6 @@ struct System::Impl {
is_multicore = Settings::values.use_multi_core.GetValue();
extended_memory_layout =
Settings::values.memory_layout_mode.GetValue() != Settings::MemoryLayout::Memory_4Gb;
unified_memory = Settings::values.use_unified_memory.GetValue();
Initialize(system);
}
@@ -389,7 +385,6 @@ struct System::Impl {
void ShutdownMainProcess() {
SetShuttingDown(true);
Common::ADPF::Shutdown();
// Reset per-game flags
Settings::values.use_squashed_iterated_blend = false;
@@ -506,7 +501,6 @@ struct System::Impl {
std::atomic_bool is_powered_on{};
bool is_multicore : 1 = false;
bool extended_memory_layout : 1 = false;
bool unified_memory : 1 = false;
bool exit_locked : 1 = false;
bool exit_requested : 1 = false;
bool nvdec_active : 1 = false;
+3 -20
View File
@@ -23,21 +23,6 @@ namespace Core::Timing {
constexpr s64 MAX_SLICE_LENGTH = 10000;
constexpr u32 CPU_CLOCK_BASE_MHZ = 1020;
constexpr u32 CPU_CLOCK_BOOST_MHZ = 1734;
constexpr u32 CPU_CLOCK_OVERCLOCK_MHZ = 2040;
constexpr u32 CpuClockTargetMhz(Settings::CpuClock clock) {
switch (clock) {
case Settings::CpuClock::Boost:
return CPU_CLOCK_BOOST_MHZ;
case Settings::CpuClock::Overclock:
return CPU_CLOCK_OVERCLOCK_MHZ;
default:
return CPU_CLOCK_BASE_MHZ;
}
}
std::shared_ptr<EventType> CreateEvent(std::string name, TimedCallback&& callback) {
return std::make_shared<EventType>(std::move(callback), std::move(name));
}
@@ -73,8 +58,7 @@ void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) {
if (is_multicore) {
timer_thread = std::jthread([this](std::stop_token stop_token) {
Common::SetCurrentThreadName("HostTiming");
Common::SetCurrentThreadPriority(Common::ThreadPriority::VeryHigh);
Common::SetCurrentThreadToPerformanceCores();
Common::SetCurrentThreadPriority(Common::ThreadPriority::High);
on_thread_init();
has_started = true;
@@ -225,9 +209,8 @@ void CoreTiming::ResetTicks() {
u64 CoreTiming::GetClockTicks() const {
u64 fres = is_multicore ? Common::g_wall_clock.GetCNTPCT() : Common::WallClock::CPUTickToCNTPCT(cpu_ticks);
if (const u32 target = CpuClockTargetMhz(Settings::values.cpu_clock.GetValue());
target != CPU_CLOCK_BASE_MHZ) {
fres = fres * target / CPU_CLOCK_BASE_MHZ;
if (auto const overclock = Settings::values.fast_cpu_time.GetValue(); overclock != Settings::CpuClock::Off) {
fres = u64(f64(fres) * (1.7 + 0.3 * u32(overclock)));
}
if (::Settings::values.sync_core_speed.GetValue()) {
auto const ticks = f64(fres);
+6 -1
View File
@@ -174,7 +174,12 @@ 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);
Common::SetCurrentThreadToPerformanceCores();
#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
auto& data = core_data[core];
data.host_context = Common::Fiber::ThreadToFiber();
+1 -13
View File
@@ -1,6 +1,3 @@
// SPDX-FileCopyrightText: Copyright 2026 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
@@ -15,18 +12,9 @@ constexpr size_t VirtualReserveSize = 1ULL << 38;
constexpr size_t VirtualReserveSize = 1ULL << 39;
#endif
namespace {
size_t ApplicationPoolOffset() {
using Init = Kernel::Board::Nintendo::Nx::KSystemControl::Init;
const size_t dram_size = Init::GetIntendedMemorySize();
const size_t application_pool_size = Init::GetApplicationPoolSize();
return dram_size > application_pool_size ? dram_size - application_pool_size : 0;
}
}
DeviceMemory::DeviceMemory()
: buffer{Kernel::Board::Nintendo::Nx::KSystemControl::Init::GetIntendedMemorySize(),
VirtualReserveSize, ApplicationPoolOffset()} {}
VirtualReserveSize} {}
DeviceMemory::~DeviceMemory() = default;
-35
View File
@@ -20,8 +20,6 @@
#include "common/scratch_buffer.h"
#include "common/virtual_buffer.h"
struct AHardwareBuffer;
namespace Core {
constexpr size_t DEVICE_PAGEBITS = 12ULL;
@@ -97,34 +95,6 @@ public:
ApplyOpOnPAddr(address, buffer, operation);
}
u8* GetPhysicalBase() noexcept {
return reinterpret_cast<u8*>(physical_base);
}
const u8* GetPhysicalBase() const noexcept {
return reinterpret_cast<const u8*>(physical_base);
}
size_t GetPhysicalSize() const noexcept {
return physical_size;
}
std::span<AHardwareBuffer* const> GetBackingHardwareBuffers() const noexcept {
return ahb_windows;
}
size_t GetBackingHardwareBufferWindowSize() const noexcept {
return ahb_window_size;
}
size_t GetBackingHardwareBufferBase() const noexcept {
return ahb_base;
}
bool IsBackingShared() const noexcept {
return backing_is_shared;
}
PAddr GetPhysicalRawAddressFromDAddr(DAddr address) const {
PAddr subbits = PAddr(address & page_mask);
auto paddr = tracked_entries[(address >> page_bits)].compressed_physical_ptr;
@@ -201,11 +171,6 @@ private:
std::unique_ptr<DeviceMemoryManagerAllocator<Traits>> impl;
const uintptr_t physical_base;
const size_t physical_size;
const std::span<AHardwareBuffer* const> ahb_windows;
const size_t ahb_window_size;
const size_t ahb_base;
const bool backing_is_shared;
DeviceInterface* device_inter;
struct TrackedEntry {
-5
View File
@@ -171,11 +171,6 @@ struct DeviceMemoryManagerAllocator {
template <typename Traits>
DeviceMemoryManager<Traits>::DeviceMemoryManager(const DeviceMemory& device_memory_)
: physical_base{uintptr_t(device_memory_.buffer.BackingBasePointer())}
, physical_size{device_memory_.buffer.BackingSize()}
, ahb_windows{device_memory_.buffer.BackingHardwareBuffers()}
, ahb_window_size{device_memory_.buffer.BackingHardwareBufferWindowSize()}
, ahb_base{device_memory_.buffer.BackingHardwareBufferBase()}
, backing_is_shared{device_memory_.buffer.IsBackingShared()}
, device_inter{nullptr}
, compressed_device_addr(1ULL << ((Settings::values.memory_layout_mode.GetValue() == Settings::MemoryLayout::Memory_4Gb ? physical_min_bits : physical_max_bits) - Memory::YUZU_PAGEBITS))
, tracked_entries(device_as_size >> Memory::YUZU_PAGEBITS)
@@ -6,7 +6,6 @@
#include <boost/container/small_vector.hpp>
#include "common/adpf.h"
#include "common/assert.h"
#include "common/logging.h"
#include "core/core.h"
@@ -87,16 +86,11 @@ void nvdisp_disp0::Composite(std::span<const Nvnflinger::HwcLayer> sorted_layers
}
system.GPU().RequestComposite(std::move(output_layers), std::move(output_fences));
Common::ADPF::ReportFrameInterval();
system.SpeedLimiter().DoSpeedLimiting(system.CoreTiming().GetGlobalTimeUs());
system.GetPerfStats().EndSystemFrame();
system.GetPerfStats().BeginSystemFrame();
}
void nvdisp_disp0::WaitForComposite() {
system.GPU().WaitForComposite();
}
Kernel::KEvent* nvdisp_disp0::QueryEvent(u32 event_id) {
LOG_CRITICAL(Service_NVDRV, "Unknown DISP Event {}", event_id);
return nullptr;
@@ -1,6 +1,3 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -40,8 +37,6 @@ public:
/// Performs a screen flip, compositing each buffer.
void Composite(std::span<const Nvnflinger::HwcLayer> sorted_layers);
void WaitForComposite();
Kernel::KEvent* QueryEvent(u32 event_id) override;
private:
@@ -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: Copyright 2024 yuzu Emulator Project
@@ -57,8 +57,18 @@ u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, Display& display,
// Set default speed limit to 100%.
*out_speed_scale = 1.0f;
nvdisp.WaitForComposite();
this->ReleaseFramebuffersLocked(display);
// If no layers are available, skip the logic.
bool any_visible = false;
for (auto& layer : display.stack.layers) {
if (layer->visible) {
any_visible = true;
break;
}
}
if (!any_visible) {
*out_speed_scale = 1.0f;
return 1;
}
// Determine the number of vsync periods to wait before composing again.
std::optional<s32> swap_interval{};
@@ -148,30 +158,55 @@ u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, Display& display,
nvdisp.Composite(composition_stack);
}
// Batch framebuffer releases, instead of one-into-one.
std::vector<std::pair<Layer*, Framebuffer*>> to_release;
for (auto& [layer_id, framebuffer] : m_framebuffers) {
if (!framebuffer.is_acquired)
continue;
auto layer = display.stack.FindLayer(layer_id);
if (!layer)
continue;
// Overlay layers always release after every compose
// Non-overlay layers release based on their swap interval
if (layer->is_overlay || framebuffer.release_frame_number <= m_frame_number) {
to_release.emplace_back(layer.get(), &framebuffer);
}
}
for (auto& [layer, framebuffer] : to_release) {
layer->buffer_item_consumer->ReleaseBuffer(framebuffer->item, android::Fence::NoFence());
framebuffer->is_acquired = false;
}
// Advance by 1 frame (60 FPS compositing)
m_frame_number += 1;
return 1;
}
void HardwareComposer::ReleaseFramebuffersLocked(Display& display) {
// Release any necessary framebuffers (non-overlay layers only, as overlays are already released above).
for (auto& [layer_id, framebuffer] : m_framebuffers) {
if (!framebuffer.is_acquired) {
// Already released.
continue;
}
const auto layer = display.stack.FindLayer(layer_id);
if (!layer) {
if (framebuffer.release_frame_number > m_frame_number) {
continue;
}
if (!layer->is_overlay && framebuffer.release_frame_number > m_frame_number) {
continue;
}
if (const auto layer = display.stack.FindLayer(layer_id); layer != nullptr) {
// Skip overlay layers as they were already released above
if (layer->is_overlay) {
continue;
}
layer->buffer_item_consumer->ReleaseBuffer(framebuffer.item, android::Fence::NoFence());
framebuffer.is_acquired = false;
// TODO: support release fence
// This is needed to prevent screen tearing
layer->buffer_item_consumer->ReleaseBuffer(framebuffer.item, android::Fence::NoFence());
framebuffer.is_acquired = false;
}
}
return 1;
}
void HardwareComposer::RemoveLayerLocked(Display& display, ConsumerId consumer_id) {
@@ -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: Copyright 2024 yuzu Emulator Project
@@ -52,7 +52,6 @@ private:
private:
bool TryAcquireFramebufferLocked(Layer& layer, Framebuffer& framebuffer);
CacheStatus CacheFramebufferLocked(Layer& layer, ConsumerId consumer_id);
void ReleaseFramebuffersLocked(Display& display);
};
} // namespace Service::Nvnflinger
-32
View File
@@ -4,11 +4,7 @@
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <algorithm>
#include "common/adpf.h"
#include "common/settings.h"
#include "common/thread.h"
#include "core/core.h"
#include "core/core_timing.h"
#include "core/hle/service/vi/conductor.h"
@@ -18,8 +14,6 @@
constexpr auto FrameNs = std::chrono::nanoseconds{1000000000 / 60};
constexpr s64 UNLOCKED_TARGET_DIVISOR = 4;
namespace Service::VI {
Conductor::Conductor(Core::System& system, Container& container, DisplayList& displays)
@@ -74,9 +68,6 @@ void Conductor::UnlinkVsyncEvent(u64 display_id, Event* event) {
}
void Conductor::ProcessVsync() {
Common::PollThreadPolicies();
Common::ADPF::SetTargetWorkDuration(std::chrono::nanoseconds{this->GetFramePeriodNs()});
for (auto& [display_id, manager] : m_vsync_managers) {
m_container.ComposeOnDisplay(&m_swap_interval, &m_compose_speed_scale, display_id);
manager.SignalVsync(m_system.Kernel());
@@ -85,8 +76,6 @@ void Conductor::ProcessVsync() {
void Conductor::VsyncThread(std::stop_token token) {
Common::SetCurrentThreadName("VSyncThread");
Common::SetCurrentThreadPriority(Common::ThreadPriority::VeryHigh);
Common::SetCurrentThreadToPerformanceCores();
while (!token.stop_requested()) {
m_signal.Wait();
@@ -125,25 +114,4 @@ s64 Conductor::GetNextTicks() const {
return static_cast<s64>(speed_scale * (1000000000.f / effective_fps));
}
s64 Conductor::GetFramePeriodNs() const {
const auto& settings = Settings::values;
f32 speed_scale = 1.f;
bool unlocked = false;
if (settings.use_multi_core.GetValue()) {
if (settings.use_speed_limit.GetValue()) {
speed_scale = 100.f / Settings::SpeedLimit();
} else {
unlocked = true;
}
}
speed_scale /= m_compose_speed_scale;
const f32 effective_fps = 60.f / static_cast<f32>(m_swap_interval);
s64 period = static_cast<s64>(speed_scale * (1000000000.f / effective_fps));
if (unlocked) {
period /= UNLOCKED_TARGET_DIVISOR;
}
return std::clamp<s64>(period, 1'000'000, 100'000'000);
}
} // namespace Service::VI
-1
View File
@@ -44,7 +44,6 @@ private:
void ProcessVsync();
void VsyncThread(std::stop_token token);
s64 GetNextTicks() const;
s64 GetFramePeriodNs() const;
private:
Core::System& m_system;
+2 -5
View File
@@ -504,12 +504,9 @@ void NPad::OnUpdate(Kernel::KernelCore& kernel, const Core::Timing::CoreTiming&
for (std::size_t i = 0; i < controller_data[aruid_index].size(); ++i) {
auto& controller = controller_data[aruid_index][i];
controller.shared_memory = &data->shared_memory_format->npad.npad_entry[i].internal_state;
controller.shared_memory =
&data->shared_memory_format->npad.npad_entry[i].internal_state;
auto* npad = controller.shared_memory;
if (!npad || !controller.device) {
LOG_WARNING(Service_HID, "No device for {}", i);
continue;
}
const auto& controller_type = controller.device->GetNpadStyleIndex();
+16 -15
View File
@@ -92,9 +92,12 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent) {
tr("Change the accuracy of the emulated CPU (for debugging only)."));
INSERT(Settings, cpu_backend, tr("Backend:"), QString());
INSERT(Settings, cpu_clock, tr("CPU Clocks"),
tr("Raises the clock the emulated CPU reports, which removes some FPS limiters.\n"
"Weaker CPUs may see reduced performance, and certain games may behave improperly."));
INSERT(Settings, fast_cpu_time, tr("CPU Overclock"),
tr("Overclocks the emulated CPU to remove some FPS limiters. Weaker CPUs may see "
"reduced performance, "
"and certain games may behave improperly.\nUse Boost (1700MHz) to run at the "
"Switch's highest native "
"clock, or Fast (2000MHz) to run at 2x clock."));
INSERT(Settings, use_custom_cpu_ticks, QString(), QString());
INSERT(Settings, cpu_ticks, tr("Custom CPU Ticks"),
@@ -227,11 +230,9 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent) {
tr("Preserves GPU-modified data by reading it back before uploading.\nSome games require this to render certain effects properly."));
INSERT(Settings, use_asynchronous_shaders, tr("Enable asynchronous shader compilation"),
tr("May reduce shader stutter."));
INSERT(Settings, use_unified_memory, tr("Enable unified memory access"),
tr("Lets the GPU write buffer readbacks directly into guest memory."));
INSERT(Settings, gpu_clock, tr("GPU Clocks"),
tr("Makes the game believe GPU work finishes faster than it does, so it stops lowering "
"resolution and render distance to fit the Switch's clocks."));
INSERT(Settings, fast_gpu_time, tr("Fast GPU Time"),
tr("Overclocks the emulated GPU to increase dynamic resolution and render "
"distance.\nUse 256 for maximal performance and 512 for maximal graphics fidelity."));
INSERT(Settings, gpu_unswizzle_enabled, tr("GPU Unswizzle"),
tr("Accelerates BCn 3D texture decoding using GPU compute.\n"
"Disable if experiencing crashes or graphical glitches."));
@@ -638,9 +639,9 @@ std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QObject* parent) {
}});
translations->insert({Settings::EnumMetadata<Settings::CpuClock>::Index(),
{
PAIR(CpuClock, Normal, tr("Normal")),
PAIR(CpuClock, Boost, tr("Boost")),
PAIR(CpuClock, Overclock, tr("Overclock")),
PAIR(CpuClock, Off, tr("Off")),
PAIR(CpuClock, Boost, tr("Boost (1700MHz)")),
PAIR(CpuClock, Fast, tr("Fast (2000MHz)")),
}});
translations->insert(
{Settings::EnumMetadata<Settings::ConfirmStop>::Index(),
@@ -649,11 +650,11 @@ std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QObject* parent) {
PAIR(ConfirmStop, Ask_Based_On_Game, tr("Only if game specifies not to stop")),
PAIR(ConfirmStop, Ask_Never, tr("Never ask")),
}});
translations->insert({Settings::EnumMetadata<Settings::GpuClock>::Index(),
translations->insert({Settings::EnumMetadata<Settings::GpuOverclock>::Index(),
{
PAIR(GpuClock, Normal, tr("Normal")),
PAIR(GpuClock, Boost, tr("Boost")),
PAIR(GpuClock, Overclock, tr("Overclock")),
PAIR(GpuOverclock, Normal, tr("Off")),
PAIR(GpuOverclock, Medium, tr("Medium (256)")),
PAIR(GpuOverclock, High, tr("High (512)")),
}});
translations->insert({Settings::EnumMetadata<Settings::GpuUnswizzleSize>::Index(),
{
-2
View File
@@ -158,8 +158,6 @@ add_library(video_core STATIC
renderer_vulkan/vk_compute_pass.h
renderer_vulkan/vk_compute_pipeline.cpp
renderer_vulkan/vk_compute_pipeline.h
renderer_vulkan/vk_descriptor_buffer.cpp
renderer_vulkan/vk_descriptor_buffer.h
renderer_vulkan/vk_descriptor_pool.cpp
renderer_vulkan/vk_descriptor_pool.h
renderer_vulkan/vk_fence_manager.cpp
+35 -242
View File
@@ -571,11 +571,7 @@ void BufferCache<P>::AccumulateFlushes() {
template <class P>
bool BufferCache<P>::ShouldWaitAsyncFlushes() const noexcept {
if (async_buffers.empty()) {
return false;
}
return async_buffers.front().has_value() ||
!pending_downloads.front().unified_copies.empty();
return (!async_buffers.empty() && async_buffers.front().has_value());
}
template <class P>
@@ -583,7 +579,6 @@ void BufferCache<P>::CommitAsyncFlushesHigh() {
AccumulateFlushes();
if (committed_gpu_modified_ranges.empty()) {
pending_downloads.emplace_back();
async_buffers.emplace_back(std::optional<Async_Buffer>{});
return;
}
@@ -643,83 +638,27 @@ void BufferCache<P>::CommitAsyncFlushesHigh() {
}
committed_gpu_modified_ranges.clear();
if (downloads.empty()) {
pending_downloads.emplace_back();
async_buffers.emplace_back(std::optional<Async_Buffer>{});
return;
}
struct QueuedUnifiedCopy {
u64 window;
BufferId buffer_id;
boost::container::small_vector<BufferCopy, 16> copies;
};
AsyncDownloadBatch batch;
boost::container::small_vector<std::pair<BufferCopy, BufferId>, 16> staging_downloads;
boost::container::small_vector<QueuedUnifiedCopy, 4> unified_copy_queue;
boost::container::small_vector<u64, 4> window_ids;
UnifiedWindowGroups groups;
u64 staging_size_bytes = 0;
for (auto& [copy, buffer_id] : downloads) {
Buffer& buffer = slot_buffers[buffer_id];
const DAddr orig_device_addr = buffer.CpuAddr() + copy.src_offset;
bool unified = false;
if constexpr (USE_UNIFIED_MEMORY) {
if (runtime.HasUnifiedMemory()) {
window_ids.clear();
groups.clear();
unified = ResolveUnifiedWindows(orig_device_addr, copy.src_offset, copy.size,
window_ids, groups);
}
}
BufferCopy record{copy};
record.src_offset = static_cast<size_t>(orig_device_addr);
if (unified) {
async_downloads.Add(orig_device_addr, copy.size);
buffer.MarkUsage(copy.src_offset, copy.size);
for (size_t i = 0; i < window_ids.size(); ++i) {
unified_copy_queue.push_back(
QueuedUnifiedCopy{window_ids[i], buffer_id, std::move(groups[i])});
}
batch.unified_copies.push_back(record);
continue;
}
copy.dst_offset = staging_size_bytes;
constexpr u64 align = 64ULL;
staging_size_bytes += (copy.size + align - 1) & ~(align - 1ULL);
staging_downloads.push_back({copy, buffer_id});
}
std::optional<Async_Buffer> download_staging;
if (!staging_downloads.empty()) {
download_staging = runtime.DownloadStagingBuffer(staging_size_bytes, true);
}
auto download_staging = runtime.DownloadStagingBuffer(total_size_bytes, true);
boost::container::small_vector<BufferCopy, 4> normalized_copies;
runtime.PreCopyBarrier();
for (auto& [copy, buffer_id] : staging_downloads) {
copy.dst_offset += download_staging->offset;
for (auto& [copy, buffer_id] : downloads) {
copy.dst_offset += download_staging.offset;
const std::array copies{copy};
BufferCopy second_copy{copy};
Buffer& buffer = slot_buffers[buffer_id];
BufferCopy record{copy};
record.src_offset = static_cast<size_t>(buffer.CpuAddr()) + copy.src_offset;
const DAddr orig_device_addr = static_cast<DAddr>(record.src_offset);
second_copy.src_offset = static_cast<size_t>(buffer.CpuAddr()) + copy.src_offset;
const DAddr orig_device_addr = static_cast<DAddr>(second_copy.src_offset);
async_downloads.Add(orig_device_addr, copy.size);
buffer.MarkUsage(copy.src_offset, copy.size);
runtime.CopyBuffer(download_staging->buffer, buffer, copies, false);
batch.staging_copies.push_back(record);
}
if constexpr (USE_UNIFIED_MEMORY) {
for (const auto& queued : unified_copy_queue) {
const std::span<const BufferCopy> group_span(queued.copies.data(),
queued.copies.size());
runtime.CopyToUnifiedMemory(queued.window, slot_buffers[queued.buffer_id], group_span);
}
if (!unified_copy_queue.empty()) {
runtime.UnifiedMemoryHostBarrier();
}
runtime.CopyBuffer(download_staging.buffer, buffer, copies, false);
normalized_copies.push_back(second_copy);
}
runtime.PostCopyBarrier();
pending_downloads.emplace_back(std::move(batch));
async_buffers.emplace_back(std::move(download_staging));
pending_downloads.emplace_back(std::move(normalized_copies));
async_buffers.emplace_back(download_staging);
}
template <class P>
@@ -734,49 +673,32 @@ void BufferCache<P>::PopAsyncFlushes() {
template <class P>
void BufferCache<P>::PopAsyncBuffers() {
struct Writeback {
DAddr addr;
const u8* src;
u64 size;
};
boost::container::small_vector<Writeback, 8> writebacks;
{
std::scoped_lock lock{mutex};
if (async_buffers.empty()) {
return;
}
auto& batch = pending_downloads.front();
auto& async_buffer = async_buffers.front();
if (async_buffer.has_value()) {
const u8* base = async_buffer->mapped_span.data();
const size_t base_offset = async_buffer->offset;
for (const auto& copy : batch.staging_copies) {
const DAddr device_addr = static_cast<DAddr>(copy.src_offset);
const u64 dst_offset = copy.dst_offset - base_offset;
const u8* read_mapped_memory = base + dst_offset;
async_downloads.ForEachInRange(
device_addr, copy.size, [&](DAddr start, DAddr end, s32) {
writebacks.push_back(
{start, &read_mapped_memory[start - device_addr], end - start});
});
async_downloads.Subtract(device_addr, copy.size, [&](DAddr start, DAddr end) {
gpu_modified_ranges.Subtract(start, end - start);
});
}
async_buffers_death_ring.emplace_back(*async_buffer);
}
for (const auto& copy : batch.unified_copies) {
const DAddr device_addr = static_cast<DAddr>(copy.src_offset);
async_downloads.Subtract(device_addr, copy.size, [&](DAddr start, DAddr end) {
gpu_modified_ranges.Subtract(start, end - start);
});
}
if (async_buffers.empty()) {
return;
}
if (!async_buffers.front().has_value()) {
async_buffers.pop_front();
pending_downloads.pop_front();
return;
}
for (const auto& wb : writebacks) {
device_memory.WriteBlockUnsafe(wb.addr, wb.src, wb.size);
auto& downloads = pending_downloads.front();
auto& async_buffer = async_buffers.front();
u8* base = async_buffer->mapped_span.data();
const size_t base_offset = async_buffer->offset;
for (const auto& copy : downloads) {
const DAddr device_addr = static_cast<DAddr>(copy.src_offset);
const u64 dst_offset = copy.dst_offset - base_offset;
const u8* read_mapped_memory = base + dst_offset;
async_downloads.ForEachInRange(device_addr, copy.size, [&](DAddr start, DAddr end, s32) {
device_memory.WriteBlockUnsafe(start, &read_mapped_memory[start - device_addr],
end - start);
});
async_downloads.Subtract(device_addr, copy.size, [&](DAddr start, DAddr end) {
gpu_modified_ranges.Subtract(start, end - start);
});
}
async_buffers_death_ring.emplace_back(*async_buffer);
async_buffers.pop_front();
pending_downloads.pop_front();
}
template <class P>
@@ -1741,9 +1663,6 @@ bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si
template <class P>
void BufferCache<P>::UploadMemory(Buffer& buffer, u64 total_size_bytes, u64 largest_copy,
std::span<BufferCopy> copies) {
if (TryUnifiedUploadMemory(buffer, copies)) {
return;
}
if constexpr (USE_MEMORY_MAPS_FOR_UPLOADS) {
MappedUploadMemory(buffer, total_size_bytes, copies);
} else {
@@ -1780,126 +1699,6 @@ void BufferCache<P>::ImmediateUploadMemory([[maybe_unused]] Buffer& buffer,
}
}
template <class P>
bool BufferCache<P>::ResolveUnifiedWindows(
[[maybe_unused]] DAddr device_addr, [[maybe_unused]] u64 buffer_offset,
[[maybe_unused]] u64 size, [[maybe_unused]] boost::container::small_vector<u64, 4>& window_ids,
[[maybe_unused]] UnifiedWindowGroups& groups) {
if constexpr (USE_UNIFIED_MEMORY) {
const u8* const physical_base = device_memory.GetPhysicalBase();
const u64 unified_base = runtime.UnifiedMemoryBase();
const u64 unified_size = runtime.UnifiedMemorySize();
const u64 window_size = runtime.UnifiedMemoryWindowSize();
if (window_size == 0) {
return false;
}
const auto group_for = [&](u64 window) -> boost::container::small_vector<BufferCopy, 16>& {
for (size_t i = 0; i < window_ids.size(); ++i) {
if (window_ids[i] == window) {
return groups[i];
}
}
window_ids.push_back(window);
groups.emplace_back();
return groups.back();
};
u64 downloaded = 0;
while (downloaded < size) {
const DAddr page_addr = device_addr + downloaded;
const u8* const ptr = device_memory.GetPointer<u8>(page_addr);
if (ptr == nullptr) {
return false;
}
const u64 page_offset = page_addr & Core::DEVICE_PAGEMASK;
u64 chunk = (std::min)(size - downloaded,
static_cast<u64>(Core::DEVICE_PAGESIZE) - page_offset);
const u64 phys_offset = static_cast<u64>(ptr - physical_base);
if (phys_offset < unified_base || phys_offset - unified_base + chunk > unified_size) {
return false;
}
const u64 relative = phys_offset - unified_base;
const u64 window = relative / window_size;
const u64 local_offset = relative % window_size;
chunk = (std::min)(chunk, window_size - local_offset);
auto& group = group_for(window);
if (!group.empty()) {
BufferCopy& last = group.back();
if (last.src_offset + last.size == buffer_offset + downloaded &&
last.dst_offset + last.size == local_offset) {
last.size += chunk;
downloaded += chunk;
continue;
}
}
group.push_back(BufferCopy{
.src_offset = buffer_offset + downloaded,
.dst_offset = local_offset,
.size = chunk,
});
downloaded += chunk;
}
return true;
} else {
return false;
}
}
template <class P>
bool BufferCache<P>::TryUnifiedDownloadMemory([[maybe_unused]] Buffer& buffer,
[[maybe_unused]] std::span<BufferCopy> copies) {
if constexpr (USE_UNIFIED_MEMORY) {
boost::container::small_vector<u64, 4> window_ids;
UnifiedWindowGroups groups;
for (const BufferCopy& copy : copies) {
if (!ResolveUnifiedWindows(buffer.CpuAddr() + copy.src_offset, copy.src_offset,
copy.size, window_ids, groups)) {
return false;
}
}
for (const BufferCopy& copy : copies) {
buffer.MarkUsage(copy.src_offset, copy.size);
}
runtime.PreCopyBarrier();
for (size_t i = 0; i < window_ids.size(); ++i) {
const std::span<const BufferCopy> group_span(groups[i].data(), groups[i].size());
runtime.CopyToUnifiedMemory(window_ids[i], buffer, group_span);
}
runtime.UnifiedMemoryHostBarrier();
runtime.Finish();
return true;
} else {
return false;
}
}
template <class P>
bool BufferCache<P>::TryUnifiedUploadMemory([[maybe_unused]] Buffer& buffer,
[[maybe_unused]] std::span<BufferCopy> copies) {
if constexpr (USE_UNIFIED_UPLOADS) {
if (Settings::values.enable_gpu_buffer_readback.GetValue()) {
return false;
}
boost::container::small_vector<u64, 4> window_ids;
UnifiedWindowGroups groups;
for (const BufferCopy& copy : copies) {
if (!ResolveUnifiedWindows(buffer.CpuAddr() + copy.dst_offset, copy.dst_offset,
copy.size, window_ids, groups)) {
return false;
}
}
runtime.UnifiedMemoryUploadBarrier();
runtime.PreCopyBarrier();
for (size_t i = 0; i < window_ids.size(); ++i) {
const std::span<const BufferCopy> group_span(groups[i].data(), groups[i].size());
runtime.CopyFromUnifiedMemory(window_ids[i], buffer, group_span);
}
runtime.PostCopyBarrier();
return true;
} else {
return false;
}
}
template <class P>
void BufferCache<P>::MappedUploadMemory([[maybe_unused]] Buffer& buffer,
[[maybe_unused]] u64 total_size_bytes,
@@ -2003,12 +1802,6 @@ void BufferCache<P>::DownloadBufferMemory(Buffer& buffer, DAddr device_addr, u64
}
if constexpr (USE_MEMORY_MAPS) {
if constexpr (USE_UNIFIED_MEMORY) {
if (runtime.HasUnifiedMemory() &&
TryUnifiedDownloadMemory(buffer, std::span(copies.data(), copies.size()))) {
return;
}
}
auto download_staging = runtime.DownloadStagingBuffer(total_size_bytes);
const u8* const mapped_memory = download_staging.mapped_span.data();
const std::span<BufferCopy> copies_span(copies.data(), copies.data() + copies.size());
@@ -180,8 +180,6 @@ class BufferCache : public VideoCommon::ChannelSetupCaches<BufferCacheChannelInf
static constexpr bool USE_MEMORY_MAPS = P::USE_MEMORY_MAPS;
static constexpr bool SEPARATE_IMAGE_BUFFERS_BINDINGS = P::SEPARATE_IMAGE_BUFFER_BINDINGS;
static constexpr bool USE_MEMORY_MAPS_FOR_UPLOADS = P::USE_MEMORY_MAPS_FOR_UPLOADS;
static constexpr bool USE_UNIFIED_MEMORY = P::USE_UNIFIED_MEMORY;
static constexpr bool USE_UNIFIED_UPLOADS = P::USE_UNIFIED_UPLOADS;
#ifdef YUZU_LEGACY
static constexpr s64 TARGET_THRESHOLD = 3_GiB;
@@ -445,17 +443,6 @@ private:
void MappedUploadMemory(Buffer& buffer, u64 total_size_bytes, std::span<BufferCopy> copies);
bool TryUnifiedDownloadMemory(Buffer& buffer, std::span<BufferCopy> copies);
bool TryUnifiedUploadMemory(Buffer& buffer, std::span<BufferCopy> copies);
using UnifiedWindowGroups =
boost::container::small_vector<boost::container::small_vector<BufferCopy, 16>, 4>;
bool ResolveUnifiedWindows(DAddr device_addr, u64 buffer_offset, u64 size,
boost::container::small_vector<u64, 4>& window_ids,
UnifiedWindowGroups& groups);
void DownloadBufferMemory(Buffer& buffer_id);
void DownloadBufferMemory(Buffer& buffer_id, DAddr device_addr, u64 size);
@@ -511,14 +498,9 @@ private:
std::deque<Common::RangeSet<DAddr>> committed_gpu_modified_ranges;
// Async Buffers
struct AsyncDownloadBatch {
boost::container::small_vector<BufferCopy, 4> staging_copies;
boost::container::small_vector<BufferCopy, 4> unified_copies;
};
Common::OverlapRangeSet<DAddr> async_downloads;
std::deque<std::optional<Async_Buffer>> async_buffers;
std::deque<AsyncDownloadBatch> pending_downloads;
std::deque<boost::container::small_vector<BufferCopy, 4>> pending_downloads;
std::optional<Async_Buffer> current_buffer;
std::deque<Async_Buffer> async_buffers_death_ring;
-1
View File
@@ -195,7 +195,6 @@ private:
void ReleaseThreadFunc(std::stop_token stop_token) {
Common::SetCurrentThreadName("GPUFencingThread");
Common::SetCurrentThreadPriority(Common::ThreadPriority::High);
Common::SetCurrentThreadToPerformanceCores();
TFence current_fence;
std::deque<std::function<void()>> current_operations;
+29 -57
View File
@@ -10,7 +10,6 @@
#include <condition_variable>
#include <list>
#include <memory>
#include <utility>
#include "common/assert.h"
#include "common/settings.h"
@@ -40,19 +39,6 @@
namespace Tegra {
namespace {
constexpr u64 GpuClockMultiplier(Settings::GpuClock clock) {
switch (clock) {
case Settings::GpuClock::Boost:
return 256;
case Settings::GpuClock::Overclock:
return 512;
default:
return 1;
}
}
} // Anonymous namespace
struct GPU::Impl {
explicit Impl(Core::System& system_, bool is_async_, bool use_nvdec_)
: system{system_}
@@ -130,7 +116,7 @@ struct GPU::Impl {
[[nodiscard]] u64 RequestSyncOperation(Func&& action) {
std::unique_lock lck{sync_request_mutex};
const u64 fence = ++last_sync_fence;
sync_requests.emplace_back(std::forward<Func>(action));
sync_requests.emplace_back(action);
return fence;
}
@@ -159,8 +145,14 @@ struct GPU::Impl {
}
[[nodiscard]] u64 GetTicks() const {
const u64 gpu_tick = system.CoreTiming().GetGPUTicks();
return gpu_tick / GpuClockMultiplier(Settings::values.gpu_clock.GetValue());
u64 gpu_tick = system.CoreTiming().GetGPUTicks();
Settings::GpuOverclock overclock = Settings::values.fast_gpu_time.GetValue();
if (overclock != Settings::GpuOverclock::Normal) {
gpu_tick /= 256 * u64(overclock);
}
return gpu_tick;
}
void RendererFrameEndNotify() {
@@ -233,9 +225,9 @@ struct GPU::Impl {
}
void RequestComposite(std::vector<Tegra::FramebufferConfig>&& layers, std::vector<Service::Nvidia::NvFence>&& fences) {
const size_t num_fences{fences.size()};
size_t num_fences{fences.size()};
size_t current_request_counter{};
if (num_fences != 0) {
{
std::unique_lock<std::mutex> lk(request_swap_mutex);
if (free_swap_counters.empty()) {
current_request_counter = request_swap_counters.size();
@@ -246,42 +238,27 @@ struct GPU::Impl {
free_swap_counters.pop_front();
}
}
pending_composite_fence = RequestSyncOperation(
[this, current_request_counter, num_fences, composite_layers = std::move(layers),
composite_fences = std::move(fences)] {
if (num_fences == 0) {
renderer->Composite(composite_layers);
return;
}
auto& syncpoint_manager = system.Host1x().GetSyncpointManager();
const auto executer = [this, current_request_counter, composite_layers]() {
{
std::unique_lock<std::mutex> lk(request_swap_mutex);
if (--request_swap_counters[current_request_counter] != 0) {
return;
}
free_swap_counters.push_back(current_request_counter);
const auto wait_fence = RequestSyncOperation([this, current_request_counter, &layers, &fences, num_fences] {
auto& syncpoint_manager = system.Host1x().GetSyncpointManager();
if (num_fences == 0) {
renderer->Composite(layers);
}
const auto executer = [this, current_request_counter, layers_copy = layers]() {
{
std::unique_lock<std::mutex> lk(request_swap_mutex);
if (--request_swap_counters[current_request_counter] != 0) {
return;
}
renderer->Composite(composite_layers);
};
for (size_t i = 0; i < num_fences; i++) {
syncpoint_manager.RegisterGuestAction(composite_fences[i].id,
composite_fences[i].value, executer);
free_swap_counters.push_back(current_request_counter);
}
});
renderer->Composite(layers_copy);
};
for (size_t i = 0; i < num_fences; i++) {
syncpoint_manager.RegisterGuestAction(fences[i].id, fences[i].value, executer);
}
});
gpu_thread.TickGPU(is_async);
}
void WaitForComposite() {
const u64 fence = pending_composite_fence;
if (fence == 0) {
return;
}
pending_composite_fence = 0;
if (shutting_down.load(std::memory_order_relaxed)) {
return;
}
WaitForSyncOperation(fence);
WaitForSyncOperation(wait_fence);
}
std::vector<u8> GetAppletCaptureBuffer() {
@@ -334,7 +311,6 @@ struct GPU::Impl {
std::deque<size_t> free_swap_counters;
std::deque<size_t> request_swap_counters;
std::mutex request_swap_mutex;
u64 pending_composite_fence{};
};
GPU::GPU(Core::System& system, bool is_async, bool use_nvdec)
@@ -452,10 +428,6 @@ void GPU::RequestComposite(std::vector<Tegra::FramebufferConfig>&& layers,
impl->RequestComposite(std::move(layers), std::move(fences));
}
void GPU::WaitForComposite() {
impl->WaitForComposite();
}
std::vector<u8> GPU::GetAppletCaptureBuffer() {
return impl->GetAppletCaptureBuffer();
}
+1 -3
View File
@@ -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: Copyright 2018 yuzu Emulator Project
@@ -218,8 +218,6 @@ public:
void RequestComposite(std::vector<Tegra::FramebufferConfig>&& layers,
std::vector<Service::Nvidia::NvFence>&& fences);
void WaitForComposite();
std::vector<u8> GetAppletCaptureBuffer();
/// Performs any additional setup necessary in order to begin GPU emulation.
-1
View File
@@ -30,7 +30,6 @@ 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();
@@ -261,8 +261,6 @@ struct BufferCacheParams {
// TODO: Investigate why OpenGL seems to perform worse with persistently mapped buffer uploads
static constexpr bool USE_MEMORY_MAPS_FOR_UPLOADS = false;
static constexpr bool USE_UNIFIED_MEMORY = false;
static constexpr bool USE_UNIFIED_UPLOADS = false;
};
using BufferCache = VideoCommon::BufferCache<BufferCacheParams>;
@@ -47,93 +47,6 @@ using Shader::Backend::SPIRV::NUM_TEXTURE_AND_IMAGE_SCALING_WORDS;
return std::nullopt;
}
[[nodiscard]] inline VkDeviceSize DescriptorSizeForType(const Device& device,
VkDescriptorType type) {
const auto& props = device.DescriptorBufferProperties();
const bool robust = device.IsRobustBufferAccessEnabled();
switch (type) {
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
return robust ? props.robustUniformBufferDescriptorSize : props.uniformBufferDescriptorSize;
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
return robust ? props.robustStorageBufferDescriptorSize : props.storageBufferDescriptorSize;
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
return robust ? props.robustUniformTexelBufferDescriptorSize
: props.uniformTexelBufferDescriptorSize;
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
return robust ? props.robustStorageTexelBufferDescriptorSize
: props.storageTexelBufferDescriptorSize;
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
return props.combinedImageSamplerDescriptorSize;
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
return props.storageImageDescriptorSize;
default:
return 0;
}
}
struct DescriptorBufferBinding {
VkDescriptorType type;
u32 count;
VkDeviceSize offset;
VkDeviceSize stride;
};
struct DescriptorBufferLayout {
VkDeviceSize size{};
boost::container::small_vector<DescriptorBufferBinding, 32> bindings;
[[nodiscard]] bool Empty() const noexcept {
return bindings.empty();
}
};
inline void WriteDescriptorBuffer(const Device& device, const DescriptorBufferLayout& layout,
const DescriptorUpdateEntry* payload, u8* host) {
const vk::Device& dev = device.GetLogical();
for (const DescriptorBufferBinding& binding : layout.bindings) {
for (u32 index = 0; index < binding.count; ++index) {
const DescriptorUpdateEntry& entry = *(payload++);
const VkDescriptorAddressInfoEXT address_info{
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT,
.pNext = nullptr,
.address = entry.address.address,
.range = entry.address.range,
.format = entry.address.format,
};
VkDescriptorGetInfoEXT get_info{
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT,
.pNext = nullptr,
.type = binding.type,
.data{},
};
switch (binding.type) {
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
get_info.data.pUniformBuffer = &address_info;
break;
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
get_info.data.pStorageBuffer = &address_info;
break;
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
get_info.data.pUniformTexelBuffer = &address_info;
break;
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
get_info.data.pStorageTexelBuffer = &address_info;
break;
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
get_info.data.pCombinedImageSampler = &entry.image;
break;
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
get_info.data.pStorageImage = &entry.image;
break;
default:
continue;
}
dev.GetDescriptorEXT(get_info, binding.stride,
host + binding.offset + index * binding.stride);
}
}
}
[[nodiscard]] inline u32 NumDescriptorEntries(const Shader::Info& info) {
return Shader::NumDescriptors(info.constant_buffer_descriptors) +
Shader::NumDescriptors(info.storage_buffers_descriptors) +
@@ -148,70 +61,20 @@ public:
DescriptorLayoutBuilder(const Device& device_) : device{&device_} {}
bool CanUsePushDescriptor() const noexcept {
if (!device->IsKhrPushDescriptorSupported() ||
num_descriptors > device->MaxPushDescriptors()) {
return false;
}
return !device->IsExtDescriptorBufferSupported() ||
device->DescriptorBufferProperties().bufferlessPushDescriptors;
return device->IsKhrPushDescriptorSupported() &&
num_descriptors <= device->MaxPushDescriptors();
}
bool CanUseDescriptorBuffer() const noexcept {
const auto& props = device->DescriptorBufferProperties();
if (!device->IsExtDescriptorBufferSupported() || bindings.empty() ||
!props.combinedImageSamplerDescriptorSingleArray) {
return false;
}
return !props.bufferlessPushDescriptors || !CanUsePushDescriptor();
}
DescriptorBufferLayout MakeDescriptorBufferLayout(VkDescriptorSetLayout layout) const {
DescriptorBufferLayout result;
if (!layout) {
return result;
}
const vk::Device& dev = device->GetLogical();
result.size = dev.GetDescriptorSetLayoutSizeEXT(layout);
result.bindings.reserve(bindings.size());
for (const VkDescriptorSetLayoutBinding& entry : bindings) {
result.bindings.push_back(DescriptorBufferBinding{
.type = entry.descriptorType,
.count = entry.descriptorCount,
.offset = dev.GetDescriptorSetLayoutBindingOffsetEXT(layout, entry.binding),
.stride = DescriptorSizeForType(*device, entry.descriptorType),
});
}
return result;
}
vk::DescriptorSetLayout CreateDescriptorSetLayout(bool use_push_descriptor,
bool use_descriptor_buffer = false) const {
// TODO(crueter): utilize layout binding flags
vk::DescriptorSetLayout CreateDescriptorSetLayout(bool use_push_descriptor) const {
if (bindings.empty()) {
return nullptr;
}
VkDescriptorSetLayoutCreateFlags flags = 0;
if (use_push_descriptor) {
flags |= VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR;
}
if (use_descriptor_buffer) {
flags |= VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT;
}
boost::container::small_vector<VkDescriptorBindingFlags, 32> binding_flags;
VkDescriptorSetLayoutBindingFlagsCreateInfo binding_flags_ci{};
const void* pnext = nullptr;
if (!use_push_descriptor && device->IsDescriptorBindingPartiallyBoundSupported()) {
binding_flags.assign(bindings.size(), VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT);
binding_flags_ci = {
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO,
.pNext = nullptr,
.bindingCount = static_cast<u32>(binding_flags.size()),
.pBindingFlags = binding_flags.data(),
};
pnext = &binding_flags_ci;
}
const VkDescriptorSetLayoutCreateFlags flags =
use_push_descriptor ? VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR : 0;
return device->GetLogical().CreateDescriptorSetLayout({
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
.pNext = pnext,
.pNext = nullptr,
.flags = flags,
.bindingCount = static_cast<u32>(bindings.size()),
.pBindings = bindings.data(),
@@ -32,14 +32,6 @@ VkBufferCopy MakeBufferCopy(const VideoCommon::BufferCopy& copy) {
};
}
VkBufferCopy MakeUnifiedUploadCopy(const VideoCommon::BufferCopy& copy) {
return VkBufferCopy{
.srcOffset = copy.dst_offset,
.dstOffset = copy.src_offset,
.size = copy.size,
};
}
VkIndexType IndexTypeFromNumElements(const Device& device, u32 num_elements) {
if (num_elements <= 0xff && device.IsExtIndexTypeUint8Supported()) {
return VK_INDEX_TYPE_UINT8_EXT;
@@ -77,9 +69,6 @@ vk::Buffer CreateBuffer(const Device& device, const MemoryAllocator& memory_allo
if (device.IsExtConditionalRendering()) {
flags |= VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT;
}
if (device.IsBufferDeviceAddressSupported()) {
flags |= VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT;
}
const VkBufferCreateInfo buffer_ci = {
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
.pNext = nullptr,
@@ -102,9 +91,6 @@ Buffer::Buffer(BufferCacheRuntime& runtime, VideoCommon::NullBufferParams null_p
device = &runtime.device;
buffer = runtime.CreateNullBuffer();
is_null = true;
if (device->IsBufferDeviceAddressSupported()) {
device_address = device->GetLogical().GetBufferDeviceAddress(*buffer);
}
}
Buffer::Buffer(BufferCacheRuntime& runtime, DAddr cpu_addr_, u64 size_bytes_)
@@ -114,9 +100,6 @@ Buffer::Buffer(BufferCacheRuntime& runtime, DAddr cpu_addr_, u64 size_bytes_)
if (runtime.device.HasDebuggingToolAttached()) {
buffer.SetObjectNameEXT(fmt::format("Buffer {:#x}", CpuAddr()).c_str());
}
if (device->IsBufferDeviceAddressSupported()) {
device_address = device->GetLogical().GetBufferDeviceAddress(*buffer);
}
}
void Buffer::MarkUsage(u64 offset, u64 size) noexcept {
@@ -373,169 +356,6 @@ BufferCacheRuntime::BufferCacheRuntime(const Device& device_, MemoryAllocator& m
scheduler_, staging_pool_);
}
void BufferCacheRuntime::TryEnableUnifiedMemory(void* base, size_t size,
std::span<AHardwareBuffer* const> hardware_buffers,
size_t hardware_buffer_window,
size_t hardware_buffer_base) {
unified_memory = std::make_unique<HostMemoryImport>(
device, base, size, hardware_buffers, hardware_buffer_window, hardware_buffer_base);
if (!unified_memory->IsValid()) {
unified_memory.reset();
}
}
void BufferCacheRuntime::CopyToUnifiedMemory(
size_t window_index, VkBuffer src_buffer,
std::span<const VideoCommon::BufferCopy> copies) {
if (!unified_memory || src_buffer == VK_NULL_HANDLE || copies.empty() ||
window_index >= unified_memory->GetWindowCount()) {
return;
}
const VkBuffer dst_buffer = unified_memory->GetWindowBuffer(window_index);
if (dst_buffer == VK_NULL_HANDLE) {
return;
}
VkDeviceSize covered_begin = std::numeric_limits<VkDeviceSize>::max();
VkDeviceSize covered_end = 0;
for (const VideoCommon::BufferCopy& copy : copies) {
covered_begin = (std::min)(covered_begin, static_cast<VkDeviceSize>(copy.dst_offset));
covered_end = (std::max)(covered_end,
static_cast<VkDeviceSize>(copy.dst_offset + copy.size));
}
boost::container::small_vector<VkBufferCopy, 8> vk_copies(copies.size());
std::ranges::transform(copies, vk_copies.begin(), MakeBufferCopy);
const bool foreign = unified_memory->NeedsForeignOwnershipTransfer();
const u32 queue_family = device.GetGraphicsFamily();
scheduler.RequestOutsideRenderPassOperationContext();
scheduler.Record([src_buffer, dst_buffer, vk_copies, foreign, queue_family, covered_begin,
covered_end](vk::CommandBuffer cmdbuf) {
if (foreign) {
const VkBufferMemoryBarrier acquire{
.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = 0,
.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_FOREIGN_EXT,
.dstQueueFamilyIndex = queue_family,
.buffer = dst_buffer,
.offset = covered_begin,
.size = covered_end - covered_begin,
};
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
VK_PIPELINE_STAGE_TRANSFER_BIT, 0, acquire);
}
cmdbuf.CopyBuffer(src_buffer, dst_buffer, VideoCommon::FixSmallVectorADL(vk_copies));
if (foreign) {
const VkBufferMemoryBarrier release{
.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT,
.dstAccessMask = 0,
.srcQueueFamilyIndex = queue_family,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_FOREIGN_EXT,
.buffer = dst_buffer,
.offset = covered_begin,
.size = covered_end - covered_begin,
};
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, release);
}
});
}
void BufferCacheRuntime::CopyFromUnifiedMemory(
size_t window_index, VkBuffer dst_buffer,
std::span<const VideoCommon::BufferCopy> copies) {
if (!unified_memory || dst_buffer == VK_NULL_HANDLE || copies.empty() ||
window_index >= unified_memory->GetWindowCount()) {
return;
}
const VkBuffer src_buffer = unified_memory->GetWindowBuffer(window_index);
if (src_buffer == VK_NULL_HANDLE) {
return;
}
VkDeviceSize covered_begin = std::numeric_limits<VkDeviceSize>::max();
VkDeviceSize covered_end = 0;
for (const VideoCommon::BufferCopy& copy : copies) {
covered_begin = (std::min)(covered_begin, static_cast<VkDeviceSize>(copy.dst_offset));
covered_end = (std::max)(covered_end,
static_cast<VkDeviceSize>(copy.dst_offset + copy.size));
}
boost::container::small_vector<VkBufferCopy, 8> vk_copies(copies.size());
std::ranges::transform(copies, vk_copies.begin(), MakeUnifiedUploadCopy);
const bool foreign = unified_memory->NeedsForeignOwnershipTransfer();
const u32 queue_family = device.GetGraphicsFamily();
scheduler.RequestOutsideRenderPassOperationContext();
scheduler.Record([src_buffer, dst_buffer, vk_copies, foreign, queue_family, covered_begin,
covered_end](vk::CommandBuffer cmdbuf) {
if (foreign) {
const VkBufferMemoryBarrier acquire{
.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = 0,
.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_FOREIGN_EXT,
.dstQueueFamilyIndex = queue_family,
.buffer = src_buffer,
.offset = covered_begin,
.size = covered_end - covered_begin,
};
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
VK_PIPELINE_STAGE_TRANSFER_BIT, 0, acquire);
}
cmdbuf.CopyBuffer(src_buffer, dst_buffer, VideoCommon::FixSmallVectorADL(vk_copies));
if (foreign) {
const VkBufferMemoryBarrier release{
.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT,
.dstAccessMask = 0,
.srcQueueFamilyIndex = queue_family,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_FOREIGN_EXT,
.buffer = src_buffer,
.offset = covered_begin,
.size = covered_end - covered_begin,
};
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, release);
}
});
}
void BufferCacheRuntime::UnifiedMemoryUploadBarrier() {
static constexpr VkMemoryBarrier HOST_WRITE_BARRIER{
.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT,
.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT,
};
scheduler.RequestOutsideRenderPassOperationContext();
scheduler.Record([](vk::CommandBuffer cmdbuf) {
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0,
HOST_WRITE_BARRIER);
});
}
void BufferCacheRuntime::UnifiedMemoryHostBarrier() {
static constexpr VkMemoryBarrier HOST_BARRIER{
.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT,
.dstAccessMask = VK_ACCESS_HOST_READ_BIT,
};
scheduler.RequestOutsideRenderPassOperationContext();
scheduler.Record([](vk::CommandBuffer cmdbuf) {
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0,
HOST_BARRIER);
});
}
StagingBufferRef BufferCacheRuntime::UploadStagingBuffer(size_t size) {
return staging_pool.Request(size, MemoryUsage::Upload);
}
@@ -544,10 +364,6 @@ StagingBufferRef BufferCacheRuntime::DownloadStagingBuffer(size_t size, bool def
return staging_pool.Request(size, MemoryUsage::Download, deferred);
}
VkFormat BufferCacheRuntime::TexelBufferFormat(VideoCore::Surface::PixelFormat format) const {
return MaxwellToVK::SurfaceFormat(device, FormatType::Buffer, false, format).format;
}
void BufferCacheRuntime::FreeDeferredStagingBuffer(StagingBufferRef& ref) {
staging_pool.FreeDeferred(ref);
}
@@ -874,9 +690,6 @@ vk::Buffer BufferCacheRuntime::CreateNullBuffer() {
if (device.IsExtTransformFeedbackSupported()) {
create_info.usage |= VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT;
}
if (device.IsBufferDeviceAddressSupported()) {
create_info.usage |= VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT;
}
vk::Buffer ret = memory_allocator.CreateBuffer(create_info, MemoryUsage::DeviceLocal);
if (device.HasDebuggingToolAttached()) {
ret.SetObjectNameEXT("Null buffer");
@@ -7,8 +7,6 @@
#pragma once
#include <limits>
#include <memory>
#include <span>
#include "video_core/buffer_cache/buffer_cache_base.h"
#include "video_core/buffer_cache/memory_tracker_base.h"
@@ -41,10 +39,6 @@ public:
return *buffer;
}
[[nodiscard]] VkDeviceAddress DeviceAddress() const noexcept {
return device_address;
}
[[nodiscard]] bool IsRegionUsed(u64 offset, u64 size) const noexcept {
return tracker.IsUsed(offset, size);
}
@@ -76,7 +70,6 @@ private:
vk::Buffer buffer;
std::vector<BufferView> views;
VideoCommon::UsageTracker tracker;
VkDeviceAddress device_address{};
u64 last_usage_tick{};
bool is_null{};
};
@@ -99,36 +92,6 @@ public:
void TickFrame(Common::SlotVector<Buffer>& slot_buffers) noexcept;
void TryEnableUnifiedMemory(void* base, size_t size,
std::span<AHardwareBuffer* const> hardware_buffers,
size_t hardware_buffer_window, size_t hardware_buffer_base);
[[nodiscard]] bool HasUnifiedMemory() const noexcept {
return unified_memory != nullptr && unified_memory->IsValid();
}
[[nodiscard]] u64 UnifiedMemorySize() const noexcept {
return unified_memory ? unified_memory->GetSize() : 0;
}
[[nodiscard]] u64 UnifiedMemoryBase() const noexcept {
return unified_memory ? unified_memory->GetBaseOffset() : 0;
}
[[nodiscard]] u64 UnifiedMemoryWindowSize() const noexcept {
return unified_memory ? unified_memory->GetWindowSize() : 0;
}
void CopyToUnifiedMemory(size_t window_index, VkBuffer src_buffer,
std::span<const VideoCommon::BufferCopy> copies);
void CopyFromUnifiedMemory(size_t window_index, VkBuffer dst_buffer,
std::span<const VideoCommon::BufferCopy> copies);
void UnifiedMemoryHostBarrier();
void UnifiedMemoryUploadBarrier();
u64 CurrentTick();
u64 KnownGpuTick();
@@ -182,25 +145,22 @@ public:
[[maybe_unused]] u32 binding_index,
u32 size) {
const StagingBufferRef ref = staging_pool.Request(size, MemoryUsage::Upload);
guest_descriptor_queue.AddBuffer(ref.buffer, ref.device_address,
static_cast<u32>(ref.offset), size);
BindBuffer(ref.buffer, static_cast<u32>(ref.offset), size);
return ref.mapped_span;
}
void BindUniformBuffer(const Buffer& buffer, u32 offset, u32 size) {
void BindUniformBuffer(VkBuffer buffer, u32 offset, u32 size) {
BindBuffer(buffer, offset, size);
}
void BindStorageBuffer(const Buffer& buffer, u32 offset, u32 size,
void BindStorageBuffer(VkBuffer buffer, u32 offset, u32 size,
[[maybe_unused]] bool is_written) {
BindBuffer(buffer, offset, size);
}
void BindTextureBuffer(Buffer& buffer, u32 offset, u32 size,
VideoCore::Surface::PixelFormat format) {
guest_descriptor_queue.AddTexelBuffer(buffer.View(offset, size, format),
buffer.DeviceAddress(), offset, size,
TexelBufferFormat(format));
guest_descriptor_queue.AddTexelBuffer(buffer.View(offset, size, format));
}
bool ShouldLimitDynamicStorageBuffers() const {
@@ -212,17 +172,14 @@ public:
}
private:
void BindBuffer(const Buffer& buffer, u32 offset, u32 size) {
const VkBuffer handle = buffer.Handle();
if (handle == VK_NULL_HANDLE) {
guest_descriptor_queue.AddBuffer(handle, 0, 0, VK_WHOLE_SIZE);
void BindBuffer(VkBuffer buffer, u32 offset, u32 size) {
if (buffer == VK_NULL_HANDLE) {
guest_descriptor_queue.AddBuffer(buffer, 0, VK_WHOLE_SIZE);
} else {
guest_descriptor_queue.AddBuffer(handle, buffer.DeviceAddress(), offset, size);
guest_descriptor_queue.AddBuffer(buffer, offset, size);
}
}
VkFormat TexelBufferFormat(VideoCore::Surface::PixelFormat format) const;
void ReserveNullBuffer();
vk::Buffer CreateNullBuffer();
@@ -236,7 +193,6 @@ private:
std::shared_ptr<QuadStripIndexBuffer> quad_strip_index_buffer;
vk::Buffer null_buffer;
std::unique_ptr<HostMemoryImport> unified_memory;
std::unique_ptr<Uint8Pass> uint8_pass;
QuadIndexedPass quad_index_pass;
@@ -259,8 +215,6 @@ struct BufferCacheParams {
static constexpr bool USE_MEMORY_MAPS = true;
static constexpr bool SEPARATE_IMAGE_BUFFER_BINDINGS = false;
static constexpr bool USE_MEMORY_MAPS_FOR_UPLOADS = true;
static constexpr bool USE_UNIFIED_MEMORY = true;
static constexpr bool USE_UNIFIED_UPLOADS = true;
};
using BufferCache = VideoCommon::BufferCache<BufferCacheParams>;
@@ -34,14 +34,12 @@ using Tegra::Texture::TexturePair;
ComputePipeline::ComputePipeline(const Device& device_, Scheduler& scheduler, vk::PipelineCache& pipeline_cache_,
DescriptorPool& descriptor_pool,
GuestDescriptorQueue& guest_descriptor_queue_,
DescriptorBufferRing& descriptor_buffer_ring_,
Common::ThreadWorker* thread_worker,
PipelineStatistics* pipeline_statistics,
VideoCore::ShaderNotify* shader_notify, const Shader::Info& info_,
vk::ShaderModule spv_module_, u64 shader_hash_)
: device{device_},
pipeline_cache(pipeline_cache_), guest_descriptor_queue{guest_descriptor_queue_},
descriptor_buffer_ring{descriptor_buffer_ring_}, info{info_},
pipeline_cache(pipeline_cache_), guest_descriptor_queue{guest_descriptor_queue_}, info{info_},
shader_hash{shader_hash_}, spv_module(std::move(spv_module_)) {
if (shader_notify) {
shader_notify->MarkShaderBuilding();
@@ -50,36 +48,18 @@ ComputePipeline::ComputePipeline(const Device& device_, Scheduler& scheduler, vk
uniform_buffer_sizes.begin());
num_descriptor_entries = NumDescriptorEntries(info);
DescriptorLayoutBuilder builder{device};
builder.Add(info, VK_SHADER_STAGE_COMPUTE_BIT);
auto func{[this, &scheduler, &descriptor_pool, shader_notify, pipeline_statistics] {
DescriptorLayoutBuilder builder{device};
builder.Add(info, VK_SHADER_STAGE_COMPUTE_BIT);
uses_push_descriptor = builder.CanUsePushDescriptor();
uses_descriptor_buffer = builder.CanUseDescriptorBuffer() && descriptor_buffer_ring.IsValid();
descriptor_set_layout =
builder.CreateDescriptorSetLayout(uses_push_descriptor, uses_descriptor_buffer);
if (uses_descriptor_buffer) {
descriptor_buffer_layout = builder.MakeDescriptorBufferLayout(*descriptor_set_layout);
if (!descriptor_buffer_ring.CanAllocate(descriptor_buffer_layout.size)) {
LOG_DEBUG(Render_Vulkan,
"Compute shader {:016X} needs {} descriptor bytes per dispatch, falling "
"back to sets",
shader_hash, descriptor_buffer_layout.size);
uses_descriptor_buffer = false;
descriptor_buffer_layout = {};
descriptor_set_layout = builder.CreateDescriptorSetLayout(false);
}
}
pipeline_layout = builder.CreatePipelineLayout(*descriptor_set_layout);
if (!uses_descriptor_buffer) {
uses_push_descriptor = builder.CanUsePushDescriptor();
descriptor_set_layout = builder.CreateDescriptorSetLayout(uses_push_descriptor);
pipeline_layout = builder.CreatePipelineLayout(*descriptor_set_layout);
descriptor_update_template =
builder.CreateTemplate(*descriptor_set_layout, *pipeline_layout, uses_push_descriptor);
if (!uses_push_descriptor) {
descriptor_allocator =
descriptor_pool.Allocator(device, scheduler, *descriptor_set_layout, info);
descriptor_allocator = descriptor_pool.Allocator(device, scheduler, *descriptor_set_layout, info);
}
}
auto func{[this, shader_notify, pipeline_statistics] {
const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT subgroup_size_ci{
.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT,
.pNext = nullptr,
@@ -89,9 +69,6 @@ ComputePipeline::ComputePipeline(const Device& device_, Scheduler& scheduler, vk
if (device.IsKhrPipelineExecutablePropertiesEnabled() && Settings::values.renderer_debug.GetValue()) {
flags |= VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR;
}
if (uses_descriptor_buffer) {
flags |= VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT;
}
const VkComputePipelineCreateInfo compute_ci{
.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
.pNext = nullptr,
@@ -148,10 +125,10 @@ ComputePipeline::ComputePipeline(const Device& device_, Scheduler& scheduler, vk
}
}
bool ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute,
void ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute,
Tegra::MemoryManager& gpu_memory, Scheduler& scheduler,
BufferCache& buffer_cache, TextureCache& texture_cache) {
guest_descriptor_queue.Acquire(scheduler, num_descriptor_entries, uses_descriptor_buffer);
guest_descriptor_queue.Acquire(scheduler, num_descriptor_entries);
buffer_cache.SetComputeUniformBufferState(info.constant_buffer_mask, &uniform_buffer_sizes);
buffer_cache.UnbindComputeStorageBuffers();
@@ -272,33 +249,10 @@ bool ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute,
GPU::Logging::GPULogger::GetInstance().LogPipelineBind(true, "compute pipeline");
}
const DescriptorUpdateEntry* const descriptor_data{guest_descriptor_queue.UpdateData()};
VkDeviceSize descriptor_buffer_offset{};
u32 descriptor_buffer_chunk{};
if (uses_descriptor_buffer) {
const DescriptorBufferRing::Allocation alloc{
descriptor_buffer_ring.Allocate(scheduler, descriptor_buffer_layout.size)};
if (!alloc.host) {
LOG_DEBUG(Render_Vulkan, "Failed to reserve descriptor memory, skipping dispatch");
return false;
}
WriteDescriptorBuffer(device, descriptor_buffer_layout, descriptor_data, alloc.host);
descriptor_buffer_offset = alloc.offset;
descriptor_buffer_chunk = alloc.chunk;
}
const bool bind_descriptor_buffer{
uses_descriptor_buffer && scheduler.UpdateDescriptorBufferChunk(descriptor_buffer_chunk)};
const void* const descriptor_data{guest_descriptor_queue.UpdateData()};
const bool is_rescaling = !info.texture_descriptors.empty() || !info.image_descriptors.empty();
scheduler.Record([this, descriptor_data, is_rescaling, descriptor_buffer_offset,
descriptor_buffer_chunk, bind_descriptor_buffer,
scheduler.Record([this, descriptor_data, is_rescaling,
rescaling_data = rescaling.Data()](vk::CommandBuffer cmdbuf) {
if (bind_descriptor_buffer) {
const VkDescriptorBufferBindingInfoEXT binding_info{
descriptor_buffer_ring.BindingInfo(descriptor_buffer_chunk)};
cmdbuf.BindDescriptorBuffersEXT(binding_info);
}
if (!pipeline) {
return;
}
@@ -311,11 +265,7 @@ bool ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute,
RESCALING_LAYOUT_WORDS_OFFSET, sizeof(rescaling_data),
rescaling_data.data());
}
if (uses_descriptor_buffer) {
const u32 buffer_index{};
cmdbuf.SetDescriptorBufferOffsetsEXT(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline_layout,
0, buffer_index, descriptor_buffer_offset);
} else if (uses_push_descriptor) {
if (uses_push_descriptor) {
cmdbuf.PushDescriptorSetWithTemplateKHR(*descriptor_update_template, *pipeline_layout,
0, descriptor_data);
} else {
@@ -326,7 +276,6 @@ bool ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute,
descriptor_set, nullptr);
}
});
return true;
}
} // namespace Vulkan
@@ -13,9 +13,7 @@
#include "common/common_types.h"
#include "common/thread_worker.h"
#include "shader_recompiler/shader_info.h"
#include "video_core/renderer_vulkan/pipeline_helper.h"
#include "video_core/renderer_vulkan/vk_buffer_cache.h"
#include "video_core/renderer_vulkan/vk_descriptor_buffer.h"
#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
#include "video_core/renderer_vulkan/vk_texture_cache.h"
#include "video_core/renderer_vulkan/vk_update_descriptor.h"
@@ -36,7 +34,6 @@ public:
explicit ComputePipeline(const Device& device, Scheduler& scheduler, vk::PipelineCache& pipeline_cache,
DescriptorPool& descriptor_pool,
GuestDescriptorQueue& guest_descriptor_queue,
DescriptorBufferRing& descriptor_buffer_ring,
Common::ThreadWorker* thread_worker,
PipelineStatistics* pipeline_statistics,
VideoCore::ShaderNotify* shader_notify, const Shader::Info& info,
@@ -48,9 +45,8 @@ public:
ComputePipeline& operator=(const ComputePipeline&) = delete;
ComputePipeline(const ComputePipeline&) = delete;
[[nodiscard]] bool Configure(Tegra::Engines::KeplerCompute& kepler_compute,
Tegra::MemoryManager& gpu_memory, Scheduler& scheduler,
BufferCache& buffer_cache, TextureCache& texture_cache);
void Configure(Tegra::Engines::KeplerCompute& kepler_compute, Tegra::MemoryManager& gpu_memory,
Scheduler& scheduler, BufferCache& buffer_cache, TextureCache& texture_cache);
bool IsBound() const noexcept {
return static_cast<bool>(pipeline);
@@ -60,7 +56,6 @@ private:
const Device& device;
vk::PipelineCache& pipeline_cache;
GuestDescriptorQueue& guest_descriptor_queue;
DescriptorBufferRing& descriptor_buffer_ring;
Shader::Info info;
u64 shader_hash{};
u32 num_descriptor_entries{};
@@ -70,8 +65,6 @@ private:
vk::ShaderModule spv_module;
vk::DescriptorSetLayout descriptor_set_layout;
bool uses_push_descriptor{false};
bool uses_descriptor_buffer{false};
DescriptorBufferLayout descriptor_buffer_layout;
DescriptorAllocator descriptor_allocator;
vk::PipelineLayout pipeline_layout;
vk::DescriptorUpdateTemplate descriptor_update_template;
@@ -1,141 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#include <algorithm>
#include "common/alignment.h"
#include "common/assert.h"
#include "common/logging.h"
#include "video_core/renderer_vulkan/vk_descriptor_buffer.h"
#include "video_core/renderer_vulkan/vk_scheduler.h"
#include "video_core/vulkan_common/vulkan_device.h"
namespace Vulkan {
DescriptorBufferRing::DescriptorBufferRing(const Device& device_,
MemoryAllocator& memory_allocator)
: device{device_} {
if (!device.IsExtDescriptorBufferSupported() || !device.IsBufferDeviceAddressSupported()) {
return;
}
const VkPhysicalDeviceDescriptorBufferPropertiesEXT& props{device.DescriptorBufferProperties()};
alignment = std::max<VkDeviceSize>(props.descriptorBufferOffsetAlignment, 1);
const VkDeviceSize max_bound{(std::min)({props.maxSamplerDescriptorBufferRange,
props.maxResourceDescriptorBufferRange,
props.samplerDescriptorBufferAddressSpaceSize,
props.resourceDescriptorBufferAddressSpaceSize,
props.descriptorBufferAddressSpaceSize})};
const VkDeviceSize frame_size{device.IsTiler() ? TILER_FRAME_SIZE : DESKTOP_FRAME_SIZE};
const VkDeviceSize chunk_size{
Common::AlignDown((std::min)(frame_size, max_bound), alignment)};
if (chunk_size <= alignment) {
LOG_DEBUG(Render_Vulkan, "Descriptor buffer binding limit of {} is unusable, disabling",
max_bound);
return;
}
chunk_capacity = chunk_size - alignment;
chunks_per_frame = static_cast<size_t>(frame_size / chunk_size);
const VkBufferCreateInfo buffer_ci{
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
.pNext = nullptr,
.flags = 0,
.size = chunk_size,
.usage = VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT |
VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT |
VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
.queueFamilyIndexCount = 0,
.pQueueFamilyIndices = nullptr,
};
const size_t total_chunks{chunks_per_frame * FRAMES_IN_FLIGHT};
chunks.reserve(total_chunks);
chunk_addresses.reserve(total_chunks);
chunk_hosts.reserve(total_chunks);
for (size_t index = 0; index < total_chunks; ++index) {
vk::Buffer buffer{memory_allocator.CreateBuffer(buffer_ci, MemoryUsage::Upload)};
if (!buffer.IsHostVisible()) {
LOG_DEBUG(Render_Vulkan, "Descriptor buffer is not host visible, disabling");
chunks.clear();
return;
}
if (!buffer.IsHostCoherent()) {
LOG_DEBUG(Render_Vulkan, "Descriptor buffer is not host coherent, disabling");
chunks.clear();
return;
}
if (device.HasDebuggingToolAttached()) {
buffer.SetObjectNameEXT("Descriptor buffer");
}
const VkDeviceAddress raw_address{device.GetLogical().GetBufferDeviceAddress(*buffer)};
const VkDeviceAddress address{Common::AlignUp(raw_address, alignment)};
chunk_addresses.push_back(address);
chunk_hosts.push_back(buffer.Mapped().data() + (address - raw_address));
chunks.push_back(std::move(buffer));
}
}
DescriptorBufferRing::~DescriptorBufferRing() = default;
void DescriptorBufferRing::TickFrame() {
if (++frame_index >= FRAMES_IN_FLIGHT) {
frame_index = 0;
}
chunk_cursor = 0;
cursor = 0;
++generation;
frame_reused = true;
}
void DescriptorBufferRing::TouchFrame(Scheduler& scheduler) {
frame_ticks[frame_index] = scheduler.CurrentTick();
}
DescriptorBufferRing::Allocation DescriptorBufferRing::Allocate(Scheduler& scheduler,
VkDeviceSize size) {
ASSERT(!chunks.empty());
if (!CanAllocate(size)) {
LOG_DEBUG(Render_Vulkan, "Descriptor set of {} bytes exceeds chunk capacity {}", size,
chunk_capacity);
return Allocation{};
}
const VkDeviceSize needed{Common::AlignUp(size, alignment)};
if (frame_reused) {
frame_reused = false;
scheduler.Wait(frame_ticks[frame_index]);
}
if (cursor + needed > chunk_capacity) {
if (chunk_cursor + 1 < chunks_per_frame) {
++chunk_cursor;
} else {
LOG_DEBUG(Render_Vulkan, "Descriptor buffer frame exhausted, stalling on the GPU");
scheduler.Finish();
chunk_cursor = 0;
++generation;
}
cursor = 0;
}
const size_t chunk{frame_index * chunks_per_frame + chunk_cursor};
const VkDeviceSize offset{cursor};
cursor += needed;
frame_ticks[frame_index] = scheduler.CurrentTick();
return Allocation{
.host = chunk_hosts[chunk] + offset,
.offset = offset,
.chunk = static_cast<u32>(chunk),
.generation = generation,
};
}
VkDescriptorBufferBindingInfoEXT DescriptorBufferRing::BindingInfo(u32 chunk) const noexcept {
return VkDescriptorBufferBindingInfoEXT{
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT,
.pNext = nullptr,
.address = chunk_addresses[chunk],
.usage = VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT |
VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT,
};
}
} // namespace Vulkan
@@ -1,71 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <array>
#include <vector>
#include "common/alignment.h"
#include "common/common_types.h"
#include "video_core/vulkan_common/vulkan_memory_allocator.h"
#include "video_core/vulkan_common/vulkan_wrapper.h"
namespace Vulkan {
class Device;
class Scheduler;
class DescriptorBufferRing final {
static constexpr size_t FRAMES_IN_FLIGHT = 8;
static constexpr VkDeviceSize TILER_FRAME_SIZE = 2 * 1024 * 1024;
static constexpr VkDeviceSize DESKTOP_FRAME_SIZE = 4 * 1024 * 1024;
public:
explicit DescriptorBufferRing(const Device& device_, MemoryAllocator& memory_allocator);
~DescriptorBufferRing();
struct Allocation {
u8* host{};
VkDeviceSize offset{};
u32 chunk{};
u64 generation{};
};
[[nodiscard]] u64 CurrentGeneration() const noexcept {
return generation;
}
void TouchFrame(Scheduler& scheduler);
[[nodiscard]] bool CanAllocate(VkDeviceSize size) const noexcept {
return Common::AlignUp(size, alignment) <= chunk_capacity;
}
void TickFrame();
[[nodiscard]] Allocation Allocate(Scheduler& scheduler, VkDeviceSize size);
[[nodiscard]] VkDescriptorBufferBindingInfoEXT BindingInfo(u32 chunk) const noexcept;
[[nodiscard]] bool IsValid() const noexcept {
return !chunks.empty();
}
private:
const Device& device;
std::vector<vk::Buffer> chunks;
std::vector<VkDeviceAddress> chunk_addresses;
std::vector<u8*> chunk_hosts;
VkDeviceSize alignment{1};
VkDeviceSize chunk_capacity{};
size_t chunks_per_frame{};
size_t frame_index{};
size_t chunk_cursor{};
VkDeviceSize cursor{};
u64 generation{1};
std::array<u64, FRAMES_IN_FLIGHT> frame_ticks{};
bool frame_reused{};
};
} // namespace Vulkan
@@ -5,7 +5,6 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include <algorithm>
#include <cstring>
#include <iostream>
#include <span>
@@ -251,15 +250,13 @@ GraphicsPipeline::GraphicsPipeline(
Scheduler& scheduler_, BufferCache& buffer_cache_, TextureCache& texture_cache_,
vk::PipelineCache& pipeline_cache_, VideoCore::ShaderNotify* shader_notify,
const Device& device_, DescriptorPool& descriptor_pool,
GuestDescriptorQueue& guest_descriptor_queue_, DescriptorBufferRing& descriptor_buffer_ring_,
Common::ThreadWorker* worker_thread,
GuestDescriptorQueue& guest_descriptor_queue_, Common::ThreadWorker* worker_thread,
PipelineStatistics* pipeline_statistics, RenderPassCache& render_pass_cache,
const GraphicsPipelineCacheKey& key_, std::array<vk::ShaderModule, NUM_STAGES> stages,
const std::array<const Shader::Info*, NUM_STAGES>& infos)
: key{key_}, device{device_}, texture_cache{texture_cache_}, buffer_cache{buffer_cache_},
pipeline_cache(pipeline_cache_), scheduler{scheduler_},
guest_descriptor_queue{guest_descriptor_queue_},
descriptor_buffer_ring{descriptor_buffer_ring_}, spv_modules{std::move(stages)} {
guest_descriptor_queue{guest_descriptor_queue_}, spv_modules{std::move(stages)} {
if (shader_notify) {
shader_notify->MarkShaderBuilding();
}
@@ -279,37 +276,20 @@ GraphicsPipeline::GraphicsPipeline(
num_descriptor_entries += NumDescriptorEntries(*info);
}
fragment_has_color0_output = stage_infos[NUM_STAGES - 1].stores_frag_color[0];
auto func{[this, shader_notify, &render_pass_cache, &descriptor_pool, pipeline_statistics] {
DescriptorLayoutBuilder builder{MakeBuilder(device, stage_infos)};
uses_push_descriptor = builder.CanUsePushDescriptor();
descriptor_set_layout = builder.CreateDescriptorSetLayout(uses_push_descriptor);
DescriptorLayoutBuilder builder{MakeBuilder(device, stage_infos)};
uses_push_descriptor = builder.CanUsePushDescriptor();
uses_descriptor_buffer = builder.CanUseDescriptorBuffer() && descriptor_buffer_ring.IsValid();
descriptor_set_layout =
builder.CreateDescriptorSetLayout(uses_push_descriptor, uses_descriptor_buffer);
if (uses_descriptor_buffer) {
descriptor_buffer_layout = builder.MakeDescriptorBufferLayout(*descriptor_set_layout);
if (!descriptor_buffer_ring.CanAllocate(descriptor_buffer_layout.size)) {
LOG_WARNING(Render_Vulkan,
"Graphics pipeline {:016X} needs {} descriptor bytes per draw, falling back "
"to sets",
key.Hash(), descriptor_buffer_layout.size);
uses_descriptor_buffer = false;
descriptor_buffer_layout = {};
descriptor_set_layout = builder.CreateDescriptorSetLayout(uses_push_descriptor);
if (!uses_push_descriptor) {
descriptor_allocator = descriptor_pool.Allocator(device, scheduler, *descriptor_set_layout, stage_infos);
}
}
const VkDescriptorSetLayout set_layout{*descriptor_set_layout};
pipeline_layout = builder.CreatePipelineLayout(set_layout);
if (!uses_descriptor_buffer) {
const VkDescriptorSetLayout set_layout{*descriptor_set_layout};
pipeline_layout = builder.CreatePipelineLayout(set_layout);
descriptor_update_template =
builder.CreateTemplate(set_layout, *pipeline_layout, uses_push_descriptor);
if (!uses_push_descriptor) {
descriptor_allocator =
descriptor_pool.Allocator(device, scheduler, set_layout, stage_infos);
}
}
auto func{[this, shader_notify, &render_pass_cache, pipeline_statistics] {
const VkRenderPass render_pass{render_pass_cache.Get(MakeRenderPassKey(key.state, device))};
Validate();
try {
@@ -516,7 +496,7 @@ bool GraphicsPipeline::ConfigureImpl(bool is_indexed) {
buffer_cache.UpdateGraphicsBuffers(is_indexed);
buffer_cache.BindHostGeometryBuffers(is_indexed);
guest_descriptor_queue.Acquire(scheduler, num_descriptor_entries, uses_descriptor_buffer);
guest_descriptor_queue.Acquire(scheduler, num_descriptor_entries);
RescalingPushConstant rescaling;
RenderAreaPushConstant render_area;
@@ -558,43 +538,13 @@ bool GraphicsPipeline::ConfigureImpl(bool is_indexed) {
if (IsBuilt() && !pipeline) {
return false;
}
return ConfigureDraw(rescaling, render_area);
ConfigureDraw(rescaling, render_area);
return true;
}
bool GraphicsPipeline::ConfigureDraw(const RescalingPushConstant& rescaling,
void GraphicsPipeline::ConfigureDraw(const RescalingPushConstant& rescaling,
const RenderAreaPushConstant& render_area) {
const void* const descriptor_data{guest_descriptor_queue.UpdateData()};
VkDeviceSize descriptor_buffer_offset{};
u32 descriptor_buffer_chunk{};
if (descriptor_set_layout && uses_descriptor_buffer) {
const auto* const entries = static_cast<const DescriptorUpdateEntry*>(descriptor_data);
const bool reuse_allocation =
last_descriptor_buffer_generation == descriptor_buffer_ring.CurrentGeneration() &&
last_descriptor_payload.size() == num_descriptor_entries &&
std::memcmp(last_descriptor_payload.data(), entries,
num_descriptor_entries * sizeof(DescriptorUpdateEntry)) == 0;
if (reuse_allocation) {
descriptor_buffer_offset = last_descriptor_buffer_offset;
descriptor_buffer_chunk = last_descriptor_buffer_chunk;
descriptor_buffer_ring.TouchFrame(scheduler);
} else {
const DescriptorBufferRing::Allocation alloc{
descriptor_buffer_ring.Allocate(scheduler, descriptor_buffer_layout.size)};
if (!alloc.host) {
LOG_DEBUG(Render_Vulkan, "Failed to reserve descriptor memory, skipping draw");
return false;
}
WriteDescriptorBuffer(device, descriptor_buffer_layout, entries, alloc.host);
descriptor_buffer_offset = alloc.offset;
descriptor_buffer_chunk = alloc.chunk;
last_descriptor_buffer_offset = alloc.offset;
last_descriptor_buffer_chunk = alloc.chunk;
last_descriptor_buffer_generation = alloc.generation;
last_descriptor_payload.assign(entries, entries + num_descriptor_entries);
}
}
scheduler.RequestRenderpass(texture_cache.GetFramebuffer());
if (!is_built.load(std::memory_order::relaxed)) {
// Wait for the pipeline to be built
@@ -606,9 +556,6 @@ bool GraphicsPipeline::ConfigureDraw(const RescalingPushConstant& rescaling,
const bool is_rescaling{texture_cache.IsRescaling()};
const bool update_rescaling{scheduler.UpdateRescaling(is_rescaling)};
const bool bind_pipeline{scheduler.UpdateGraphicsPipeline(this)};
const bool bind_descriptor_buffer{
descriptor_set_layout && uses_descriptor_buffer &&
scheduler.UpdateDescriptorBufferChunk(descriptor_buffer_chunk)};
// Log graphics pipeline binding
if (bind_pipeline && GPU::Logging::IsActive() &&
@@ -617,27 +564,11 @@ bool GraphicsPipeline::ConfigureDraw(const RescalingPushConstant& rescaling,
GPU::Logging::GPULogger::GetInstance().LogPipelineBind(false, pipeline_info);
}
bool update_descriptors = true;
if (descriptor_set_layout && !uses_push_descriptor && !uses_descriptor_buffer) {
const auto* const entries = static_cast<const DescriptorUpdateEntry*>(descriptor_data);
update_descriptors =
bind_pipeline || last_descriptor_payload.size() != num_descriptor_entries ||
std::memcmp(last_descriptor_payload.data(), entries,
num_descriptor_entries * sizeof(DescriptorUpdateEntry)) != 0;
if (update_descriptors) {
last_descriptor_payload.assign(entries, entries + num_descriptor_entries);
}
}
scheduler.Record([this, descriptor_data, bind_pipeline, update_descriptors,
descriptor_buffer_offset, descriptor_buffer_chunk, bind_descriptor_buffer,
rescaling_data = rescaling.Data(), is_rescaling, update_rescaling,
const void* const descriptor_data{guest_descriptor_queue.UpdateData()};
scheduler.Record([this, descriptor_data, bind_pipeline, rescaling_data = rescaling.Data(),
is_rescaling, update_rescaling,
uses_render_area = render_area.uses_render_area,
render_area_data = render_area.words](vk::CommandBuffer cmdbuf) {
if (bind_descriptor_buffer) {
const VkDescriptorBufferBindingInfoEXT binding_info{
descriptor_buffer_ring.BindingInfo(descriptor_buffer_chunk)};
cmdbuf.BindDescriptorBuffersEXT(binding_info);
}
if (bind_pipeline) {
if (!pipeline) {
return;
@@ -662,14 +593,10 @@ bool GraphicsPipeline::ConfigureDraw(const RescalingPushConstant& rescaling,
if (!descriptor_set_layout) {
return;
}
if (uses_descriptor_buffer) {
const u32 buffer_index{};
cmdbuf.SetDescriptorBufferOffsetsEXT(VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline_layout,
0, buffer_index, descriptor_buffer_offset);
} else if (uses_push_descriptor) {
if (uses_push_descriptor) {
cmdbuf.PushDescriptorSetWithTemplateKHR(*descriptor_update_template, *pipeline_layout,
0, descriptor_data);
} else if (update_descriptors) {
} else {
const VkDescriptorSet descriptor_set{descriptor_allocator.Commit()};
const vk::Device& dev{device.GetLogical()};
dev.UpdateDescriptorSet(descriptor_set, *descriptor_update_template, descriptor_data);
@@ -677,7 +604,6 @@ bool GraphicsPipeline::ConfigureDraw(const RescalingPushConstant& rescaling,
descriptor_set, nullptr);
}
});
return true;
}
void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
@@ -1069,9 +995,6 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
if (device.IsKhrPipelineExecutablePropertiesEnabled() && Settings::values.renderer_debug.GetValue()) {
flags |= VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR;
}
if (uses_descriptor_buffer) {
flags |= VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT;
}
pipeline = device.GetLogical().CreateGraphicsPipeline({
.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
@@ -12,18 +12,14 @@
#include <condition_variable>
#include <mutex>
#include <type_traits>
#include <vector>
#include "common/thread_worker.h"
#include "shader_recompiler/shader_info.h"
#include "video_core/engines/maxwell_3d.h"
#include "video_core/renderer_vulkan/fixed_pipeline_state.h"
#include "video_core/renderer_vulkan/pipeline_helper.h"
#include "video_core/renderer_vulkan/vk_buffer_cache.h"
#include "video_core/renderer_vulkan/vk_descriptor_buffer.h"
#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
#include "video_core/renderer_vulkan/vk_texture_cache.h"
#include "video_core/renderer_vulkan/vk_update_descriptor.h"
#include "video_core/vulkan_common/vulkan_wrapper.h"
namespace VideoCore {
@@ -80,8 +76,7 @@ public:
Scheduler& scheduler, BufferCache& buffer_cache, TextureCache& texture_cache,
vk::PipelineCache& pipeline_cache, VideoCore::ShaderNotify* shader_notify,
const Device& device, DescriptorPool& descriptor_pool,
GuestDescriptorQueue& guest_descriptor_queue,
DescriptorBufferRing& descriptor_buffer_ring, Common::ThreadWorker* worker_thread,
GuestDescriptorQueue& guest_descriptor_queue, Common::ThreadWorker* worker_thread,
PipelineStatistics* pipeline_statistics, RenderPassCache& render_pass_cache,
const GraphicsPipelineCacheKey& key, std::array<vk::ShaderModule, NUM_STAGES> stages,
const std::array<const Shader::Info*, NUM_STAGES>& infos);
@@ -137,7 +132,7 @@ private:
template <typename Spec>
bool ConfigureImpl(bool is_indexed);
bool ConfigureDraw(const RescalingPushConstant& rescaling,
void ConfigureDraw(const RescalingPushConstant& rescaling,
const RenderAreaPushConstant& render_are);
void MakePipeline(VkRenderPass render_pass);
@@ -153,7 +148,6 @@ private:
vk::PipelineCache& pipeline_cache;
Scheduler& scheduler;
GuestDescriptorQueue& guest_descriptor_queue;
DescriptorBufferRing& descriptor_buffer_ring;
bool (*configure_func)(GraphicsPipeline*, bool){};
@@ -176,17 +170,10 @@ private:
vk::DescriptorUpdateTemplate descriptor_update_template;
vk::Pipeline pipeline;
DescriptorBufferLayout descriptor_buffer_layout;
std::vector<DescriptorUpdateEntry> last_descriptor_payload;
VkDeviceSize last_descriptor_buffer_offset{};
u32 last_descriptor_buffer_chunk{};
u64 last_descriptor_buffer_generation{};
std::condition_variable build_condvar;
std::mutex build_mutex;
std::atomic_bool is_built{false};
bool uses_push_descriptor{false};
bool uses_descriptor_buffer{false};
};
} // namespace Vulkan
@@ -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, 2, 8);
const int clamped = std::clamp(configured, 4, 8);
const size_t desired = static_cast<size_t>(clamped);
if (desired == 0) {
return 1ULL;
@@ -340,20 +340,17 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_,
const Device& device_, Scheduler& scheduler_,
DescriptorPool& descriptor_pool_,
GuestDescriptorQueue& guest_descriptor_queue_,
DescriptorBufferRing& descriptor_buffer_ring_,
RenderPassCache& render_pass_cache_, BufferCache& buffer_cache_,
TextureCache& texture_cache_, VideoCore::ShaderNotify& shader_notify_)
: VideoCommon::ShaderCache{device_memory_}, device{device_}, scheduler{scheduler_},
descriptor_pool{descriptor_pool_}, guest_descriptor_queue{guest_descriptor_queue_},
descriptor_buffer_ring{descriptor_buffer_ring_},
render_pass_cache{render_pass_cache_}, buffer_cache{buffer_cache_},
texture_cache{texture_cache_}, shader_notify{shader_notify_},
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", {}, Common::ThreadPlacement::Background),
serialization_thread(1, "VkPipelineSerialization", {},
Common::ThreadPlacement::Background) {
"VkPipelineBuilder"),
serialization_thread(1, "VkPipelineSerialization") {
const auto& float_control{device.FloatControlProperties()};
const VkDriverId driver_id{device.GetDriverID()};
const VkShaderStageFlags subgroup_stages{device.GetSubgroupSupportedStages()};
@@ -839,8 +836,8 @@ std::unique_ptr<GraphicsPipeline> PipelineCache::CreateGraphicsPipeline(
Common::ThreadWorker* const thread_worker{build_in_parallel ? &workers : nullptr};
return std::make_unique<GraphicsPipeline>(
scheduler, buffer_cache, texture_cache, vulkan_pipeline_cache, &shader_notify, device,
descriptor_pool, guest_descriptor_queue, descriptor_buffer_ring, thread_worker, statistics,
render_pass_cache, key, std::move(modules), infos);
descriptor_pool, guest_descriptor_queue, thread_worker, statistics, render_pass_cache, key,
std::move(modules), infos);
} catch (const Shader::Exception& exception) {
auto hash = key.Hash();
@@ -960,8 +957,7 @@ std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline(
}
Common::ThreadWorker* const thread_worker{build_in_parallel ? &workers : nullptr};
return std::make_unique<ComputePipeline>(device, scheduler, vulkan_pipeline_cache, descriptor_pool,
guest_descriptor_queue, descriptor_buffer_ring,
thread_worker, statistics,
guest_descriptor_queue, thread_worker, statistics,
&shader_notify, program.info, std::move(spv_module),
key.unique_hash);
@@ -105,7 +105,6 @@ public:
explicit PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_, const Device& device,
Scheduler& scheduler, DescriptorPool& descriptor_pool,
GuestDescriptorQueue& guest_descriptor_queue,
DescriptorBufferRing& descriptor_buffer_ring,
RenderPassCache& render_pass_cache, BufferCache& buffer_cache,
TextureCache& texture_cache, VideoCore::ShaderNotify& shader_notify_);
~PipelineCache();
@@ -148,7 +147,6 @@ private:
Scheduler& scheduler;
DescriptorPool& descriptor_pool;
GuestDescriptorQueue& guest_descriptor_queue;
DescriptorBufferRing& descriptor_buffer_ring;
RenderPassCache& render_pass_cache;
BufferCache& buffer_cache;
TextureCache& texture_cache;
@@ -266,8 +266,6 @@ void PresentManager::WaitPresent() {
void PresentManager::PresentThread(std::stop_token token) {
Common::SetCurrentThreadName("VulkanPresent");
Common::SetCurrentThreadPriority(Common::ThreadPriority::High);
Common::SetCurrentThreadToPerformanceCores();
while (!token.stop_requested()) {
std::unique_lock lock{queue_mutex};
// Wait for presentation frames
@@ -203,10 +203,7 @@ 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, UpdateDescriptorQueue::GUEST_FRAME_PAYLOAD_SIZE,
device.IsExtDescriptorBufferSupported()),
compute_pass_descriptor_queue(device, UpdateDescriptorQueue::COMPUTE_FRAME_PAYLOAD_SIZE),
descriptor_buffer_ring(device, memory_allocator),
guest_descriptor_queue(device), compute_pass_descriptor_queue(device),
blit_image(device, scheduler, state_tracker, descriptor_pool), render_pass_cache(device),
texture_cache_runtime{
device, scheduler, memory_allocator, staging_pool,
@@ -219,19 +216,11 @@ RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra
staging_pool, compute_pass_descriptor_queue, descriptor_pool, texture_cache),
query_cache(gpu, *this, device_memory, query_cache_runtime),
pipeline_cache(device_memory, device, scheduler, descriptor_pool, guest_descriptor_queue,
descriptor_buffer_ring, render_pass_cache, buffer_cache, texture_cache,
gpu.ShaderNotify()),
render_pass_cache, buffer_cache, texture_cache, gpu.ShaderNotify()),
accelerate_dma(buffer_cache, texture_cache, scheduler),
fence_manager(*this, gpu, texture_cache, buffer_cache, query_cache, device, scheduler),
wfi_event(device.GetLogical().CreateEvent()) {
scheduler.SetQueryCache(query_cache);
if (Settings::values.use_unified_memory.GetValue() && device_memory.IsBackingShared()) {
buffer_cache_runtime.TryEnableUnifiedMemory(
device_memory.GetPhysicalBase(), device_memory.GetPhysicalSize(),
device_memory.GetBackingHardwareBuffers(),
device_memory.GetBackingHardwareBufferWindowSize(),
device_memory.GetBackingHardwareBufferBase());
}
}
RasterizerVulkan::~RasterizerVulkan() {
@@ -594,10 +583,7 @@ void RasterizerVulkan::DispatchCompute() {
return;
}
std::scoped_lock lock{texture_cache.mutex, buffer_cache.mutex};
if (!pipeline->Configure(*kepler_compute, *gpu_memory, scheduler, buffer_cache,
texture_cache)) {
return;
}
pipeline->Configure(*kepler_compute, *gpu_memory, scheduler, buffer_cache, texture_cache);
const auto& qmd{kepler_compute->launch_description};
auto indirect_address = kepler_compute->GetIndirectComputeAddress();
@@ -896,7 +882,6 @@ void RasterizerVulkan::TickFrame() {
draw_counter = 0;
guest_descriptor_queue.TickFrame();
compute_pass_descriptor_queue.TickFrame();
descriptor_buffer_ring.TickFrame();
fence_manager.TickFrame();
staging_pool.TickFrame();
{
@@ -17,7 +17,6 @@
#include "video_core/rasterizer_interface.h"
#include "video_core/renderer_vulkan/blit_image.h"
#include "video_core/renderer_vulkan/vk_buffer_cache.h"
#include "video_core/renderer_vulkan/vk_descriptor_buffer.h"
#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
#include "video_core/renderer_vulkan/vk_fence_manager.h"
#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
@@ -208,7 +207,6 @@ private:
DescriptorPool descriptor_pool;
GuestDescriptorQueue guest_descriptor_queue;
ComputePassDescriptorQueue compute_pass_descriptor_queue;
DescriptorBufferRing descriptor_buffer_ring;
BlitImageHelper blit_image;
RenderPassCache render_pass_cache;
@@ -1,6 +1,3 @@
// SPDX-FileCopyrightText: Copyright 2026 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
@@ -15,7 +12,10 @@ ResourcePool::ResourcePool(MasterSemaphore& master_semaphore_, size_t grow_step_
: master_semaphore{&master_semaphore_}, grow_step{grow_step_} {}
size_t ResourcePool::CommitResource() {
const auto search = [this](size_t begin, size_t end, u64 gpu_tick) -> std::optional<size_t> {
// Refresh semaphore to query updated results
master_semaphore->Refresh();
const u64 gpu_tick = master_semaphore->KnownGpuTick();
const auto search = [this, gpu_tick](size_t begin, size_t end) -> std::optional<size_t> {
for (size_t iterator = begin; iterator < end; ++iterator) {
if (gpu_tick >= ticks[iterator]) {
ticks[iterator] = master_semaphore->CurrentTick();
@@ -24,17 +24,11 @@ size_t ResourcePool::CommitResource() {
}
return std::nullopt;
};
const auto find_free = [&](u64 gpu_tick) -> std::optional<size_t> {
std::optional<size_t> result = search(hint_iterator, ticks.size(), gpu_tick);
if (!result) {
result = search(0, hint_iterator, gpu_tick);
}
return result;
};
std::optional<size_t> found = find_free(master_semaphore->KnownGpuTick());
// Try to find a free resource from the hinted position to the end.
std::optional<size_t> found = search(hint_iterator, ticks.size());
if (!found) {
master_semaphore->Refresh();
found = find_free(master_semaphore->KnownGpuTick());
// Search from beginning to the hinted position.
found = search(0, hint_iterator);
if (!found) {
// Both searches failed, the pool is full; handle it.
const size_t free_resource = ManageOverflow();

Some files were not shown because too many files have changed in this diff Show More