Cuttlefish: GPU 그래픽 가속

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

Android 11 이상에서 실행되는 Cuttlefish 기기는 가속 그래픽을 감지하고 사용합니다. 호스트 머신이 가속 그래픽을 지원하지 않거나 Android 버전이 Android 10 이하인 경우 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 호출로 변환합니다.