المحرّكات الأصلية والخاصة

بدء استخدام 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 أو إصدار أحدث مع 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 في وقت التشغيل

تضمين عناوين 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 Shading Language (GLSL) كسلاسل نصية. استخدِم برنامج تجميع تظليل لتحويل الرمز المكتوب بلغة تظليل، مثل GLSL أو High-level Shader Language (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 التالية:

  • 1.0.3
  • 1.1
  • 1.3

يتم تحديد أعلى رقم إصدار لواجهة برمجة التطبيقات Vulkan المتوفّر على جهاز معيّن حسب إصدار 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

لا يعني توفّر إصدار من واجهة برمجة تطبيقات Vulkan على نظام Android الأساسي أنّ برنامج تشغيل Vulkan على الجهاز متوافق مع هذا الإصدار. قد لا يتوافق الجهاز الذي يعمل بالإصدار 13 من نظام التشغيل Android إلا مع الإصدار 1.1 من واجهة برمجة التطبيقات Vulkan.

عند تهيئة Vulkan، لا تطلب إصدارًا من واجهة برمجة التطبيقات أكبر من:

  • الحد الأقصى لإصدار واجهة برمجة التطبيقات Vulkan لإصدار Android الذي يعمل على الجهاز
  • إصدار Vulkan API الذي تم الإبلاغ عنه من خلال vkEnumerateInstanceVersion
  • إصدار Vulkan API الذي تعرضه السمة apiVersion في بنية VkPhysicalDeviceProperties

في ما يلي مثال على تحديد أعلى إصدار متوافق من واجهة برمجة التطبيقات Vulkan:

// 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. يمكنك أيضًا تحليل ملف 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 Frame Pacing في أداة العرض Vulkan.

عدم الاعتماد على المزامنة الضمنية ومعدّل عرض اللقطات

يتم استخدام vkAcquireNextImageKHR وvkQueuePresentKHR لإدارة سلسلة التبديل. تجنَّب الاعتماد على سلوك الحظر المحتمل للتطبيق العام أو مزامنة وحدة معالجة الرسومات.

يمكن أن يختلف سلوك الحظر الدقيق لهذه الدوال بشكل كبير في ما يلي:

  • أجهزة Android
  • برامج تشغيل وحدة معالجة الرسومات
  • حالات محرك العرض التقديمي (VkPresentModeKHR)

الغرض الوحيد من vkAcquireNextImageKHR هو الحصول على صورة قابلة للعرض، وقد يتم الحظر أو لا يتم. وبالمثل، يضع الأمر vkQueuePresentKHR طلبًا في قائمة الانتظار لعرض صورة، وقد يحظر أو لا يحظر.

ولا توفّر أيّ من الدالتين ضمانات موثوقة لمزامنة مهام وحدة المعالجة المركزية غير المرتبطة أو عمليات وحدة معالجة الرسومات.

لضمان مزامنة قوية، استخدِم دائمًا عناصر Vulkan الأساسية الصريحة، مثل إشارات المرور لعمليات التبعية بين وحدات معالجة الرسومات (مثل العرض على الشاشة)، والحواجز للمزامنة بين وحدة معالجة الرسومات ووحدة المعالجة المركزية (مثل معرفة وقت انتهاء العرض على الشاشة في وحدة المعالجة المركزية)، وأحداث أو حواجز خطوط الأنابيب لتنفيذ أكثر دقة لوحدة معالجة الرسومات وعمليات التبعية في الذاكرة. يضمن استخدام المزامنة الصريحة سلوكًا يمكن توقّعه، ويتجنّب الأخطاء الطفيفة الناتجة عن اختلافات التوقيت الخاصة بالتنفيذ والمتأصلة في منظومة Android المتكاملة والمتنوعة للأجهزة.

تنفيذ عملية التدوير المسبق

يمكن عرض أجهزة Android في أوضاع متعددة. يمكن أن يختلف اتجاه الجهاز عن اتجاه سطح العرض. وعلى عكس OpenGL ES على Android، لا يتعامل Vulkan مع التناقضات بين الاثنين. للتعرّف على طريقة عمل عملية تغيير اتجاه الشاشة وأفضل طريقة للتعامل مع الاختلافات في اتجاه الشاشة عند استخدام Vulkan، يُرجى الاطّلاع على التعامل مع تدوير الجهاز باستخدام ميزة &quot;التدوير المسبق&quot; في 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) للحصول على تعليمات مفصّلة حول كيفية إرسال اقتراح الاختبار.