Cuttlefish: GPU-Grafikbeschleunigung

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

Ein Cuttlefish-Gerät mit Android 11 oder höher erkennt und verwendet beschleunigte Grafiken. Wenn der Hostcomputer keine beschleunigte Grafik unterstützt oder die Android-Version Android 10 oder niedriger ist, wird das Rendern auf der Gastseite (z. B. UI und Videowiedergabe) auf Ihrem Cuttlefish-Gerät von SwiftShader übernommen. 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.

Die Verwendung von SwiftShader ist jedoch nicht so leistungsstark wie bei einem normalen Gerät. Das Rendern 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 muss der Host Folgendes haben:

  • EGL-fähiger Treiber, der die GL_KHR_surfaceless_context-Erweiterung unterstützt
  • OpenGL ES-kompatibler 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 Virgl-Modus für beschleunigte Grafiken 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 Virgl-beschleunigten Grafikmodus verwenden, werden OpenGL-API-Aufrufe in eine Zwischenrepräsentation übersetzt (siehe Gallium3D). Die Zwischenrepräsentation wird an den Host gesendet und die virglrenderer-Bibliothek auf dem Host übersetzt die Zwischenrepräsentation zurück in OpenGL-API-Aufrufe.