במצב הגרפיקה המואצת של 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.