بدء استخدام Vulkan على Android
Vulkan هي واجهة برمجة التطبيقات الأساسية للرسومات المنخفضة المستوى على Android. توفّر Vulkan أفضل أداء للألعاب التي تستخدم محرك ألعاب وأداة عرض خاصَّين بها.
لتنفيذ Vulkan بنجاح في محرك الألعاب، عليك إجراء ما يلي:
- تحديد أجهزة Android التي يمكن استخدامها مع Vulkan
- التعرّف على مزايا وعيوب توفير الدعم لأجهزة Android القديمة
- إضافة Vulkan إلى هدف الإصدار على Android
- اختَر برنامج تجميع تظليل لإنشاء SPIR-V من أجل Vulkan
- تحديد إصدار Vulkan API المتاح في وقت التشغيل
- تعرَّف على كيفية تحسين عمليات العرض باستخدام Vulkan من خلال ملفات تعريف Vulkan و"مزامنة اللقطات" و"التدوير المُسبَق".
- اختيار أدوات الرسومات لتصحيح الأخطاء وتحليل الأداء
- ملاحظة: للحصول على معلومات حول استخدام Vulkan على Android مع محرّكات الألعاب Unity أو Unreal، يُرجى الاطّلاع على ما يلي:
- Vulkan على Unity
- Vulkan على Unreal
اختيار الحد الأدنى لمواصفات الأجهزة التي تتوافق مع Vulkan
تتوفّر Vulkan على أجهزة Android التي تعمل بالإصدار 7.0 (المستوى 24 من واجهة برمجة التطبيقات) والإصدارات الأحدث. لا تتوافق جميع أجهزة Android التي تعمل بالإصدار 7.0 من نظام التشغيل Android أو الإصدارات الأحدث مع Vulkan. عليك تحديد أجهزة Android المتوافقة مع Vulkan التي تتوافق مع لعبتك.
الاقتراحات
استخدِم المواصفات التالية كحدّ أدنى من المتطلبات لتوافق Vulkan:
- يعمل الجهاز بالإصدار 10.0 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات) أو إصدار أحدث
- أن يكون الجهاز متوافقًا مع الإصدار 1.1 أو إصدار أحدث من واجهة برمجة التطبيقات Vulkan
- يجب أن يتضمّن الجهاز إمكانات وميزات أجهزة متوافقة مع الملف الشخصي الأساسي لنظام التشغيل Android لعام 2022
التوافق مع الأجهزة القديمة
إذا كانت لعبتك مصمَّمة لتعمل على مجموعة كبيرة من الأجهزة ذات مستويات مختلفة من إمكانات الرسومات، قد تحتاج إلى توفير الدعم للأجهزة الأقدم من تلك الموصى بها في اختيار الحد الأدنى من مواصفات الأجهزة لاستخدام Vulkan. قبل توفير إمكانية استخدام Vulkan على الأجهزة القديمة، قيِّم ما إذا كان Vulkan يقدّم مزايا للعبتك. يمكن أن تشهد الألعاب التي تتضمّن العديد من طلبات الرسم وتستخدم OpenGL ES زيادة كبيرة في الحمل الزائد لبرنامج التشغيل بسبب التكلفة العالية لتقديم طلبات الرسم ضمن OpenGL ES. يمكن أن تصبح هذه الألعاب مرتبطة بوحدة المعالجة المركزية (CPU) بسبب استغراقها أجزاءً كبيرة من وقت عرض اللقطة في برنامج تشغيل الرسومات. يمكن أن تشهد الألعاب أيضًا انخفاضًا كبيرًا في استخدام وحدة المعالجة المركزية (CPU) والطاقة عند التبديل من OpenGL ES إلى Vulkan. يكون ذلك مهمًا بشكل خاص إذا كانت لعبتك تتضمّن مشاهد معقّدة لا يمكنها الاستفادة بشكل فعّال من ميزة "النسخ المتطابق" لتقليل عدد طلبات الرسم. عند استهداف الأجهزة القديمة، عليك تضمين دعم العرض باستخدام OpenGL ES كخيار احتياطي، لأنّ بعض الأجهزة في قائمة الأجهزة المستهدَفة قد تتضمّن عمليات تنفيذ Vulkan لا يمكنها تشغيل لعبتك بشكل موثوق.
قد لا تريد توفير الدعم للأجهزة القديمة المتوافقة مع Vulkan لأنّها تفتقر إلى الأداء والميزات أو تواجه مشاكل في الثبات.
الأداء والميزات
قد لا تتوفّر على أجهزة Android القديمة المتوافقة مع Vulkan إمكانية عرض الرسومات أو توافق الأجهزة مع الميزات اللازمة لتشغيل لعبتك. ويزداد احتمال حدوث ذلك إذا كانت لعبتك تتضمّن رسومات عالية الدقة وكان Vulkan هو واجهة برمجة التطبيقات الوحيدة التي تستهدفها على Android. تقتصر العديد من الأجهزة القديمة على الإصدار 1.0.3 من واجهة برمجة تطبيقات Vulkan، وغالبًا ما تفتقد إلى إضافات Vulkan الشائعة الاستخدام والمتاحة على الأجهزة الحديثة.
الثبات
قد تستخدم أجهزة Android القديمة برامج تشغيل Vulkan قديمة. قد تتضمّن هذه الإصدارات من برامج التشغيل أخطاءً يمكن أن تؤثر في ثبات لعبتك. قد يتطلّب حلّ المشاكل في برامج التشغيل إجراء الكثير من الاختبارات واستغراق وقت كبير من فريق الهندسة.
إضافة Vulkan إلى مشروعك
لإضافة Vulkan إلى مشروعك، عليك اتّباع الخطوات التالية:
- تضمين عناوين Vulkan API
- تجميع رمز التظليل إلى SPIR-V
- استدعاء Vulkan API في وقت التشغيل
تضمين عناوين Vulkan API
يجب أن تتضمّن لعبتك ملفات عناوين Vulkan API لتجميع الرمز البرمجي الذي يستخدم Vulkan. يمكنك العثور على نسخة من عناوين Vulkan في Android NDK أو مضمّنة في إصدارات حزمة تطوير البرامج (SDK) الخاصة بـ Vulkan. لا يتضمّن أي إصدار معيّن من NDK سوى عناوين Vulkan المتوفّرة في وقت إصدار NDK. إذا كنت تستخدم عناوين Vulkan من NDK، استخدِم الإصدار 25 أو إصدارًا أحدث من NDK، والذي يتضمّن ملفات عناوين تتوافق مع الإصدار 1.3 من Vulkan. تحتوي حزمة تطوير البرامج (SDK) الخاصة بـ Vulkan على أحدث إصدار من العناوين.
تجميع رمز التظليل إلى SPIR-V
تتوقّع واجهة برمجة التطبيقات Vulkan توفير برامج التظليل بتنسيق SPIR-V الثنائي الوسيط. يختلف هذا الاصطلاح عن OpenGL ES، حيث يمكنك إرسال الرمز المصدري المكتوب بلغة OpenGL للتظليل (GLSL) كسلاسل نصية. استخدِم برنامج تجميع تظليل لتحويل الرمز المكتوب بلغة تظليل، مثل GLSL أو لغة التظليل العالية المستوى (HLSL)، إلى وحدات SPIR-V لاستخدامها مع Vulkan.
يمكن استخدام برنامج التجميع shaderc لتجميع برامج التظليل المكتوبة بلغة GLSL إلى SPIR-V. إذا كانت لعبتك تستخدم HLSL، يتيح DirectXShaderCompiler إخراج SPIR-V. عادةً، يتم تجميع برامج التظليل بلا إنترنت كجزء من عملية تصميم مواد العرض في لعبتك، ويتم تضمين وحدات SPIR-V كجزء من مواد العرض في وقت التشغيل.
استدعاء واجهة برمجة تطبيقات Vulkan في وقت التشغيل
لاستدعاء واجهة برمجة تطبيقات Vulkan، يجب أن تحصل لعبتك على مؤشرات دالة لاستدعاءات واجهة برمجة تطبيقات Vulkan. وأسهل طريقة لإجراء ذلك هي الربط بمكتبة libvulkan.so المشتركة، والتي يتم تضمينها في حزمة Android NDK. يؤدي الربط بالمكتبة إلى حدوث عيبَين: زيادة في تكلفة إرسال الدوال، وقيود على مؤشرات دوال Vulkan API التي يتم حلّها تلقائيًا.
عند استدعاء دالة Vulkan API، يتم تمرير عنصر التحكّم من خلال جدول إرسال يديره عنصر يُعرف باسم أداة تحميل Vulkan. يستخدم نظام التشغيل Android عملية تنفيذ محمّل Vulkan الخاص به، وليس محمّل LunarG. نظام التحميل هذا هو جزء من بنية الطبقات في Vulkan API. يؤدي الربط بمكتبة النظام في وقت الإنشاء إلى توفير مستوى إرسال إضافي لطلب بيانات من واجهة برمجة التطبيقات. على الرغم من أنّ الحمل الزائد صغير، يمكن أن يكون ملحوظًا في الألعاب التي تنفّذ عددًا كبيرًا من طلبات Vulkan.
لا تحلّ مكتبة النظام بشكل عام سوى المؤشرات إلى دوال Vulkan التي تُعدّ جزءًا من واجهة برمجة التطبيقات الأساسية. تحتوي Vulkan على عدد كبير من الإضافات التي تحدّد وظائف إضافية في Vulkan، ولا يتم حل العديد منها تلقائيًا بواسطة مكتبة النظام. عليك حلّ المؤشرات إلى دوال Vulkan هذه يدويًا قبل استخدامها.
للتخفيف من هذه المشاكل، عليك حلّ المؤشرات بشكل ديناميكي لجميع دوال Vulkan التي تنوي استخدامها في وقت التشغيل. ويمكن تحقيق ذلك من خلال استخدام مكتبة مفتوحة المصدر لتحميل البيانات الوصفية، مثل volk. تدمج لعبة
AGDKTunnel التجريبية مكتبة volk لهذا الغرض. إذا كنت تستخدم مكتبة meta-loader، لا تربطها بالمكتبة المشتركة libvulkan.so في نصوص البرامج الخاصة بالإنشاء.
تحديد إصدار Vulkan API المتاح
يتوافق نظام التشغيل Android مع إصدارات Vulkan API التالية:
- 1.0.3
- 1.1
- 1.3
يتم تحديد أعلى رقم لإصدار Vulkan API متاح على جهاز معيّن حسب إصدار Android ومدى توافق برنامج تشغيل Vulkan.
إصدار Android
يعتمد توافق النظام الأساسي مع إصدار معيّن من واجهة برمجة تطبيقات Vulkan على الحد الأدنى من إصدار Android (مستوى واجهة برمجة التطبيقات):
- 1.3 — الإصدار 13.0 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث
- 1.1 — الإصدار 10.0 من نظام التشغيل Android (المستوى 29 لواجهة برمجة التطبيقات) والإصدارات الأحدث
- 1.0.3 — الإصدار 7.0 من نظام التشغيل Android (المستوى 24 لواجهة برمجة التطبيقات) والإصدارات الأحدث
توافق برنامج تشغيل Vulkan
لا يعني دعم نظام Android الأساسي لإصدار من واجهة برمجة تطبيقات Vulkan أنّ إصدار واجهة برمجة التطبيقات متوافق مع برنامج تشغيل Vulkan على الجهاز. قد لا يتوافق الجهاز الذي يعمل بالإصدار 13 من نظام التشغيل Android إلا مع الإصدار 1.1 من واجهة برمجة التطبيقات Vulkan.
عند تهيئة Vulkan، لا تطلب إصدارًا من واجهة برمجة التطبيقات أكبر من:
- أقصى إصدار من Vulkan API لنظام التشغيل Android الذي يعمل على الجهاز
- إصدار Vulkan API الذي تعرضه الدالة vkEnumerateInstanceVersion
- إصدار Vulkan API الذي تعرضه السمة
apiVersionفي بنية VkPhysicalDeviceProperties
في ما يلي مثال على تحديد أعلى إصدار متوافق من Vulkan API:
// Minimum Android API levels for Vulkan 1.3/1.1 version support
static constexpr int kMinimum_vk13_api_level = 33;
static constexpr int kMinimum_vk11_api_level = 29;
uint32_t GetHighestSupportedVulkanVersion(VkPhysicalDevice physical_device) {
uint32_t instance_api_version = 0;
vkEnumerateInstanceVersion(&instance_api_version);
VkPhysicalDeviceProperties device_properties;
vkGetPhysicalDeviceProperties(physical_device, &device_properties);
// Instance and device versions don't have to match, use the lowest version
// number for API support if they don't.
const uint32_t driver_api_version =
(instance_api_version < device_properties.apiVersion) ?
instance_api_version : device_properties.apiVersion;
const int device_api_level = android_get_device_api_level();
if (device_api_level >= kMinimum_vk13_api_level &&
driver_api_version >= VK_API_VERSION_1_3) {
return VK_API_VERSION_1_3;
} else if (device_api_level >= kMinimum_vk11_api_level &&
driver_api_version >= VK_API_VERSION_1_1) {
return VK_API_VERSION_1_1;
}
return VK_API_VERSION_1_0;
}
تحديد توافق ملف Vulkan
ملفات تعريف Vulkan هي ملفات JSON تحدّد مجموعة من الميزات والإضافات والإمكانات والحدود الدنيا للمعلمات التي يجب أن يتيحها جهاز Vulkan ليكون متوافقًا مع ملف التعريف. لتحديد ما إذا كان الجهاز متوافقًا مع ملف تعريف Vulkan معيّن، مثل ملف تعريف Android الأساسي لعام 2022، استخدِم مكتبة Vulkan Profiles API المفتوحة المصدر. يمكنك أيضًا تحليل ملف JSON الخاص بالملف الشخصي بنفسك والاستعلام عن إمكانات الجهاز باستخدام واجهات Vulkan API ذات الصلة لتحديد مدى توافق الملف الشخصي.
ملفات Vulkan الشخصية
يستخدم نظام التشغيل Android ملفات تعريف Vulkan التي تحدّد الميزات والإضافات المتاحة لكل الأجهزة التي تعمل بنظام التشغيل Android.
Android Baseline Profile (ABP) هو المحاولة الأولى لإنشاء Vulkan Profile. ABP2021 وABP2022 هما ملفان شخصيان يستندان إلى بيانات سابقة ويهدفان إلى تغطية أكثر من% 85 من الأجهزة النشطة في ذلك الوقت. لن يتم توفير أي إصدارات جديدة من ABP في المستقبل.
Vulkan Profiles for Android (VPA) هو ملف تعريف جديد يهدف إلى تلبية احتياجات مطوّري البرامج وتوفير ميزات متوافقة فور أن يتمكّن مطوّرو الأجهزة من توفيرها. VPA15_minimums هو أول ملف شخصي لنظام التشغيل Android 15، وسيتم توفير ملف VPA جديد كل عام لتغطية كل إصدار رئيسي من Android.
تنفيذ ميزة "مزامنة عرض اللقطات"
يُعدّ معدّل عرض اللقطات المناسب جزءًا أساسيًا من تقديم تجربة لعب عالية الجودة. تتضمّن "حزمة تطوير ألعاب Android" مكتبة Frame Pacing لمساعدة لعبتك في تحقيق أفضل معدّل لعدد اللقطات في الثانية. لمزيد من التفاصيل حول التنفيذ، يُرجى الاطّلاع على دمج أداة "مزامنة عرض اللقطات" في Android في أداة العرض Vulkan.
تجنَّب الاعتماد على المزامنة الضمنية ومعدّل عرض اللقطات
يتم استخدام vkAcquireNextImageKHR وvkQueuePresentKHR لإدارة سلسلة التبديل. تجنَّب الاعتماد على سلوك الحظر المحتمل للتطبيق العام أو مزامنة وحدة معالجة الرسومات.
يمكن أن يختلف سلوك الحظر الدقيق لهذه الوظائف بشكل كبير في ما يلي:
- أجهزة Android
- برامج تشغيل وحدة معالجة الرسومات
- حالات محرك العرض التقديمي (VkPresentModeKHR)
الغرض الوحيد من vkAcquireNextImageKHR هو الحصول على صورة قابلة للعرض، وقد يتم الحظر أو لا يتم. وبالمثل، تعمل الدالة vkQueuePresentKHR على وضع طلب في قائمة الانتظار لعرض صورة، وقد تحظر أو لا تحظر.
ولا توفّر أيّ من هاتين الدالتين ضمانات موثوقة لمزامنة مهام وحدة المعالجة المركزية غير المرتبطة أو عمليات وحدة معالجة الرسومات.
لضمان مزامنة قوية، استخدِم دائمًا عناصر Vulkan الأساسية الصريحة، مثل إشارات المرور لعمليات التبعية بين وحدات معالجة الرسومات (مثل العرض على الشاشة)، والحواجز للمزامنة بين وحدة معالجة الرسومات ووحدة المعالجة المركزية (مثل معرفة وقت انتهاء العرض على الشاشة في وحدة المعالجة المركزية)، وحواجز أو أحداث خطوط الأنابيب لتنفيذ وحدة معالجة الرسومات وعمليات التبعية في الذاكرة بشكل أكثر دقة. يضمن استخدام المزامنة الواضحة سلوكًا يمكن توقّعه، ويتجنّب الأخطاء الطفيفة الناتجة عن الاختلافات في التوقيت الخاصة بالتنفيذ والموجودة في نظام Android الأساسي المتنوّع للأجهزة.
تنفيذ عملية التدوير المسبق
يمكن عرض أجهزة Android في أوضاع متعددة. يمكن أن يختلف اتجاه الجهاز عن اتجاه سطح العرض. وعلى عكس OpenGL ES على Android، لا يتعامل Vulkan مع التناقضات بين الاثنين. للتعرّف على طريقة عمل عملية تغيير اتجاه الشاشة وأفضل طريقة للتعامل مع الاختلافات في اتجاه الشاشة عند استخدام Vulkan، يمكنك الاطّلاع على التعامل مع تدوير الجهاز باستخدام ميزة "التدوير المسبق" في Vulkan.
تحديد المشاكل في عرض Vulkan وحلّها وإنشاء ملف تعريف له
تتوفّر أدوات متعدّدة لمساعدتك في تشخيص مشاكل العرض ومشاكل الأداء المتعلّقة برمز العرض في Vulkan.
لمزيد من المعلومات حول أدوات تصحيح الأخطاء وإنشاء الملفات الشخصية في Vulkan، يُرجى الاطّلاع على قسم الأدوات والميزات المتقدّمة.
مراحل التحقّق من صحة بيانات Vulkan
طبقات التحقّق من صحة Vulkan هي مكتبات وقت التشغيل التي يمكن تفعيلها لفحص عمليات الاستدعاء التي تجريها لواجهة برمجة تطبيقات Vulkan وتقديم تحذيرات أو أخطاء بشأن الاستخدام غير الصحيح أو غير الأمثل. لا تكون طبقات التحقّق هذه نشطة تلقائيًا، لأنّ عملية التحقّق تضيف حملًا زائدًا أثناء وقت التشغيل وتؤثر في أداء لعبتك. للحصول على معلومات حول كيفية استخدام طبقات التحقّق من الصحة مع لعبتك، راجِع تصحيح الأخطاء باستخدام طبقة التحقّق من الصحة.
أدوات التقاط اللقطات
استخدام أدوات التقاط اللقطات لتسجيل وإعادة تشغيل طلبات Vulkan API التي تم إجراؤها أثناء عرض إطار لعبة تتيح لك هذه الأدوات ما يلي:
- عرض معلومات حول موارد الرسومات النشطة وتمثيلات مرئية لها
- الاطّلاع على تسلسل طلبات البيانات من واجهة برمجة التطبيقات التي تجريها لعبتك ومعرفة مَعلمات واجهة برمجة التطبيقات
- استكشاف حالة مسار الرسومات في وقت طلب الرسم
- تصوُّر نتائج عرض ما يصل إلى طلب رسم معيّن في اللقطة
استخدِم أداة RenderDoc مفتوحة المصدر لالتقاط لقطات من الألعاب التي تعمل على Android. يتوافق RenderDoc مع التقاط اللقطات لكل من Vulkan وOpenGL ES.
يمكن أيضًا استخدام أداة Android GPU Inspector (AGI) لتسجيل لقطات Vulkan.
أدوات تحليل الأداء
استخدِم أدوات تحليل الأداء للتحقيق في مشاكل العرض في لعبتك التي تؤدي إلى انخفاض عدد اللقطات في الثانية. يقدّم مورّدو وحدات معالجة الرسومات أدوات مصمّمة لإنشاء ملف تعريف للعبتك وتقديم بيانات الأداء الخاصة ببُنى وحدات معالجة الرسومات. يمكن أن تختلف خصائص الأداء ومواضع الاختناق في لعبتك بشكل كبير عند عرضها على وحدات معالجة الرسومات من مختلف المورّدين أو حتى على أجيال مختلفة من وحدات معالجة الرسومات من المورّد نفسه.
يمكنك أيضًا استخدام أداة Android GPU Inspector لجمع بيانات الأداء وتحليلها. وعلى عكس أدوات المورّدين، يتوافق Android GPU Inspector مع وحدات معالجة رسومات متعددة من مورّدين مختلفين. ومع ذلك، لا تتوافق أداة Android GPU Inspector مع أجهزة Android القديمة، وقد لا تكون متوافقة مع جميع الأجهزة الجديدة.
تحسين اختبارات Vulkan باستخدام CTS-D
تستخدم الشركات المصنّعة لأجهزة Android "مجموعة أدوات اختبار التوافق" (CTS) للمساعدة في ضمان توافق أجهزتها. مجموعة أدوات اختبار التوافق التي يديرها المطوّرون (CTS-D) هي اختبارات يرسلها مطوّرو تطبيقات Android للتأكّد من أنّ أجهزة Android المستقبلية تستوفي حالات الاستخدام الخاصة بهم ويمكنها تشغيل تطبيقاتهم بسلاسة وبدون أخطاء.
إذا تمكّنت من رصد خطأ جديد في تطبيق Vulkan يؤثر في أي جهاز معيّن يعمل بنظام التشغيل Android، يمكنك إرسال اقتراح اختبار جديد يتضمّن وصفًا للمشكلة وطرق التحقّق منها. يضمن ذلك إصلاح المشكلة في تحديث مستقبلي للجهاز، كما يضمن عدم حدوث الخطأ نفسه على أي أجهزة أخرى.
اطّلِع على عملية إرسال مجموعة أدوات اختبار التوافق (CTS) للحصول على تعليمات مفصّلة حول كيفية إرسال اقتراح الاختبار.