Cuttlefish: ميزة تسريع الرسومات باستخدام وحدة معالجة الرسومات

يستخدم وضع الرسومات المحسّنة في Cuttlefish معالجة الرسومات (GPU) المتوفّرة في جهاز المضيف لعملية العرض من خلال تمرير أوامر عرض الضيف إلى جهاز المضيف، وتشغيل طلبات أوامر العرض على جهاز المضيف، وإعادة النتائج المعروضة إلى الضيف.

يرصد جهاز Cuttlefish الذي يعمل بالإصدار 11 من نظام التشغيل Android أو إصدار أحدث الرسومات المحسّنة ويستخدمها. إذا كان الجهاز المضيف لا يتيح استخدام الرسومات المحسّنة أو كان إصدار Android هو Android 10 أو إصدارًا أقدم، سيتولى SwiftShader عملية المعالجة من جهة العميل (مثل معالجة رسومات واجهة المستخدم وتشغيل الفيديو) في جهاز Cuttlefish. ‫SwiftShader هو برنامج لتنفيذ واجهات برمجة التطبيقات OpenGL وVulkan. بما أنّ SwiftShader هو تطبيق برمجي، فهو يقدّم حلّاً لعرض رسومات متاحًا للجميع في Cuttlefish ويمكن تشغيله على أي جهاز مضيف.

ومع ذلك، لا يقدّم استخدام SwiftShader أداءً مماثلاً للأجهزة العادية. عملية التقديم هي مشكلة متوازية يمكن تنفيذها بشكل موازٍ بشكل كبير، لأنّه يمكن احتساب قيم البكسل بشكل مستقل. وحدات معالجة الرسومات هي وحدات أجهزة تعالج هذه المشكلة من خلال تسريع عملية العرض.

المتطلبات

يتطلب وضع الرسومات المُسرَّعة أن يكون لدى المضيف ما يلي:

  • برنامج تشغيل متوافق مع EGL ويتوافق مع إضافة GL_KHR_surfaceless_context
  • برنامج تشغيل متوافق مع OpenGL ES
  • برنامج تشغيل متوافق مع Vulkan

استخدام أوضاع الرسومات المُسرَّعة

GfxStream

لاستخدام وضع الرسومات المُسرَّعة في GfxStream، شغِّل جهاز Cuttlefish المتاح على الجهاز باستخدام العلامة --gpu_mode=gfxstream. باستخدام هذا الوضع، يتم توجيه طلبات OpenGL وVulkan API مباشرةً إلى المضيف.

launch_cvd --gpu_mode=gfxstream

Virgl

لاستخدام وضع الرسومات المُسرَّعة في Virgl، ابدأ تشغيل جهاز Cuttlefish على الجهاز مع إضافة العلامة --gpu_mode=drm_virgl.

launch_cvd --gpu_mode=drm_virgl

عند استخدام وضع الرسومات المحسّنة في Virgl، تتم ترجمة طلبات البيانات من واجهة برمجة التطبيقات OpenGL إلى تمثيل وسيط (راجِع Gallium3D). يتم إرسال التمثيل الوسيط إلى المضيف ومكتبة virglrenderer على المضيف، وتُعيد مكتبة virglrenderer ترجمة التمثيل الوسيط إلى طلبات OpenGL API.