يستخدم وضع الرسومات المحسّنة في 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.