نقل النصوص البرمجية إلى Vulkan

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

في ما يلي نظرة عامة عالية المستوى لمساعدتك في استخدام أدوات تمييز الحوسبة Vulkan لاستبدال النصوص البرمجية الخاصة بـ RenderScript.

إعداد Vulkan

بدلاً من إنشاء كائن سياق RenderScript في لغة Kotlin أو Java، يمكنك تنفيذ الخطوات التالية لإنشاء سياق Vulkan باستخدام NDK.

  1. أنشئ مثيل Vulkan.

  2. اختر جهاز Vulkan الفعلي الذي يتوافق مع قائمة انتظار الحوسبة.

  3. أنشئ جهاز Vulkan المنطقي، واحصل على قائمة انتظار الحوسبة.

اختياريًا، يمكنك إعداد طبقات التحقق Vulkan على Android لتسريع عملية تطوير تطبيق Vulkan.

يوضح نموذج التطبيق كيفية إعداد سياق Vulkan في VulkanContext.h. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على قسمَي الإعداد والأجهزة وقوائم الانتظار في مواصفات Vulkan.

تخصيصات Vulkan

يمكن نقل تخصيص RenderScript إلى صورة مساحة تخزين Vulkan أو مخزن مؤقت لتخزين Vulkan. للحصول على أداء أفضل مع الصور للقراءة فقط، استخدِم صورة مستندة إلى عيّنة من الصور مع عمليات الجلب، إما كأداة مجمَّعة لعيّنة من الصور، أو باستخدام عمليات ربط مختلفة تخصّ عيّنات وعيّنات من الصور.

يتم تخصيص موارد Vulkan داخل Vulkan. لتجنب استخدام نسخ زائدة من الذاكرة عند التفاعل مع مكونات Android الأخرى، يمكنك استخدام الإضافة VK_ANDROID_external_memory_android_hardware_buffer لاستيراد رمز Android AHardwareBuffer إلى Vulkan. تتوفّر هذه الإضافة على جميع أجهزة Android المتوافقة مع Vulkan 1.1. لمزيد من المعلومات، يمكنك الاطّلاع على FEATURE_VULKAN_HARDWARE_VERSION.

يوضح نموذج التطبيق كيفية إنشاء موارد Vulkan في VulkanResources.h. لمعرفة المزيد من المعلومات، يمكنك الاطّلاع على قسمَي إنشاء الموارد وواصفات الموارد في مواصفات Vulkan.

التحويل إلى أدوات تظليل الحوسبة Vulkan

يجب تحويل نصوص RenderScript إلى أدوات تظليل الحوسبة Vulkan. قد تحتاج أيضًا إلى تكييف التعليمات البرمجية اعتمادًا على استخدام RenderScript globals.

كتابة أداة تظليل الحوسبة Vulkan

عادةً ما تتم كتابة أداة تظليل Vulkan الحوسبية بلغة تظليل OpenGL (GLSL) ثم يتم تجميعها حسب التنسيق Standard Portable Intermediate Representation-V (SPIR-V).

للحصول على معلومات وتعليمات تفصيلية عن دمج برامج التظليل في تطبيقك، يُرجى الاطّلاع على برامج Vulkan المصغّرة على Android.

تكييف النص البرمجي globals

استنادًا إلى خصائص النص العام globals، ننصح باستخدام ثوابت التخصص، أو ثوابت الدفع، أو كائنات المخزن المؤقت الموحّدة للأرقام الدولية التي لا يتم تعديلها داخل أداة التظليل:

  • ثوابت التخصص: يُنصح باستخدامها مع أرقام التعريف العامة للنص البرمجي التي تكون في الغالب متسقة على مستوى استدعاءات النواة. يتطلب تغيير قيمة ثوابت التخصص إعادة إنشاء مسار الحوسبة.
  • الثوابت الثابتة: يُنصح بهذا الخيار لأرقام تعريف النصوص البرمجية التي يتم تغييرها بشكل متكرّر لأحجام أصغر من maxPushConstantsSize (الحد الأدنى المضمون: 128 بايت).
  • مخزن مؤقت موحّد: يُنصح بهذا الخيار لأرقام التعريف العامة للنصوص البرمجية التي يتم تغييرها بشكل متكرر لأحجام أكبر من الحد الثابت للدفع الثابت.

بالنسبة إلى العوالم العامة التي تم تغييرها داخل أداة التظليل، يمكنك استخدام إما صورة تخزين Vulkan أو مخزن بيانات Vulkan المؤقت.

العمليات الحسابية

تحتاج إلى إنشاء مسار Vulkan للحوسبة حتى تنفِّذ وحدة معالجة الرسومات أداة تظليل الحوسبة.

إنشاء مسار حوسبة Vulkan

يوضح ملف ComputePipeline.h في نموذج التطبيق كيفية إنشاء مسار حوسبة Vulkan.

لاستخدام أداة تظليل SPIR-V مجمّعة في Vulkan، عليك إنشاء مسار حوسبة Vulkan على النحو التالي:

  1. إنشاء وحدة تظليل باستخدام أداة تظليل SPIR-V المجمّعة.
  2. إنشاء تنسيق مجموعة واصف لتحديد روابط الموارد (راجِع التخصيصات لمزيد من التفاصيل).
  3. يمكنك إنشاء مجموعة واصف من تنسيق مجموعة الواصف.
  4. أنشئ تخطيط مسار من تنسيق مجموعة الواصف.
  5. إنشاء مسار حوسبة باستخدام وحدة أداة التظليل وتخطيط المسار.

لمزيد من المعلومات، يُرجى الاطّلاع على قسم Compute Pipelines في مواصفات Vulkan.

بدء عملية حسابية

لبدء العملية الحسابية:

  1. عدِّل مجموعة الواصف باستخدام موارد Vulkan.
  2. أنشئ مخزنًا مؤقتًا لأوامر Vulkan، وسجِّل الأوامر التالية:
    1. اربط مسار التعلّم ومجموعة الوصف.
    2. نقل مجموعات عمل الحوسبة.
  3. أرسل المخزن المؤقت للأوامر إلى قائمة انتظار الحوسبة.
  4. يمكنك الانتظار في قائمة الانتظار أو يمكنك اختياريًا إرجاع سياج المزامنة.

لربط عدة نواة معًا (على سبيل المثال، لنقل الرموز باستخدام ScriptGroup)، يجب تسجيلها في مخزن مؤقت واحد للأوامر ومزامنتها مع حواجز الذاكرة.

يوضّح نموذج التطبيق مهمتَي احتساب هما:

  • تدوير HUE: مهمة حوسبة بسيطة باستخدام أداة تظليل حوسبة واحدة. يمكنك الانتقال إلى ImageProcessor::rotateHue للاطّلاع على نموذج الرموز البرمجية.
  • التمويه: مهمة حوسبة أكثر تعقيدًا تنفّذ بشكل تسلسلي تظليلَين للحوسبة. يمكنك الانتقال إلى ImageProcessor::blur للاطّلاع على عيّنة من الرمز.

لمعرفة المزيد حول المخازن المؤقتة للأوامر أو حواجز الذاكرة، راجِع الأقسام في مواصفات Vulkan المسماة مخازن الأوامر وحواجز الذاكرة.