Sepia: GPU-Grafikbeschleunigung

Der beschleunigte Grafikmodus von Cuttlefish verwendet den physischen Grafikprozessor (Graphics Processing Unit, GPU) Ihres Hostcomputers zum Rendern. Dabei werden Rendering-Befehle von Gästen an Ihren Hostcomputer übergeben, Aufrufaufrufe für Renderingbefehle auf dem Hostcomputer ausgeführt und die gerenderten Ergebnisse an den Gast zurückgegeben.

Ein Sepia-Gerät mit Android 11 oder höher erkennt beschleunigte Grafiken und verwendet sie. Wenn der Hostcomputer keine beschleunigte Grafik unterstützt oder Android 10 oder niedriger als Android-Version verwendet wird, wird das Gast-Rendering (z. B. UI und Videowiedergabe) auf Ihrem Cuttlefish-Gerät von SwiftShader ausgeführt. SwiftShader ist eine Softwareimplementierung der OpenGL und Vulkan APIs. Da SwiftShader eine Softwareimplementierung ist, bietet sie eine universell zugängliche Rendering-Lö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 lösen, indem sie das Rendering beschleunigen.

Voraussetzungen

Für den beschleunigten Grafikmodus muss der Host folgende Voraussetzungen erfüllen:

  • EGL-fähiger Treiber zur Unterstützung der Erweiterung GL_KHR_surfaceless_context
  • OpenGL ES-fähiger Treiber
  • Vulkan-fähiger Treiber

Schnellere 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 Sie den beschleunigten Grafikmodus von Virgl verwenden, werden OpenGL API-Aufrufe in eine Zwischendarstellung umgewandelt (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.