Cuttlefish:GPU 图形加速

Cuttlefish 的加速图形模式会使用宿主机的物理图形处理器 (GPU) 进行渲染,具体方法是将客户机渲染命令传递给宿主机,在宿主机上运行渲染命令调用,然后将渲染后的结果传递回客户机。

搭载 Android 11 或更高版本的 Cuttlefish 设备会检测和使用加速图形。如果宿主机不支持加速的图形,或者 Android 版本为 Android 10 或更低,Cuttlefish 设备中的客户机端渲染(例如界面和视频播放)将由 SwiftShader 处理。SwiftShader 是 OpenGL API 和 Vulkan API 的软件实现。由于 SwiftShader 是一种软件实现,因此它为 Cuttlefish 提供了一种可在任何宿主机上运行的通用渲染解决方案。

不过,使用 SwiftShader 时的性能不及使用正常设备。渲染是一种可大规模并行处理的并行问题,因为像素值是可以单独计算的。图形处理器 (GPU) 是通过加速渲染解决此问题的硬件单元。

要求

加速图形模式要求主机具有以下驱动程序:

  • 支持 EGL 的驱动程序(支持 GL_KHR_surfaceless_context 扩展程序)
  • 支持 OpenGL ES 的驱动程序
  • 支持 Vulkan 的驱动程序

使用加速图形模式

GfxStream

若要使用 GfxStream 加速图形模式,请使用 --gpu_mode=gfxstream 标志启动本地 Cuttlefish 设备。使用此模式时,OpenGL 和 Vulkan API 调用会直接转到主机。

launch_cvd --gpu_mode=gfxstream

Virgl

若要使用 Virgl 加速图形模式,请使用 --gpu_mode=drm_virgl 标记启动本地 Cuttlefish 设备。

launch_cvd --gpu_mode=drm_virgl

使用 Virgl 加速图形模式时,OpenGL API 调用会转换为中间表示形式(请参阅 Gallium3D)。系统会将相应中间表示形式传递给主机,并且主机上的 virglrenderer 库会将此中间表示形式重新转换为 OpenGL API 调用。