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 al guest.

Un dispositivo Seppia con Android 11 o versioni successive rileva e utilizza le grafiche accelerate. Se la macchina host non supporta la grafica accelerata o la versione di Android è 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 un'accessibilità universalmente soluzione di rendering per Seppia in grado di essere eseguita 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 massicciamente parallelizzato, come 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
  • Conducente 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 una rappresentazione intermedia viene comunicata all'host, libreria virglrenderer attiva l'host ritraduce la rappresentazione intermedia in chiamate API OpenGL.