Tryb przyspieszonej grafiki Cuttlefish używa fizycznego procesora graficznego (GPU) maszyny hosta do renderowania, przekazując polecenia renderowania gościa do maszyny hosta, wykonując wywołania poleceń renderowania na maszynie hosta i przekazując wyniki renderowania z powrotem do gościa.
Urządzenie Cuttlefish z Androidem 11 lub nowszym wykrywa i wykorzystuje przyspieszoną grafikę. Jeśli maszyna hosta nie obsługuje przyspieszonej grafiki lub wersja Androida to Android 10 lub starszy, renderowanie po stronie gościa (np. interfejsu i odtwarzania wideo) na urządzeniu Cuttlefish jest obsługiwane przez SwiftShader. SwiftShader to programowa implementacja interfejsów API OpenGL i Vulkan. SwiftShader to implementacja programowa, która zapewnia uniwersalne rozwiązanie do renderowania dla Cuttlefish, które może działać na dowolnym komputerze hosta.
Jednak korzystanie z SwiftShader nie jest tak wydajne jak w przypadku normalnego urządzenia. Renderowanie jest problemem równoległym, który można w znacznym stopniu zrównoleglić, ponieważ wartości pikseli można obliczać niezależnie. Procesory graficzne (GPU) to jednostki sprzętowe, które rozwiązują ten problem, przyspieszając renderowanie.
Wymagania
Tryb przyspieszonej grafiki wymaga, aby host miał:
- Sterownik obsługujący EGL i rozszerzenie
GL_KHR_surfaceless_context
- Sterownik obsługujący OpenGL ES
- Sterownik obsługujący interfejs Vulkan
Korzystanie z trybów akceleracji grafiki
GfxStream
Aby używać trybu akcelerowanej grafiki GfxStream, uruchom lokalne urządzenie Cuttlefish z flagą --gpu_mode=gfxstream
. W tym trybie wywołania interfejsów OpenGL i Vulkan są przekazywane bezpośrednio do hosta.
launch_cvd --gpu_mode=gfxstream
Virgl
Aby używać trybu akceleracji grafiki Virgl, uruchom lokalne urządzenie Cuttlefish z flagą --gpu_mode=drm_virgl
.
launch_cvd --gpu_mode=drm_virgl
W trybie akcelerowanej grafiki Virgl wywołania interfejsu OpenGL API są tłumaczone na reprezentację pośrednią (patrz Gallium3D). Reprezentacja pośrednia jest przekazywana do hosta, a biblioteka virglrenderer na hoście tłumaczy ją z powrotem na wywołania interfejsu OpenGL API.