Cuttlefish: האצת גרפיקה ב-GPU

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