Cuttlefish: Akselerasi grafis GPU

Mode grafis yang dipercepat Cuttlefish menggunakan unit pemrosesan grafis (GPU) fisik mesin host Anda untuk rendering dengan meneruskan perintah rendering tamu ke mesin host Anda, menjalankan panggilan perintah rendering di mesin host Anda, 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 yang dipercepat atau versi Android-nya 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 dari OpenGL dan Vulkan API. Karena SwiftShader adalah penerapan software, SwiftShader menyediakan solusi rendering yang dapat diakses secara universal untuk Cuttlefish yang dapat berjalan di mesin host mana pun.

Namun, penggunaan SwiftShader tidak secepat perangkat normal. Rendering adalah masalah paralel yang dapat diparalelkan secara masif, karena nilai piksel 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 dan mendukung ekstensi GL_KHR_surfaceless_context
  • Driver yang kompatibel dengan OpenGL ES
  • Driver yang kompatibel dengan Vulkan

Menggunakan mode grafis yang dipercepat

GfxStream

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

launch_cvd --gpu_mode=gfxstream

Virgl

Untuk menggunakan mode grafis yang diakselerasi Virgl, luncurkan perangkat Cuttlefish lokal Anda dengan tanda --gpu_mode=drm_virgl.

launch_cvd --gpu_mode=drm_virgl

Saat menggunakan mode grafis yang dipercepat Virgl, panggilan OpenGL API diterjemahkan menjadi representasi perantara (lihat Gallium3D). Representasi menengah dikomunikasikan ke host dan library virglrenderer di host menerjemahkan representasi menengah kembali ke panggilan API OpenGL.