You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
8.2 KiB
129 lines
8.2 KiB
## 7.9\. Virtual Reality
|
|
|
|
Android includes APIs and facilities to build "Virtual Reality" (VR)
|
|
applications including high quality mobile VR experiences. Device
|
|
implementations MUST properly implement these APIs and behaviors,
|
|
as detailed in this section.
|
|
|
|
### 7.9.1\. Virtual Reality Mode
|
|
|
|
Android includes support for [VR Mode](
|
|
https://developer.android.com/reference/android/app/Activity.html#setVrModeEnabled%28boolean, android.content.ComponentName%29),
|
|
a feature which handles stereoscopic rendering of notifications and disables
|
|
monocular system UI components while a VR application has user focus.
|
|
|
|
### 7.9.2\. Virtual Reality Mode - High Performance
|
|
|
|
If device implementations support VR mode, they:
|
|
|
|
* [C-1-1] MUST have at least 2 physical cores.
|
|
* [C-1-2] MUST declare the `android.hardware.vr.high_performance` feature.
|
|
* [C-1-3] MUST support sustained performance mode.
|
|
* [C-1-4] MUST support OpenGL ES 3.2.
|
|
* [C-1-5] MUST support `android.hardware.vulkan.level` 0.
|
|
* SHOULD support `android.hardware.vulkan.level` 1 or higher.
|
|
* [C-1-6] MUST implement
|
|
[`EGL_KHR_mutable_render_buffer`](https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_mutable_render_buffer.txt),
|
|
[`EGL_ANDROID_front_buffer_auto_refresh`](https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_front_buffer_auto_refresh.txt),
|
|
[`EGL_ANDROID_get_native_client_buffer`](https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_get_native_client_buffer.txt),
|
|
[`EGL_KHR_fence_sync`](https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt),
|
|
[`EGL_KHR_wait_sync`](https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_wait_sync.txt),
|
|
[`EGL_IMG_context_priority`](https://www.khronos.org/registry/EGL/extensions/IMG/EGL_IMG_context_priority.txt),
|
|
[`EGL_EXT_protected_content`](https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_protected_content.txt),
|
|
[`EGL_EXT_image_gl_colorspace`](https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_gl_colorspace.txt),
|
|
and expose the extensions in the list of available EGL extensions.
|
|
* [C-1-8] MUST implement
|
|
[`GL_EXT_multisampled_render_to_texture2`](https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_multisampled_render_to_texture2.txt),
|
|
[`GL_OVR_multiview`](https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview.txt),
|
|
[`GL_OVR_multiview2`](https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview2.txt),
|
|
[`GL_OVR_multiview_multisampled_render_to_texture`](https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview_multisampled_render_to_texture.txt),
|
|
[`GL_EXT_protected_textures`](https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_protected_textures.txt),
|
|
and expose the extensions in the list of available GL extensions.
|
|
* [C-SR] Are STRONGLY RECOMMENDED to implement
|
|
[`GL_EXT_external_buffer`](https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_external_buffer.txt),
|
|
[`GL_EXT_EGL_image_array`](https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_EGL_image_array.txt),
|
|
and expose the extensions in the list of available GL extensions.
|
|
* [C-SR] Are STRONGLY RECOMMENDED to support Vulkan 1.1.
|
|
* [C-SR] Are STRONGLY RECOMMENDED to implement
|
|
[`VK_ANDROID_external_memory_android_hardware_buffer`](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_ANDROID_external_memory_android_hardware_buffer),
|
|
[`VK_GOOGLE_display_timing`](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_GOOGLE_display_timing),
|
|
[`VK_KHR_shared_presentable_image`](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_KHR_shared_presentable_image),
|
|
and expose it in the list of available Vulkan extensions.
|
|
* [C-SR] Are STRONGLY RECOMMENDED to expose at least one Vulkan queue family where `flags`
|
|
contain both `VK_QUEUE_GRAPHICS_BIT` and `VK_QUEUE_COMPUTE_BIT`,
|
|
and `queueCount` is at least 2.
|
|
* [C-1-7] The GPU and display MUST be able to synchronize access to the shared
|
|
front buffer such that alternating-eye rendering of VR content at 60fps with two
|
|
render contexts will be displayed with no visible tearing artifacts.
|
|
* [C-1-9] MUST implement support for [`AHardwareBuffer`](https://developer.android.com/ndk/reference/hardware__buffer_8h.html)
|
|
flags `AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER`,
|
|
`AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA` and
|
|
`AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT`
|
|
as described in the NDK.
|
|
* [C-1-10] MUST implement support for `AHardwareBuffer`s with any
|
|
combination of the usage flags
|
|
`AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT`,
|
|
`AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE`,
|
|
`AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT`
|
|
for at least the following formats:
|
|
`AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM`,
|
|
`AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM`,
|
|
`AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM`,
|
|
`AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT`.
|
|
* [C-SR] Are STRONGLY RECOMMENDED to support the allocation of `AHardwareBuffer`s
|
|
with more than one layer and flags and formats specified in C-1-10.
|
|
* [C-1-11] MUST support H.264 decoding at least 3840 x 2160 at 30fps,
|
|
compressed to an average of 40Mbps (equivalent to 4 instances of
|
|
1920 x1080 at 30 fps-10 Mbps or 2 instances of 1920 x 1080 at 60 fps-20 Mbps).
|
|
* [C-1-12] MUST support HEVC and VP9, MUST be capable of decoding at least
|
|
1920 x 1080 at 30 fps compressed to an average of 10 Mbps and SHOULD be
|
|
capable of decoding 3840 x 2160 at 30 fps-20 Mbps (equivalent to
|
|
4 instances of 1920 x 1080 at 30 fps-5 Mbps).
|
|
* [C-1-13] MUST support `HardwarePropertiesManager.getDeviceTemperatures` API
|
|
and return accurate values for skin temperature.
|
|
* [C-1-14] MUST have an embedded screen, and its resolution MUST be at least
|
|
1920 x 1080.
|
|
* [C-SR] Are STRONGLY RECOMMENDED to have a display resolution of at least
|
|
2560 x 1440.
|
|
* [C-1-15] The display MUST update at least 60 Hz while in VR Mode.
|
|
* [C-1-17] The display MUST support a low-persistence mode with ≤ 5 milliseconds
|
|
persistence, persistence being defined as the amount of time for
|
|
which a pixel is emitting light.
|
|
* [C-1-18] MUST support Bluetooth 4.2 and Bluetooth LE Data Length Extension
|
|
[section 7.4.3](#7_4_3_bluetooth).
|
|
* [C-1-19] MUST support and properly report
|
|
[Direct Channel Type](https://developer.android.com/reference/android/hardware/Sensor#isDirectChannelTypeSupported%28int%29)
|
|
for all of the following default sensor types:
|
|
* `TYPE_ACCELEROMETER`
|
|
* `TYPE_ACCELEROMETER_UNCALIBRATED`
|
|
* `TYPE_GYROSCOPE`
|
|
* `TYPE_GYROSCOPE_UNCALIBRATED`
|
|
* `TYPE_MAGNETIC_FIELD`
|
|
* `TYPE_MAGNETIC_FIELD_UNCALIBRATED`
|
|
* [C-SR] Are STRONGLY RECOMMENDED to support the
|
|
[`TYPE_HARDWARE_BUFFER`](https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_HARDWARE_BUFFER)
|
|
direct channel type for all Direct Channel Types listed above.
|
|
* [C-1-21] MUST meet the gyroscope, accelerometer, and magnetometer related
|
|
requirements for `android.hardware.hifi_sensors`, as specified in
|
|
[section 7.3.9](#7_3_9_high_fidelity_sensors).
|
|
* [C-SR] Are STRONGLY RECOMMENDED to support the
|
|
`android.hardware.sensor.hifi_sensors` feature.
|
|
* [C-1-22] MUST have end-to-end motion to photon latency not higher than
|
|
28 milliseconds.
|
|
* [C-SR] Are STRONGLY RECOMMENDED to have end-to-end motion to photon latency
|
|
not higher than 20 milliseconds.
|
|
* [C-1-23] MUST have first-frame ratio, which is the ratio between the
|
|
brightness of pixels on the first frame after a transition from black to
|
|
white and the brightness of white pixels in steady state, of at least 85%.
|
|
* [C-SR] Are STRONGLY RECOMMENDED to have first-frame ratio of at least 90%.
|
|
* MAY provide an exclusive core to the foreground
|
|
application and MAY support the `Process.getExclusiveCores` API to return
|
|
the numbers of the cpu cores that are exclusive to the top foreground
|
|
application.
|
|
|
|
If exclusive core is supported, then the core:
|
|
|
|
* [C-2-1] MUST not allow any other userspace processes to run on it
|
|
(except device drivers used by the application), but MAY allow some kernel
|
|
processes to run as necessary.
|