mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-04-20 03:24:49 +00:00
Merge branch 'main' into avplayer-improvements
This commit is contained in:
commit
2f033c96c5
22 changed files with 419 additions and 231 deletions
2
.gitmodules
vendored
2
.gitmodules
vendored
|
@ -97,7 +97,7 @@
|
|||
shallow = true
|
||||
[submodule "externals/MoltenVK/SPIRV-Cross"]
|
||||
path = externals/MoltenVK/SPIRV-Cross
|
||||
url = https://github.com/KhronosGroup/SPIRV-Cross
|
||||
url = https://github.com/billhollings/SPIRV-Cross
|
||||
shallow = true
|
||||
[submodule "externals/MoltenVK/MoltenVK"]
|
||||
path = externals/MoltenVK/MoltenVK
|
||||
|
|
|
@ -200,7 +200,14 @@ execute_process(
|
|||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
set(APP_VERSION "0.7.1 WIP")
|
||||
# Set Version
|
||||
set(EMULATOR_VERSION_MAJOR "0")
|
||||
set(EMULATOR_VERSION_MINOR "7")
|
||||
set(EMULATOR_VERSION_PATCH "1")
|
||||
|
||||
set_source_files_properties(src/shadps4.rc PROPERTIES COMPILE_DEFINITIONS "EMULATOR_VERSION_MAJOR=${EMULATOR_VERSION_MAJOR};EMULATOR_VERSION_MINOR=${EMULATOR_VERSION_MINOR};EMULATOR_VERSION_PATCH=${EMULATOR_VERSION_PATCH}")
|
||||
|
||||
set(APP_VERSION "${EMULATOR_VERSION_MAJOR}.${EMULATOR_VERSION_MINOR}.${EMULATOR_VERSION_PATCH} WIP")
|
||||
set(APP_IS_RELEASE false)
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/common/scm_rev.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/src/common/scm_rev.cpp" @ONLY)
|
||||
|
||||
|
|
|
@ -29,8 +29,8 @@ SPDX-License-Identifier: GPL-2.0-or-later
|
|||
### GPU
|
||||
|
||||
- A graphics card with at least 1GB of VRAM
|
||||
- Keep your graphics drivers up to date
|
||||
- Vulkan 1.3 support (required)
|
||||
- Up-to-date graphics drivers
|
||||
- Vulkan 1.3 with the `VK_KHR_swapchain` and `VK_KHR_push_descriptor` extensions
|
||||
|
||||
### RAM
|
||||
|
||||
|
|
2
externals/MoltenVK/MoltenVK
vendored
2
externals/MoltenVK/MoltenVK
vendored
|
@ -1 +1 @@
|
|||
Subproject commit 83510e0f3835c3c43651dda087305abc42572e17
|
||||
Subproject commit 067fc6c85b02f37dfda58eeda49d8458e093ed60
|
2
externals/MoltenVK/SPIRV-Cross
vendored
2
externals/MoltenVK/SPIRV-Cross
vendored
|
@ -1 +1 @@
|
|||
Subproject commit 68300dc07ac3dc592dbbdb87e02d5180f984ad12
|
||||
Subproject commit 185833a61cbe29ce3bfb5a499ffb3dfeaee3bbe7
|
|
@ -7,34 +7,34 @@
|
|||
<name>AboutDialog</name>
|
||||
<message>
|
||||
<source>About shadPS4</source>
|
||||
<translation>حول shadPS4</translation>
|
||||
<translation>حول محاكي الظل PS4</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
|
||||
<translation>shadPS4 هو محاكي تجريبي مفتوح المصدر لجهاز PlayStation 4.</translation>
|
||||
<translation>محاكي الظل هو محاكي تجريبي مفتوح المصدر مخصص لـ PS4</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This software should not be used to play games you have not legally obtained.</source>
|
||||
<translation>يجب عدم استخدام هذا البرنامج لتشغيل الألعاب التي لم تحصل عليها بشكل قانوني.</translation>
|
||||
<translation>لا تستخدم هذا البرنامج لتشغيل الألعاب بطريقة غير قانونية.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CheatsPatches</name>
|
||||
<message>
|
||||
<source>Cheats / Patches for </source>
|
||||
<translation>الغِشّ / التصحيحات </translation>
|
||||
<translation>شفرات / إصلاحات لـ </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cheats/Patches are experimental.\nUse with caution.\n\nDownload cheats individually by selecting the repository and clicking the download button.\nIn the Patches tab, you can download all patches at once, choose which ones you want to use, and save your selection.\n\nSince we do not develop the Cheats/Patches,\nplease report issues to the cheat author.\n\nCreated a new cheat? Visit:\n</source>
|
||||
<translation>الغش والتصحيحات هي ميزات تجريبية.\nاستخدمها بحذر.\n\nقم بتنزيل الغش بشكل فردي عن طريق اختيار المستودع والنقر على زر التنزيل.\nفي علامة تبويب التصحيحات، يمكنك تنزيل جميع التصحيحات دفعة واحدة، واختيار ما تريد استخدامه، وحفظ اختياراتك.\n\nنظرًا لأننا لا نقوم بتطوير الغش/التصحيحات،\nيرجى الإبلاغ عن أي مشاكل إلى مؤلف الغش.\n\nهل قمت بإنشاء غش جديد؟ قم بزيارة:\n</translation>
|
||||
<translation>الشفرات والإصلاحات هي ميزات تجريبية.\nاستخدمها بحذر.\n\nقم بتنزيل الشفرات بشكل فردي عن طريق اختيار المستودع والضغط على تنزيل.\nفي علامة تبويب الإصلاحات، يمكنك تنزيل جميع الإصلاحات دفعة واحدة، واختيار ما تريد استخدامه، وحفظ اختياراتك.\n\nنظرًا لأننا لا نقوم بتطوير الشفرات والإصلاحات ،\nيرجى الإبلاغ عن أي مشاكل إلى مؤلف الشفرات.\n\nهل قمت بإنشاء شفرة جديد؟ قم بزيارة:\n</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No Image Available</source>
|
||||
<translation>لا تتوفر صورة</translation>
|
||||
<translation>الصورة غير موجودة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Serial: </source>
|
||||
<translation>الرقم التسلسلي: </translation>
|
||||
<translation>الرَّقَم التسلسلي: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Version: </source>
|
||||
|
@ -46,7 +46,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Select Cheat File:</source>
|
||||
<translation>اختر ملف الغش:</translation>
|
||||
<translation>حدد مِلَفّ الشفرات:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repository:</source>
|
||||
|
@ -54,7 +54,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Download Cheats</source>
|
||||
<translation>تنزيل الغش</translation>
|
||||
<translation>تحميل الشفرات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete File</source>
|
||||
|
@ -66,19 +66,19 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>You can delete the cheats you don't want after downloading them.</source>
|
||||
<translation>يمكنك حذف الغش الذي لا تريده بعد تنزيله.</translation>
|
||||
<translation>يمكنك حذف الشفرات التي لا تريدها بعد تنزيلها.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to delete the selected file?\n%1</source>
|
||||
<translation>هل تريد حذف الملف المحدد؟\n%1</translation>
|
||||
<translation>هل ترغب في حذف الملف المحدد؟\n%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select Patch File:</source>
|
||||
<translation>اختر ملف التصحيح:</translation>
|
||||
<translation>إختر ملف الباتش:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download Patches</source>
|
||||
<translation>تنزيل التصحيحات</translation>
|
||||
<translation>تحميل الباتشات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save</source>
|
||||
|
@ -86,7 +86,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Cheats</source>
|
||||
<translation>الغش</translation>
|
||||
<translation>الشفرات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Patches</source>
|
||||
|
@ -106,7 +106,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>No patch file found for the current serial.</source>
|
||||
<translation>لم يتم العثور على ملف تصحيح للرقم التسلسلي الحالي.</translation>
|
||||
<translation>لم يتم العثور على مِلَفّ باتش للسيريال الحالي.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the file for reading.</source>
|
||||
|
@ -142,7 +142,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>File already exists. Do you want to replace it?</source>
|
||||
<translation>الملف موجود بالفعل. هل تريد استبداله؟</translation>
|
||||
<translation>يوجد ملف بنفس الاسم. هل ترغب في استبداله؟</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to save file:</source>
|
||||
|
@ -154,19 +154,19 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Cheats Not Found</source>
|
||||
<translation>لم يتم العثور على الغش</translation>
|
||||
<translation>لم يتم العثور على أي شفرات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No Cheats found for this game in this version of the selected repository,try another repository or a different version of the game.</source>
|
||||
<translation>لم يتم العثور على غش لهذه اللعبة في هذا الإصدار من المستودع المحدد. حاول استخدام مستودع آخر أو إصدار آخر من اللعبة.</translation>
|
||||
<translation>لم يتم العثور على شفرات لهذه اللعبة في هذه النسخة من المستودع المحدد. حاول استخدام مستودع آخر أو نسخة مختلفة من اللعبة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cheats Downloaded Successfully</source>
|
||||
<translation>تم تنزيل الغش بنجاح</translation>
|
||||
<translation>تم تحميل الشفرات بنجاح</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have successfully downloaded the cheats for this version of the game from the selected repository. You can try downloading from another repository, if it is available it will also be possible to use it by selecting the file from the list.</source>
|
||||
<translation>لقد نجحت في تنزيل الغش لهذا الإصدار من اللعبة من المستودع المحدد. يمكنك محاولة التنزيل من مستودع آخر. إذا كان متاحًا، يمكنك اختياره عن طريق تحديد الملف من القائمة.</translation>
|
||||
<translation>تم تحميل الشفرات بنجاح لهذه النسخة من اللعبة من المستودع الذي اخترته. إذا أردت، يمكنك تجربة مستودع آخر، وإذا كان متاحًا، يمكنك استخدام الشفرات عن طريق اختيار الملف من القائمة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to save:</source>
|
||||
|
@ -194,7 +194,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>The game is in version: %1</source>
|
||||
<translation>اللعبة في الإصدار: %1</translation>
|
||||
<translation>النسخة الحالية للعبة هي: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The downloaded patch only works on version: %1</source>
|
||||
|
@ -329,7 +329,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Network error occurred while trying to access the URL</source>
|
||||
<translation>حدث خطأ في الشبكة أثناء محاولة الوصول إلى عنوان URL</translation>
|
||||
<translation>حدث خطأ في الشبكة عند محاولة الوصول إلى الموقع</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download Complete</source>
|
||||
|
@ -388,11 +388,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Boots</source>
|
||||
<translation>أحذية</translation>
|
||||
<translation>إقلاع</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Menus</source>
|
||||
<translation>قوائم</translation>
|
||||
<translation>القائمة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ingame</source>
|
||||
|
@ -407,7 +407,7 @@
|
|||
<name>ControlSettings</name>
|
||||
<message>
|
||||
<source>Configure Controls</source>
|
||||
<translation>تعديل عناصر التحكم</translation>
|
||||
<translation>إعدادات التحكم</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>D-Pad</source>
|
||||
|
@ -431,11 +431,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Left Stick Deadzone (def:2 max:127)</source>
|
||||
<translation>مدى تسجيل الإدخال للعصا اليسرى (التلقائي:2 حد أقصى:127)</translation>
|
||||
<translation>النقطة العمياء للعصا اليسرى (الافتراضي: 2، الحد الأقصى: 127)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Left Deadzone</source>
|
||||
<translation>إعدادات مدى تسجيل الإدخال لعصا التحكم اليسرى</translation>
|
||||
<translation>النقطة العمياء لليسار</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Left Stick</source>
|
||||
|
@ -507,11 +507,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Right Stick Deadzone (def:2, max:127)</source>
|
||||
<translation>مدى تسجيل الإدخال للعصا اليمنى (التلقائي:2 حد أقصى:127)</translation>
|
||||
<translation>النقطة العمياء للعصا اليمنى (الافتراضي: 2، الحد الأقصى: 127)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Right Deadzone</source>
|
||||
<translation>إعدادات مدى تسجيل الإدخال لعصا التحكم اليمنى</translation>
|
||||
<translation>النقطة العمياء اليمنى</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Right Stick</source>
|
||||
|
@ -617,7 +617,7 @@
|
|||
<name>ElfViewer</name>
|
||||
<message>
|
||||
<source>Open Folder</source>
|
||||
<translation>فتح المجلد</translation>
|
||||
<translation>افتح مجلد</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -647,7 +647,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Browse</source>
|
||||
<translation>تصفح</translation>
|
||||
<translation>استعراض</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
|
@ -718,15 +718,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Compatibility is untested</source>
|
||||
<translation>التوافق غير مختبر</translation>
|
||||
<translation>لم يتم اختبار التوافق</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Game does not initialize properly / crashes the emulator</source>
|
||||
<translation>اللعبة لا تهيئ بشكل صحيح / تعطل المحاكي</translation>
|
||||
<translation>اللعبة لا تبدأ بشكل صحيح / تتسبب في انهيار المحاكي</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Game boots, but only displays a blank screen</source>
|
||||
<translation>اللعبة تبدأ بالعمل، ولكن فقط تعرض شاشة فارغة</translation>
|
||||
<translation>اللعبة تبدأ بالإقلاع، لكنها تعرض شاشة فارغة فقط</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Game displays an image but does not go past the menu</source>
|
||||
|
@ -734,15 +734,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Game has game-breaking glitches or unplayable performance</source>
|
||||
<translation>اللعبة بها قلتشات أو أداء غير قابل للتشغيل</translation>
|
||||
<translation>اللعبة بها أخطاء جسيمة أو أداء يجعلها غير قابلة للعب</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Game can be completed with playable performance and no major glitches</source>
|
||||
<translation>يمكن الانتهاء من اللعبة مع الأداء القابل للتشغيل و لا توجد قلتشات كبيرة</translation>
|
||||
<translation>يمكن إنهاء اللعبة بأداء جيد وبدون أعطال رئيسية</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Click to see details on github</source>
|
||||
<translation>انقر لرؤية التفاصيل على GitHub</translation>
|
||||
<translation>اضغط لعرض التفاصيل على GitHub</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Last updated</source>
|
||||
|
@ -780,15 +780,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Cheats / Patches</source>
|
||||
<translation>الغش / التصحيحات</translation>
|
||||
<translation>الشفرات / التصحيحات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SFO Viewer</source>
|
||||
<translation>عارض SFO</translation>
|
||||
<translation>عارض معلومات اللعبة (SFO)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Trophy Viewer</source>
|
||||
<translation>عارض الجوائز</translation>
|
||||
<translation>عارض الكؤوس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open Folder...</source>
|
||||
|
@ -820,11 +820,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Copy Version</source>
|
||||
<translation>إصدار النسخة</translation>
|
||||
<translation>نسخ الإصدار</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy Size</source>
|
||||
<translation>حجم النسخة</translation>
|
||||
<translation>نسخ حجم</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy All</source>
|
||||
|
@ -864,7 +864,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Submit a report</source>
|
||||
<translation>إرسال بلاغ</translation>
|
||||
<translation>إرسال تقرير</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shortcut creation</source>
|
||||
|
@ -888,7 +888,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>This game has no update to delete!</source>
|
||||
<translation>لا تحتوي اللعبة على تحديث لحذفه!</translation>
|
||||
<translation>لا يوجد تحديث لهذه اللعبة لحذفه!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Update</source>
|
||||
|
@ -896,7 +896,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>This game has no DLC to delete!</source>
|
||||
<translation>لا تحتوي اللعبة على DLC لحذفه!</translation>
|
||||
<translation>لا توجد محتويات إضافية (DLC) لهذه اللعبة لحذفها!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>DLC</source>
|
||||
|
@ -916,11 +916,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Delete Save Data</source>
|
||||
<translation>حذف التخزينه</translation>
|
||||
<translation>حذف بيانات الحفظ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This game has no update folder to open!</source>
|
||||
<translation>لا تحتوي اللعبة على تحديث لفتحه!</translation>
|
||||
<translation>لا يوجد مجلد تحديث لهذه اللعبة لفتحه!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No log file found for this game!</source>
|
||||
|
@ -932,15 +932,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>This game has no save data to delete!</source>
|
||||
<translation>هذه اللعبة لا تحتوي على أي تخزينات لحذفها!</translation>
|
||||
<translation>لا توجد بيانات حفظ لهذه اللعبة لحذفها!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This game has no saved trophies to delete!</source>
|
||||
<translation>هذه اللعبة ليس لديها كؤوس محفوظة للحذف!</translation>
|
||||
<translation>لا توجد كؤوس محفوظة لهذه اللعبة لحذفها!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save Data</source>
|
||||
<translation>حفظ البيانات</translation>
|
||||
<translation>بيانات الحفظ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Trophy</source>
|
||||
|
@ -955,7 +955,7 @@
|
|||
<name>HelpDialog</name>
|
||||
<message>
|
||||
<source>Quickstart</source>
|
||||
<translation>التشغيل السريع</translation>
|
||||
<translation>البدء السريع</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>FAQ</source>
|
||||
|
@ -963,22 +963,22 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Syntax</source>
|
||||
<translation>الصّيغة</translation>
|
||||
<translation>البنية</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Special Bindings</source>
|
||||
<translation>إدخالات خاصة</translation>
|
||||
<translation>الارتباطات الخاصة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Keybindings</source>
|
||||
<translation>أزرار التحكم</translation>
|
||||
<translation>تعيين الأزرار</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KBMSettings</name>
|
||||
<message>
|
||||
<source>Configure Controls</source>
|
||||
<translation>تعديل عناصر التحكم</translation>
|
||||
<translation>إعدادات جهاز التحكم</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>D-Pad</source>
|
||||
|
@ -1026,7 +1026,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Use per-game configs</source>
|
||||
<translation>استخدام إعدادات كل لُعْبَة</translation>
|
||||
<translation>استخدام إعدادات خاصة لكل لعبه</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>L1</source>
|
||||
|
@ -1038,7 +1038,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Text Editor</source>
|
||||
<translation>محرر النص</translation>
|
||||
<translation>محرّر النصوص</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Help</source>
|
||||
|
@ -1058,15 +1058,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>النقر على لوحة اللمس</translation>
|
||||
<translation>زر لوحة اللمس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>الفأرة إلى عصا التحكم</translation>
|
||||
<translation>تحويل الماوس إلى عصا التحكم</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>*press F7 ingame to activate</source>
|
||||
<translation>* اضغط على F7 للتفعيل</translation>
|
||||
<translation>* اضغط F7 داخل اللعبة للتفعيل</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>R3</source>
|
||||
|
@ -1078,15 +1078,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Mouse Movement Parameters</source>
|
||||
<translation>معطيات حركة الفأرة</translation>
|
||||
<translation>إعدادات حركة الماوس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>note: click Help Button/Special Keybindings for more information</source>
|
||||
<translation>ملاحظة: انقر فوق زر المساعدة/روابط المفاتيح الخاصة للحصول على مزيد من المعلومات</translation>
|
||||
<translation>ملاحظة: لمزيد من المعلومات عن التعيينات الخاصة، اضغط على زر المساعدة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Face Buttons</source>
|
||||
<translation>أزرار الوجه</translation>
|
||||
<translation>الأزرار الأمامية</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Triangle</source>
|
||||
|
@ -1106,11 +1106,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Right Analog Halfmode</source>
|
||||
<translation>تقليل سرعة عصا التحكم اليمنى للنصف</translation>
|
||||
<translation>وضع النصف للعصا اليمنى (نصف الحساسية أو نصف الحركة)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>hold to move right stick at half-speed</source>
|
||||
<translation>الضغط باستمرار لتحريك العصا اليمنى بنصف السرعة</translation>
|
||||
<translation>اضغط مع الاستمرار لتحريك العصا اليمنى بسرعة منخفضة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Right Stick</source>
|
||||
|
@ -1118,15 +1118,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Speed Offset (def 0.125):</source>
|
||||
<translation>إزاحة السرعة (تلقائي 0.125):</translation>
|
||||
<translation>تعويض السرعة (الافتراضي 0.125):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy from Common Config</source>
|
||||
<translation>نسخ من الإعدادات الشائعة</translation>
|
||||
<translation>نسخ من الإعدادات العامة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Deadzone Offset (def 0.50):</source>
|
||||
<translation> إزاحة المدى الغير فعال (الأصل ٠.٥٠).</translation>
|
||||
<translation>تعويض منطقة الخمول (الافتراضي 0.50):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Speed Multiplier (def 1.0):</source>
|
||||
|
@ -1134,39 +1134,39 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Common Config Selected</source>
|
||||
<translation>الإعدادات الشائعة محدده</translation>
|
||||
<translation>تم اختيار الإعدادات العامة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This button copies mappings from the Common Config to the currently selected profile, and cannot be used when the currently selected profile is the Common Config.</source>
|
||||
<translation>هذا الزر يقوم بنسخ تعيينات الأزرار من إعدادات المستخدم العامة لإعدادات المستخدم المحددة حالياً، ولا يمكن استعماله عندما تكون الإعدادات المستخدمة هي الإعدادات العامة.</translation>
|
||||
<translation>يقوم هذا الزر بنسخ التعيينات من الإعدادات العامة إلى الملف الشخصي المحدد حاليًا، ولا يمكن استخدامه إذا كانت الإعدادات العامة هي الملف المحدد.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy values from Common Config</source>
|
||||
<translation>نسخ من الإعدادات الشائعة</translation>
|
||||
<translation>نسخ القيم من الإعدادات العامة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to overwrite existing mappings with the mappings from the Common Config?</source>
|
||||
<translation>هل تريد استبدال التعيينات الحالية بالتعيينات العامة؟</translation>
|
||||
<translation>هل تريد استبدال التعيينات الحالية بالتعيينات من الإعدادات العامة؟</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to Save</source>
|
||||
<translation>غير قادر على الحفظ</translation>
|
||||
<translation>تعذّر الحفظ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot bind any unique input more than once</source>
|
||||
<translation>لا يمكن ربط أي إدخال فريد أكثر من مرة</translation>
|
||||
<translation>لا يمكن تعيين نفس الزر لأكثر من وظيفة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Press a key</source>
|
||||
<translation>اضغط على مفتاح</translation>
|
||||
<translation>اضغط زرًا</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot set mapping</source>
|
||||
<translation>لا يمكن تعيين الأزرار</translation>
|
||||
<translation>تعذّر تعيين الزر</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mousewheel cannot be mapped to stick outputs</source>
|
||||
<translation>عجلة الفأرة لا يمكن تعيينها لعصا التحكم</translation>
|
||||
<translation>لا يمكن تعيين عجلة الفأرة لمخرجات العصا</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save</source>
|
||||
|
@ -1189,7 +1189,7 @@
|
|||
<name>MainWindow</name>
|
||||
<message>
|
||||
<source>Open/Add Elf Folder</source>
|
||||
<translation>Elf فتح/إضافة مجلد</translation>
|
||||
<translation>فتح / إضافة مجلد Elf</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Boot Game</source>
|
||||
|
@ -1225,11 +1225,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Exit the application.</source>
|
||||
<translation>الخروج من التطبيق.</translation>
|
||||
<translation>إغلاق التطبيق</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Game List</source>
|
||||
<translation>إظهار قائمة الألعاب</translation>
|
||||
<translation>عرض قائمة الألعاب</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Game List Refresh</source>
|
||||
|
@ -1281,7 +1281,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>No games found. Please add your games to your library first.</source>
|
||||
<translation>لم يتم العثور على ألعاب. الرجاء إضافة ألعابك إلى مكتبتك أولاً.</translation>
|
||||
<translation>لم يتم العثور على ألعاب. يرجى إضافة ألعابك إلى المكتبة أولاً.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Search...</source>
|
||||
|
@ -1345,7 +1345,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Game List</source>
|
||||
<translation>ققائمة الألعاب</translation>
|
||||
<translation>قائمة الألعاب</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> * Unsupported Vulkan Version</source>
|
||||
|
@ -1353,7 +1353,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Download Cheats For All Installed Games</source>
|
||||
<translation>تنزيل الغش لجميع الألعاب المثبتة</translation>
|
||||
<translation>تحميل الشفرات لجميع الألعاب المثبتة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download Patches For All Games</source>
|
||||
|
@ -1365,7 +1365,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>You have downloaded cheats for all the games you have installed.</source>
|
||||
<translation>لقد قمت بتنزيل الغش لجميع الألعاب التي قمت بتثبيتها.</translation>
|
||||
<translation>تم تحميل الشفرات لجميع الألعاب المثبتة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Patches Downloaded Successfully!</source>
|
||||
|
@ -1409,11 +1409,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Play</source>
|
||||
<translation>أبدأ اللعب</translation>
|
||||
<translation>تشغيل</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pause</source>
|
||||
<translation>توقف مؤقت</translation>
|
||||
<translation>إيقاف مؤقت</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stop</source>
|
||||
|
@ -1425,11 +1425,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Full Screen</source>
|
||||
<translation>وضع ملء الشاشة</translation>
|
||||
<translation>الشاشة الكاملة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Controllers</source>
|
||||
<translation>أذرعة التحكم</translation>
|
||||
<translation>وحدات التحكم</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Keyboard</source>
|
||||
|
@ -1445,7 +1445,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Show Labels Under Icons</source>
|
||||
<translation>إظهار العلامات أسفل الأيقونات</translation>
|
||||
<translation>إظهار التسميات تحت الأيقونات</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -1464,7 +1464,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Console Language</source>
|
||||
<translation>لغة وحدة التحكم</translation>
|
||||
<translation>لغة النظام</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Emulator Language</source>
|
||||
|
@ -1476,11 +1476,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Default tab when opening settings</source>
|
||||
<translation>علامة التبويب الافتراضية عند فتح الإعدادات</translation>
|
||||
<translation>التبويب الافتراضي عند فتح الإعدادات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Game Size In List</source>
|
||||
<translation>عرض حجم اللعبة في القائمة</translation>
|
||||
<translation>إظهار حجم اللعبة في القائمة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Splash</source>
|
||||
|
@ -1496,7 +1496,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Trophy Key</source>
|
||||
<translation>زر الميداليات</translation>
|
||||
<translation>مفتاح الكأس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Trophy</source>
|
||||
|
@ -1504,11 +1504,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Open the custom trophy images/sounds folder</source>
|
||||
<translation>افتح مجلد تخصيص اصوات/صور الميداليات</translation>
|
||||
<translation>فتح مجلد الصور/الأصوات المخصصة للكؤوس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Logger</source>
|
||||
<translation>المسجل</translation>
|
||||
<translation>سجل الأحداث</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Log Type</source>
|
||||
|
@ -1520,23 +1520,23 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Open Log Location</source>
|
||||
<translation>افتح موقع السجل</translation>
|
||||
<translation>فتح موقع السجل</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Input</source>
|
||||
<translation>إدخال</translation>
|
||||
<translation>إعدادات المدخلات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cursor</source>
|
||||
<translation>مؤشر</translation>
|
||||
<translation>مؤشر الماوس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide Cursor</source>
|
||||
<translation>إخفاء المؤشر</translation>
|
||||
<translation>إخفاء مؤشر الماوس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide Cursor Idle Timeout</source>
|
||||
<translation>مهلة إخفاء المؤشر عند الخمول</translation>
|
||||
<translation>إخفاء المؤشر بعد فترة الخمول</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>s</source>
|
||||
|
@ -1552,7 +1552,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>الرسومات</translation>
|
||||
<translation>الرسوميات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GUI</source>
|
||||
|
@ -1564,7 +1564,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Graphics Device</source>
|
||||
<translation>جهاز الرسومات</translation>
|
||||
<translation>جهاز الرسوميات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Vblank Divider</source>
|
||||
|
@ -1572,15 +1572,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Advanced</source>
|
||||
<translation>متقدم</translation>
|
||||
<translation>الإعدادات المتقدمة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Shaders Dumping</source>
|
||||
<translation>تمكين تفريغ الشيدرات</translation>
|
||||
<translation>تمكين تصدير الشيدرات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable NULL GPU</source>
|
||||
<translation>تمكين وحدة معالجة الرسومات الفارغة</translation>
|
||||
<translation>تمكين GPU فارغ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable HDR</source>
|
||||
|
@ -1604,23 +1604,23 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Debug</source>
|
||||
<translation>تصحيح الأخطاء</translation>
|
||||
<translation>التصحيح</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Debug Dumping</source>
|
||||
<translation>تمكين تفريغ التصحيح</translation>
|
||||
<translation>تمكين تصدير بيانات التصحيح</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Vulkan Validation Layers</source>
|
||||
<translation>Vulkan تمكين طبقات التحقق من</translation>
|
||||
<translation>تمكين طبقات التحقق لـ Vulkan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Vulkan Synchronization Validation</source>
|
||||
<translation>Vulkan تمكين التحقق من تزامن</translation>
|
||||
<translation>تمكين التحقق من تزامن Vulkan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable RenderDoc Debugging</source>
|
||||
<translation>RenderDoc تمكين تصحيح أخطاء</translation>
|
||||
<translation>تمكين التصحيح باستخدام RenderDoc</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Crash Diagnostics</source>
|
||||
|
@ -1628,19 +1628,19 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Collect Shaders</source>
|
||||
<translation>اجمع برامج التظليل</translation>
|
||||
<translation>جمع الشيدرات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy GPU Buffers</source>
|
||||
<translation>انسخ التخزين المؤقت لوحدة معالجة الرُسوم</translation>
|
||||
<translation>نسخ مخازن الرسوميات</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Host Debug Markers</source>
|
||||
<translation>استضافة علامات التصحيح</translation>
|
||||
<translation>علامات التصحيح على المضيف</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Guest Debug Markers</source>
|
||||
<translation>ضيف علامات التصحيح</translation>
|
||||
<translation>علامات التصحيح على الضيف</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Update</source>
|
||||
|
@ -1648,11 +1648,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Check for Updates at Startup</source>
|
||||
<translation>تحقق من التحديثات عند بدء التشغيل</translation>
|
||||
<translation>التحقق من التحديثات عند بدء التشغيل</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Always Show Changelog</source>
|
||||
<translation>اظهر سجل التغيرات دائماً</translation>
|
||||
<translation>عرض سجل التغييرات دائمًا</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Update Channel</source>
|
||||
|
@ -1672,7 +1672,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Disable Trophy Notification</source>
|
||||
<translation>إغلاق إشعارات الميداليات</translation>
|
||||
<translation>تعطيل إشعار التروفي</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Background Image</source>
|
||||
|
@ -1684,7 +1684,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Opacity</source>
|
||||
<translation>درجة السواد</translation>
|
||||
<translation>الشفافية</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Play title music</source>
|
||||
|
@ -1692,7 +1692,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Update Compatibility Database On Startup</source>
|
||||
<translation>تحديث قاعدة بيانات التوافق عند التشغيل</translation>
|
||||
<translation>تحديث بيانات التوافق تلقائيًا عند التشغيل</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Game Compatibility</source>
|
||||
|
@ -1700,7 +1700,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data</source>
|
||||
<translation>إظهار معلومات التوافق</translation>
|
||||
<translation>عرض بيانات التوافق</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Update Compatibility Database</source>
|
||||
|
@ -1728,7 +1728,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Point your mouse at an option to display its description.</source>
|
||||
<translation>وجّه الماوس نحو خيار لعرض وصفه.</translation>
|
||||
<translation>✅ مرّر مؤشر الماوس على أي خِيار لعرض وصفه.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Console Language:\nSets the language that the PS4 game uses.\nIt's recommended to set this to a language the game supports, which will vary by region.</source>
|
||||
|
@ -1736,11 +1736,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Emulator Language:\nSets the language of the emulator's user interface.</source>
|
||||
<translation>لغة المحاكي:\nتحدد لغة واجهة المستخدم الخاصة بالمحاكي.</translation>
|
||||
<translation>لغة المحاكي:\nتحدد اللغة المستخدمة في واجهة المحاكي.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Splash Screen:\nShows the game's splash screen (a special image) while the game is starting.</source>
|
||||
<translation>إظهار شاشة البداية:\nيعرض شاشة البداية الخاصة باللعبة (صورة خاصة) أثناء بدء التشغيل.</translation>
|
||||
<translation>عرض شاشة البداية:\nيعرض شاشة البداية الخاصة باللعبة (صورة مميزة) أثناء بدء التشغيل.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Discord Rich Presence:\nDisplays the emulator icon and relevant information on your Discord profile.</source>
|
||||
|
@ -1748,59 +1748,60 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Username:\nSets the PS4's account username, which may be displayed by some games.</source>
|
||||
<translation>اسم المستخدم:\nيضبط اسم حساب PS4، الذي قد يتم عرضه في بعض الألعاب.</translation>
|
||||
<translation>اسم المستخدم:\nيحدد اسم حساب'PS4، وقد يظهر في بعض الألعاب.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Trophy Key:\nKey used to decrypt trophies. Must be obtained from your jailbroken console.\nMust contain only hex characters.</source>
|
||||
<translation>مفتاح الميداليات:\nمفتاح يستخدم لفتح تشفير الميداليات. يجب أن يكون من جهاز مكسور الحماية.\nيجي أن يحتوي على أحرف نظام العد السداسي.</translation>
|
||||
<translation>مفتاح الكؤوس:\nيُستخدم لفك تشفير الجوائز داخل الألعاب. يُستخرج من جهاز معدل.\nيجب أن يُكتب باستخدام رموز ست عشرية فقط.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Log Type:\nSets whether to synchronize the output of the log window for performance. May have adverse effects on emulation.</source>
|
||||
<translation>نوع السجل:\nيضبط ما إذا كان سيتم مزامنة مخرجات نافذة السجل للأداء. قد يؤثر سلبًا على المحاكاة.</translation>
|
||||
<translation>نوع السجل:\nييحدد ما إذا كان سيتم مزامنة مخرجات نافذة السجل لتحسين الأداء. قد يؤدي ذلك إلى تأثيرات سلبية على المحاكاة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Log Filter:\nFilters the log to only print specific information.\nExamples: "Core:Trace" "Lib.Pad:Debug Common.Filesystem:Error" "*:Critical"\nLevels: Trace, Debug, Info, Warning, Error, Critical - in this order, a specific level silences all levels preceding it in the list and logs every level after it.</source>
|
||||
<translation>فلتر السجل:\nيقوم بتصفية السجل لطباعة معلومات محددة فقط.\nأمثلة: "Core:Trace" "Lib.Pad:Debug Common.Filesystem:Error" "*:Critical" المستويات: Trace, Debug, Info, Warning, Error, Critical - بالترتيب، مستوى محدد يخفي جميع المستويات التي تسبقه ويعرض جميع المستويات بعده.</translation>
|
||||
<translation>تصفية السجل:\nيمكنك تحديد نوع المعلومات التي سيتم عرضها في السجل فقط.\nأمثلة: "Core:Trace" "Lib.Pad:Debug Common.Filesystem:Error" "*:Critical" االمستويات حسب الترتيب:: Trace, Debug, Info, Warning, Error, Critical - عند اختيار مستوى معين، يتم تجاهل كل ما قبله، وتسجيل كل ما بعده.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Update:\nRelease: Official versions released every month that may be very outdated, but are more reliable and tested.\nNightly: Development versions that have all the latest features and fixes, but may contain bugs and are less stable.</source>
|
||||
<translation>تحديث: Release: إصدارات رسمية تصدر شهريًا، قد تكون قديمة بعض الشيء، لكنها أكثر استقرارًا واختبارًا. Nightly: إصدارات تطوير تحتوي على أحدث الميزات والإصلاحات، لكنها قد تحتوي على أخطاء وأقل استقرارًا.</translation>
|
||||
<translation>تحديث: Release: نُسخ شهرية مستقرة وخضعت للاختبار، لكنها قد تكون قديمة.
|
||||
Nightly: نُسخ تحتوي على أحدث الميزات، لكنها أقل استقرارًا وقد تحتوي على أخطاء.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Background Image:\nControl the opacity of the game background image.</source>
|
||||
<translation>صورة الخلفية:\nيتحكم في درجة سواد صورة خلفية اللعبة.</translation>
|
||||
<translation>صورة الخلفية:\nتحكم في شفافية صورة خلفية اللعبة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Play Title Music:\nIf a game supports it, enable playing special music when selecting the game in the GUI.</source>
|
||||
<translation>تشغيل موسيقى العنوان:\nإذا كانت اللعبة تدعم ذلك، قم بتمكين تشغيل موسيقى خاصة عند اختيار اللعبة في واجهة المستخدم.</translation>
|
||||
<translation>تشغيل موسيقى العنوان:\nفي حال كانت اللعبة تدعم ذلك، يتم تشغيل موسيقى خاصة عند تحديدها في الواجهة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disable Trophy Pop-ups:\nDisable in-game trophy notifications. Trophy progress can still be tracked using the Trophy Viewer (right-click the game in the main window).</source>
|
||||
<translation>إغلاق نوافذ الميداليات المنبثقة:\n إغلاق إشعارات الميداليات داخل اللعبة. تقدم الميداليات يمكن تتبعه باستخدام عارض الميداليات (قم بالضغط على زر الفأرة الأيمن داخل النافذة الرئيسية).</translation>
|
||||
<translation>تعطيل إشعارات التروفي:\nيمنع ظهور إشعارات الجوائز أثناء اللعب، بينما يظل بإمكانك متابعة التقدم من خلال "عارض التروفي" (انقر بزر الفأرة الأيمن على اللعبة في النافذة الرئيسية).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide Cursor:\nChoose when the cursor will disappear:\nNever: You will always see the mouse.\nidle: Set a time for it to disappear after being idle.\nAlways: you will never see the mouse.</source>
|
||||
<translation>إخفاء المؤشر:\nاختر متى سيختفي المؤشر:\nأبداً: سترى الفأرة دائماً.\nعاطل: حدد وقتاً لاختفائه بعد أن يكون غير مستخدم.\nدائماً: لن ترى الفأرة أبداً.</translation>
|
||||
<translation>إخفاء المؤشر:\nاختر متى يتم إخفاء مؤشر الماوس:\nأبدًا: يظهر دائمًا.\nعند الخمول: يختفي بعد فترة من عدم الحركة.\nدائمًا: لا يظهر إطلاقًا.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>حدد وقتاً لاختفاء الفأرة بعد أن تكون غير مستخدم.</translation>
|
||||
<translation>مدة إخفاء المؤشر عند الخمول:\nالوقت (بالثواني) الذي ينتظره المؤشر قبل أن يختفي تلقائيًا عند عدم استخدامه.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>سلوك زر العودة:\nيضبط زر العودة في وحدة التحكم ليحاكي الضغط على الموضع المحدد على لوحة اللمس في PS4.</translation>
|
||||
<translation>سلوك زر الرجوع:\nيحدد وظيفة زر' الرجوع في وحدة التحكم لمحاكاة اللمس في موقع معيّن على لوحة اللمس الخاصة بـ PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>عرض بيانات التوافق:\nيقوم بإظهار معلومات توافق اللعبة في طريقة عرض الطاولة. تشغيل"تحديث التوافق عند التشغيل" للحصول على معلومات محدثة.</translation>
|
||||
<translation>عرض بيانات التوافق:\nيعرض معلومات توافق الألعاب في عرض جدولي. فعّل ""تحديث التوافق عند بدء التشغيل"" للحصول على أحدث المعلومات.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Update Compatibility On Startup:\nAutomatically update the compatibility database when shadPS4 starts.</source>
|
||||
<translation>تحديث التوافق عند التشغيل:\nتحديث قاعدة بيانات التوافق تلقائياً عند تشغيل shadps4.</translation>
|
||||
<translation>تحديث التوافق عند بدء التشغيل:\nيتم تحديث قاعدة بيانات التوافق تلقائيًا عند بدء تشغيل shadPS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Update Compatibility Database:\nImmediately update the compatibility database.</source>
|
||||
<translation>تحديث قاعدة بيانات التوافق:\nقم بتحديث قاعدة بيانات التوافق حالاً.</translation>
|
||||
<translation>تحديث قاعدة بيانات التوافق:\nتحديث فوري لقاعدة بيانات التوافق.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Never</source>
|
||||
|
@ -1816,15 +1817,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>لوحة اللمس اليسرى</translation>
|
||||
<translation>الجانب الأيسر من لوحة اللمس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>لوحة اللمس اليمنى</translation>
|
||||
<translation>الجانب الأيمن من لوحة اللمس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>وسط لوحة اللمس</translation>
|
||||
<translation>مركز لوحة اللمس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
|
@ -1832,11 +1833,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>جهاز الرسومات:\nعلى الأنظمة متعددة وحدات معالجة الرسومات، اختر وحدة معالجة الرسومات التي سيستخدمها المحاكي من قائمة منسدلة،\nأو اختر "Auto Select" لتحديدها تلقائيًا.</translation>
|
||||
<translation>جهاز الرسوميات:\nفي الأنظمة التي تحتوي على أكثر من معالج رسومي، اختر وحدة المعالجة الرسومية GPU التي سيستخدمها المحاكي من القائمة المنسدلة،\nأو اختر ""تحديد تلقائي"" ليتم اختيارها تلقائيًا.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Width/Height:\nSets the size of the emulator window at launch, which can be resized during gameplay.\nThis is different from the in-game resolution.</source>
|
||||
<translation>العرض / الارتفاع:\nيضبط حجم نافذة المحاكي عند التشغيل، والذي يمكن تغيير حجمه أثناء اللعب.\nهذا يختلف عن دقة اللعبة نفسها.</translation>
|
||||
<translation>العرض/الارتفاع:\nتحدد حجم نافذة المحاكي عند التشغيل، ويمكن تغيير حجمها أثناء اللعب.\nيختلف هذا عن دقة اللعبة داخل اللعبة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Vblank Divider:\nThe frame rate at which the emulator refreshes at is multiplied by this number. Changing this may have adverse effects, such as increasing the game speed, or breaking critical game functionality that does not expect this to change!</source>
|
||||
|
@ -1844,11 +1845,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Enable Shaders Dumping:\nFor the sake of technical debugging, saves the games shaders to a folder as they render.</source>
|
||||
<translation>تمكين تفريغ الـ Shaders:\nلأغراض تصحيح الأخطاء التقنية، يحفظ الـ Shaders الخاصة باللعبة في مجلد أثناء التشغيل.</translation>
|
||||
<translation>تمكين تفريغ الشيدرات:\nلأغراض تصحيح الأخطاء التقنية، يقوم بحفظ شيدرات اللعبة في مجلد أثناء عرضها.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Null GPU:\nFor the sake of technical debugging, disables game rendering as if there were no graphics card.</source>
|
||||
<translation>تمكين GPU الافتراضية:\nلأغراض تصحيح الأخطاء التقنية، يقوم بتعطيل عرض اللعبة كما لو لم يكن هناك بطاقة رسومات.</translation>
|
||||
<translation>تمكين GPU فارغ:\nلأغراض تصحيح الأخطاء التقنية، يتم تعطيل عرض اللعبة كما لو لم يكن هناك كرت شاشة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable HDR:\nEnables HDR in games that support it.\nYour monitor must have support for the BT2020 PQ color space and the RGB10A2 swapchain format.</source>
|
||||
|
@ -1856,7 +1857,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Game Folders:\nThe list of folders to check for installed games.</source>
|
||||
<translation>مجلدات اللعبة:\nقائمة بالمجلدات للتحقق من الألعاب المثبتة.</translation>
|
||||
<translation>مجلدات اللعبة:\nقائمة المجلدات التي يتم فحصها للبحث عن الألعاب المثبتة.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add:\nAdd a folder to the list.</source>
|
||||
|
@ -1868,7 +1869,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Enable Debug Dumping:\nSaves the import and export symbols and file header information of the currently running PS4 program to a directory.</source>
|
||||
<translation>تمكين تفريغ التصحيح:\nيحفظ رموز الاستيراد والتصدير ومعلومات رأس الملف للبرنامج الحالي لجهاز PS4 إلى دليل.</translation>
|
||||
<translation>تمكين تفريغ التصحيح:\nيقوم بحفظ الرموز المستوردة والمصدرة، بالإضافة إلى معلومات رأس الملف للبرنامج الجاري تشغيله على PS4 في مجلد.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Vulkan Validation Layers:\nEnables a system that validates the state of the Vulkan renderer and logs information about its internal state.\nThis will reduce performance and likely change the behavior of emulation.</source>
|
||||
|
@ -1980,11 +1981,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>W:</source>
|
||||
<translation type="unfinished">W:</translation>
|
||||
<translation>العرض:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>H:</source>
|
||||
<translation type="unfinished">H:</translation>
|
||||
<translation>الارتفاع:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Separate Log Files</source>
|
||||
|
@ -2055,7 +2056,7 @@
|
|||
<name>TrophyViewer</name>
|
||||
<message>
|
||||
<source>Trophy Viewer</source>
|
||||
<translation>عارض الجوائز</translation>
|
||||
<translation>عارض التروفي</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select Game:</source>
|
||||
|
|
|
@ -138,7 +138,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>File Exists</source>
|
||||
<translation>Il file è presente</translation>
|
||||
<translation>Il file esiste già </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File already exists. Do you want to replace it?</source>
|
||||
|
|
|
@ -21,6 +21,15 @@ Id SharedAtomicU32(EmitContext& ctx, Id offset, Id value,
|
|||
return (ctx.*atomic_func)(ctx.U32[1], pointer, scope, semantics, value);
|
||||
}
|
||||
|
||||
Id SharedAtomicU32_IncDec(EmitContext& ctx, Id offset,
|
||||
Id (Sirit::Module::*atomic_func)(Id, Id, Id, Id)) {
|
||||
const Id shift_id{ctx.ConstU32(2U)};
|
||||
const Id index{ctx.OpShiftRightArithmetic(ctx.U32[1], offset, shift_id)};
|
||||
const Id pointer{ctx.OpAccessChain(ctx.shared_u32, ctx.shared_memory_u32, index)};
|
||||
const auto [scope, semantics]{AtomicArgs(ctx)};
|
||||
return (ctx.*atomic_func)(ctx.U32[1], pointer, scope, semantics);
|
||||
}
|
||||
|
||||
Id BufferAtomicU32BoundsCheck(EmitContext& ctx, Id index, Id buffer_size, auto emit_func) {
|
||||
if (Sirit::ValidId(buffer_size)) {
|
||||
// Bounds checking enabled, wrap in a conditional branch to make sure that
|
||||
|
@ -99,6 +108,18 @@ Id EmitSharedAtomicXor32(EmitContext& ctx, Id offset, Id value) {
|
|||
return SharedAtomicU32(ctx, offset, value, &Sirit::Module::OpAtomicXor);
|
||||
}
|
||||
|
||||
Id EmitSharedAtomicISub32(EmitContext& ctx, Id offset, Id value) {
|
||||
return SharedAtomicU32(ctx, offset, value, &Sirit::Module::OpAtomicISub);
|
||||
}
|
||||
|
||||
Id EmitSharedAtomicIIncrement32(EmitContext& ctx, Id offset) {
|
||||
return SharedAtomicU32_IncDec(ctx, offset, &Sirit::Module::OpAtomicIIncrement);
|
||||
}
|
||||
|
||||
Id EmitSharedAtomicIDecrement32(EmitContext& ctx, Id offset) {
|
||||
return SharedAtomicU32_IncDec(ctx, offset, &Sirit::Module::OpAtomicIDecrement);
|
||||
}
|
||||
|
||||
Id EmitBufferAtomicIAdd32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value) {
|
||||
return BufferAtomicU32(ctx, inst, handle, address, value, &Sirit::Module::OpAtomicIAdd);
|
||||
}
|
||||
|
|
|
@ -130,6 +130,10 @@ Id EmitSharedAtomicSMin32(EmitContext& ctx, Id offset, Id value);
|
|||
Id EmitSharedAtomicAnd32(EmitContext& ctx, Id offset, Id value);
|
||||
Id EmitSharedAtomicOr32(EmitContext& ctx, Id offset, Id value);
|
||||
Id EmitSharedAtomicXor32(EmitContext& ctx, Id offset, Id value);
|
||||
Id EmitSharedAtomicIIncrement32(EmitContext& ctx, Id offset);
|
||||
Id EmitSharedAtomicIDecrement32(EmitContext& ctx, Id offset);
|
||||
Id EmitSharedAtomicISub32(EmitContext& ctx, Id offset, Id value);
|
||||
|
||||
Id EmitCompositeConstructU32x2(EmitContext& ctx, IR::Inst* inst, Id e1, Id e2);
|
||||
Id EmitCompositeConstructU32x3(EmitContext& ctx, IR::Inst* inst, Id e1, Id e2, Id e3);
|
||||
Id EmitCompositeConstructU32x4(EmitContext& ctx, IR::Inst* inst, Id e1, Id e2, Id e3, Id e4);
|
||||
|
@ -338,8 +342,8 @@ Id EmitIAdd64(EmitContext& ctx, Id a, Id b);
|
|||
Id EmitIAddCary32(EmitContext& ctx, Id a, Id b);
|
||||
Id EmitISub32(EmitContext& ctx, Id a, Id b);
|
||||
Id EmitISub64(EmitContext& ctx, Id a, Id b);
|
||||
Id EmitSMulExt(EmitContext& ctx, Id a, Id b);
|
||||
Id EmitUMulExt(EmitContext& ctx, Id a, Id b);
|
||||
Id EmitSMulHi(EmitContext& ctx, Id a, Id b);
|
||||
Id EmitUMulHi(EmitContext& ctx, Id a, Id b);
|
||||
Id EmitIMul32(EmitContext& ctx, Id a, Id b);
|
||||
Id EmitIMul64(EmitContext& ctx, Id a, Id b);
|
||||
Id EmitSDiv32(EmitContext& ctx, Id a, Id b);
|
||||
|
|
|
@ -72,12 +72,17 @@ Id EmitISub64(EmitContext& ctx, Id a, Id b) {
|
|||
return ctx.OpISub(ctx.U64, a, b);
|
||||
}
|
||||
|
||||
Id EmitSMulExt(EmitContext& ctx, Id a, Id b) {
|
||||
return ctx.OpSMulExtended(ctx.full_result_i32x2, a, b);
|
||||
Id EmitSMulHi(EmitContext& ctx, Id a, Id b) {
|
||||
const auto signed_a{ctx.OpBitcast(ctx.S32[1], a)};
|
||||
const auto signed_b{ctx.OpBitcast(ctx.S32[1], b)};
|
||||
const auto mul_ext{ctx.OpSMulExtended(ctx.full_result_i32x2, signed_a, signed_b)};
|
||||
const auto signed_hi{ctx.OpCompositeExtract(ctx.S32[1], mul_ext, 1)};
|
||||
return ctx.OpBitcast(ctx.U32[1], signed_hi);
|
||||
}
|
||||
|
||||
Id EmitUMulExt(EmitContext& ctx, Id a, Id b) {
|
||||
return ctx.OpUMulExtended(ctx.full_result_u32x2, a, b);
|
||||
Id EmitUMulHi(EmitContext& ctx, Id a, Id b) {
|
||||
const auto mul_ext{ctx.OpUMulExtended(ctx.full_result_u32x2, a, b)};
|
||||
return ctx.OpCompositeExtract(ctx.U32[1], mul_ext, 1);
|
||||
}
|
||||
|
||||
Id EmitIMul32(EmitContext& ctx, Id a, Id b) {
|
||||
|
|
|
@ -3569,19 +3569,19 @@ constexpr std::array<InstFormat, 112> InstructionFormatMIMG = {{
|
|||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 65 = IMAGE_GATHER4_CL
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
{},
|
||||
{},
|
||||
// 68 = IMAGE_GATHER4_L
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 69 = IMAGE_GATHER4_B
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 70 = IMAGE_GATHER4_B_CL
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 71 = IMAGE_GATHER4_LZ
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
|
@ -3589,19 +3589,19 @@ constexpr std::array<InstFormat, 112> InstructionFormatMIMG = {{
|
|||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 73 = IMAGE_GATHER4_C_CL
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
{},
|
||||
{},
|
||||
// 76 = IMAGE_GATHER4_C_L
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 77 = IMAGE_GATHER4_C_B
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 78 = IMAGE_GATHER4_C_B_CL
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 79 = IMAGE_GATHER4_C_LZ
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
|
@ -3609,19 +3609,19 @@ constexpr std::array<InstFormat, 112> InstructionFormatMIMG = {{
|
|||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 81 = IMAGE_GATHER4_CL_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
{},
|
||||
{},
|
||||
// 84 = IMAGE_GATHER4_L_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 85 = IMAGE_GATHER4_B_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 86 = IMAGE_GATHER4_B_CL_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 87 = IMAGE_GATHER4_LZ_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
|
@ -3629,19 +3629,19 @@ constexpr std::array<InstFormat, 112> InstructionFormatMIMG = {{
|
|||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 89 = IMAGE_GATHER4_C_CL_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
{},
|
||||
{},
|
||||
// 92 = IMAGE_GATHER4_C_L_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 93 = IMAGE_GATHER4_C_B_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 94 = IMAGE_GATHER4_C_B_CL_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||
ScalarType::Undefined},
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
// 95 = IMAGE_GATHER4_C_LZ_O
|
||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||
ScalarType::Float32},
|
||||
|
|
|
@ -13,6 +13,12 @@ void Translator::EmitDataShare(const GcnInst& inst) {
|
|||
// DS
|
||||
case Opcode::DS_ADD_U32:
|
||||
return DS_ADD_U32(inst, false);
|
||||
case Opcode::DS_SUB_U32:
|
||||
return DS_SUB_U32(inst, false);
|
||||
case Opcode::DS_INC_U32:
|
||||
return DS_INC_U32(inst, false);
|
||||
case Opcode::DS_DEC_U32:
|
||||
return DS_DEC_U32(inst, false);
|
||||
case Opcode::DS_MIN_I32:
|
||||
return DS_MIN_U32(inst, true, false);
|
||||
case Opcode::DS_MAX_I32:
|
||||
|
@ -35,6 +41,8 @@ void Translator::EmitDataShare(const GcnInst& inst) {
|
|||
return DS_WRITE(32, false, true, true, inst);
|
||||
case Opcode::DS_ADD_RTN_U32:
|
||||
return DS_ADD_U32(inst, true);
|
||||
case Opcode::DS_SUB_RTN_U32:
|
||||
return DS_SUB_U32(inst, true);
|
||||
case Opcode::DS_MIN_RTN_U32:
|
||||
return DS_MIN_U32(inst, false, true);
|
||||
case Opcode::DS_MAX_RTN_U32:
|
||||
|
@ -67,6 +75,8 @@ void Translator::EmitDataShare(const GcnInst& inst) {
|
|||
return DS_READ(64, false, false, false, inst);
|
||||
case Opcode::DS_READ2_B64:
|
||||
return DS_READ(64, false, true, false, inst);
|
||||
case Opcode::DS_READ2ST64_B64:
|
||||
return DS_READ(64, false, true, true, inst);
|
||||
default:
|
||||
LogMissingOpcode(inst);
|
||||
}
|
||||
|
@ -226,6 +236,40 @@ void Translator::DS_SWIZZLE_B32(const GcnInst& inst) {
|
|||
SetDst(inst.dst[0], ir.QuadShuffle(src, index));
|
||||
}
|
||||
|
||||
void Translator::DS_INC_U32(const GcnInst& inst, bool rtn) {
|
||||
const IR::U32 addr{GetSrc(inst.src[0])};
|
||||
const IR::U32 offset =
|
||||
ir.Imm32((u32(inst.control.ds.offset1) << 8u) + u32(inst.control.ds.offset0));
|
||||
const IR::U32 addr_offset = ir.IAdd(addr, offset);
|
||||
const IR::Value original_val = ir.SharedAtomicIIncrement(addr_offset);
|
||||
if (rtn) {
|
||||
SetDst(inst.dst[0], IR::U32{original_val});
|
||||
}
|
||||
}
|
||||
|
||||
void Translator::DS_DEC_U32(const GcnInst& inst, bool rtn) {
|
||||
const IR::U32 addr{GetSrc(inst.src[0])};
|
||||
const IR::U32 offset =
|
||||
ir.Imm32((u32(inst.control.ds.offset1) << 8u) + u32(inst.control.ds.offset0));
|
||||
const IR::U32 addr_offset = ir.IAdd(addr, offset);
|
||||
const IR::Value original_val = ir.SharedAtomicIDecrement(addr_offset);
|
||||
if (rtn) {
|
||||
SetDst(inst.dst[0], IR::U32{original_val});
|
||||
}
|
||||
}
|
||||
|
||||
void Translator::DS_SUB_U32(const GcnInst& inst, bool rtn) {
|
||||
const IR::U32 addr{GetSrc(inst.src[0])};
|
||||
const IR::U32 data{GetSrc(inst.src[1])};
|
||||
const IR::U32 offset =
|
||||
ir.Imm32((u32(inst.control.ds.offset1) << 8u) + u32(inst.control.ds.offset0));
|
||||
const IR::U32 addr_offset = ir.IAdd(addr, offset);
|
||||
const IR::Value original_val = ir.SharedAtomicISub(addr_offset, data);
|
||||
if (rtn) {
|
||||
SetDst(inst.dst[0], IR::U32{original_val});
|
||||
}
|
||||
}
|
||||
|
||||
void Translator::DS_READ(int bit_size, bool is_signed, bool is_pair, bool stride64,
|
||||
const GcnInst& inst) {
|
||||
const IR::U32 addr{ir.GetVectorReg(IR::VectorReg(inst.src[0].code))};
|
||||
|
|
|
@ -30,6 +30,8 @@ void Translator::EmitScalarAlu(const GcnInst& inst) {
|
|||
return S_SUB_I32(inst);
|
||||
case Opcode::S_ADDC_U32:
|
||||
return S_ADDC_U32(inst);
|
||||
case Opcode::S_SUBB_U32:
|
||||
return S_SUBB_U32(inst);
|
||||
case Opcode::S_MIN_I32:
|
||||
return S_MIN_U32(true, inst);
|
||||
case Opcode::S_MIN_U32:
|
||||
|
@ -110,6 +112,8 @@ void Translator::EmitScalarAlu(const GcnInst& inst) {
|
|||
return S_FF1_I32_B32(inst);
|
||||
case Opcode::S_FF1_I32_B64:
|
||||
return S_FF1_I32_B64(inst);
|
||||
case Opcode::S_FLBIT_I32_B32:
|
||||
return S_FLBIT_I32_B32(inst);
|
||||
case Opcode::S_BITSET0_B32:
|
||||
return S_BITSET_B32(inst, 0);
|
||||
case Opcode::S_BITSET1_B32:
|
||||
|
@ -236,6 +240,17 @@ void Translator::S_SUB_U32(const GcnInst& inst) {
|
|||
ir.SetScc(ir.IGreaterThan(src1, src0, false));
|
||||
}
|
||||
|
||||
void Translator::S_SUBB_U32(const GcnInst& inst) {
|
||||
const IR::U32 src0{GetSrc(inst.src[0])};
|
||||
const IR::U32 src1{GetSrc(inst.src[1])};
|
||||
const IR::U32 borrow{ir.Select(ir.GetScc(), ir.Imm32(1U), ir.Imm32(0U))};
|
||||
const IR::U32 result{ir.ISub(ir.ISub(src0, src1), borrow)};
|
||||
SetDst(inst.dst[0], result);
|
||||
|
||||
const IR::U32 sum_with_borrow{ir.IAdd(src1, borrow)};
|
||||
ir.SetScc(ir.ILessThan(src0, sum_with_borrow, false));
|
||||
}
|
||||
|
||||
void Translator::S_ADD_I32(const GcnInst& inst) {
|
||||
const IR::U32 src0{GetSrc(inst.src[0])};
|
||||
const IR::U32 src1{GetSrc(inst.src[1])};
|
||||
|
@ -660,6 +675,17 @@ void Translator::S_FF1_I32_B64(const GcnInst& inst) {
|
|||
SetDst(inst.dst[0], result);
|
||||
}
|
||||
|
||||
void Translator::S_FLBIT_I32_B32(const GcnInst& inst) {
|
||||
const IR::U32 src0{GetSrc(inst.src[0])};
|
||||
// Gcn wants the MSB position counting from the left, but SPIR-V counts from the rightmost (LSB)
|
||||
// position
|
||||
const IR::U32 msb_pos = ir.FindUMsb(src0);
|
||||
const IR::U32 pos_from_left = ir.ISub(ir.Imm32(31), msb_pos);
|
||||
// Select 0xFFFFFFFF if src0 was 0
|
||||
const IR::U1 cond = ir.INotEqual(src0, ir.Imm32(0));
|
||||
SetDst(inst.dst[0], IR::U32{ir.Select(cond, pos_from_left, ir.Imm32(~0U))});
|
||||
}
|
||||
|
||||
void Translator::S_BITSET_B32(const GcnInst& inst, u32 bit_value) {
|
||||
const IR::U32 old_value{GetSrc(inst.dst[0])};
|
||||
const IR::U32 offset{ir.BitFieldExtract(GetSrc(inst.src[0]), ir.Imm32(0U), ir.Imm32(5U))};
|
||||
|
|
|
@ -80,6 +80,7 @@ public:
|
|||
// SOP2
|
||||
void S_ADD_U32(const GcnInst& inst);
|
||||
void S_SUB_U32(const GcnInst& inst);
|
||||
void S_SUBB_U32(const GcnInst& inst);
|
||||
void S_ADD_I32(const GcnInst& inst);
|
||||
void S_SUB_I32(const GcnInst& inst);
|
||||
void S_ADDC_U32(const GcnInst& inst);
|
||||
|
@ -119,6 +120,7 @@ public:
|
|||
void S_BCNT1_I32_B64(const GcnInst& inst);
|
||||
void S_FF1_I32_B32(const GcnInst& inst);
|
||||
void S_FF1_I32_B64(const GcnInst& inst);
|
||||
void S_FLBIT_I32_B32(const GcnInst& inst);
|
||||
void S_BITSET_B32(const GcnInst& inst, u32 bit_value);
|
||||
void S_GETPC_B64(u32 pc, const GcnInst& inst);
|
||||
void S_SAVEEXEC_B64(NegateMode negate, bool is_or, const GcnInst& inst);
|
||||
|
@ -273,6 +275,9 @@ public:
|
|||
void DS_READ(int bit_size, bool is_signed, bool is_pair, bool stride64, const GcnInst& inst);
|
||||
void DS_APPEND(const GcnInst& inst);
|
||||
void DS_CONSUME(const GcnInst& inst);
|
||||
void DS_SUB_U32(const GcnInst& inst, bool rtn);
|
||||
void DS_INC_U32(const GcnInst& inst, bool rtn);
|
||||
void DS_DEC_U32(const GcnInst& inst, bool rtn);
|
||||
|
||||
// Buffer Memory
|
||||
// MUBUF / MTBUF
|
||||
|
|
|
@ -394,6 +394,8 @@ void Translator::EmitVectorAlu(const GcnInst& inst) {
|
|||
return V_MUL_HI_U32(false, inst);
|
||||
case Opcode::V_MUL_LO_I32:
|
||||
return V_MUL_LO_U32(inst);
|
||||
case Opcode::V_MUL_HI_I32:
|
||||
return V_MUL_HI_U32(true, inst);
|
||||
case Opcode::V_MAD_U64_U32:
|
||||
return V_MAD_U64_U32(inst);
|
||||
case Opcode::V_NOP:
|
||||
|
@ -1279,7 +1281,7 @@ void Translator::V_MUL_LO_U32(const GcnInst& inst) {
|
|||
void Translator::V_MUL_HI_U32(bool is_signed, const GcnInst& inst) {
|
||||
const IR::U32 src0{GetSrc(inst.src[0])};
|
||||
const IR::U32 src1{GetSrc(inst.src[1])};
|
||||
const IR::U32 hi{ir.CompositeExtract(ir.IMulExt(src0, src1, is_signed), 1)};
|
||||
const IR::U32 hi{ir.IMulHi(src0, src1, is_signed)};
|
||||
SetDst(inst.dst[0], hi);
|
||||
}
|
||||
|
||||
|
|
|
@ -357,6 +357,18 @@ U32 IREmitter::SharedAtomicXor(const U32& address, const U32& data) {
|
|||
return Inst<U32>(Opcode::SharedAtomicXor32, address, data);
|
||||
}
|
||||
|
||||
U32 IREmitter::SharedAtomicIIncrement(const U32& address) {
|
||||
return Inst<U32>(Opcode::SharedAtomicIIncrement32, address);
|
||||
}
|
||||
|
||||
U32 IREmitter::SharedAtomicIDecrement(const U32& address) {
|
||||
return Inst<U32>(Opcode::SharedAtomicIDecrement32, address);
|
||||
}
|
||||
|
||||
U32 IREmitter::SharedAtomicISub(const U32& address, const U32& data) {
|
||||
return Inst<U32>(Opcode::SharedAtomicISub32, address, data);
|
||||
}
|
||||
|
||||
U32 IREmitter::ReadConst(const Value& base, const U32& offset) {
|
||||
return Inst<U32>(Opcode::ReadConst, base, offset);
|
||||
}
|
||||
|
@ -1388,8 +1400,8 @@ U32U64 IREmitter::ISub(const U32U64& a, const U32U64& b) {
|
|||
}
|
||||
}
|
||||
|
||||
IR::Value IREmitter::IMulExt(const U32& a, const U32& b, bool is_signed) {
|
||||
return Inst(is_signed ? Opcode::SMulExt : Opcode::UMulExt, a, b);
|
||||
U32 IREmitter::IMulHi(const U32& a, const U32& b, bool is_signed) {
|
||||
return Inst<U32>(is_signed ? Opcode::SMulHi : Opcode::UMulHi, a, b);
|
||||
}
|
||||
|
||||
U32U64 IREmitter::IMul(const U32U64& a, const U32U64& b) {
|
||||
|
|
|
@ -106,6 +106,10 @@ public:
|
|||
[[nodiscard]] U32 SharedAtomicOr(const U32& address, const U32& data);
|
||||
[[nodiscard]] U32 SharedAtomicXor(const U32& address, const U32& data);
|
||||
|
||||
[[nodiscard]] U32 SharedAtomicIIncrement(const U32& address);
|
||||
[[nodiscard]] U32 SharedAtomicIDecrement(const U32& address);
|
||||
[[nodiscard]] U32 SharedAtomicISub(const U32& address, const U32& data);
|
||||
|
||||
[[nodiscard]] U32 ReadConst(const Value& base, const U32& offset);
|
||||
[[nodiscard]] U32 ReadConstBuffer(const Value& handle, const U32& index);
|
||||
|
||||
|
@ -240,7 +244,7 @@ public:
|
|||
[[nodiscard]] U32U64 IAdd(const U32U64& a, const U32U64& b);
|
||||
[[nodiscard]] Value IAddCary(const U32& a, const U32& b);
|
||||
[[nodiscard]] U32U64 ISub(const U32U64& a, const U32U64& b);
|
||||
[[nodiscard]] Value IMulExt(const U32& a, const U32& b, bool is_signed = false);
|
||||
[[nodiscard]] U32 IMulHi(const U32& a, const U32& b, bool is_signed = false);
|
||||
[[nodiscard]] U32U64 IMul(const U32U64& a, const U32U64& b);
|
||||
[[nodiscard]] U32 IDiv(const U32& a, const U32& b, bool is_signed = false);
|
||||
[[nodiscard]] U32 IMod(const U32& a, const U32& b, bool is_signed = false);
|
||||
|
|
|
@ -44,6 +44,9 @@ OPCODE(SharedAtomicUMax32, U32, U32,
|
|||
OPCODE(SharedAtomicAnd32, U32, U32, U32, )
|
||||
OPCODE(SharedAtomicOr32, U32, U32, U32, )
|
||||
OPCODE(SharedAtomicXor32, U32, U32, U32, )
|
||||
OPCODE(SharedAtomicISub32, U32, U32, U32, )
|
||||
OPCODE(SharedAtomicIIncrement32, U32, U32, )
|
||||
OPCODE(SharedAtomicIDecrement32, U32, U32, )
|
||||
|
||||
// Context getters/setters
|
||||
OPCODE(GetUserData, U32, ScalarReg, )
|
||||
|
@ -317,8 +320,8 @@ OPCODE(ISub32, U32, U32,
|
|||
OPCODE(ISub64, U64, U64, U64, )
|
||||
OPCODE(IMul32, U32, U32, U32, )
|
||||
OPCODE(IMul64, U64, U64, U64, )
|
||||
OPCODE(SMulExt, U32x2, U32, U32, )
|
||||
OPCODE(UMulExt, U32x2, U32, U32, )
|
||||
OPCODE(SMulHi, U32, U32, U32, )
|
||||
OPCODE(UMulHi, U32, U32, U32, )
|
||||
OPCODE(SDiv32, U32, U32, U32, )
|
||||
OPCODE(UDiv32, U32, U32, U32, )
|
||||
OPCODE(SMod32, U32, U32, U32, )
|
||||
|
|
|
@ -1 +1,43 @@
|
|||
IDI_ICON1 ICON "images/shadps4.ico"
|
||||
// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "winresrc.h"
|
||||
|
||||
#define xstr(s) str(s)
|
||||
#define str(s) #s
|
||||
|
||||
// NEUTRAL LANG
|
||||
LANGUAGE LANG_NEUTRAL, 0x8
|
||||
|
||||
// ICON
|
||||
IDI_ICON1 ICON "images/shadps4.ico"
|
||||
|
||||
// VERSION
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION EMULATOR_VERSION_MAJOR, EMULATOR_VERSION_MINOR, EMULATOR_VERSION_PATCH, 0
|
||||
PRODUCTVERSION EMULATOR_VERSION_MAJOR, EMULATOR_VERSION_MINOR, EMULATOR_VERSION_PATCH, 0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
FILEFLAGS 0x0L
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "\0"
|
||||
VALUE "FileDescription", "shadPS4 - PlayStation 4 Emulator\0"
|
||||
VALUE "FileVersion", xstr(EMULATOR_VERSION_MAJOR) "." xstr(EMULATOR_VERSION_MINOR) "." xstr(EMULATOR_VERSION_PATCH) ".0\0"
|
||||
VALUE "InternalName", "shadPS4\0"
|
||||
VALUE "LegalCopyright", "Copyright 2025 shadPS4 Team\0"
|
||||
VALUE "OriginalFilename", "shadPS4.exe\0"
|
||||
VALUE "ProductName", "shadPS4\0"
|
||||
VALUE "ProductVersion", xstr(EMULATOR_VERSION_MAJOR) "." xstr(EMULATOR_VERSION_MINOR) "." xstr(EMULATOR_VERSION_PATCH) ".0\0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
|
|
@ -242,18 +242,22 @@ bool Instance::CreateDevice() {
|
|||
|
||||
// These extensions are promoted by Vulkan 1.3, but for greater compatibility we use Vulkan 1.2
|
||||
// with extensions.
|
||||
add_extension(VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME);
|
||||
add_extension(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME);
|
||||
add_extension(VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME);
|
||||
add_extension(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME);
|
||||
add_extension(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);
|
||||
add_extension(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME);
|
||||
add_extension(VK_EXT_TOOLING_INFO_EXTENSION_NAME);
|
||||
const bool maintenance4 = add_extension(VK_KHR_MAINTENANCE_4_EXTENSION_NAME);
|
||||
ASSERT(add_extension(VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME));
|
||||
ASSERT(add_extension(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME));
|
||||
ASSERT(add_extension(VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME));
|
||||
ASSERT(add_extension(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME));
|
||||
ASSERT(add_extension(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME));
|
||||
ASSERT(add_extension(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME));
|
||||
ASSERT(add_extension(VK_EXT_TOOLING_INFO_EXTENSION_NAME) ||
|
||||
driver_id == vk::DriverId::eIntelProprietaryWindows);
|
||||
ASSERT(add_extension(VK_KHR_MAINTENANCE_4_EXTENSION_NAME));
|
||||
|
||||
add_extension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
||||
add_extension(VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME);
|
||||
add_extension(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME);
|
||||
// Required
|
||||
ASSERT(add_extension(VK_KHR_SWAPCHAIN_EXTENSION_NAME));
|
||||
ASSERT(add_extension(VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME));
|
||||
|
||||
// Optional
|
||||
depth_range_unrestricted = add_extension(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME);
|
||||
dynamic_state_3 = add_extension(VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME);
|
||||
if (dynamic_state_3) {
|
||||
dynamic_state_3_features =
|
||||
|
@ -422,9 +426,6 @@ bool Instance::CreateDevice() {
|
|||
#endif
|
||||
};
|
||||
|
||||
if (!maintenance4) {
|
||||
device_chain.unlink<vk::PhysicalDeviceMaintenance4FeaturesKHR>();
|
||||
}
|
||||
if (!custom_border_color) {
|
||||
device_chain.unlink<vk::PhysicalDeviceCustomBorderColorFeaturesEXT>();
|
||||
}
|
||||
|
|
|
@ -104,6 +104,11 @@ public:
|
|||
return depth_clip_control;
|
||||
}
|
||||
|
||||
/// Returns true when VK_EXT_depth_range_unrestricted is supported
|
||||
bool IsDepthRangeUnrestrictedSupported() const {
|
||||
return depth_range_unrestricted;
|
||||
}
|
||||
|
||||
/// Returns true when the extendedDynamicState3ColorWriteMask feature of
|
||||
/// VK_EXT_extended_dynamic_state3 is supported.
|
||||
bool IsDynamicColorWriteMaskSupported() const {
|
||||
|
@ -340,6 +345,7 @@ private:
|
|||
bool custom_border_color{};
|
||||
bool fragment_shader_barycentric{};
|
||||
bool depth_clip_control{};
|
||||
bool depth_range_unrestricted{};
|
||||
bool dynamic_state_3{};
|
||||
bool vertex_input_dynamic_state{};
|
||||
bool robustness2{};
|
||||
|
|
|
@ -1018,32 +1018,37 @@ void Rasterizer::UpdateViewportScissorState() const {
|
|||
|
||||
const auto zoffset = vp_ctl.zoffset_enable ? vp.zoffset : 0.f;
|
||||
const auto zscale = vp_ctl.zscale_enable ? vp.zscale : 1.f;
|
||||
|
||||
vk::Viewport viewport = {
|
||||
.minDepth = zoffset - zscale * reduce_z,
|
||||
.maxDepth = zscale + zoffset,
|
||||
};
|
||||
if (!instance.IsDepthRangeUnrestrictedSupported()) {
|
||||
// Unrestricted depth range not supported by device. Make best attempt
|
||||
// by restricting to valid range.
|
||||
viewport.minDepth = std::max(viewport.minDepth, 0.f);
|
||||
viewport.maxDepth = std::min(viewport.maxDepth, 1.f);
|
||||
}
|
||||
if (regs.IsClipDisabled()) {
|
||||
// In case if clipping is disabled we patch the shader to convert vertex position
|
||||
// from screen space coordinates to NDC by defining a render space as full hardware
|
||||
// window range [0..16383, 0..16383] and setting the viewport to its size.
|
||||
viewports.push_back({
|
||||
.x = 0.f,
|
||||
.y = 0.f,
|
||||
.width = float(std::min<u32>(instance.GetMaxViewportWidth(), 16_KB)),
|
||||
.height = float(std::min<u32>(instance.GetMaxViewportHeight(), 16_KB)),
|
||||
.minDepth = zoffset - zscale * reduce_z,
|
||||
.maxDepth = zscale + zoffset,
|
||||
});
|
||||
viewport.x = 0.f;
|
||||
viewport.y = 0.f;
|
||||
viewport.width = float(std::min<u32>(instance.GetMaxViewportWidth(), 16_KB));
|
||||
viewport.height = float(std::min<u32>(instance.GetMaxViewportHeight(), 16_KB));
|
||||
} else {
|
||||
const auto xoffset = vp_ctl.xoffset_enable ? vp.xoffset : 0.f;
|
||||
const auto xscale = vp_ctl.xscale_enable ? vp.xscale : 1.f;
|
||||
const auto yoffset = vp_ctl.yoffset_enable ? vp.yoffset : 0.f;
|
||||
const auto yscale = vp_ctl.yscale_enable ? vp.yscale : 1.f;
|
||||
viewports.push_back({
|
||||
.x = xoffset - xscale,
|
||||
.y = yoffset - yscale,
|
||||
.width = xscale * 2.0f,
|
||||
.height = yscale * 2.0f,
|
||||
.minDepth = zoffset - zscale * reduce_z,
|
||||
.maxDepth = zscale + zoffset,
|
||||
});
|
||||
|
||||
viewport.x = xoffset - xscale;
|
||||
viewport.y = yoffset - yscale;
|
||||
viewport.width = xscale * 2.0f;
|
||||
viewport.height = yscale * 2.0f;
|
||||
}
|
||||
viewports.push_back(viewport);
|
||||
|
||||
auto vp_scsr = scsr;
|
||||
if (regs.mode_control.vport_scissor_enable) {
|
||||
|
|
Loading…
Add table
Reference in a new issue