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