Sepia: GPU-Grafikbeschleunigung

Im beschleunigten Grafikmodus von Cuttlefish wird die physische GPU (Graphics Processing Unit) Ihres Hosts für das Rendering verwendet. Dazu werden Gast-Rendering-Befehle an den Host übergeben, die Rendering-Befehle werden auf dem Host ausgeführt und die gerenderten Ergebnisse werden an den Gast zurückgegeben.

Auf einem Cuttlefish-Gerät mit Android 11 oder höher werden beschleunigte Grafiken erkannt und verwendet. Wenn der Hostcomputer keine beschleunigte Grafik unterstützt oder die Android-Version Android 10 oder niedriger ist, wird das geräteseitige Rendering (z. B. Benutzeroberfläche und Videowiedergabe) auf Ihrem Cuttlefish-Gerät von SwiftShader verarbeitet. SwiftShader ist eine Softwareimplementierung der OpenGL und Vulkan APIs. Da SwiftShader eine Softwareimplementierung ist, bietet es eine universell zugängliche Renderinglösung für Cuttlefish, die auf jedem Hostcomputer ausgeführt werden kann.

SwiftShader ist jedoch nicht so leistungsfähig wie ein normales Gerät. Das Rendering ist ein paralleles Problem, das massiv parallelisiert werden kann, da Pixelwerte unabhängig berechnet werden können. Grafikprozessoren (GPUs) sind Hardwareeinheiten, die dieses Problem durch Beschleunigung des Renderings lösen.

Voraussetzungen

Für den beschleunigten Grafikmodus sind folgende Voraussetzungen erforderlich:

  • EGL-fähiger Treiber, der die GL_KHR_surfaceless_context-Erweiterung unterstützt
  • OpenGL ES-fähiger Treiber
  • Vulkan-kompatibler Treiber

Beschleunigte Grafikmodi verwenden

GfxStream

Wenn Sie den beschleunigten Grafikmodus von GfxStream verwenden möchten, starten Sie Ihr lokales Cuttlefish-Gerät mit dem Flag --gpu_mode=gfxstream. In diesem Modus werden OpenGL- und Vulkan API-Aufrufe direkt an den Host weitergeleitet.

launch_cvd --gpu_mode=gfxstream

Virgl

Wenn Sie den beschleunigten Grafikmodus von Virgl verwenden möchten, starten Sie Ihr lokales Cuttlefish-Gerät mit dem Flag --gpu_mode=drm_virgl.

launch_cvd --gpu_mode=drm_virgl

Wenn der beschleunigte Grafikmodus von Virgl verwendet wird, werden OpenGL API-Aufrufe in eine Zwischendarstellung übersetzt (siehe Gallium3D). Die Zwischendarstellung wird an den Host gesendet und die virglrenderer-Bibliothek auf dem Host übersetzt die Zwischendarstellung zurück in OpenGL API-Aufrufe.