Cuttlefish: شتاب گرافیک GPU

حالت گرافیکی تسریع شده Cuttlefish از واحد پردازش گرافیکی فیزیکی (GPU) ماشین میزبان شما برای رندر کردن با ارسال دستورات رندر مهمان به دستگاه میزبان شما، اجرای فراخوانی دستورات رندر بر روی دستگاه میزبان شما و ارسال نتایج رندر شده به مهمان استفاده می کند.

دستگاه Cuttlefish که با اندروید 11 یا بالاتر اجرا می‌شود، گرافیک تسریع‌شده را شناسایی کرده و از آن استفاده می‌کند. اگر دستگاه میزبان از گرافیک تسریع شده پشتیبانی نمی کند یا نسخه اندروید آن اندروید 10 یا پایین تر است، رندر سمت مهمان (به عنوان مثال، رابط کاربری و پخش ویدیو) در دستگاه Cuttlefish شما توسط SwiftShader انجام می شود. SwiftShader یک پیاده سازی نرم افزاری از OpenGL و Vulkan API است. از آنجایی که 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 API به یک نمایش متوسط ​​ترجمه می‌شوند (به Gallium3D مراجعه کنید). نمایش میانی به میزبان منتقل می‌شود و کتابخانه virglrenderer روی میزبان، نمایش میانی را به فراخوان‌های OpenGL API ترجمه می‌کند.