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

بدء استخدام 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. يمكن أن تصبح هذه الألعاب مرتبطة بوحدة المعالجة المركزية بسبب إنفاق أجزاء كبيرة من وقت عرض اللقطة في برنامج تشغيل الرسومات. يمكن أن تلاحظ الألعاب أيضًا انخفاضًا ملحوظًا في استخدام وحدة المعالجة المركزية والطاقة من خلال التبديل من OpenGL ES إلى Vulkan. هذا هو لا سيما إذا كانت لعبتك تتضمّن مشاهد معقّدة لا يمكنها استخدامها بفعالية للمساعدة في تقليل طلبات السحب. عند استهداف الأجهزة الأقدم، ننصحك بتضمين OpenGL ES. عرض الدعم كإجراء احتياطي، لأنّ بعض الأجهزة المدرَجة في قائمة الأجهزة المستهدَفة قد عمليات تنفيذ Vulkan لا يمكنها تشغيل لعبتك بشكل موثوق.

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

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

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

الثبات

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

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

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

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

تضمين رؤوس Vulkan API

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

تجميع رمز برنامج التظليل إلى SPIR-V

تتوقّع Vulkan API تقديم برامج shaders بتنسيق ثنائي متوسط SPIR-V. يختلف هذا الاتفاق عن OpenGL ES، حيث يمكنك إرسال رمز المصدر المكتوب بلغة OpenGL Shading Language (GLSL) كسلسلة نصية. استخدِم برنامج تجميع برامج Shader لأخذ الرمز البرمجي المكتوب بلغة shader مثل 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 لهذا الغرض. في حال حذف تستخدم مكتبة برنامج تحميل بيانات التعريف، لا تربط مع libvulkan.so مكتبة مشتركة في نصوص الإصدار.

تحديد إصدار Vulkan API المتاح

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

  • 1.0.3
  • 1.1
  • 1.3

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

إصدار Android

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

اطّلِع على عملية إرسال طلب الاختبار التلقائي للحصول على تعليمات مفصّلة حول كيفية إرسال اقتراح الاختبار.