Cuttlefish のアクセラレーテッド グラフィック モードでは、ホストマシンの物理的な画像処理装置(GPU)を使用してレンダリングを行います。その際、ゲストのレンダリング コマンドをホストマシンに渡し、レンダリング コマンドの呼び出しをホストマシン上で実行して、レンダリング結果を再びゲストに渡します。
デフォルトでは、Cuttlefish デバイスでのゲスト側のレンダリング(UI や動画再生など)は、SwiftShader によって処理されます。SwiftShader は、OpenGL API と Vulkan API のソフトウェア実装です。SwiftShader はソフトウェア実装であるため、どのホストマシンでも実行できる Cuttlefish に適した、ユニバーサルにアクセス可能なレンダリング ソリューションを実現できます。
ただし、SwiftShader を使用する場合、通常のデバイスに比べてパフォーマンスの面で劣ります。ピクセル値は個別に計算できるため、レンダリングは大規模に並列化できる並列問題です。グラフィック処理装置(GPU)は、レンダリングを高速化することによってこの問題に対処するハードウェア ユニットです。
要件
アクセラレーテッド グラフィック モードを使用する場合、ホストに以下が必要です。
GL_KHR_surfaceless_context
拡張機能をサポートする EGL 対応ドライバ- OpenGL ES 対応ドライバ
- Vulkan 対応ドライバ
アクセラレーテッド グラフィック モードの使用
GfxStream
GfxStream アクセラレーテッド グラフィック モードを使用するには、--gpu_mode=gfxstream
フラグを指定してローカルの Cuttlefish デバイスを起動します。このモードを使用すると、OpenGL API と 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 の呼び出しに再び変換されます。