Settlefish: accélération graphique du GPU

Le mode graphique accéléré de Cuttlefish utilise l'unité de traitement graphique (GPU) physique de votre machine hôte pour le rendu en transmettant des commandes de rendu invité à votre machine hôte, en exécutant les appels de commandes de rendu sur votre machine hôte et en transmettant les résultats du rendu à l'invité.

Un appareil Cuttlefish exécuté sous Android 11 ou version ultérieure détecte et utilise des graphismes accélérés. Si la machine hôte n'est pas compatible avec les graphiques accélérés ou si la version d'Android est Android 10 ou version antérieure, le rendu côté invité (par exemple, l'UI et la lecture vidéo) de votre appareil Cuttlefish est géré par SwiftShader. SwiftShader est une implémentation logicielle des API OpenGL et Vulkan. Comme SwiftShader est une implémentation logicielle, il fournit une solution de rendu universellement accessible pour Cuttlefish, capable de s'exécuter sur n'importe quelle machine hôte.

Cependant, l'utilisation de SwiftShader n'est pas aussi performante qu'un appareil standard. L'affichage est un problème parallèle qui peut être massivement parallélisé, car les valeurs de pixels peuvent être calculées indépendamment. Les processeurs graphiques (GPU) sont des unités matérielles qui répondent à ce problème en accélérant le rendu.

Exigences

Le mode graphique accéléré nécessite que l'hôte dispose des éléments suivants:

  • Pilote compatible avec l'extension GL_KHR_surfaceless_context
  • Pilote compatible avec OpenGL ES
  • Pilote compatible avec Vulkan

Utiliser les modes graphiques accélérés

GfxStream

Pour utiliser le mode graphique accéléré de GfxStream, lancez votre appareil Cuttlefish local avec l'indicateur --gpu_mode=gfxstream. Avec ce mode, les appels d'API OpenGL et Vulkan sont transférés directement à l'hôte.

launch_cvd --gpu_mode=gfxstream

Virgl

Pour utiliser le mode graphique accéléré par Virgl, lancez votre appareil Cuttlefish local avec l'indicateur --gpu_mode=drm_virgl.

launch_cvd --gpu_mode=drm_virgl

Lorsque vous utilisez le mode graphique accéléré par Virgl, les appels d'API OpenGL sont traduits en une représentation intermédiaire (voir Gallium3D). La représentation intermédiaire est communiquée à l'hôte, et la bibliothèque virglrenderer de l'hôte traduit la représentation intermédiaire en appels d'API OpenGL.