Cuttlefish: akceleracja grafiki przez GPU

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 mątwy z Androidem 11 lub nowszym; wykrywa i wykorzystuje akcelerowaną grafikę. Jeśli host nie obsługuje z przyspieszoną grafiką lub Android 10 lub starszy, renderowanie po stronie gościa (np. UI i odtwarzanie filmu) na urządzeniu Cuttlefish jest obsługiwane przez SwiftShader. SwiftShader to implementacja interfejsów API OpenGL i Vulkan. SwiftShader to rozwiązanie programowe, które zapewnia ogólnodostępne rozwiązanie do renderowania dla Cuttlefish, które może działać na dowolnym komputerze hosta.

Jednak SwiftShader nie jest tak wydajny jak zwykłe urządzenie. 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 interfejs Vulkan

Korzystanie z trybów akceleracji grafiki

GfxStream

Aby korzystać z trybu akceleracji grafiki GfxStream, uruchom lokalne urządzenie 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 przyspieszonej grafiki Virgl, uruchom lokalne urządzenie Cuttlefish z flagą --gpu_mode=drm_virgl.

launch_cvd --gpu_mode=drm_virgl

Gdy używasz trybu grafiki z akceleracją Virgl, wywołania interfejsu OpenGL API są przekształcane do reprezentacji pośredniej (zobacz 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.