Справочник по структуре vr_module
#include < vr.h >
Поля данных | |
структура hw_module_t | общий |
пустота(* | init )(struct vr_module *module) |
пустота(* | set_vr_mode )(struct vr_module *module, bool включено) |
пустота * | зарезервировано [8-2] |
Подробное описание
Внедрите этот HAL для получения обратных вызовов при использовании приложения виртуальной реальности (VR). Приложения виртуальной реальности обычно предъявляют ряд особых требований к отображению и производительности, в том числе:
- Низкая задержка датчика. Общая сквозная задержка от IMU, акселерометра и гироскопа до видимого приложением обратного вызова должна быть чрезвычайно низкой (обычно <5 мс). Это необходимо для поддержки датчика HIFI.
- Низкая задержка отображения. Общая сквозная задержка от вызовов отрисовки графического процессора до фактического обновления дисплея должна быть как можно меньшей. Это достигается за счет использования SurfaceFlinger в режиме с одной буферизацией и обеспечения правильной синхронизации вызовов отрисовки со сканированием дисплея. Это поведение предоставляется приложениям через расширение EGL. Ниже приведены необходимые для этого расширения EGL.
- Отображение с низким постоянством. Параметры постоянства отображения должны быть установлены как можно ниже, сохраняя при этом разумную яркость. Для типичного дисплея, работающего на частоте 60 Гц, пиксели должны светиться в течение <= 3,5 мс, чтобы считаться малопостоянным. Это позволяет избежать ореолов во время движений в настройках VR и должно быть включено в HAL Lights.h , когда установлено BRIGHTNESS_MODE_LOW_PERSISTENCE.
- Стабильная производительность графического процессора и процессора. При смешанной рабочей нагрузке графического процессора и процессора для приложения VR с всплесками работы через регулярные промежутки времени несколько раз в кадре планирование ЦП должно гарантировать, что работа потока рендеринга приложения выполняется последовательно в течение 1 мс с момента запуска. запланировано и завершено до окончания окна розыгрыша. С этой целью одно ядро ЦП должно быть зарезервировано исключительно для потока рендеринга текущего запущенного приложения VR в режиме VR и сделано доступным в процессорном наборе «top-app». Аналогично, необходимо поддерживать соответствующую тактовую частоту ЦП, графического процессора и шины, чтобы гарантировать, что рабочая нагрузка рендеринга завершится в течение времени, отведенного для рендеринга каждого кадра, когда флаг POWER_HINT_SUSTAINED_PERFORMANCE установлен в HAL power.h в режиме VR, когда устройство включено. не подвергается термическому дросселированию.
- Должны присутствовать необходимые расширения EGL. Требуются любые настройки графического процессора, необходимые для реализации вышеуказанных возможностей, включая расширения EGL: EGL_ANDROID_create_native_client_buffer, EGL_ANDROID_front_buffer_auto_refresh, EGL_EXT_protected_content, EGL_KHR_mutable_render_buffer, EGL_KHR_reusable_sync и EGL_KHR_wait_sync.
- Точные отчеты о температуре. Точные температуры и пределы температуры должны быть указаны в файле Thermal.h HAL. В частности, текущая температура кожи должна точно сообщаться для DEVICE_TEMPERATURE_SKIN, а значение vr_throttling_threshold, сообщаемое для этого устройства, должно точно сообщать предел температуры, выше которого терморегулятор устройства ограничивает тактовую частоту процессора, графического процессора и/или шины ниже минимума, необходимого для стабильной производительности ( см. предыдущий пункт).
В общем, ожидается, что поставщики, реализующие этот HAL, будут использовать set_vr_mode в качестве подсказки для включения настройки производительности, специфичной для VR, необходимой для любого из вышеперечисленных требований, и для включения любых функций устройства, оптимальных для режимов отображения VR. Вызов set_vr_mode может просто ничего не делать, если для удовлетворения вышеуказанных требований нет доступных или необходимых оптимизаций.
Никакие методы в этом HAL не будут вызываться одновременно из платформы Android.
Полевая документация
структура hw_module_t общая |
Общие методы модуля. Это должен быть первый член vr_module , поскольку пользователи этой структуры могут привести hw_module_t к указателю vr_module в контекстах, где известно, что hw_module_t ссылается на vr_module .
void(* init)(struct vr_module *module) |
void(* set_vr_mode)(struct vr_module *module, bool включен) |
Установите состояние режима VR. Возможные состояния включенного параметра: false — режим VR отключен, отключите все настройки, специфичные для VR. true — режим VR включен, включите все настройки, относящиеся к VR.
Это вызывается всякий раз, когда система Android входит в режим VR или выходит из него. Обычно это происходит, когда пользователь переключается на приложение VR, выполняющее стереоскопический рендеринг, или обратно.
Документация для этой структуры была создана из следующего файла:
- Аппаратное обеспечение/libhardware/include/hardware/ vr.h