حبَّار: تسريع الرسومات على وحدة معالجة الرسومات

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

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

ومع ذلك، لا يؤدي استخدام SwiftShader إلى تحقيق أداء جيد مثل الأجهزة العادية. يُعد العرض مشكلة متوازية يمكن توازيها بشكل كبير، حيث يمكن حساب قيم البكسل بشكل مستقل. وحدات معالجة الرسومات (GPU) هي وحدات من الأجهزة تعالج هذه المشكلة من خلال تسريع العرض.

المتطلبات

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

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

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

GfxStream

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

launch_cvd --gpu_mode=gfxstream

فيرج

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

launch_cvd --gpu_mode=drm_virgl

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