vr_module 结构体参考文档
#include <
vr.h
>
数据字段 |
|
struct hw_module_t | 常见 |
void(* | init )(struct vr_module *module) |
void(* | set_vr_mode )(struct vr_module *module, bool enabled) |
void * | 预留 [8-2] |
详细说明
实现此 HAL 可在使用虚拟现实 (VR) 应用时接收回调。VR 应用通常具有一系列特殊的显示和性能要求,包括:
- 传感器延迟时间短 - 从 IMU、加速度计和陀螺仪到应用可见回调的端到端总延迟时间必须极短(通常小于 5 毫秒)。这是支持 HIFI 传感器的必备条件。
- 显示延迟时间短 - 从 GPU 绘制调用到实际显示更新的端到端总延迟时间必须尽可能短。为此,您需要在单缓冲区模式下使用 SurfaceFlinger,并确保绘制调用与显示屏扫描正确同步。此行为会通过 EGL 扩展公开给应用。如需了解为此所需的 EGL 扩展,请参阅下文。
- 低持久性显示屏 - 必须将显示屏持久性设置设为尽可能低,同时仍保持合理的亮度。对于以 60Hz 运行的典型显示屏,像素的亮起时间应小于等于 3.5 毫秒,才能被视为低持久性。这样可以避免在 VR 设置中移动时出现重影,并且在设置 BRIGHTNESS_MODE_LOW_PERSISTENCE 时,应从 lights.h HAL 启用此功能。
- GPU 和 CPU 的性能一致 - 当 VR 应用具有混合 GPU/CPU 工作负载且每帧有几次定期的工作突发时,CPU 调度应确保应用渲染线程工作在调度后的 1 毫秒内一致运行,并在绘制窗口结束前完成。为此,在 VR 模式下,必须将单个 CPU 核心专用于当前正在运行的 VR 应用的渲染线程,并在“top-app”cpuset 中提供。同样,当设备未处于热节流状态且处于 VR 模式时,如果在 power.h HAL 中设置了 POWER_HINT_SUSTAINED_PERFORMANCE 标志,则必须维持适当的 CPU、GPU 和总线时钟速率,以确保渲染工作负载在为渲染每个帧分配的时间内完成。
- 必须提供必需的 EGL 扩展 - 必须提供允许使用上述功能所需的所有 GPU 设置,包括 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 必须准确报告温度上限,如果温度超过此上限,设备的热控制器会将 CPU、GPU 和/或总线时钟速率节流到低于确保一致性能所需的最低值(请参阅上一个要点)。
通常,实现此 HAL 的供应商应使用 set_vr_mode 作为提示,以启用满足上述任何要求所需的 VR 专用性能调优,并启用适合 VR 显示模式的所有设备功能。如果没有可用或必要的优化来满足上述要求,set_vr_mode 调用可能只会什么也不做。
Android 框架不会并发调用此 HAL 中的任何方法。
字段文档
struct hw_module_t common |
模块的常用方法。此 必须 是 vr_module 的第一个成员,因为此结构的用户可以在已知 hw_module_t 引用 vr_module 的上下文中将 hw_module_t 转换为 vr_module 指针。
void(* init)(struct VR_MODULE *module) |
void* reserved[8-2] |
定义位于文件 vr.h 的第 110 行。
void(* set_vr_mode)(struct VR_MODULE *module, bool enabled) |
设置 VR 模式状态。enabled 参数的可能状态如下:false - VR 模式已停用,请关闭所有 VR 专用设置。true - VR 模式已启用,请开启所有 VR 专用设置。
每当 Android 系统进入或退出 VR 模式时,系统都会调用此方法。这通常会在用户切换到或从正在进行立体渲染的 VR 应用切换时发生。
定义位于文件 vr.h 的第 107 行。
此结构体的文档是根据以下文件生成的:
- hardware/libhardware/include/hardware/ vr.h