Im Modus für beschleunigte Grafiken von Cuttlefish wird die physische GPU (Graphics Processing Unit) des Hostcomputers für das Rendering verwendet. Dazu werden Renderingbefehle an den Hostcomputer übergeben, die Renderingbefehle auf dem Hostcomputer ausgeführt und die gerenderten Ergebnisse an den Gastcomputer zurückgegeben.
Ein Cuttlefish-Gerät mit Android 11 oder höher erkennt und verwendet beschleunigte Grafiken. Wenn der Hostcomputer keine beschleunigten Grafiken unterstützt oder die Android-Version Android 10 oder niedriger ist, wird das Rendering auf der Gastseite (z. B. UI und Videowiedergabe) auf dem 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.
Die Verwendung von SwiftShader ist jedoch nicht so leistungsstark wie bei einem normalen Gerät. Rendering ist ein paralleles Problem, das massiv parallelisiert werden kann, da Pixelwerte unabhängig voneinander berechnet werden können. GPUs (Graphics Processing Units) sind Hardwareeinheiten, die dieses Problem durch die Beschleunigung des Renderings lösen.
Voraussetzungen
Für den Modus für beschleunigte Grafiken muss der Host folgende Voraussetzungen erfüllen:
- EGL-fähiger Treiber, der die Erweiterung
GL_KHR_surfaceless_contextunterstützt - OpenGL ES-fähiger Treiber
- Vulkan-fähiger Treiber
Modi für beschleunigte Grafiken verwenden
GfxStream
Wenn Sie den Modus für beschleunigte Grafiken 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 Modus für beschleunigte Grafiken 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
Im Modus für beschleunigte Grafiken von Virgl 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 wieder in OpenGL-API-Aufrufe.