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

Ускоренный графический режим 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.