La modalità grafica accelerata di Cuttlefish utilizza l'unità di elaborazione grafica fisica (GPU) della macchina host per il rendering passando i comandi di rendering guest alla macchina host, eseguendo le chiamate dei comandi di rendering sulla macchina host e ritrasmettendo i risultati visualizzati all'ospite.
Un dispositivo Cuttlefish con Android 11 o versioni successive rileva e utilizza la grafica accelerata. Se il computer host non supporta la grafica accelerata o la versione di Android è Android 10 o versioni precedenti, il rendering lato ospite (ad esempio, riproduzione di video e UI) nel dispositivo Cuttlefish è gestito da SwiftShader. SwiftShader è un'implementazione software delle API OpenGL e Vulkan. Poiché SwiftShader è un'implementazione software, fornisce una soluzione di rendering universalmente accessibile per Cuttlefish in grado di funzionare su qualsiasi macchina host.
Tuttavia, l'utilizzo di SwiftShader non è così efficace come su un normale dispositivo. Il rendering è un problema parallelo che può essere messo in parallelo massiccio, dato che i valori dei pixel possono essere calcolati in modo indipendente. Le GPU (unità di elaborazione grafica) sono unità hardware che risolvono questo problema accelerando il rendering.
Requisiti
La modalità grafica accelerata richiede che l'host disponga di:
- Driver con funzionalità EGL che supporta l'estensione
GL_KHR_surfaceless_context
- Driver compatibile con OpenGL ES
- Conducente Vulkan
Usa le modalità grafiche accelerate
GfxStream
Per usare la modalità grafica accelerata GfxStream, lancia il tuo dispositivo Cuttlefish locale
con il flag --gpu_mode=gfxstream
. In questa modalità, le chiamate alle API OpenGL e Vulkan vengono inoltrate direttamente all'host.
launch_cvd --gpu_mode=gfxstream
Virgl
Per usare la modalità grafica accelerata da Virgl, lancia il tuo dispositivo Cuttlefish locale
con la bandierina --gpu_mode=drm_virgl
.
launch_cvd --gpu_mode=drm_virgl
Quando si utilizza la modalità grafica accelerata Virgl, le chiamate all'API OpenGL vengono tradotte in una rappresentazione intermedia (vedi Gallium3D). La rappresentazione intermedia viene comunicata all'host e la libreria virglrenderer sull'host traduce la rappresentazione intermedia in chiamate API OpenGL.