Каракатица: графическое ускорение с помощью графического процессора

Режим ускоренной графики Cuttlefish использует физический графический процессор (GPU) вашего хост-компьютера для рендеринга путем передачи гостевых команд рендеринга на ваш хост-компьютер, запуска вызовов команд рендеринга на вашем хост-компьютере и передачи результатов рендеринга обратно гостю.

Устройство Cuttlefish под управлением Android 11 или более поздней версии обнаруживает и использует ускоренную графику. Если хост-компьютер не поддерживает ускоренную графику или версия Android — Android 10 или ниже, рендеринг на гостевой стороне (например, пользовательский интерфейс и воспроизведение видео) на вашем устройстве Cuttlefish обрабатывается SwiftShader. SwiftShader — это программная реализация API OpenGL и Vulkan. Поскольку SwiftShader является программной реализацией, он предоставляет универсальное решение рендеринга для Cuttlefish, способное работать на любом хост-компьютере.

Однако использование SwiftShader не так эффективно, как обычное устройство. Рендеринг — это параллельная задача, которую можно масштабно распараллелить, поскольку значения пикселей можно вычислять независимо. Графические процессоры (GPU) — это аппаратные блоки, которые решают эту проблему за счет ускорения рендеринга.

Требования

Режим ускоренной графики требует, чтобы хост имел:

  • Драйвер с поддержкой EGL, поддерживающий расширение GL_KHR_surfaceless_context
  • Драйвер с поддержкой OpenGL ES
  • Драйвер с поддержкой Vulkan

Используйте ускоренные графические режимы

GfxStream

Чтобы использовать ускоренный графический режим GfxStream, запустите локальное устройство Cuttlefish с флагом --gpu_mode=gfxstream . В этом режиме вызовы API OpenGL и Vulkan перенаправляются непосредственно на хост.

launch_cvd --gpu_mode=gfxstream

Виргль

Чтобы использовать ускоренный графический режим Virgl, запустите локальное устройство Cuttlefish с флагом --gpu_mode=drm_virgl .

launch_cvd --gpu_mode=drm_virgl

При использовании режима ускоренной графики Virgl вызовы API OpenGL преобразуются в промежуточное представление (см. Gallium3D ). Промежуточное представление передается хосту, и библиотека viRGlrenderer на хосте преобразует промежуточное представление обратно в вызовы API OpenGL.