Tryb przyspieszonych grafik w Cuttlefish wykorzystuje fizyczny procesor graficzny (GPU) maszyny hosta do renderowania, przekazując polecenia renderowania do maszyny hosta, uruchamiają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 wykryje akcelerację grafiki i z niej skorzysta. Jeśli maszyna hostująca nie obsługuje przyspieszonej grafiki lub wersja Androida to 10 lub starsza, renderowanie po stronie gościa (np. interfejs użytkownika i odtwarzanie filmów) na urządzeniu Cuttlefish jest obsługiwane przez SwiftShader. SwiftShader to oprogramowanie implementujące interfejsy API OpenGL i Vulkan. SwiftShader to oprogramowanie, które zapewnia ogólnodostępne rozwiązanie do renderowania dla Cuttlefish, które może działać na dowolnym komputerze hosta.
Jednak korzystanie z SwiftShader nie zapewnia takiej wydajności jak w przypadku zwykłego urządzenia. Renderowanie jest zadaniem równoległym, które można zwielokrotnie równolegle wykonywać, ponieważ wartości pikseli można obliczać niezależnie. Procesory graficzne (GPU) to urządzenia, które rozwiązują ten problem, przyspieszając renderowanie.
Wymagania
Tryb przyspieszonej grafiki wymaga, aby host miał:
- Sterownik obsługujący EGL, który obsługuje rozszerzenie
GL_KHR_surfaceless_context
- Sterownik obsługujący OpenGL ES
- Sterownik obsługujący Vulkan
Korzystanie z trybów akceleracji grafiki
GfxStream
Aby korzystać z trybu akceleracji grafiki GfxStream, uruchom lokalny Cuttlefish z flagą --gpu_mode=gfxstream
. W tym trybie wywołania interfejsu API OpenGL i Vulkan są przekierowywane bezpośrednio do hosta.
launch_cvd --gpu_mode=gfxstream
Virgl
Aby korzystać z trybu grafiki przyspieszonej przez Virgl, uruchom lokalne urządzenie Cuttlefish z flagą --gpu_mode=drm_virgl
.
launch_cvd --gpu_mode=drm_virgl
W trybie przyspieszonej 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 reprezentację pośrednią z powrotem na wywołania interfejsu OpenGL API.