O modo de aceleração gráfica do Cuttlefish usa a unidade de processamento gráfico (GPU) física da sua máquina host para renderização transmitindo os comandos de renderização de convidado para a máquina host, executando as chamadas de comandos na máquina host e transmitindo os resultados renderizados de volta para o convidado.
Um dispositivo Cuttlefish com o Android 11 ou mais recente detecta e usa gráficos acelerados. Se a máquina host não oferecer suporte a gráficos acelerados ou se a versão do Android for 10 ou anterior, a renderização no lado do convidado (por exemplo, interface e reprodução de vídeo) no dispositivo Cuttlefish será processada pelo SwiftShader. O SwiftShader é uma implementação de software das APIs OpenGL e Vulkan. Como o SwiftShader é uma implementação de software, ele oferece uma solução de renderização universalmente acessível para que o Cuttlefish possa ser executado em qualquer máquina host.
No entanto, o uso do SwiftShader não é tão eficiente quanto um dispositivo normal. A renderização é um problema paralelo que pode ser carregado em paralelo de modo massivo, já que os valores de pixel podem ser calculados de forma independente. As GPUs são unidades de hardware que resolvem esse problema acelerando a renderização.
Requisitos
O modo gráfico acelerado exige que o host tenha um driver:
- compatível com EGL e com a extensão
GL_KHR_surfaceless_context
; - compatível com OpenGL ES;
- compatível com Vulkan.
Usar modos gráficos acelerados
GfxStream
Para usar o modo gráfico acelerado do GfxStream, inicie o dispositivo Cuttlefish
local com a sinalização --gpu_mode=gfxstream
. Ao usar esse 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 do Virgl, inicie o dispositivo Cuttlefish
local com a sinalização --gpu_mode=drm_virgl
.
launch_cvd --gpu_mode=drm_virgl
Ao usar o modo gráfico acelerado do Virgl, as chamadas da API OpenGL são convertidas em uma representação intermediária. Consulte Gallium3D (link em inglês). A representação intermediária é comunicada ao host, e a biblioteca virglrenderer (link em inglês) no host converte essa representação novamente em chamadas da API OpenGL.