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 ai comandi di rendering sulla macchina host e passando i risultati di rendering al guest.

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 è Android 10 o versioni precedenti, il rendering lato ospite (ad esempio, la riproduzione di video e UI) nel tuo dispositivo Cuttlefish viene 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 è performante come un dispositivo normale. Il rendering è un problema parallelo che può essere parallelizzato in modo massiccio, poiché i valori dei pixel possono essere calcolati in modo indipendente. Le unità di elaborazione grafica (GPU) 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à grafiche accelerate

GfxStream

Per utilizzare la modalità grafica accelerata GfxStream, avvia il dispositivo Cuttlefish locale con il flag --gpu_mode=gfxstream. In questa modalità, le chiamate API OpenGL e Vulkan vengono inoltrate direttamente all'host.

launch_cvd --gpu_mode=gfxstream

Virgl

Per utilizzare la modalità grafica con accelerazione Virgl, avvia il dispositivo Cuttlefish locale con il flag --gpu_mode=drm_virgl.

launch_cvd --gpu_mode=drm_virgl

Quando utilizzi la modalità grafica accelerata 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.