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

بدء استخدام 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 API أو الإصدارات الأحدث.
  • يتضمّن الجهاز إمكانات وميزات متوافقة مع الإصدار 2022 ملف Android Baseline.

دعم الأجهزة الأقدم

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

قد لا تحتاج إلى التوافق مع الأجهزة القديمة المتوافقة مع Vulkan لأنّها تفتقر إلى الأداء والميزات أو لأنّها تواجه مشاكل في ثبات النظام.

الأداء والميزات

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

الثبات

قد تستخدم أجهزة Android القديمة برامج تشغيل Vulkan قديمة. قد تحتوي إصدارات السائق هذه على أخطاء يمكن أن تؤثر في استقرار لعبتك. يمكن أن يستغرق التعامل مع أخطاء السائق قدرًا كبيرًا من وقت الاختبار والهندسة.

إضافة Vulkan إلى مشروعك

لإضافة Vulkan إلى مشروعك، عليك تنفيذ ما يلي:

  • تضمين عناوين Vulkan API
  • تجميع رمز أداة التظليل على SPIR-V
  • طلب واجهة برمجة تطبيقات Vulkan في وقت التشغيل

تضمين عناوين Vulkan API

يجب أن تتضمن لعبتك ملفات عناوين Vulkan API لتجميع الرموز البرمجية التي تستخدِم Vulkan. يمكنك العثور على نسخة من عناوين Vulkan في Android NDK أو في إصدارات Vulkan SDK. يتضمن أي إصدار معين من NDK فقط عناوين Vulkan المتاحة في وقت إصدار NDK. إذا كنت تستخدم عناوين Vulkan من NDK، استخدِم الإصدار 25 أو إصدارًا أحدث من NDK، والذي يتضمّن ملفات العناوين التي تدعم الإصدار 1.3 من Vulkan. تحتوي حزمة Vulkan SDK على أحدث إصدار من العناوين.

تجميع رمز أداة التظليل على SPIR-V

تتوقع واجهة برمجة تطبيقات Vulkan أن يتم توفير برامج التظليل بتنسيق SPIR-V الثنائي المتوسط الثنائي. يختلف هذا الاصطلاح عن OpenGL ES، حيث يمكنك إرسال رمز المصدر المكتوب بلغة OpenGL Shading Language (GLSL) كسلاسل نصية. استخدِم برنامجًا مبرمجًا للتظليل لتدوين الرموز البرمجية المكتوبة بلغة التظليل مثل GLSL أو لغة Shader عالية المستوى (HLSL) وتجميعها في وحدات SPIR-V لاستخدامها مع Vulkan.

يمكن استخدام المحول البرمجي shaderc لتجميع برامج التظليل التي تمت كتابتها في GLSL في SPIR-V. وإذا كانت لعبتك تستخدم HLSL، فستتوافق DirectXShaderCompiler مع إخراج SPIR-V. وتجمع عادةً برامج التظليل بلا اتصال بالإنترنت كجزء من عملية إنشاء مواد العرض للعبتك، كما تضمِّن وحدات SPIR-V كجزء من مواد عرض بيئة التشغيل.

طلب واجهة برمجة تطبيقات Vulkan في وقت التشغيل

لاستدعاء واجهة برمجة تطبيقات Vulkan، يجب أن تحصل لعبتك على مؤشرات وظائف لاستدعاءات Vulkan API. وأبسط طريقة لإجراء ذلك هي الربط بمكتبة libvulkan.so المشتركة المضمّنة في Android NDK. هناك نوعان من أوجه القصور للربط أمام المكتبة، هما: نقل البيانات الإضافية والقيود المفروضة على مؤشرات دالة Vulkan API التي يتم حلّها تلقائيًا.

عند استدعاء دالة Vulkan API، يمر عنصر التحكّم عبر جدول إرسال تديره بنية تُعرف باسم أداة تحميل Vulkan. يستخدم Android أداة تحميل Vulkan الخاصة به وليس أداة تحميل LunarG. يشكّل نظام التحميل هذا جزءًا من بنية الطبقات في واجهة برمجة تطبيقات Vulkan. يؤدي الربط بمكتبة النظام في وقت الإصدار إلى مستوى إرسال إضافي لطلب بيانات معيّن من واجهة برمجة التطبيقات. رغم صغر حجم النفقات، يمكن ملاحظتها في الألعاب التي تتلقى عددًا كبيرًا من طلبات Vulkan.

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

للحدّ من هذه المشاكل، عليك حل المؤشرات ديناميكيًا لجميع وظائف Vulkan التي تنوي استخدامها في وقت التشغيل. ويمكن تحقيق ذلك باستخدام مكتبة مفتوحة المصدر لأداة التحميل الوصفية، مثل volk. ويدمج نموذج لعبة AGDKTunnel النموذجي لهذا الغرض. إذا كنت تستخدم مكتبة برنامج تحميل بيانات وصفية، لا تنشئ رابطًا يؤدي إلى مكتبة libvulkan.so المشتركة في النصوص البرمجية للإصدار.

تحديد إصدار واجهة Vulkan API المتاح

يتوافق Android مع إصدارات واجهة Vulkan API التالية:

  • 1.0.3
  • 1.1
  • 1.3

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

إصدار Android

