Cuttlefish: aceleración de gráficos de GPU

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

Un dispositivo Cuttlefish que ejecuta Android 11 o versiones posteriores detecta y usa gráficos acelerados. Si la máquina anfitrión no admite gráficos acelerados o la versión de Android es Android 10 o una anterior, 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 APIs de Vulkan y OpenGL. Dado que SwiftShader es una implementación de software, proporciona una solución de renderización accesible universal para Cuttlefish que se puede 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.