SteamVR

SteamVR

[Resource] List of supported OpenXR features
Update: Official extension list maintained by Khronos here (only contains the extensions in the stable SteamVR branch):
http://github.khronos.org/OpenXR-Inventory/extension_support.html


Since it is very hard to find any up to date information about the OpenXR implementation in SteamVR, I've compiled a list of what features are supported currently.

Supported Features

Extensions

XR_KHR_vulkan_enable
XR_KHR_vulkan_enable2
XR_KHR_opengl_enable
XR_KHR_visibility_mask
XR_EXT_debug_utils
XR_EXT_frame_composition_report - (not documented in spec)
XR_FB_display_refresh_rate
XR_MND_headless

XR_KHR_composition_layer_depth
Only passed on to third party Oculus/WMR/etc. drivers.

Windows specific extensions

XR_KHR_D3D11_enable
XR_KHR_D3D12_enable
XR_KHR_win32_convert_performance_counter_time
XR_EXT_win32_appcontainer_compatible

Input extensions

XR_EXT_hand_tracking
Passes on skeletal tracking from StreamVR drivers. Seems to emulate finger position based on button input on controllers without finger sensors.
Known supported contollers:
- Valve Index controllers
TODO: Confirm is other controllers/sources work

XR_EXT_hand_joints_motion_range
Used to toggle the hand tracking finger poses between full range and holding controller.

XR_KHR_binding_modification
Used for XR_VALVE_analog_threshold and XR_EXT_dpad_binding.

XR_VALVE_analog_threshold
Used to set trigger thresholds for boolean actions on analog controls.

XR_EXT_dpad_binding
Gives the ability to bind digital D-Pad actions onto thumbsticks and trackpads.

XR_EXT_palm_pose
Adds a new pose at the surface of the users palm to all hand/controller interaction profiles.

XR_EXT_hp_mixed_reality_controller
XR_HTC_vive_cosmos_controller_interaction
XR_HTC_vive_focus3_controller_interaction
XR_UNITY_hand_model_pose
XR_HTCX_vive_tracker_interaction



Form factors

Only XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY is supported.


Composition layers

Supports max 16 layers.
TODO: Functionality not confirmed


Swapchain formats

Direct3D 12 - Windows
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_D32_FLOAT
  • DXGI_FORMAT_D16_UNORM
  • DXGI_FORMAT_D24_UNORM_S8_UINT
  • DXGI_FORMAT_D32_FLOAT_S8X24_UINT

OpenGL - Windows
  • GL_RGBA16
  • GL_RGBA16F
  • GL_RGB16F
  • GL_SRGB8
  • GL_SRGB8_ALPHA8
  • GL_DEPTH_COMPONENT16
  • GL_DEPTH_COMPONENT24
  • GL_DEPTH_COMPONENT32

TODO: Get formats for other APIs.


Input

The SteamVR binding menu can be accessed from the runtime, and even allows rebinding actions to keys that are not suppoted in the OpenXR interaction profiles. Action display names are broken.
TODO: Unknown if saving keybinds works properly.


Unsupported Features


Extensions

XR_EXTX_overlay
XR_EXT_eye_gaze_interaction
XR_EXT_performance_settings
XR_EPIC_view_configuration_fov

XR_KHR_composition_layer_color_scale_bias
XR_KHR_composition_layer_cube
XR_KHR_composition_layer_cylinder
XR_KHR_composition_layer_equirect
XR_KHR_composition_layer_equirect2

XR_KHR_convert_timespec_time
XR_KHR_swapchain_usage_input_attachment_bit
XR_KHR_vulkan_swapchain_format_list
XR_EXT_conformance_automation
XR_EXT_samsung_odyssey_controller
XR_EXT_view_configuration_depth_range


Less relevant Extensions

XR_KHR_loader_init
XR_KHR_loader_init_android
XR_EXT_thermal_query
XR_KHR_opengl_es_enable
XR_KHR_android_create_instance
XR_KHR_android_surface_swapchain
XR_KHR_android_thread_settings
XR_FB_android_surface_swapchain_create
XR_FB_color_space
XR_FB_composition_layer_alpha_blend
XR_FB_composition_layer_image_layout
XR_FB_composition_layer_secure_content
XR_FB_foveation
XR_FB_foveation_configuration
XR_FB_foveation_vulkan
XR_FB_hand_tracking_aim
XR_FB_hand_tracking_capsules
XR_FB_hand_tracking_mesh
XR_FB_passthrough
XR_FB_space_warp
XR_FB_swapchain_update_state
XR_FB_swapchain_update_state_android_surface
XR_FB_swapchain_update_state_opengl_es
XR_FB_swapchain_update_state_vulkan
XR_FB_triangle_mesh
XR_HUAWEI_controller_interaction
XR_MSFT_composition_layer_reprojection
XR_MSFT_controller_model
XR_MSFT_first_person_observer
XR_MSFT_hand_interaction
XR_MSFT_hand_tracking_mesh
XR_MSFT_holographic_window_attachment
XR_MSFT_perception_anchor_interop
XR_MSFT_scene_understanding
XR_MSFT_scene_understanding_serialization
XR_MSFT_unbounded_reference_space
XR_OCULUS_android_session_state_enable
XR_OCULUS_audio_device_guid
XR_VARJO_composition_layer_depth_test
XR_VARJO_environment_depth_estimation
XR_VARJO_foveated_rendering
XR_VARJO_marker_tracking
XR_VARJO_quad_views
XR_MNDX_egl_enable
XR_MND_swapchain_usage_input_attachment_bit


