Cuttlefish: accelerazione grafica GPU

La modalità grafica accelerata di Cuttlefish utilizza l'unità di elaborazione grafica (GPU) fisica del computer host per il rendering passando i comandi di rendering guest al computer host, eseguendo le chiamate ai comandi di rendering sul computer host e restituendo i risultati renderizzati al guest.

Per impostazione predefinita, il rendering lato ospite (ad esempio, interfaccia utente e riproduzione video) nel tuo 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 è performante come 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 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
  • Autista capace di Vulcan

Utilizza modalità grafiche accelerate

GfxStream

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

launch_cvd --gpu_mode=gfxstream

Virgl

Per utilizzare la modalità grafica accelerata Virgl, avvia il tuo 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 API OpenGL vengono tradotte in una rappresentazione intermedia (vedi Gallium3D ). La rappresentazione intermedia viene comunicata all'host e la libreria virglrenderer sull'host traduce nuovamente la rappresentazione intermedia in chiamate API OpenGL.