Seppia: accelerazione grafica GPU

La modalità grafica accelerata di Cuttlefish utilizza l'unità di elaborazione grafica (GPU) fisica 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 passando i risultati del rendering all'ospite.

Un dispositivo Cuttlefish con Android 11 o versioni successive rileva e utilizza la grafica accelerata. Se la macchina host non supporta la grafica accelerata o la versione di Android è 10 o precedente, il rendering lato guest (ad esempio l'interfaccia utente e la riproduzione di video) 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 parallelizzato in modo massiccio, poiché 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 compatibile con EGL che supporta l'estensione GL_KHR_surfaceless_context
  • Driver compatibile con OpenGL ES
  • Driver compatibile con Vulkan

Utilizzare le modalità di grafica accelerata

GfxStream

Per utilizzare la modalità grafica accelerata GfxStream, avvia 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 utilizzare la modalità grafica accelerata Virgl, avvia il dispositivo Cuttlefish locale con il flag --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 representatione intermedia viene comunicata all'host e la libreria virglrenderer sull'host la traduce nuovamente in chiamate all'API OpenGL.