يعتمد دعم النظام الأساسي لإصدار Vulkan API على الحد الأدنى لإصدار Android (مستوى واجهة برمجة التطبيقات):

  • الإصدار 1.3: نظام التشغيل Android 13.0 (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث
  • من 1.1 إلى Android 10.0 (المستوى 29 من واجهة برمجة التطبيقات) والإصدارات الأحدث
  • الإصدار 1.0.3 — Android 7.0 (المستوى 24 من واجهة برمجة التطبيقات) والإصدارات الأحدث

دعم سائق Vulkan

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

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

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

في ما يلي مثال على تحديد أعلى إصدار متوافق لواجهة 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 Baseline لعام 2022، يمكنك استخدام مكتبة Vulkan Profiles API المفتوحة المصدر. يمكنك أيضًا تحليل ملف JSON للملف الشخصي بنفسك والاستعلام عن إمكانات الجهاز باستخدام واجهات برمجة تطبيقات Vulkan ذات الصلة لتحديد مدى توافق الملف الشخصي.

ملفات Vulkan الشخصية

يستخدم Android ملفات Vulkan الشخصية التي تحدّد الميزات والإضافات المتاحة لكل جهاز من الأجهزة التي تعمل بنظام التشغيل Android.

إنّ الملف الشخصي الأساسي على Android (ABP) هو المحاولة الأولى لإنشاء ملف Vulkan Profile. ABP2021 وABP2022 هما نوعان من الملفات الشخصية التي تستخدم محتوًى قديمًا بهدف تغطية أكثر من% 85 من الأجهزة النشطة في ذلك الوقت. لن يكون هناك سياسة ABP جديدة من الآن فصاعدًا.

Vulkan profile for Android (VPA) هو الملف الشخصي الجديد الذي يهدف إلى تلبية احتياجات مطوّري البرامج وتوفير ميزات متّسقة بمجرّد أن يتمكّن مطوّرو الأجهزة من تقديمها. إن VPA15_Mins هو الملف الشخصي الأول في نظام Android 15، وسيتم تخصيص معرّف VPA جديد كل عام لتغطية كل إصدار رئيسي من إصدارات Android.

تنفيذ وتيرة ضبط الإطار

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

تنفيذ التبديل المسبق

يمكن أن تظهر أجهزة Android في اتّجاهات متعدّدة. يمكن أن يختلف اتجاه الجهاز عن اتجاه سطح العرض. على عكس OpenGL ES على Android، لا تتعامل Vulkan مع الاختلافات بين الاثنين. لفهم آلية عمل عملية الاتجاه والطريقة المُثلى للتعامل مع اختلافات الاتجاهات عند استخدام Vulkan، يمكنك الاطّلاع على التعامل مع دوران الجهاز باستخدام Vulkan مسبق التدوير.

تحديد المشاكل وحلّها وعرض الملف الشخصي Vulkan

تتوفّر أدوات متعددة لمساعدتك في تشخيص مشاكل العرض ومشاكل الأداء في رمز عرض Vulkan.

لمزيد من المعلومات حول أدوات تصحيح الأخطاء وإنشاء الملفات الشخصية في Vulkan، يُرجى الاطّلاع على قسم الأدوات والميزات المتقدمة.

طبقات التحقق من Vulkan

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

أدوات التقاط الإطارات

استخدِم أدوات التقاط الإطارات لتسجيل وإعادة تشغيل طلبات البيانات من واجهة برمجة التطبيقات Vulkan التي تم إجراؤها أثناء أحد اللقطات. تتيح لك هذه الأدوات ما يلي:

  • عرض معلومات حول الموارد الرسومية النشطة وعمليات التمثيل البياني لها
  • يمكنك الاطّلاع على تسلسل طلبات البيانات من واجهة برمجة التطبيقات التي تجريها لعبتك والاطّلاع على مَعلمات واجهة برمجة التطبيقات.
  • استكشاف حالة مسار الرسومات في وقت إجراء استدعاء الرسم
  • تصور نتائج العرض حتى طلب رسم محدد في الإطار

يمكنك استخدام أداة RenderDoc المفتوحة المصدر لالتقاط الإطارات من الألعاب التي تعمل على Android. يدعم RenderDoc التقاط الإطارات لكل من Vulkan وOpenGL ES.

يمكن أيضًا استخدام أداة فحص وحدة معالجة الرسومات Android (AGI) لالتقاط إطارات Vulkan.

أدوات تحليل الأداء

استخدم أدوات تحليل الأداء للتحقق من مشاكل العرض في لعبتك التي تتسبب في انخفاض عدد اللقطات في الثانية. يوفر مورّدو وحدة معالجة الرسومات الفرديون أدوات مصمَّمة لتحليل لعبتك وتوفير بيانات أداء خاصة ببنيات وحدة GPU. يمكن أن تختلف خصائص الأداء والأعطال في لعبتك بشكل كبير عند العرض باستخدام وحدات معالجة الرسومات من مورِّدين مختلفين أو حتى على إصدارات مختلفة من وحدة معالجة الرسومات من مورِّد واحد.

يمكنك أيضًا استخدام أداة فحص وحدة معالجة الرسومات في Android لجمع بيانات الأداء وتحليلها. على عكس أدوات الموردين، يتوافق Android GPU Inspector مع وحدات معالجة رسومات متعددة من مورِّدين مختلفين. مع ذلك، لا يتوافق تطبيق Android GPU Inspector مع أجهزة Android القديمة وقد لا يكون متوافقًا مع كل الأجهزة الجديدة.

تحسين اختبار Vulkan باستخدام CTS-D

تستعين الشركات المصنِّعة للأجهزة التي تعمل بنظام التشغيل Android بمجموعة أدوات اختبار التوافق (CTS) للمساعدة في ضمان توافق أجهزتهم. CTS (CTS-D) الذي يديره المطوّر هي اختبارات يرسلها مطورو تطبيقات Android للتأكد من أن أجهزة Android المستقبلية تلبي حالات الاستخدام لديها وأنها قادرة على تشغيل التطبيقات بسلاسة وبدون أخطاء.

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

تحقق من عملية إرسال CTS للحصول على إرشادات خطوة بخطوة حول كيفية إرسال اقتراح الاختبار.