Seppia: accelerazione grafica GPU

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 se 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 essere eseguita su qualsiasi macchina host.

Tuttavia, l'utilizzo di SwiftShader non offre le prestazioni di 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 (Graphics Processing Unit) sono unità hardware che risolvono questo problema accelerando il rendering.

Requisiti

La modalità grafica accelerata richiede che l'host abbia:

  • 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. Con questa modalità le chiamate API OpenGL e Vulkan vengono inoltrate direttamente all'host.

launch_cvd --gpu_mode=gfxstream

Vergine

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 utilizzi la modalità grafica accelerata da Virgl, le chiamate 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.