Blend modes

Neither XR_ENVIRONMENT_BLEND_MODE_ADDITIVE or XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND is supported. No camera passthrough composition is available.

The OpenXR spec currently has no support for retriving camera image or depth data.


Input

The OpenXR interaction profiles have limited options compared to the SteamVR Input interface. Thumbstick/trackpad directions can not be bound to boolean actions. This feature is missing from the OpenXR spec.
TODO: What other features are missing?

There is no support for custom input devices.
TODO: Confirm, it may just emulate one of the existing input profiles where possible.

There is no way to reset seated/standing position in OpenXR applications, even the dashboard button is missing. The runtime passes the stored seated position previously set in an OpenVR application.


Misc limitations

There is no way to enumerate or retrieve the pose of tracking references.
No way to signal frame discontinuities for motion smoothing.
No 32 bit application support under Windows.
No access to SteamVR configuration settings.



Game engine integration status

Unity
Basic support for core spec rendering and input.
TODO: Any more limitations?
No hand tracking support.
Plugin interface for adding additional features available.
Source: https://docs.unity3d.com/Packages/com.unity.xr.openxr@1.2/manual/index.html

Unreal Engine 4.27.2
Basic support for core spec rendering and input.
Input limitations: No support for binding sub actions. No support for action sets.
Support for submitting composition layers using the Stereo Layers system.
Limited rendermodel support through built in plugin.
XR_EXT_hand_tracking support through the built in plugin OpenXRHandTracking.
XR_EXT_hp_mixed_reality_controller support through the built in plugin HP Motion contoller.
XR_HTCX_vive_tracker_interaction support from Valve plugin (see below).
Plugin interface for adding additional features available.

TODO: Are there any applicable third-party engine plugins?

Valve OpenXR plugin repository
Currently contains UE4 Vive tracker plugin and had models rigged for the OpenXR hand skeleton.
https://github.com/ValveSoftware/openxr_engine_plugins
< >
Showing 1-15 of 26 comments
Any additional information and corrections are appreciated.
On OpenGL + Win32, here's the returned swapcahin format list:

- GL_RGBA16
- GL_RGBA16F
- GL_RGB16F
- GL_SRGB8
- GL_SRGB8_ALPHA8
- GL_DEPTH_COMPONENT16
- GL_DEPTH_COMPONENT24
- GL_DEPTH_COMPONENT32
Thanks, added them!
(as an aside "Win64" is not really a thing, Win32 is the name of the user-space subsystem on any version of Window, so the D3D12 bit in that list is also "Win32". Despite everything here being 64bit only. hence `XR_USE_PLATFORM_WIN32` && `XR_USE_GRAPHICS_API_OPENGL` being the #defines needed...

Blame Microsoft for that name, not me!)
Ah yeah, you're absolutely right. Just gonna change it to Windows :P
Added some information on what features are supported in Unity and UE4.
New extensions in 1.21.1:
XR_EXT_frame_composition_report
XR_HTCX_vive_tracker_interaction
Confirming there appear to be no extra linux specific extensions.
Good to know, thanks!
New extension in 1.21.5:
XR_EXT_dpad_binding
New extension in 1.22.2:
XR_FB_display_refresh_rate
Testing with a Valve Index, it allows getting the current refresh rate, but not changing it.
Version 1.0.23 of the OpenXR spec released a few days ago, and describes the XR_EXT_dpad_binding extension.
New extensions in 1.23.1:
XR_MND_headless
XR_HTC_vive_focus3_controller_interaction

And XR_EXT_dpad_binding is now offcially acknowledged.
New extension in 1.23.4:
XR_EXT_palm_pose
Is the lack of hand tracking support in Unity a hard wall ? I've been looking into it but haven't been able to figure out a way to pass hand tracking input data into a Steam VR compatible build.
< >
Showing 1-15 of 26 comments
Per page: 1530 50