במצב הגרפיקה המואצת של Cuttlefish נעשה שימוש ביחידה הפיזית לעיבוד גרפי (GPU) של המחשב המארח לצורך רינדור. לשם כך, פקודות הרינדור של האורח מועברות למחשב המארח, מתבצעות קריאות לפקודות הרינדור במחשב המארח, והתוצאות המרונדרות מועברות בחזרה לאורח.
מכשיר Cuttlefish שפועל ב-Android מגרסה 11 ואילך מזהה גרפיקה מואצת ומשתמש בה. אם המחשב המארח לא תומך בגרפיקה מואצת או שגרסת Android היא Android 10 או גרסה מוקדמת יותר, הרינדור בצד האורח (לדוגמה, ממשק משתמש והפעלת סרטונים) במכשיר Cuttlefish מטופל על ידי SwiftShader. SwiftShader הוא יישום תוכנה של ממשקי ה-API של OpenGL ו-Vulkan. מכיוון ש-SwiftShader הוא יישום תוכנה, הוא מספק פתרון רינדור נגיש לכולם עבור Cuttlefish, שיכול לפעול בכל מחשב מארח.
עם זאת, הביצועים של SwiftShader לא טובים כמו הביצועים של מכשיר רגיל. הרינדור הוא בעיה מקבילית שאפשר להפוך למקבילית באופן נרחב, כי אפשר לחשב את ערכי הפיקסלים באופן עצמאי. מעבדים גרפיים (GPU) הם יחידות חומרה שמטפלות בבעיה הזו על ידי האצת הרינדור.
דרישות
כדי להשתמש במצב גרפיקה מואץ, המארח צריך לכלול:
- דרייבר עם יכולת EGL שתומך בתוסף
GL_KHR_surfaceless_context - דרייבר עם יכולת OpenGL ES
- דרייבר עם תמיכה ב-Vulkan
שימוש במצבי גרפיקה מואצת
GfxStream
כדי להשתמש במצב גרפיקה מואצת של GfxStream, מפעילים את מכשיר Cuttlefish המקומי עם הדגל --gpu_mode=gfxstream. במצב הזה, קריאות ל-API של OpenGL ו-Vulkan מועברות ישירות למארח.
launch_cvd --gpu_mode=gfxstream
Virgl
כדי להשתמש במצב גרפיקה מואצת של Virgl, מפעילים את מכשיר Cuttlefish המקומי עם הדגל --gpu_mode=drm_virgl.
launch_cvd --gpu_mode=drm_virgl
כשמשתמשים במצב גרפיקה מואצת של Virgl, קריאות ל-OpenGL API מתורגמות לייצוג ביניים (ראו Gallium3D). הייצוג הביניים מועבר למארח, וספריית virglrenderer במארח מתרגמת את הייצוג הביניים בחזרה לקריאות ל-OpenGL API.