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

במצב הגרפיקה המואצת של Cuttlefish, המערכת משתמשת ביחידת העיבוד הגרפי (GPU) הפיזית של המכונה המארחת לצורך עיבוד (רנדור). לשם כך, היא מעבירה את פקודות העיבוד של האורח למכונה המארחת, מפעילה את הקריאות של פקודות העיבוד במכונה המארחת ומעבירה את התוצאות שעברו עיבוד חזרה לאורחים.

מכשיר Cuttlefish עם Android מגרסה 11 ואילך מזהה גרפיקה מואצת ומשתמש בה. אם המכונה המארחת לא תומכת בגרפיקה מואצת או שגרסת Android היא Android 10 ואילך, המערכת של SwiftShader מטפלת ברינדור בצד האורח (לדוגמה, ממשק המשתמש והפעלת סרטונים) במכשיר Cuttlefish. 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.