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 加速圖形模式,請啟動本機 Cuttlefish 裝置,並加上 --gpu_mode=gfxstream
旗標。使用這個模式時,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 呼叫。