Cuttlefish: GPU 그래픽 가속

Cuttlefish의 가속 그래픽 모드는 호스트 머신에 게스트 렌더링 명령어를 전달하고 호스트 머신에서 렌더링 명령어 호출을 실행한 후 게스트에 렌더링 결과를 다시 전달하는 방식으로 호스트 머신의 물리적 그래픽 처리 장치(GPU)를 사용하여 렌더링합니다.

기본적으로 Cuttlefish 기기의 게스트 측 렌더링(예: UI 및 동영상 재생)은 SwiftShader에서 처리합니다. SwiftShader는 OpenGL 및 Vulkan API의 소프트웨어 구현입니다. SwiftShader는 소프트웨어 구현이므로 모든 호스트 머신에서 실행할 수 있는 Cuttlefish에 범용적으로 사용 가능한 렌더링 솔루션을 제공합니다.

하지만 SwiftShader를 사용하는 것은 일반적인 기기보다 성능이 떨어집니다. 렌더링은 픽셀 값을 독립적으로 계산할 수 있으므로 대규모 병렬 처리가 가능한 병렬 문제입니다. 그래픽 처리 장치 (GPU)는 렌더링을 가속하여 이 문제를 해결하는 하드웨어 장치입니다.

요구사항

가속 그래픽 모드를 사용하려면 호스트에 다음이 필요합니다.

  • GL_KHR_surfaceless_context 확장 프로그램을 지원하는 EGL 지원 드라이버
  • OpenGL ES 지원 드라이버
  • Vulkan 지원 드라이버

가속 그래픽 모드 사용

GfxStream

GxStream 가속 그래픽 모드를 사용하려면 --gpu_mode=gfxstream 플래그로 로컬 Cuttlefish 기기를 실행합니다. 이 모드를 사용하면 OpenGL 및 Vulkan API 호출이 호스트로 직접 전달됩니다.

launch_cvd --gpu_mode=gfxstream

Virgl

Virgl 가속 그래픽 모드를 사용하려면 --gpu_mode=drm_virgl 플래그로 로컬 Cuttlefish 기기를 실행합니다.

launch_cvd --gpu_mode=drm_virgl

Virgl 가속 그래픽 모드를 사용하면 OpenGL API 호출이 중간 표현으로 변환됩니다(Gallium3D 참고). 중간 표현은 호스트에 전달되고 호스트의 virglrenderer 라이브러리는 중간 표현을 다시 OpenGL API 호출로 변환합니다.