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

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

یک دستگاه Cuttlefish که با اندروید ۱۱ یا بالاتر کار می‌کند، گرافیک شتاب‌یافته را شناسایی و از آن استفاده می‌کند. اگر دستگاه میزبان از گرافیک شتاب‌یافته پشتیبانی نکند یا نسخه اندروید آن اندروید ۱۰ یا پایین‌تر باشد، رندر سمت مهمان (به عنوان مثال، رابط کاربری و پخش ویدیو) در دستگاه Cuttlefish شما توسط SwiftShader انجام می‌شود. SwiftShader یک پیاده‌سازی نرم‌افزاری از APIهای OpenGL و Vulkan است. از آنجا که SwiftShader یک پیاده‌سازی نرم‌افزاری است، یک راه‌حل رندر جهانی برای Cuttlefish ارائه می‌دهد که قادر به اجرا بر روی هر دستگاه میزبانی است.

با این حال، استفاده از SwiftShader به اندازه یک دستگاه معمولی کارآمد نیست. رندرینگ یک مسئله موازی است که می‌تواند به طور گسترده موازی‌سازی شود، زیرا مقادیر پیکسل‌ها را می‌توان به طور مستقل محاسبه کرد. واحدهای پردازش گرافیکی (GPU) واحدهای سخت‌افزاری هستند که با تسریع رندرینگ، این مشکل را حل می‌کنند.

الزامات

حالت گرافیکی شتاب‌یافته مستلزم آن است که میزبان موارد زیر را داشته باشد:

  • درایور با قابلیت EGL که از افزونه GL_KHR_surfaceless_context پشتیبانی می‌کند
  • درایور سازگار با OpenGL ES
  • راننده‌ی توانمند در ولکان

از حالت‌های گرافیکی شتاب‌یافته استفاده کنید

جی‌اف‌ایکس‌استریم

برای استفاده از حالت گرافیکی شتاب‌یافته‌ی 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 ترجمه می‌کند.