Cuttlefish: Akselerasi grafis GPU

Mode grafis yang diakselerasi Cuttlefish menggunakan unit pemrosesan grafis (GPU) fisik mesin host Anda untuk rendering dengan meneruskan perintah rendering tamu ke mesin host, menjalankan panggilan perintah rendering di mesin host, dan meneruskan hasil yang dirender kembali ke tamu.

Perangkat Cuttlefish yang berjalan di Android 11 atau yang lebih tinggi mendeteksi dan menggunakan grafis yang dipercepat. Jika mesin host tidak mendukung grafis akselerasi atau versi Android adalah Android 10 atau yang lebih rendah, rendering sisi tamu (misalnya, Pemutaran UI dan video) di perangkat Cuttlefish Anda ditangani oleh SwiftShader. SwiftShader adalah implementasi software OpenGL dan Vulkan API. Karena SwiftShader adalah implementasi software, SwiftShader menyediakan solusi rendering yang dapat diakses secara universal untuk Cuttlefish yang dapat berjalan di mesin host mana pun.

Namun, penggunaan SwiftShader tidak sebaik perangkat biasa. Rendering adalah masalah paralel yang dapat diparalelkan secara besar-besaran, sebagai dapat dihitung secara independen. Unit pemrosesan grafis (GPU) adalah unit hardware yang mengatasi masalah ini dengan mempercepat rendering.

Persyaratan

Mode grafis yang dipercepat mengharuskan host memiliki:

  • Driver yang kompatibel dengan EGL yang mendukung ekstensi GL_KHR_surfaceless_context
  • Driver yang kompatibel dengan OpenGL ES
  • Driver yang mendukung Vulkan

Menggunakan mode grafis yang dipercepat

GfxStream

Untuk menggunakan mode grafis yang dipercepat GfxStream, luncurkan perangkat Cuttlefish lokal Anda dengan flag --gpu_mode=gfxstream. Dengan mode ini, panggilan API OpenGL dan Vulkan diteruskan langsung ke host.

launch_cvd --gpu_mode=gfxstream

Virgl

Untuk menggunakan mode grafis yang dipercepat Virgl, luncurkan perangkat Cuttlefish lokal dengan flag --gpu_mode=drm_virgl.

launch_cvd --gpu_mode=drm_virgl

Saat menggunakan mode grafis yang dipercepat Virgl, panggilan OpenGL API akan diterjemahkan menjadi representasi perantara (lihat Gallium3D). Tujuan representasi perantara dikomunikasikan ke {i>host<i} dan library virglrenderer aktif {i>host<i} menerjemahkan representasi perantara kembali ke panggilan OpenGL API.