Choco: aceleração gráfica GPU

O modo gráfico acelerado do Cuttlefish usa a unidade física de processamento gráfico (GPU) da sua máquina host para renderização, passando comandos de renderização de convidado para sua máquina host, executando as chamadas de comandos de renderização em sua máquina host e passando os resultados renderizados de volta para o convidado.

Por padrão, a renderização do lado convidado (por exemplo, UI e reprodução de vídeo) em seu dispositivo Cuttlefish é controlada pelo SwiftShader. SwiftShader é uma implementação de software das APIs OpenGL e Vulkan. Como o SwiftShader é uma implementação de software, ele fornece uma solução de renderização universalmente acessível para Cuttlefish, capaz de ser executada em qualquer máquina host.

No entanto, usar o SwiftShader não tem o mesmo desempenho de um dispositivo normal. A renderização é um problema paralelo que pode ser massivamente paralelizado, pois os valores dos pixels podem ser calculados de forma independente. Unidades de processamento gráfico (GPUs) são unidades de hardware que resolvem esse problema acelerando a renderização.

Requisitos

O modo gráfico acelerado requer que o host tenha:

  • Driver compatível com EGL que suporta a extensão GL_KHR_surfaceless_context
  • Driver compatível com OpenGL ES
  • Driver compatível com Vulkan

Use modos gráficos acelerados

GfxStream

Para usar o modo gráfico acelerado GfxStream, inicie seu dispositivo Cuttlefish local com o sinalizador --gpu_mode=gfxstream . Usando este modo, as chamadas de API OpenGL e Vulkan são encaminhadas diretamente para o host.

launch_cvd --gpu_mode=gfxstream

Virgl

Para usar o modo gráfico acelerado Virgl, inicie seu dispositivo Cuttlefish local com o sinalizador --gpu_mode=drm_virgl .

launch_cvd --gpu_mode=drm_virgl

Ao usar o modo gráfico acelerado Virgl, as chamadas da API OpenGL são traduzidas em uma representação intermediária (consulte Gallium3D ). A representação intermediária é comunicada ao host e a biblioteca virglrenderer no host converte a representação intermediária de volta para chamadas de API OpenGL.