Cuttlefish: GPU グラフィック アクセラレーション

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 の呼び出しに再び変換されます。