דיונון: האצת גרפיקה של GPU

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

מכשיר דיונון שפועלת ב-Android 11 ואילך מזהה ומשתמש בגרפיקה מואצת. אם המכונה המארחת לא תומכת בגרפיקה מואצת, או שגרסת Android היא Android 10 ומטה, הרינדור בצד האורח (לדוגמה, הפעלת ממשק משתמש ווידאו) במכשיר ה-Cuttlefish יטופל על ידי SwiftShader. SwiftShader היא הטמעת תוכנה של ממשקי OpenGL ו-Vulkan API. מכיוון ש-SwiftShader הוא הטמעת תוכנה, הוא מספק פתרון עיבוד שנגיש לכולם עבור דיונון שיכול לפעול בכל מכונה מארחת.

עם זאת, השימוש ב-SwiftShader לא פחות טוב ממכשיר רגיל. רינדור הוא בעיה מקבילה שעשויה להיות מקבילה להדרגתית, כי אפשר לחשב את ערכי הפיקסלים בנפרד. יחידות עיבוד גרפיקה (GPU) הן יחידות חומרה שמטפלות בבעיה הזו על ידי האצת העיבוד.

הדרישות

מצב גרפיקה מואצת מחייב שהמארח:

  • מנהל התקן עם תמיכה ב-EGL שתומך בתוסף GL_KHR_surfaceless_context
  • מנהל התקן עם OpenGL ES
  • נהג/ת עם יכולות Vulkan

שימוש במצבי גרפיקה מואצים

GfxStream

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