Cuttlefish: aceleración de gráficos de GPU

El modo de gráficos acelerados de Cuttlefish usa la unidad de procesamiento de gráficos (GPU) física de tu máquina anfitrión para el procesamiento. Para ello, pasa los comandos de procesamiento de invitado a tu máquina anfitrión, ejecuta las llamadas de comandos de procesamiento en ella y pasa los resultados de vuelta al invitado.

De forma predeterminada, SwiftShader se encarga del procesamiento del invitado (por ejemplo, la IU y la reproducción de video) en tu dispositivo Cuttlefish. SwiftShader es una implementación de software de las API de Vulkan y OpenGL. Dado que es una implementación de software, SwiftShader proporciona una solución de procesamiento accesible universal para Cuttlefish que se puede de ejecutar en cualquier máquina anfitrión.

Sin embargo, el rendimiento no es el mismo que el de un dispositivo normal. El procesamiento es un problema paralelo que se puede paralelizar de forma masiva, ya que los valores de píxeles se pueden calcular de manera independiente. Las GPU son unidades de hardware que abordan este problema acelerando el procesamiento.

Requisitos

Para usar el modo de gráficos acelerado, el host debe tener lo siguiente:

  • Un controlador compatible con EGL que admita la extensión GL_KHR_surfaceless_context
  • Un controlador compatible con OpenGL ES
  • Un controlador compatible con Vulkan

Cómo usar modos de gráficos acelerados

GfxStream

Para usar el modo de gráficos acelerados de GfxStream, inicia tu dispositivo Cuttlefish local con la marca --gpu_mode=gfxstream. Con este modo, las llamadas a las API de OpenGL y Vulkan se reenvían directamente al host.

launch_cvd --gpu_mode=gfxstream

Virgl

Para usar el modo de gráficos acelerados de Virgl, inicia tu dispositivo Cuttlefish local con la marca --gpu_mode=drm_virgl.

launch_cvd --gpu_mode=drm_virgl

Cuando usas el modo de gráficos acelerados de Virgl, las llamadas a la API de OpenGL se traducen a una representación intermedia (consulta Gallium3D). Se conecta la representación intermedia con el host y la biblioteca virglrenderer del host traduce la representación intermedia de vuelta a llamadas a la API de OpenGL.