Cuttlefish:GPU 圖形加速

Cuttlefish 的加速圖形模式會使用主機機器的實體圖形處理器 (GPU) 進行算繪,方法是將訪客轉譯指令傳遞至主體機器、在主機上執行轉譯指令呼叫,然後將轉譯結果傳回訪客。

在 Android 11 以上版本的 Cuttlefish 裝置,偵測並使用加速圖形。如果主體機器不支援加速圖形,或 Android 版本為 Android 10 以下版本,則 Cuttlefish 裝置上的訪客端算繪作業 (例如 UI 和影片播放) 將由 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 加速圖形模式,請使用 --gpu_mode=drm_virgl 旗標啟動本機 Cuttlefish 裝置。

launch_cvd --gpu_mode=drm_virgl

使用 Virgl 加速圖形模式時,OpenGL API 呼叫會轉譯為中繼表示法 (請參閱 Gallium3D)。系統會將中繼表示法傳達給主機,而主機上的 virglrenderer 程式庫會將中繼表示法轉譯為 OpenGL API 呼叫。