Mątwa: akceleracja grafiki GPU

W trybie z akceleracją grafiki Cuttlefish tryb graficzny w grze Cuttlefish korzysta z fizycznego procesora graficznego (GPU) Twojego hosta do renderowania, przekazując do niego polecenia renderowania gościa, uruchamiając wywołania tych poleceń na hoście i przekazując renderowane wyniki z powrotem do gościa.

Urządzenie Cuttlefish z Androidem 11 lub nowszym wykryje akcelerowaną grafikę i z niej skorzysta. Jeśli host nie obsługuje akceleracji grafiki lub Android ma Androida 10 lub starszego, renderowanie po stronie gościa (np. odtwarzanie interfejsu i filmu) na urządzeniu Cuttlefish jest obsługiwane przez SwiftShader. SwiftShader to implementacja interfejsów API OpenGL i Vulkan. SwiftShader jest implementacją programową, więc zapewnia uniwersalne rozwiązanie do renderowania grafiki Cuttlefish, które może działać na dowolnym hoście.

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, by host miał:

  • Sterownik z obsługą EGL, który obsługuje rozszerzenie GL_KHR_surfaceless_context
  • Sterownik z obsługą 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 OpenGL i Vulkan API są przekazywane bezpośrednio do hosta.

launch_cvd --gpu_mode=gfxstream

Panna

Aby korzystać z trybu przyspieszonej grafiki 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 hosta tłumaczy reprezentację pośrednią z powrotem na wywołania interfejsu OpenGL API.