Cuttlefish:GPU 图形加速

Cuttlefish 的加速图形模式使用主机物理图形处理器 (GPU) 进行渲染,方法是将访客渲染命令传递到您的主机,在主机上运行渲染命令调用,并将渲染结果传递回访客。

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

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

要求

加速图形模式要求主机具有

  • 支持 GL_KHR_surfaceless_context 扩展程序的 EGL 功能驱动程序
  • 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 调用。