SPDX-License-Identifier: CC0-1.0
SPDX-FileCopyrightText: 2020 Collabora, Ltd. and the Monado contributors
Monado vNEXT (2024-04-12)
- Major changes
- Added WinMR driver, it supports most headsets and controllers. Controllers can be connected both via host-Bluetooth and tunneled with the onboard radio chip. By default has 3DoF tracking, it can do 6DoF if used with the Basalt SLAM tracking software. Distortion is there but doesn't work perfectly on all hardware, best results is on Reverb G2. (!774, !780, !782, !784, !850, !989, !990, !991, !999, !1000, !1003, !1006, !1010, !1011, !1014, !1018, !1025, !1030, !1035, !1041, !1048, !1051, !1052, !1055, !1056, !1060, !1063, !1088, !1101, !1103, !1111, !1134, !1227, !1234, !1244, !1264, !1291, !1334, !1382, !1418, !1446, !1498, !1506, !1550, !1590, !1596, !1602, !1619, !1636, !1643, !1665, !1719, !1744, !1752, !1754, !1797, !1845, !1852, !1855, !1857, !1859)
- New compute based rendering backend in the compositor. Through the layer squasher it supports both projection and cube layers, not cubemap or equirect layers. It is not enabled by default. It also supports ATW. On some hardware the use of a compute queue improves latency when pre-empting other GPU work. (!873, !1517)
- Added Tracy as a supported tracing backend, it joins the Perfetto backend. Tracy works on Windows, but doesn't support full system tracing or multi app as well as Perfetto. (!1576, !1577, !1579, !1598, !1827)
- Add driver for nreal Air glasses, the device features 3dof tracking. (!1798)
- xrt: Updates binding verify usage for new binding code gen and pass in enabled extensions status. (!1896)
- Add
libmonado
library, allows control of applications and devices. Exposed API follows semver and is semi-stable. Will never be changed in a backward incompatible way without increasing the major version. Provisions for easily and safely checking version is included, both at compile and runtime. (!1908, !2055, !2099)
- Add driver for Rokid and Rokid Max glasses, the devices features 3dof tracking. (!1930)
- Add new curated debug GUI, while not exposing all the of the knobs it presents those knobs in a more organized way compared to the advanced UI. The curated UI also features the readback sink in the background, making it possible for it to double as the peek window. (!1941)
- Add hot-switch support for input devices like controllers and gamepads. This is not full hot-plug support, but instead only enables switching between devices created at start. (!1992)
- Adds framework support for face tracking xrt-devices. XR_HTC_facial_tracking being the first face tracking extension supported and the conventions of this for expression weights that xrt-device/drivers can output. More will be added in the future. (!2163, !2166)
- XRT Interface
- Added frame timing code that when the underlying vulkan driver supports the VK_GOOGLE_display_timing extension greatly improves the timing accerecy of the compositor. Along with this tracing code was added to better help use understand what was happening during a frame. (!697)
- Add functionality to disable individual drivers in the configuration file. (!704)
- Return
xrt_result_t
from xrt_gfx_provider_create_gl_egl
. (!705)
- Add
XRT_ERROR_EGL_CONFIG_MISSING
error, to handle missing config from EGL compositor creation call. (!705, !768)
- Add small helper function for pushing frames. (!715)
- Add
xrt_compositor_fence
interface to handle service and client render syncronisation. (!721)
- Add
XRT_ERROR_THREADING_INIT_FAILURE
a new threading related error code. (!721)
- Add alternative functions to
xrt_compositor::wait_frame
called xrt_compositor::predict_frame
and xrt_compositor::mark_frame
these allow one to do frame timing without having to block on the service side. (!721)
- Add
xrt_multi_compositor_control
that allows the xrt_system_compositor
to expose a interface that the IPC layer can use to manage multiple clients without having to do the rendering. This allows us to move a lot of the code out the IPC layer and make it more about passing calls. (!721)
- Pass
XrFrameEndInfo::displayTime
to xrt_compositor::layer_begin
so that the compositor can correctly schedule frames, most importantly do not display them too early that might lead to stutter. (!721)
- Make xrt_swapchain be reference counted. This will greatly help with handling swapchains for multiple clients in the compositor rendering pipeline where a client might go away while the compositor is using it. (!723, !754, !807)
- Make
enum xrt_blend_mode
an array instead of a bitfield, so that drivers can specify which one is preferred. (!749)
- Add new IPC session not created error
XRT_ERROR_IPC_SESSION_NOT_CREATED
, as some functions cannot be called without first creating a session. (!768)
- Make eye_relation argument to xrt_device_get_view_pose const, more safety for everybody. (!794)
- Add
XRT_ERROR_IPC_SESSION_ALREADY_CREATED
error message to signal that a session has already been created on this connection. (!800)
- Add a Code Style and Conventions page. (!810, #61)
- Send down sub-image offsets and sizes in normalised form, this makes it so that compositor does not need to track the size of swapchains. (!847)
- Add
use_dedicated_allocation
field to xrt_image_native
struct to track if dedicated allocation is required. (!867)
- Add xrt_vec3_f64 struct. (!870)
- Make
xrt_system_compositor_info::supported_blend_modes
an array with an adjacent count field. (!975)
- Rename all
num_
parameters and fields in the interface, typically to _count
but sometimes _capacity
, to match OpenXR convention. (!977)
- Remove
xrt_view::display::{w|h}_meters
, they are not used anywhere. (!1054)
- Rename
xrt_space_graph
(and related m_space_graph_*
functions in m_space.h
) to xrt_relation_chain
to more accurately reflect the function of this structure. (!1092)
- Add the ability for
xrt_device
to dynamically change the fov of the views return back to the applications. We do this by addning a new function called xrt_device::get_view_poses
and removing the old one. This function now returns view poses, fovs and the observer position in one go. (!1105)
- Add
XRT_TIMEOUT
to be used for operations that can timeout, same value as VK_TIMEOUT
for extra compatibility. (!1147)
- Make it possible when creating the Vulkan client compositor to say if timeline semaphores has been enabled. (!1164)
- Add
xrt_compositor_semaphore
object, add interfaces to xrt_compositor
for creating the new semaphore object. Also add interface for passing in semaphore to xrt_compositor::layer_commit
. Added support for these interface through the whole Monado stack. (!1164)
- Add
XRT_CHECK_RESULT
define to be used for ensure that the result from functions are read and acted upon. (!1166)
- xrt: Add new
XRT_TRACING
environmental variable to control if tracing is enabled or not, this is to work around crashes in Perfetto when running the CTS. (!1231)
- Introduce
xrt_uuid_t
and xrt_luid_t
structs and add these as field to xrt_system_compositor_info
to more correctly transport UUID and LUID values. (!1250, !1257, !1259)
- xrt: Add xrt_swapchain_create_properties to allow client compositors and IPC code to query the main compositor how many images to create on a swapchain, and provide an extension point for more properties as needed. (!1258)
- Introduce xrt_system_devices struct and xrt_instance_create_system call. This is a prerequisite for setter uppers (system builders if will), also have the added benefit of moving the logic of which devices has which role solely into the service/instance. (!1275, !1279, !1283, !1285, !1299)
- Introduce xrt_builder struct and various functions on xrt_prober to support them. This is a follow up on the xrt_system_devices changes. These make it much easier to build more complex all in one devices like WinMR and Rift-S. And moves a lot of contextual configuration out of generic drivers like the hand-tracker code needing to know which device it was being used by. (!1285, !1299, !1313)
- Make a xrt_builder specifically for Lighthouse (vive, index, etc.), and remove Lighthouse devices from the legacy builder. (!1296)
- No longer include any util headers (in this case
u_time.h
), the XRT headers are supposed to be completely self contained. The include also messed with build refactoring in the auxiliary directory. (!1328)
- Mark haptic value in xrt_device_set_output as const. (!1408)
- Remove unused
xrt_layer_cube_data::image_array_index
field. (!1421)
- Add a single header for limits, like max number of swapchain images. (!1553)
- Add
XRT_IPC_SERVICE_PID_FILE_NAME
cmake variable to configure the name of pid file. (!1567)
- Add
XRT_OXR_RUNTIME_SUFFIX
cmake variable to configure the suffix of the output openXR library. (!1567)
- Remove the
xrt_gfx_native.h
as it is no longer needed, it has been replaced by compositor/main
own interface file. In the past it was the state tracker or IPC layer that created the xrt_system_compositor
directly by calling this function. But now it's the xrt_instance
s responsibility, and it can pick which compositor to create. So this interface becomes less special and just one of many possible compositors implementations. (!1569)
- Added
XRT_STRUCT_INIT
define to help with headers and code that needs to compile as both C and C++ code. This is due to differences in default struct initialization. (!1578)
- Document using
XRT_INPUT_GENERIC_UNBOUNDED_SPACE_POSE
unbounded reference space. (!1621)
- Remote
xrt_prober_device::product_name
array, the value was only used internally by the prober. There is already a access function for the product name that is needed by USB, so make the interface less confusing. (!1732)
Added functions to swapchain to explicitly do the barrier insertion.
This pushes the handling of barrier calls into the OpenXR state tracker, while the changes are minimal for the client compositors they no longer have the responsibility to implicitly to insert a barrier when needed. Allows us to in the future support extensions. (!1743)
- Introduce
xrt_layer_frame_data
struct that holds per frame data for the xrt_compositor
layer interface. This is a sibling to the xrt_layer_data
struct which holds per layer data. Both are structs instead of arguments to make it easier to pass the needed data through the layers of Monado, and for easier extension further down the line. (!1755)
- Extend
xrt_swapchain_create_properties
to allow the main compositor request extra bits to be used beyond those requested by the OpenXR app. Some compositors might need extra usage bits set beyond just the constant sampled bit. This also ensures that images have exactly the same usages in both the compositor and app. (!1763)
- Add eye gaze enums to enable exposing eye gaze data to the application. (!1836)
- Add Gen 3.0 and Tundar vive tracker device names. (!1860)
- Add generic vive tracker input and output defines. (!1860)
- Add and passthrough enabled/disabled state of the
XR_EXT_hand_tracking
extension. (!1890, !1841, !1890)
- Add and passthrough enabled/disabled state of the
XR_EXT_eye_gaze_interaction
extension. (!1890)
- Adds a new
xrt_input_name
entry, XRT_INPUT_GENERIC_PALM_POSE
for XR_EXT_palm_pose
. (!1896)
- general: Adds support for
XR_EXT_hand_interaction
profile. (!1901)
- Add OPPO MR controller defines. (!1904)
- Add trailing commas to all enums, reduces the size of any future changes to those enums. (!1907)
- Add new
xrt_device_name
enum entry for XR_EXT_hand_interaction
. (!1915)
- Add performance settings interface, used to implement
XR_EXT_performance_settings
. (!1936)
- Add
xrt_thread_hint
enum and xrt_compositor::set_thread_hint
function, this function lets us implement the XR_KHR_android_thread_settings extension. (!1951)
- Add
xrt_limited_unique_id
and xrt_limited_unique_id_t
types to donate a special id that is unique to the current process. Use that to decorate xrt_swapchain_native
with a limited unique id, useful for caching of the xrt_image_native
imports of swapchains and other objects. (!1957, !2066)
- Add size limit for swapchain. (!1964, !2066)
- Extend
xrt_system_devices
with dynamic roles for input devices and add function xrt_system_devices_get_roles
to get updated devices. (!1992, !2019)
- xrt/android: bump AGP to 8.1.0 and use latest google-java-format, spotless and svg-2-android-vector (!2002)
- Add
xrt_device
visibility mask interface, this is used to implement the OpenXR extension XR_KHR_visibility_mask
. (!2016, !2032, !2034, !2067)
- Extend xrt_space_overseer to support local_floor, in the Monado interface it's optional, but in OpenXR it's always required if the extension is supported. (!2018)
- xrt: Make
xrt_device::get_visibility_mask
return xrt_return_t
. (!2034)
- Tidy the
xrt_device.h
file to make sure the destroy function is the last function on the device. (!2038)
- Add
XRT_ERROR_DEVICE_FUNCTION_NOT_IMPLEMENTED
error message, used to signal when a function that isn't implemented is called. It is not meant to query the availability of the function or feature, only a error condition on bad code. (!2039)
- handles: Add defines to characterize the behavior of the Vulkan graphics buffer import functionality: on most platforms, the import consumes the reference, but on some it just increases a ref count/clones the reference. (!2042)
- xrt: Improve the xrt_reference helper functions, making them more clear and better documented. (!2047)
- Add LOCAL_FLOOR and UNBOUNDED generic space poses, and re-order some of the generic inputs. (!2048)
- Add reference space usage information, this lets the space overseer know when a space has been used or no longer used. This allows for doing various things like recentering when an application starts, or stopping tracking of the floor if the stage or local_floor space isn't used. (!2048, !2048, !2092)
- Fix graphics includes in the xrt_openxr_includes.h header. (!2049)
- Use uint32_t instead of int64_t for xrt_swapchain_create_info::format. (!2049)
- Add formats list to xrt_swapchain_create_info, used to implement the OpenXR extension XR_KHR_vulkan_swapchain_format_list. (!2049)
- For display refresh info add hz prefix, follow code style and add limit to refresh rate array. (!2051)
- Add new API in xrt_compositor and xrt_multi_compositor_control interfaces for display refresh rate setting and getting, used to implement XR_FB_display_refresh_rate. (!2051)
- Add new recenter function on xrt_space_overseer and new result code for when recentering isn't supported. (!2055)
- Introduce two new objects
xrt_system
, xrt_session
, xrt_session_event
and xrt_session_event_sink
. Along with two new error returns XRT_ERROR_IPC_COMPOSITOR_NOT_CREATED
and XRT_ERROR_COMPOSITOR_NOT_SUPPORTED
. Also moves the compositor events to the session. (!2062)
- Add
xrt_session_event_reference_space_change_pending
event, this is used to generate XrEventDataReferenceSpaceChangePending
in OpenXR. (!2081)
- Pass down broadcast
xrt_session_event_sink
pointer to prober and builder when creating system, this is used to broadcast events to all sessions. Such as reference space change pending event. (!2081)
- xrt_defines: Added new define
XRT_MAX_VIEWS
to define the maximum number of views supported by the system. This is used to define the maximum number of views supported by the distortion calculation as well as other view-related arrays. (!2086)
- xrt_device: Added new function
xrt_device_get_view_configuration
to get the view configuration for a device. Array size is determined by XRT_MAX_VIEWS
. (!2086)
- The runtime name is now picked up from the CMake project description. (!2089)
- Add
xrt_device::ref_space_usage
function to let a xrt_device
know if a reference it's powering is being used or not by any client. (!2091, !2107)
- Make it possible to get builders from prober, this is useful for generating reports for end-user debugging. (!2094)
- Make it possible to control where dump goes, this is useful for generating reports for end-user debugging. (!2094)
- Prevent systemd from activating the user unit in quick succession, if it crashes on startup. This keep the units from entering a failed state. (!2116)
- xrt: Support STAGE space to be tracked by xrt_devices and implement in steamvr_lh, survive and remote drivers. (!2121)
- Fix compile error in t_imu.cpp due to missing header (!2182)
- Generate the
enum xrt_input_name
from a macro to avoid code duplication (!2191)
- State Trackers
- OpenXR: Ignore XrSystemHandTrackingPropertiesEXT when hand tracking extension is not enabled. (!688)
- OpenXR:
Add quirk for UnrealEngine4.27 to disable depth/stencil buffer to work around a bug where Unreal would forget to call acquire before wait image. This has been fixed in UnrealEngine and is no longer needed. (!689, !690, !740)
- OpenXR: Support EGL clients sending in no EGLConfig if the EGLDisplay supports EGL_KHR_no_config_context. (!705)
- OpenXR: Unreal Engine 4 depth buffer quirk no longer needed. (!740)
- OpenXR: Use new multi compositor controls to set visibility and z_order if available. This is needed for when we are not in service mode. (!759)
- OpenXR: Add prefix to gfx related session functions to improve sorting. (!847)
- OpenXR: Break out end frame handling to its own file since it's so big. (!847)
- OpenXR: Fill in normalised sub-image offsets and sizes. (!847)
- OpenXR: Add support for XR_KHR_swapchain_usage_input_attachment_bit. (!886)
- OpenXR: Implement a basic support XR_FB_display_refresh_rate that can report the current refresh rate. (!897)
- OpenXR: Add support for RenderDoc frame capture of OpenXR applications between xrBeginFrame and xrEndFrame. (!1126)
- OpenXR: Add
XRT_CHECK_RESULT
to oxr space functions. (!1166)
- OpenXR: Ensure even if relation is not locatable return only valid data. (!1166)
- OpenXR: Improve logging in
xrLocateSpace
. (!1166)
- OpenXR: Do not expose the XR_EXT_debug_utils extension, none of the functions where given out but we still listed the extension to the loader. So we put it behind a feature config that is always set to off. (!1312)
- OpenXR: Make sure to init session fields as early as possible. (!1353)
- OpenXR: Update headers to 1.0.23. (!1355)
- OpenXR: Validate faceCount parameter of XrSwapchainCreateInfo. (!1399)
- OpenXR: Now does the barrier insertion explicitly, see XRT comment for this MR. (!1743)
- OpenXR: Refactor logging functions and use OutputDebugStringA on Windows. (!1785)
- OpenXR: Refactor OXR_NO_PRINTING env vars, split them in two (which is useful for Windows that has stderr and Debug console). And make stderr printing default off on Windows. (!1785, !1785, !1889)
- OpenXR: Handle LOCAL_FLOOR enums, doesn't add support for the extension. (!1796)
- OpenXR: Set extensions earlier in instance init. (!1796)
- OpenXR: Refactor wait frame function to avoid setting state before we should. (!1805)
- OpenXR: Fix crashes when enabling headless extension but using graphics. (!1808, #98)
- OpenXR: Add support for
XR_EXT_eye_gaze_interaction
. (!1836, !1867, #269, !2027)
- OpenXR: Use truncating printf helpers from util. (!1865)
- OpenXR: Check that argument performanceCounter to xrConvertWin32PerformanceCounterToTimeKHR is valid. (!1880)
- OpenXR: Adds missing cpp defines/checks for:
XR_HTCX_vive_tracker_interaction
and XR_MNDX_hydra
. (!1890)
- OpenXR: Add disabled
XR_EXT_palm_pose
, no device driver actually support it yet hence added in a disabled state. (!1896)
- OpenXR: Add disabled
XR_MSFT_hand_intertaction
. The binding code has support for this extension, but the bindings are not used in any of the drivers so totally untested and would lead to the wrong expectations of the applications. (!1896)
- OpenXR: Add XR_MNDX_system_buttons extension to expose system buttons for controllers where they have been omitted. (!1903)
- OpenXR: Add OPPO MR controller extension. (!1904)
- OpenXR: Fixes profile look for
XR_EXT_hand_interaction
while not breaking XR_msft_hand_interaction
binding look-up (!1915)
- OpenXR: Implement
XR_EXT_performance_settings
. (!1936)
- OpenXR: Implementation of XR_KHR_android_thread_settings. (!1951)
- OpenXR: Verify size limit for swapchain. (!1964, !2066)
- OpenXR: Prefer use of action ref in binding code, in other words make
oxr_action_attachment_bind
only use oxr_action_ref
params. (!1985)
- OpenXR: Refactor device getters. (!1985)
- OpenXR: Add support for new dynamic device roles. The bindings from actions to devices will be recalculated when decides change. (!1992, !1992, !2073)
- OpenXR: Route log output to Android logcat. (!2003)
- OpenXR: Implementation of XR_KHR_visibility_mask. (!2016, !2032, !2027)
- OpenXR: Refactor reference space validation and support checking, code now supports per system set of supported reference spaces. (!2018)
- OpenXR: Export local_floor if extension enabled and space is supported, since the extension is compile time we may break the space if the system actually doesn't support local_floor. Hopefully those cases should be rare. (!2018, !2018, !2033, !2027)
- OpenXR: Export unbounded if extension enabled and space is supported, it's exposed via XR_MSFT_unbounded_reference_space. (!2018, !2018, !2027)
- OpenXR: Fix xrSyncActionsreturn code with no action sets. (!2024)
- OpenXR: Properly check all extension interaction profiles if enabled or supported in xrSuggestInteractionProfileBindings. (!2027)
- OpenXR: Make many more extensions build time options, doesn't change which are enabled by default. This lets runtimes using Monado control which extensions are exposed, this needs to be build time options because extensions are listed before a connection is made to the service. (!2027)
- OpenXR: Handle session not focused for action input and output and return XR_SESSION_NOT_FOCUSED where needed. (!2035)
- OpenXR: Use xrt_device function helper. (!2038)
- OpenXR: Add support for reference space usage. (!2048)
- OpenXR: Track which graphics API was used to create the session. (!2049)
- OpenXR: Implement XR_KHR_vulkan_swapchain_format_list. (!2049, !2049, !2059, !2083)
- OpenXR: Complete implementation of extension XR_FB_display_refresh_rate. (!2051, !2054)
- OpenXR: Add support for the new
xrt_system
and xrt_session
objects. (!2062)
- OpenXR: Fix unhandled enum in switch statements. (!2069, !2063)
- OpenXR: Transition headless session to FOCUSED on xrBeginSession as per the extension, this fixes actions not being active in headless sessions. (!2072)
- OpenXR: Tidy code a little bit and improve debugging of bindings. (!2072)
- OpenXR: Add guards around overlay event code and tidy event code. (!2074)
- OpenXR: Add extension XR_FB_composition_layer_image_layout. (!2075)
- OpenXR: Add
XR_KHR_composition_layer_color_scale_bias
support, disabled by default because Monado's main compositor doesn't support it. (!2078, !2082)
- OpenXR: Use correct define to test for extension support. (!2082)
- OpenXR: Add
XR_FB_composition_layer_alpha_blend
support, disabled by default because Monado's main compositor doesn't support it. (!2087)
- OpenXR: Add extension XR_FB_composition_layer_settings. (!2088)
- OpenXR: Fix crashes on too many bindings to a single action. (!2109)
- OpenXR: Increase internal limit of bindings per action. (!2109)
- OpenXR: Switch to use new loader header. (!2111)
- OpenXR: Implement extension 'XR_FB_passthrough'. (!2124)
- OpenXR: Add extension XR_FB_composition_layer_depth_test. (!2129)
- gui: Add a GUI for recording videos from the Valve Index. (!715)
- gui: Show git description in
monado-gui
window title. (!830)
- gui: Add tracing support (!858)
- gui: Various fixes for video handling, null checking and wrong argument orders. (!859)
- gui: Add support to record from ELP 3D camera and select DepthAI camera to calibration. (!859)
- gui: Support RGBA/RGBx and unusual image strides in record window. (!1120)
- gui: Add SW Ultrafast and SW Veryfast pipelines in record window. (!1144)
- gui: Make it possible to enter address and port for remote. (!1356)
- gui: Expose the new Index Controller UI for the remote driver. (!1356)
- gui: Add some tracing in the prober code. (!1814)
- gui: Tweaks for the sinks gui, opened by default and make possible to hide the header. (!1827)
- gui: General tidy and refactoring code to make it prettier. (!1902)
- gui: Add code to draw a image to the background of the main window. (!1902)
- gui: Fix warning with passing arrays. (!1928)
- gui: Rename OpenGL sink file, slightly improve thread safety and add note. (!1957)
- gui: Add infinitely fast trigger finger in remote UI. (!2110)
- gui/calibration: Skip mode selection if there's only one mode. (!1074)
- gui/calibration: Save/load parameters to file so that you don't have to change them every time. (!1074)
- oxr: Enable RenderDoc compiling on Android (!2005)
- oxr: Enable VK_EXT_debug_utils extension for client side on the platform that support it. Since it can not be reliably detected if the extension was enabled by the application on
XR_KHR_vulkan_enable
instead use the the environmental variable OXR_DEBUG_FORCE_VK_DEBUG_UTILS
to force it on. (!2005, !2005, !2044)
- oxr: RenderDoc support on vulkan/gles client sides and Android platform, make rdc can be captured by the button in UI (!2005)
- prober: Minor fixes & tidy commits. Mostly around doc-comments and the string descriptor getter function. (!686)
- prober: Change the default logging level to info so that people can see what drivers are disabled. (!735)
- prober: Fix warnings found with GCC 13. (!1921)
- prober: Quit without crashing if no driver is available. (!1996)
- st/gui: Refactor a few OpenGL drawing code into helper. (!1957)
- st/oxr: Keep track of the union of each action set's action sub-action paths (!458)
- st/oxr: Stricter path verification in xrSyncActions (!458)
- st/oxr: Fixes action state change/timestamp updates (!458)
- st/oxr: Remove non-reachable return for oxr_xrPathToString (!1899)
- st/oxr: Adds support for
XR_EXT_hand_interaction
profile (!1901, !2027)
- st/oxr: Fixes binding init/updates not being reset for any-pose-subaction paths (!2133)
- st/oxr: Fixes
xrGetCurrentInteractionPath
returning incorrect paths for particular hand becoming unbound (!2133)
- st/oxr: Fixes invalid timestamps for action cache updates. (!2146)
- st/oxr: Getting vendor id/name from server. (!2151)
- st/oxr: Avoid calling oxr_action_cache_stop_output every time when xrSyncActions is called. (!2171)
- steamvr_drv: Add support for new dynamic device roles. (!1992)
- steamvr_drv: Add support for the new
xrt_system
and xrt_session
objects. (!2062)
- steamvr_drv: Fill HMD properties for games and apps to recognize it correctly. (!2102)
- Drivers
- Sample driver: Implement missing APIs. (!2067, !2135)
- ULv5: Add new driver for UltraLeap v5 API for hand-tracking devices. (!2064)
- adjust the pose for VIT system and assumes basalt (!2058)
- all: Use
u_device_noop_update_inputs
helper for drivers with nothing in their update input function. (!2039)
- all: Standardize use of
u_device_get_view_poses
helper. (!2039)
- android: Fixed the issue of screen stuttering on some Android devices caused by failing to set the IMU event rate. (!1912)
- d/na,d/vive: Reduce relation history lock contention (!1949)
- d/remote: Add and use a multi-os r_socket_t typedef d/remote: Add R_SOCKET_FMT to define the printf format to use for a socket descriptor (!2165)
- d/vive: Use raw imu samples for slam (!2131)
- d/wmr: Properly compute hand tracking boundary circle (!2131, !2131, !2173)
- d/xreal_air: Rename nreal air into xreal air in driver d/xreal_air: Support xreal air 2 and xreal air 2 pro d/xreal_air: Fixes glasses detection by adjusting AVAILABLE_DRIVERS in cmake (!2150, #330, !2172)
- d/{wmr,rift_s,vive,ns}: Share hand bounding box with head tracker (!2131, !2143)
- dai: Add a new frameserver driver that uses supports the DepthAI cameras. (!836, !831, !837, !934, !1027, !1029, !1063, !1097, !1153, !1260, !1278, !1282, !1360, !1519, !1649, !1523, !1603, !1839)
- dai: Enable IR floodlight, add code and env variable and u_var tracking to control it's level. (!1494, !1832)
- dai: Make DepthAI frameserver work with multicam sinks. (!1692)
- dai: Add EuRoC recorder integration. (!1769)
- dai: Add manual exposure controls via u_var tracking. (!1770)
- dai: Try to set realtime priority on IMU thread (!1881)
- depthai: Add tracing support. (!858)
- depthai: Extend driver to support stereo grayscale cameras (!934)
- euroc: Add euroc driver that plays EuRoC datasets for SLAM system evaluation. (!880)
- ht: Error out if we can't find a hand-tracking model directory. (!1831)
- multi: Enable specifying arbitrary xrt_input_name for querying tracker poses. (!741)
- north_star: Upstreams Moses Turner's "VIPD" distortion. (!839)
- north_star: Fixes the FOV calc on the v1/3D distortion. (!839)
- north_star: General improvement of code organization. (!839)
- north_star: Improved JSON parsing. (!839)
- nreal_air: Tidy and silence warnings. (!1989)
- ohmd: Support OpenHMD controllers and specifically the Oculus Touch controller. (!742)
- ohmd: Fix warnings and tidy. (!2038)
- opengloves: Refactor creation. (!1987)
- pssense: Add trigger force feedback. (!1916)
- psvr: Ensure that timestamps are always after each other, stopping any time-traveling sample packets. (!717)
- qwerty: Add qwerty driver for emulating headset and controllers with mouse and keyboard. (!714, !1789, !1926)
- qwerty: Fix input timestamps for select and menu. (!2080)
- realsense: Expand driver to support non-T26x cameras and external SLAM tracking. (!907)
- remote: Greatly improve the remote driver. Properly shutting down the main loop. Use the new xrt_system_devices as base class for r_hub. Exposing the Valve Index Controller instead of the simple controller as it better allows to map other controllers to it. Reusing the vive bindings helper library. (!1356)
- remote: Fix warnings found with GCC 13. (!1921)
- remote: Add support for new dynamic device roles. (!1992)
- remote: Add support for local_floor space. (!2018)
- remote: Fix socket closing on Windows by using socket_close. (!2060, !2061)
- rift_s: Add Rift-S driver, this works with Monado's hand and SLAM tracking. (!1447, !1580, !1665, !1691, !1823)
- rs: Fix warnings with function declarations. (!1989)
- simulated: Support reference space usage via debug printing. (!2091)
- steamvr_lh: Add driver that wraps the SteamVR Lighthouse driver. (!1861, !1927, !1943, !1947, !1950, !2077, !2090)
- steamvr_lh: Add Vive Pro support. (!1927)
- steamvr_lh: Add Index support, also support canting of views. (!1927)
- steamvr_lh: Add Valve Knuckles support, also support hand tracking. (!1927)
- steamvr_lh: Basic vive tracker support. (!1927, !1927, !1943)
- steamvr_lh: Fix warnings with logger defines. (!1929)
- steamvr_lh: Set driver IPD & brightness on HMD. (!1929, !1929, !1943)
- steamvr_lh: Fix prediction and jitter and remove old
LH_PREDICTION
env var. (!1943)
- steamvr_lh: Use proper timestamp on hands and fixes to angular/ linear velocity handling. (!1947)
- steamvr_lh: Add a mutex to update_inputs() to prevent unsafe condition in lighthouse driver. (!1968)
- steamvr_lh: Add tundra as a generic tracker (!1979)
- steamvr_lh: Silence some useless logging and properly wait for vive wands to settle (!1986)
- steamvr_lh: Simplify coordinate space conversion. (!2090)
- steamvr_lh: Make playspace reading more robust by choosing the first tracking univere from lighthousedb.json that is found in chaperone_info.vrchap. (!2114)
- steamvr_lh: Add additional bindings for vive and index controllers. (!2115)
- survive: Add support for Gen 3.0 and Tundra trackers. (!1860)
- survive: Add support for HTC Vive Pro 2 (!1911)
- survive: Fall back to default ipd if survive reports 0.0 (!2128)
- survive/vive: Use new common controller bindings in
a/vive
. (!1265)
- v4l2: Add tracing support. (!858)
- vf: Show the time on the video test source video server. (!715)
- vf: Some tidy, frame fixes and tracing support. (!860)
- vive: Factor out json config parser and reuse it in survive driver. (!674)
- vive: Add rotation pose prediction to HMD and Controllers (!691)
- vive: Setup the variable tracking for imu fusion. (!740)
- vive: Tidy code by improving comments, removing old print, and use defines for hardcoded values. (!793)
- vive: Minor refactor to IMU conversion code, should be no functional change. (!793)
- vive: Drian IMU packets at start, this helps reduce time drift due backed up packets confusing the timing code. (!1829)
- vive: Refactor timing code in source, make it take in account of the age of samples, this reduces the time drift due to irregular delivery of packets. (!1829)
- vive: Add support for Gen 3.0 and Tundra trackers. (!1860, !1860, !1863)
- vive: Try to set realtime priority on sensors thread (!1881)
- vive: Set the correct tracking origin type when we have SLAM. (!1893)
- vive: Add support for HTC Vive Pro 2 (!1911)
- vive: Follow common naming of update_inputs. (!2038)
- wmr: Add Windows Mixed Reality driver, supports 6dof through Basalt. (!774, !803, !1796, !1797)
- wmr: Add SLAM (6dof inside-out) tracking for WMR headsets. (!1035)
- wmr: Add initial hand tracking for WMR devices. (!1264)
- wmr: Add auto exposure and gain module. (!1291)
- wmr: Send calibration automatically to SLAM tracker. This makes WMR SLAM tracking work out of the box without user intervention with Basalt. (!1334)
- wmr: Move driver over to builder interface. Currently only a simpler builder, the SLAM and Hand-Tracking setup hasn't been moved out yet. (!1754)
- wmr: Improve WMR controller orientation when in 3DoF by using the information that is available in the JSON config that is stored on the controllers. (!1858)
- wmr: Reduce drifting by applying calibration biases to controllers, doesn't fully eliminate as calibration is lacking for all temperature ranges. (!1876)
- wmr: Try to set realtime priority on USB thread (!1881)
- wmr: Add
WMR_LEFT_DISPLAY_VIEW_Y_OFFSET
and WMR_RIGHT_DISPLAY_VIEW_Y_OFFSET
environmental variables to adjust screen distortion. (!1988)
- wmr: Add Dell Visor support to WMR driver. (!2023)
- wmr: Follow common naming of update_inputs. (!2038)
- IPC
- all: Use libbsd pidfile to detect running Monado instances. Enables automatically deleting stale socket files. The socket file is now placed in $XDG_RUNTIME_DIR/monado_comp_ipc by default or falls back to /tmp/monado_comp_ipc again if $XDG_RUNTIME_DIR is not set. (!565)
- server: Factor out the IPC server mainloop into a per-platform structure. (!685)
- all: Transfer HMD blend mode, don't drop it on the floor. (!694)
- all:
Support systemd socket activation with meson too. Mason build files has been removed. (!712)
- all: Now that there is a interface that allows the compositor to support multi-client rendering use that instead of doing our own rendering. (!721, !754, !768, !800, !846)
- all: Ensure that functions that require the compositor can't be called if a session has not been created yet. (!768)
- Android: Do not require OPENXR permission when connect MonadoService. Permission will not be granted if install application before permission container. (!1213)
- shared: Change IPC script to automatically mark all input aggregates as const. (!1408)
- all: Add Windows support to the IPC layer, this is based on named pipes. (!1525, !1531, !1584, !1807)
- client: Refactor out the connection connect code into a its own file, this lets it be reused by other things that might want to connect like monado-ctl and libmonado. (!1875)
- all: Adds support for
XR_EXT_hand_interaction
profile - plumbs extension enabled state to ipc server/drivers. (!1901)
- shared: Add function to unmap the shared memory area when destroying. (!1906)
- client: Destroy the shared memory area when shutting down. (!1906)
- server: Destroy the shared memory area when shutting down. (!1906)
- all: Rename client connected function and document code. (!1909)
- all: Send less information when describing the client. (!1909)
- all: Add a stable ID for clients. (!1909)
- client: Add a interface header for
ipc_instance_create
. (!1917)
- server: Add a interface header for
ipc_server_main[_android]
. (!1917)
- android: Dup the fd from JVM and maintain it in native. (!1924)
- all: Implement performance settings interface, used to implement
XR_EXT_performance_settings
. (!1936)
- Add support for thread hint function. (!1951)
- client: Generate limited unique ids for native swapchains. (!1957)
- server: Fix session deactivation negative array index access. (!1991)
- all: Add support for dynamic device roles. (!1992, !2013)
- server: Use macro TEMP_FAILURE_RETRY to avoid closing a client connection on
-ENTR
. (!2007, !2012)
- all: Add ability to do more complex IPC communication by introducing VLA functions. These lets us do the marshalling to some extent oursevles, useful for sending a non-fixed amount of data. This support is bi-directional. (!2009, !2009, !2053)
- all: Add variable length get views function. (!2009)
- client: Refactor connection init code. (!2011)
- client: Check git tag as early as possible when connecting. (!2011)
- ipc: Add support for getting the device visibility mask. (!2016, !2032)
- shared: Minor tidy of various shared files. (!2022)
- shared: Break out message channel functions to own files. (!2022)
- client: Use
log_level
from the message channel. (!2022)
- shared: Add ipc_print_result helper. (!2025)
- client: Add and use return check helpers, this makes it easier to see where the error happened. (!2025, !2025, !2028)
- shared: Minor fixes and tidy ipc_generated_protocol.h file. (!2030)
- ipc: Share per client thread shutdown code between platforms. (!2046)
- all: Add support for reference space usage. (!2048)
- all: Implement display refresh rate functions. (!2051, !2054)
- shared: Add ipc_command_size function to the protocol generation. (!2053)
- server: Read the exact command size in the client loop on Linux. (!2053)
- all: Add support for recentering local spaces. (!2055)
- all: Add support for the new
xrt_system
and xrt_session
objects. (!2062, !2079, !2095)
- server: Make the server a little bit more chatty by default (switch the default logging level
info
from warn
). Print out a messages that the service has started, and advising on how to collect information to help in debugging to ease helping end-users. (!2094)
- server: Don't call teardown if mutex fails to be created. (!2095)
- server: Pass in log_level to init function. (!2095)
- server: Use correct log define error message. (!2095)
- server: Print more client info. (!2095)
- server: Re-order functions NFC
- ipc: Add interface for XR_FB_passthrough in Ipc communication. (!2124)
- client,server: Setting timer resolution (timeBeginPeriod) improves performance with Nvidia drivers (!2133)
- all: Forwards the results of server swapchain image waits to xrWaitSwapchainImage client calls (!2133)
- ipc/server: Adds "XRT_NO_STDIN" option disables stdin and prevents monado- service from terminating. (!2133)
- Compositor
- Tracking
- mercury: Add Levenberg-Marquardt optimizer and lots of improvements. Makes hand tracking finally somewhat usable. (!1381)
- tracking: Remove unused destroy function on async interface. (!1893)
- hand: General tidy of the async code. (!1893)
- hand: Rename new user hand estimation switch. (!1893)
- hand: Add env variables to control prediction. (!1893)
- t/hand: Reduce relation history lock contention (!1949)
- h/mercury: Push hand rect masks to the SLAM tracker sinks (!2131)
- Helper Libraries
- (!2086)
- Adds support for profiles in bindings.json to inherit & override other profiles. (!1896)
- Adds a new concept of virtual profiles for profile like extensions (e.g.
XR_EXT_palm_pose
) which do not define a profile themselves but require their newly defined actions to be supported by all profiles. (!1896)
- Generates verify bindings functions which only check extensions actions only if the extension is enabled. (!1896)
- When a space is located in itself as base space, skip locating the space altogether. (!2192)
a/bindings: Interaction profile inheritance
A requirement of some interaction profile (extensions) specify that some/all actions must be supported by all other interactions. This commit modifies the binding generation to support data-inheritance in bindings.json: (!1896)
- a/bindings: Adds support for
XR_EXT_hand_interaction
profile - Updates bindings & pretty-print for newly added support for XR_EXT_hand_interaction
profile. (!1901)
- a/math: Fixes const-correctness in m_relation_history (!2133)
- a/util: Fixes crash bug with XR_EXT_dpad_binding after multiple session re- runs. (!2133)
- a/util: Fixes missing lib in cmake file for building mercury_steamvr_driver (!2169)
- a/vive: Add FoV tweaks for another index HMD (!1937)
- all: Rename all
num_
parameters and fields, typically to _count
, to match OpenXR convention. (!977)
- android: Tidy code and add warning on not getting refresh rate. (!1907)
- android: Support creating surface with title. (!1963)
- android: Add argument to specify display mode id for surface creation. (!2010)
- aux/debug_ui: bump the minimum gl version to 4.5 (!2147)
- bindings: Add support for eye gaze bindings extension. (!1836)
- bindings: Add generic vive tracker input and output bindings, not used for now. (!1860)
- bindings: Correct ML2 controller extension string. (!1890)
- bindings: Add system buttons to WinMR controllers, for OpenXR gate them behind the XR_MNDX_system_buttons extension. (!1903)
- bindings: Add OPPO MR controller profile. (!1904)
- bindings: Replaces the
monado_device
entry for XR_EXT_hand_interaction
in bindings.json to refer to a new device name type. (!1915)
- cmake: Split the CMakeLists.txt out into the sub-directories of each library, making each much more manageable when editing. (!1328)
- d3d: Add D3D helpers used by various parts of Monado, mostly the D3D11 client compositor. (!943, !1326, !1302, !1337)
- d3d: Add a D3D12 allocator, certain use-cases in D3D12 requires the resource to be allocated directly in D3D12, like multi-gpu. (!1920)
- d3d: Add copy D3D12 helper functions, needed to work around issues with layout on small textures on NVidia hardware. (!1920)
- external/slam: Update to 7.0.0 with RESET_TRACKER_STATE and ignore masks (!1937)
- h/mercury: Add min detection confidence option (!1937)
- introduce VIT loader to load a given VIT system, implement the VIT interface in slam tracker and remove the unused MatFrame class. only turn on the SLAM feature on Linux. (!2058, !2125, !2144)
- m/3dof: Add assert to catch time traveling drivers. (!717)
- math: Fixes for M_PI on Windows. (!735)
- math: Add
math_map_ranges
function, does the same thing as Arduino's map
. (!839)
- math: Add clock_offset utility to estimate offset between clocks (!1590)
- math: Minor tidy of
m_api.h
, m_base.cpp
and CMakeLists.txt
. (!1978)
- math: Add function to calculate a vulkan infinite reverse projection matrix. (!1978)
- math: Refactor m_clock_offset_a2b to avoid precision problems. (!2106)
- math: Refactor apply_relation to handle valid/tracked flags more like OpenXR. (!2186)
- misc: Fix double free when shrinking typed array to zero. (!2069)
- ogl: Add various helper functions, and tidy code a bit. (!1957)
- os: Rename threading functions to more clearly state that it both stops and waits on the thread. Also add asserts to make sure primitives have been initialized. (!1320, !1324, !1329, !1353)
- os/threading: Add mutex recursive wrapper. (!1933)
- os/threading: fix assert in debug build (!2127)
- os/time: Use timePeriod[Begin|End] when sleeping in precise sleeper (!1585)
- pacing: Add minimum app margin, also add
U_PACING_APP_MIN_MARGIN_MS
env var. (!1961)
- system_helpers: Make system devices easier to embed. (!1977)
- t/calibration: Add support for RGB image streams, also add a special sink converter helper to handle this case. (!859)
- t/calibration: Make it possible to select number distortion parameters. (!859)
- t/calibration: Add support for findChessboardCornersSB in calibration code. (!911)
- t/cli: Add monado-cli slambatch command for evaluation of SLAM datasets in batch. (!1172)
- t/euroc: Add EuRoC dataset recorder for saving camera and IMU streams to disk. (!1017)
- t/euroc: Allow euroc recorder to start and stop recordings in the same session (!1937)
- t/file: Migrate calibration file format to JSON. (!1005)
- t/fm: Add simple FrameMat that wraps a cv::Mat, this allows us to easily pass cv::Mat's around without the C code needing to know about OpenCV. (!825)
- t/hsv: Add tracing support for timing info. (!858)
- t/psvr: Fix warnings found with GCC 13. (!1921)
- t/slam: Initial external SLAM tracking support, working with fork of Kimera- VIO. (!889)
- t/slam: Add Basalt as a possible external SLAM system. (!941)
- t/slam: Update SLAM interface to support dynamically query external systems for special features. (!1016)
- t/slam: Add naive prediction to the SLAM tracker. (!1060)
- t/slam: Add trajectory filters and use IMU for prediction in the SLAM tracker. (!1067)
- t/slam: Add tools for performance and accuracy evaluation of the SLAM tracker. (!1152)
- t/slam: Support calibration info from drivers and sending it to the external SLAM system. (!1334)
- t/slam: Add basic tracing support. (!1796)
- t/slam: Add reset state button (!1937)
- t/slam: Turn timestamp asserts into warnings (!1937)
- t/slam: Use locks for CSV writers (!2000)
- t/slam: Update to VIT 1.0.1 with small usage improvements (!2131)
- t/slam: Send hand tracking masks to VIT system (!2131)
- tracking: Tidy and improve
xrt::auxiliary::tracking::FrameMat
. (!2056)
- u/aeg: Implement module for auto exposure and gain to help with SLAM tracking. (!1291)
- u/builder: Introduce new
u_builder
to make it easier to implement the interface function xrt_builder::open_system
. Allowing lots of de-duplication of code that was exactly the same in most builders. (!2057, !2072)
- u/builders: Refactor space overseer creation helper. (!1987)
- u/config_json: Add functionality to save/load gui state to file. (!1074)
- u/debug: Refactor code to be prettier and expose more conversion functions. (!1874)
- u/debug: Use system properties on Android for the debug settings, properties are prefixed with
debug.xrt.
so the property for XRT_LOG
is debug.xrt.XRT_LOG
. (!1874)
- u/debug_gui: Small refactor of loop and and tracing. (!1814)
- u/device: Added
u_device_2d_extents
and u_setup_2d_extents_split_side_by_side
, this is hopefully to eliminate confusion: the FOV you had to give to u_device_split_side_by_side
was a placeholder value, but some people thought it was the actual headset's FOV. (!839)
- u/device: Improve comment on u_device_get_view_poses. (!2023)
- u/device: Add default, no-op and not implemented function helpers. (!2039)
- u/device: Added new function
u_device_setup_one_eye
. (!2086)
- u/fifo: Doc comments, and small improvements to the C++ wrapper helper. (!1810)
- u/file: Search more paths, and actually test if a directory is there, for hand-tracking models. (!1831)
- u/file: Changed file open mode from "r" to "rb" to ensure binary mode is used for reading the file. This resolves an issue where file size and read size were inconsistent on Windows platform. (!2164)
- u/frame_times_widget: Optimize FPS calculation using precomputed frame timings. (!2068)
- u/generic_callbacks: Fix missing include for generic callback structure. (!1931)
- u/json: Add cJSON C++ wrapper. (!957)
- u/linux: Add code that raises the priority of the calling thread to realtime, requires the process to be run as root or have
CAP_SYS_NICE
set. (!1881)
- u/live_stats: Add helper to do live statistics on nano-seconds durations. (!2108)
- u/logging: Fix the first message always getting printed due to un-initialized variable. (!735)
- u/logging: Add logging sink to intercept log messages. (!1171)
- u/logging: Log to stderr in Windows. (!1475)
- u/logging: Truncate the output of hexdump at a safer limit (16MB). (!1865, !1879)
- u/logging: Refactor printing to be safer using truncating helpers, and increase the reuse of code. (!1865, !1865, !1892)
- u/logging: Make the CMake variable only be true on Linux. (!1865)
- u/logging: Add json logging, it can be enabled via the XRT_JSON_LOG env var. (!1898)
- u/metrics: Add code that allows writing various metrics information that can then be processed for a better view into the run. (!1512, !1521, !1579)
- u/native_images_debug: Add
u_native_images_debug
and u_swapchain_debug
to debug xrt_image_native
and xrt_swapchain_native
content. (!2103)
- u/pacing: Add frame timing helper code designed to use Vulkan display timing extensions to get proper frame timing in the compositor. (!697)
- u/pacing: Renames and improvements for frame pacing (formerly known as render and display timing) code and APIs. (!1081, !1104)
- u/pacing: Make present_to_display_offset_ns more clear by changing the name. (!1271)
- u/pacing: Predict present time and then calculate display time in fake pacer. (!1271)
- u/pacing: Make the comp time be at least 2ms in fake pacer, this is a more conservative margin for when the fake pacer is used for real hardware. (!1271)
- u/pacing: Add vblank timing function for display control, lets the fake pacer properly synchronise with hardware. (!1271)
- u/pacing: Add variable tracking to fake pacer. (!1801)
- u/pacing: General improvements. (!1809)
- u/pacing: Add minimum compositor frame time. (!1809)
- u/pacing: Add minimum application frame time. (!1809, !1809, !1828)
- u/pacing: Add variable tracking integration to app pacer. (!1828)
- u/pacing: Add env variable to set present to display offset. (!1828)
- u/pacing: Add option U_PACING_APP_USE_MIN_FRAME_PERIOD to allow selecting the minimal frame period instead of calculated for pacing. The app is still being throttled, it's just different. (!2076, !2084)
- u/pacing: Split submit timing into begin and end. (!2108)
- u/pacing: Keep track of frame times in fake pacer. (!2108)
- u/pacing: Do live stats tracking in fake pacer. (!2108)
- u/pp: Pretty print support for new
xrt_input_name
entry, XRT_INPUT_GENERIC_PALM_POSE
for XR_EXT_palm_pose
. (!1896)
- u/pp: Tidy and add more entries to enum printing functions. (!2092)
- u/pp: Add
xrt_reference_space_type
printing. (!2092)
- u/session: Add helper to implement
xrt_session
. (!2062)
- u/sink: Add tracing support to sink functions. (!858)
- u/sink: Add a combiner sink that combines two frames into a stereo frame (!934)
- u/space: Add local_floor to legacy helper function, making most builders support it automatically. (!2018)
- u/space: Fix build warning because of non-void function not returning (!2131)
- u/space_overseer: Make it possible set root as unbounded. (!1621)
- u/space_overseer: Add support for reference space usage. (!2048)
- u/space_overseer: Implement recentering for supported setups. (!2055)
- u/space_overseer: Use broadcast event sink for reference space changes, generates
xrt_session_event_reference_space_change_pending
events. (!2081)
- u/space_overseer: Notify the device about reference space usage. (!2091)
- u/system: Add helper to implement
xrt_system
. (!2062)
- u/system_helpers: Refactor hand-tracker helper getters. (!1987)
- u/system_helpers: Add static system device helper. (!1992)
- u/time: Add helper comparison functions. (!721)
- u/time: Add helper to go from milliseconds to nanoseconds. (!1809)
- u/timing: A rather large refactor that turns makes the rendering timing helper be more like the frame timing helper. This also makes the rendering timing adjust the frame timing of the app so that latency is reduced. (!721)
- u/trace_marker: Add trace marker support code, this code uses the Linux trace_marker kernel support to enable Monado to trace both function calls and other async events. (!697)
- u/trace_marker: Switch from homegrown tracing code to using Percetto/Perfetto. (!811, !840)
- u/trace_marker: Add sink categories. (!858)
- u/truncate_printf: Add helpers that have the semantics we want for the printf functions [vn|sn]printf. (!1865, !1865, !1923)
- u/u_config_json: Added new parameter
uint32_t *out_view_count
to the function u_config_json_get_remote_settings
to provide the ability to retrieve the view count from the remote settings. (!2086)
- u/u_distortion: Modified the function
u_distortion_cardboard_calculate
to accept a new parameter struct xrt_device *xdev
for retrieving the view_count
from the device. This view_count
is then used for parameter settings, enhancing the functionality and flexibility of the distortion calculation. (!2086)
- u/var: Improve documentation. (!1827)
- u/var: Improve documentation and make
suffix_with_number
argument clearer. (!1902)
- u/var: Refactor code to make it easier to search for number objects. (!1902)
- u/var: Add
u_native_images_debug
as a tracked variable. (!2103)
u/var: Protect tracker access with a mutex.
Solves a race condition that may crash the debug gui if objects are removed using u_var_remove_root. (!2177)
- u/windows: Add helper code for various bits of Windows related things, like formatting error numbers into error messages. Also functions related to cpu priority and privilege granting of rights. (!1584)
- util: Add code to get a limited unique id, it's a simple 64 bit atomic counter. (!1957)
- vive: Add shared bindings that are used by HTC Vive and Valve Index driver & Lighthouse tracking using libsurvive, also add mappings/bindings from the Touch controller to the Index Controller so games only providing Touch bindings works on Index controllers. (!1265)
- vive: Tidy the files a lot, break the calibration getters out into own file. (!1792)
- vive: Move the view fov calculation into the config file helper. (!1792)
- vive: Add hardcoded tweaks for view FoV values. (!1792)
- vive: Add support for Gen 3.0 and Tundra trackers. (!1860)
- vive: Refactor documentation and move VID and PID defines here. (!1862)
- vive: Add support for HTC Vive Pro 2 (!1911)
- vive: Add C++ guards to poses header. (!1929)
- vive: Fix use after free, probably left over since refactor. (!1960)
- vive: Add builder helper to allow sharing of estimation code. (!2008)
- vk: Add fence import function. (!721)
- vk: Add more functions to vk_bundle struct. (!841)
- vk: Make it possible to create a compute only queue. (!841)
- vk: Refactor and tidy extension handling. (!841)
- vk: Add support for VK_EXT_robustness2 (!841)
- vk: Add code to handle optional device features. (!841)
- vk: Add helpers to manage command buffers and create various state objects. (!982)
- vk: Refactor and rename various function related to compositor swapchain images and their flags, these changes makes it clear it's only used for these images and image views. (!1128)
- vk: Check which fence types can be imported and exported on the device. (!1142)
- vk: Add functions to create, submit and then export a fence native handle. (!1142)
- vk: Add
XRT_CHECK_RESULT
to sync functions. (!1166)
- vk: Refactor out bundle functions into a file of their own. (!1203)
- vk: Further separate printing functions out as well into their own file. (!1203, !1203, !1942)
- vk: Print out information about the opened device. (!1270)
- vk: Make
VK_KHR_external_[fence|semaphore]_fd
optional, this is helpful for CI where only lavapipe can be used which does not support those extensions. (!1270)
- vk: Relax the compute-only queue search to fall back to any queue that supports compute. (!1404)
- vk: Add new command buffer helpers and
vk_cmd_pool
helper class. (!1748)
- vk: Remove the global command buffer pool. (!1748)
- vk: Refactor
vk_csci_get_image_usage_flags
to not always set the sampled bit and other bits that where always set. Also tidy with a nice define for checking. (!1763)
- vk: Add new cmd buffer helper file
vk_cmd.[h|c]
, these does not use the global command pool. (!1766)
- vk: Add copy and blit command buffer writer helpers to
vk_cmd.[h|c]
. (!1766)
- vk: Add vk_surface_info helper for VkSurfaceKHR information gathering. (!1801)
- vk: Expand readback pool to be able to set Vulkan format. (!1820)
- vk: Add vkCmdPushConstants. (!1820)
- vk: Add helper function to name Vulkan objects using VK_EXT_debug_marker, useful when debugging validation errors. (!1877)
- vk: Name all fence objects with helpers. (!1877)
- vk: Add two call helper for getting instance extensions, and use it. (!1885)
- vk: Add function to check required instance extensions. (!1885, !1885, !1973)
- vk: Add and use enumeration helpers. (!1894)
- vk: Add more enumeration helpers. (!1940)
- vk: Add string return function for VkSharingMode. (!1940)
- vk: Add string return functions for bitfield values, also improving the old bitfield string functions. The new way lets the caller deal with unknown bits. (!1940)
- vk: Print more VkSurface info. (!1940)
- vk: Add printers for VkSurface and VkSwapchain create info structs. (!1940)
- vk: When listing GPUs also write out device type. (!1942)
- vk: Make sure to print the first GPU as well when selecting physical device. (!1942)
- vk: Init vk bundle with shaderImageGatherExtended enabled if supported. (!1959)
- vk: Use VK_CHK_WITH_RET instead of vk_check_error. (!1971)
- vk: Rename and add more variants of return checking defines, making the define now be all caps so it's easier to see if it effects flow control. (!1971, !1971, !1417)
- vk: Add
vk_print_result
helper, used in return checking defines but can also be used outside of them. (!1971, !1971, !2050)
- vk: Add two mini define helpers in their own header (
D
and DF
) which was redefined in multiple places in the source code. Keep in own header to not clutter namespace. (!1971)
- vk: Add debug inserting helper function and use it for inserting renderdoc frame delimiter in vk client (!2005)
- vk: Change the naming function to use the extension
VK_EXT_debug_utils
, which has been included in core with 1.3, instead of the old VK_EXT_debug_marker
extension. Also make the naming function type safe. (!2006, !2014)
- vk: Fix swapchain leak on Android due to it having different Vulkan import behavior. (!2042)
- vk: Use formats list from xrt_swapchain_create_info in create_image. (!2049, !2100)
- vk: Pass create mutable format bit if usage flag is set. (!2100)
- vk: Return
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
for XRT_SWAPCHAIN_USAGE_UNORDERED_ACCESS
from vk_csci_get_image_usage_flags
. (!2103)
- vk: Add enumerators for two surface properties. (!2104)
- vk: Add vk_enumerate_swapchain_images. (!2104)
- vk: Tidy surface info function. (!2104)
- Documentation
- Add documentation for how to write changelogs in the Code Style and Conventions page. (!1872, !2120)
- Add documentation category in changelog documentation. (!1878)
- Add doxygen-awesome theme (!1883, !1888)
- Don't build documentation by default, it is fairly heavy for end users. Also makes the CI scripts cleaner as they don't need to disabled it everywhere. (!1891)
- README: Add Debian/Ubuntu package for libudev. (!1918)
- README: Clarify Vulkan SDK requirement on Windows. (!1919)
- README: Add some Debian/Ubuntu packages. (!1923)
- comments: Lots of smaller documentation comment fixes. (!1953, !2037, !2070, !2085)
- Misc. Features
- More improvements to the Android port. (!676, !703, !783, !808, !817, !820, !918, !920, !942, !1020, !1178, !1341, !1357, !1369, !1372, !1377, !1385)
- imgui: Add ImPlot demo window. (!692)
- Implement tracking overrides using wrapper devices and add a tracking override configuration gui. (!695)
- external/glad: Add EGL extension EGL_KHR_no_config_context. (!705)
- a/gst: Add a small and fairly naive framework for integrating gstreamer pipelines into Monado pipelines. Enough to be able to push frames into it and use various encoder elements. (!715, !1966)
- More work on the Windows port: fix timing, waiting, sleeping, handling the message queue. (!739, !743, !1322)
- Add JSON Schema for config files. (!785, #82)
- For code that is implemented in C++, note that the default standard mode is now C++17 across all platforms and modules, instead of a mix of 14 and 17 like before. The CI remains the decider of what functionality is available, as it contains the oldest distribution we support (Debian Buster). (!809)
- Add
cmake-format
config files and scripts/format-cmake.sh
to keep our build system tidy. (!984, #72, !1342)
- scripts: Add Include-What-You-Use (IWYU) helper scripts. (!1229)
- gui: Use a single imgui.ini file from the config directory (!1290)
- t/ctl: Use common client connection connect code. (!1875)
- ext/openxr: Update headers to 1.0.28. (!1900)
- m/vec2: Add float array helper (!1928)
- m/vec3: Add float array helper (!1928)
- external: Update android-jni-wrap, add additional wrapped methods. (!1939, !1963, !2176)
- t/sdl_test: Use new OpenGL helpers to import swapchain images. (!1957)
- ext/imgui: Add helper to draw a image/texture with a cleared background color. (!1957)
- t/common: Refactor the builders so it will be easier to add hotswap support. (!1987)
- t/common: Add support for new dynamic device roles. (!1992, !1992, !1999, #296, !2020)
- t/sdl_test: Add support for new dynamic device roles. (!1992)
- t/cli: Add support for new dynamic device roles. (!1992)
- t/common: Refactor lighthouse builder to use vive_builder helper. (!2008)
- external/jni: Add argument to specify display mode id for surface creation. (!2010)
- t/libmonado: Add support for dynamic device roles. (!2013)
- t/service-lib: Increase the duration of the starting timeout for the IPC. (!2015)
- ci: Add Alpine Linux build. (!2031)
- Introduce
.mailmap
file. (!2041)
- t/ctl: Support recentering of local spaces. (!2055)
- t/libmonado: Support recentering of local spaces. (!2055)
- introduce visual-inertial tracking interface header and remove the old slam tracker interface remove XRT_HAVE_BASALT and XRT_HAVE_KIMERA from CMake (!2058)
- t/common: Add support for
xrt_system
and xrt_session
. (!2062)
- t/cli: Add support for
xrt_system
. (!2062)
- t/sdl_test: Add support for
xrt_system
and xrt_session
, also remove old events code. (!2062)
- ext/openxr: Bump OpenXR headers to 1.0.32 (!2063, !2069)
- t/common: Implement SteamVR builder. (!2077)
- t/cli: Add new
info
command that prints information about the system, this is for end-user reports of failurs to start monado-service
. (!2094)
- t/libmonado: Support getting serial number from the device. (!2099)
- ext/openxr: Bump OpenXR headers to 1.0.33 (!2111)
- cmake: remove unused ffmpeg dependency (!2122)
- ext/openxr: Bump OpenXR headers to 1.0.34 (!2148)
- Adds Nix flake files so that people that use the nix package manager can have an instant Monado development environment. (!2152)
- In
flake.nix
and flake.lock
, updates nixpkgs
to the version where the missing dependency was added. (!2184)
- Misc. Fixes
- Ensure we are always initializing our mutexes. (!737)
- Make config file reading more robust. (!785)
- Move C++-only functionality into the newly-conventional namespaces. (!810)
- Allow OpenGL to be found on *nix without requiring GLX, which should allow a Wayland-only build. (!963, #132)
- cmake: Build system will now error out, rather than silently disable the option, if you specifically enable an option whose dependencies are unavailable. (!1262)
- cmake: Build system option
XRT_HAVE_SLAM
has been renamed to XRT_FEATURE_SLAM
to more accurately describe it, with corresponding move from xrt_config_have.h
to xrt_config_build.h
. (!1262)
- Fix build issue with Wayland on some distributions. (!1396, #175)
- Update vendored Catch2 to 2.13.10 to fix build issue. (!1561, #221)
- t/sdl_test: Compile as UTF-8 to fix MSVC warning. (!1816)
- scripts: Add regex based ignores for codespell, needed because the ignore words list isn't properely case sensitive. (!1861)
- Various small warning fixes all over the codebase. (!1869, !2126)
- Various spelling fixes all over the codebase. (!1871)
- cmake: Handle multiple include of compiler flags. (!1882)
- ci: Miscellaneous fixes, improvements, and updates. (!1886, !2029)
- ext/oxr: Adds missing headers for unpublished monado extensions:
XR_MNDX_ball_on_a_stick_controller
and XR_MNDX_hydra
. (!1890)
- t/ctl: Use correct ipc call for toggling client I/O. (!1909)
- t/common: Make it possible to build the RGB builder without PSVR driver. (!1918)
- h/mercury: Fix warnings found with GCC 13. (!1921)
- t/common: Fix warnings found with GCC 13. (!1921)
- t/common: Fix building the Lighthouse builder without the Vive driver. (!1922)
- cmake: Fix GetGitRevisionDescription cmake module for MSys (!1944)
- t/sdl_test: sdl-test needs OpenGL4.5 (!1945)
- misc: Various NFC format fixes and a removal of unused define. (!1946)
- t/android_common: Specify mutability flag for PendingIntent object, required for Android S+ (version 31 and above). (!1948)
- t/common: Fix creation on no driver available, only say we can create a system if we have a driver in legacy builder. (!1996)
- gitignore: Ignore pyenv local python version file (!2002)
- gradle: Migrate deprecated gradle's flavorDimension and buildToolsVersion (!2002)
- cmake: Fix build with SDL2 on Alpine Linux. (!2031)
- cmake: Suppress warnings from external headers. (!2037)
- cmake: Update CMake modules from upstream repositories. (!2040, !2041, !2045)
- Update outdated URLs, email addresses, and names. (!2041)
- t/common: Use new
u_builder
helper in most builder. (!2057)
- vcpkg: Remove SDL "base" feature. It has been removed upstream, see MR. Monado builds on Windows and the debug gui works (
XRT_DEBUG_GUI=1
). (!2065)
- ci: refresh container images (!2122)
- ci: use proclamation 2.0.0 (!2123)
- Update gitignore to exclude files intentionally in the repo. (!2137, #261)
- cmake: add wayland-client include directory to comp_main target (!2141)
- Fix several minor bindings and input profile issues. (!2190)
Monado 21.0.0 (2021-01-28)
- Major changes
- Adds a initial SteamVR driver state tracker and target that produces a SteamVR plugin that enables any Monado hardware driver to be used in SteamVR. This is the initial upstreaming of this code and has some limitations, like only having working input when emulating a Index controller. (!583)
- XRT Interface
- Add
xrt_binding_profile
struct, related pair structs and fields on xrt_device
to allow to move the static rebinding of inputs and outputs into device drivers. This makes it easier to get a overview in the driver itself which bindings it can bind to. (!587)
- xrt: Generate bindings for Monado and SteamVR from json. (!638)
- xrt: Introduce
xrt_system_compositor
, it is basically a analogous to XrSystemID
but instead of being a fully fledged xrt_system this is only the compositor part of it. Also fold the prepare_session
function into the create native compositor function to simplify the interface. (!652)
- Expose more information on the frameservers, like product, manufacturer and serial. (!665)
- Add
XRT_FORMAT_BAYER_GR8
format. (!665)
- State Trackers
- st/oxr: Add OXR_FRAME_TIMING_SPEW for basic frame timing debug output. (!591)
- OpenXR: Make sure to restore old EGL display/context/drawables when creating a client EGL compositor. (!602)
- GUI: Expand with support for controlling the remote driver hand tracking. (!604)
- st/oxr: Implement XR_KHR_vulkan_enable2 (!633)
- st/oxr: Add OXR_TRACKING_ORIGIN_OFFSET_{X,Y,Z} env variables as a quick way to tweak 6dof tracking origins. (!634)
- OpenXR: Be more relaxed with Quat validation, spec says within 1% of unit length, normalize if not within float epsilon. (!659)
- Drivers
- ns: Fix memory leak in math code. (!564)
- psvr: Rename some variables for better readability. (!597)
- openhmd: Fix viewport calculation of rotated displays. (!600)
- remote: Add support for simulated hand tracking, this is based on the curl model that is used by the Valve Index Controller. (!604)
- android: Acquire device display metrics from system. (!611)
- openhmd: Rotate DK2 display correctly. (!628)
- d/psmv: The motor on zcmv1 does not rumble at amplitudes < 0.25. Linear rescale amplitude into [0.25, 1] range. (!636)
- v4l2: Expose more information through new fields in XRT interface. (!665)
- v4l2: Allocate more buffers when streaming data. (!665)
- IPC
- ipc: Port IPC to u_logging. (!601)
- ipc: Make OXR_DEBUG_GUI work with monado-service. (!622)
- Compositor
- comp: Add basic frame timing information to XRT_COMPOSITOR_LOG=trace. (!591)
- main: Refactor how the compositor interacts with targets, the goal is to enable the compositor to render to destinations that isn't backed by a
VkSwapchain
. Introduce comp_target
and remove comp_window
, also refactor vk_swapchain
to be a sub-class of comp_target
named comp_target_swapchain
, the window backends now sub class comp_target_swapchain
. (!599)
- Implement support for XR_KHR_composition_layer_equirect (equirect1). (!620, !624)
- comp: Improve thread safety. Resolve issues in mutlithreading CTS. (!645)
- main: Lower priority on sRGB format. This works around a bug in the OpenXR CTS and mirrors better what at least on other OpenXR runtime does. (!671)
- Helper Libraries
- os/time: Make timespec argument const. (!597)
- os/time: Add a Linux specific way to get the realtime clock (for RealSense). (!597)
- math: Make sure that we do not drop and positions in poses when the other pose has a non-valid position. (!603)
- aux/vk:
vk_create_device
now takes in a list of Vulkan device extensions. (!605)
- Port everything to u_logging. (!627)
- u/hand_tracking: Tweak finger curl model making it easier to grip ingame objects. (!635)
- math: Add math_quat_validate_within_1_percent function. (!659)
- u/sink: Add Bayer format converter. (!665)
- u/distortion: Improve both Vive and Index distortion by fixing polynomial math. (!666)
- u/distortion: Improve Index distortion and tidy code. While this touches the Vive distortion code all Vive headsets seems to have the center set to the same for each channel so doesn't help them. And Vive doesn't have the extra coefficient that the Index does so no help there either. (!667)
- Misc. Features
- Misc. Fixes
- steamvr: Support HMDs with rotated displays (!600)
Monado 0.4.1 (2020-11-04)
- State Trackers
- st/oxr: Fix for new conformance tests for xrWaitFrame, xrBeginFrame, xrEndFrame call order. Also fix OpenXR state transition logic depending on a synchronized frame loop. (!589, !590)
Monado 0.4.0 (2020-11-02)
- XRT Interface
- add
xrt_device_type
to xrt_device
to differentiate handed controllers from controllers that can be held in either hand. (!412)
- Rename functions and types that assumed the native graphics buffer handle type was an FD: in
auxiliary/vk/vk_helpers.{h,c}
vk_create_image_from_fd
-> vk_create_image_from_native
, in the XRT headers struct xrt_compositor_fd
-> xrt_compositor_native
(and method name changes from xrt_comp_fd_...
-> xrt_comp_native_...
), struct xrt_swapchain_fd
-> struct xrt_swapchain_native
, struct xrt_image_fd
-> struct xrt_image_native
, and corresponding parameter/member/variable name changes (e.g. struct xrt_swapchain_fd *xscfd
becomes struct xrt_swapchain_native *xscn
). (!426, !428)
- Make some fields on
xrt_gl_swapchain
and xrt_vk_swapchain
private moving them into the client compositor code instead of exposing them. (!444)
- Make
xrt_compositor::create_swapchain
return xrt_result_t instead of the swapchain, this makes the methods on xrt_compositor
more uniform. (!444)
- Add the method
xrt_compositor::import_swapchain
allowing a state tracker to create a swapchain from a set of pre-allocated images. Uses the same xrt_swapchain_create_info
as xrt_compositor::create_swapchain
. (!444)
- Make
xrt_swapchain_create_flags
swapchain static image bit match OpenXR. (!454)
- Add
XRT_SWAPCHAIN_USAGE_INPUT_ATTACHMENT
flag to xrt_swapchain_usage_bits
so that a client can create a Vulkan swapchain that can be used as input attachment. (!459)
- Remove the
flip_y
parameter to the creation of the native compositor, this is now a per layer thing. (!461)
- Add
xrt_compositor_info
struct that allows the compositor carry information to about its capabilities and its recommended values. Not everything is hooked up at the moment. (!461)
- Add defines for underlying handle types. (!469)
- Add a native handle type for graphics sync primitives (currently file descriptors on all platforms). (!469)
- Add a whole bunch of structs and functions for all of the different layers in OpenXR. The depth layer information only applies to the stereo projection so make a special stereo projection with depth layer. (!476)
- Add
xrt_image_native_allocator
as a friend to the compositor interface. This simple interface is intended to be used by the IPC interface to allocate xrt_image_native
on the client side and send those to the service. (!478)
- Re-arrange and document
xrt_image_native
, making the size
field optional. (!493)
- Add const to all compositor arguments that are info structs, making the interface safer and more clear. Also add
max_layers
field to the xrt_compositor_info
struct. (!501)
- Add
xrt_space_graph
struct for calculating space relations. This struct and accompanying makes it easier to reason about space relations than just functions operating directly on xrt_space_relation
. The code base is changed to use these new functions. (!519)
- Remove the
linear_acceleration
and angular_acceleration
fields from the xrt_space_relation
struct, these were not used in the codebase and are not exposed in the OpenXR API. They can easily be added back should they be required again by code or a future feature. Drivers are free to retain this information internally, but no longer expose it. (!519)
- Remove the
out_timestamp
argument to the xrt_device::get_tracked_pose
function, it's not needed anymore and the devices can do prediction better as it knows more about its tracking system the the state tracker. (!521)
Replace mesh generator with compute_distortion
function on xrt_device
. This is used to both make it possible to use mesh shaders for devices and to provide compatibility with SteamVR which requires a compute_distortion
function as well.
The compositor uses this function automatically to create a mesh and uses mesh distortion for all drivers. The function compute_distortion
default implementations for none
, panotools
and vive
distortion models are provided in util. (!536)
- Add a simple curl value based finger tracking model and use it for vive and survive controllers. (!555)
- State Trackers
- OpenXR: Add support for attaching Quad layers to action sapces. (!437)
- OpenXR: Use initial head pose as origin for local space. (!443)
- OpenXR: Minor fixes for various bits of code: copy-typo in device assignment code; better stub for the unimplemented function
xrEnumerateBoundSourcesForAction
; better error message on internal error in xrGetCurrentInteractionProfile
. (!448)
- OpenXR: Make the
xrGetCurrentInteractionProfile
conformance tests pass, needed to implement better error checking as well as generating XrEventDataInteractionProfileChanged
events to the client. (!448)
- OpenXR: Centralize all sub-action path iteration in some x-macros. (!449, !456)
- OpenXR: Improve the validation in the API function for
xrGetInputSourceLocalizedName
. (!451)
- OpenXR: Implement the function
xrEnumerateBoundSourcesForAction
, currently we only bind one input per top level user path and it's easy to track this. (!451)
- OpenXR: Properly handle more than one input source being bound to the same action according to the combination rules of the specification. (!452)
- OpenXR: Fix multiplicity of bounds paths per action - there's one per input/output. (!456)
- OpenXR: Implement the MND_swapchain_usage_input_attachment_bit extension. (!459)
- OpenXR: Refactor the native compositor handling a bit, this creates the compositor earlier then before. This allows us to get the viewport information from it. (!461)
- OpenXR: Implement action set priorities and fix remaining action conformance tests. (!462)
- st/oxr: Fix crash when calling
xrPollEvents
when headless mode is selected. (!475)
- OpenXR: Add stub functions and support plumbing for a lot of layer extensions. (!476)
- OpenXR: Be sure to return
XR_ERROR_FEATURE_UNSUPPORTED
if the protected content bit is set and the compositor does not support it. (!481)
- OpenXR: Update to 1.0.11 and start returning the new
XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING
code added in this release. (!482)
- OpenXR: Enable the
XR_KHR_android_create_instance
extension. (!492)
- OpenXR: Add support for creating swapchains with depth formats and submitting depth layers. The depth layers are passed through to the compositor, but are not used yet. (!498)
- OpenXR: For pose actions the any path (
XR_NULL_PATH
) needs to be special cased, essentially turning into a separate action sub path, that is assigned at binding time. (!510)
- OpenXR: More correctly implement
xrGetInputSourceLocalizedName
allowing apps to more accurently tell the user which input to use. (!532)
- OpenXR: Pass through equirect layer data to the compositor. (!566)
- Drivers
- psvr: We were sending in the wrong type of time to the 3DOF fusion code, switch to nanoseconds instead of fractions of seconds. (!474)
- rs: Make the pose getting from the T265 be threaded. Before we where getting the pose from the update input function, this would cause some the main thread to block and would therefore cause jitter in the rendering. (!486)
- survive: Add lighthouse tracking system type hydra: Add lighthouse tracking system type (!489)
- rs: Add slam tracking system type northstar: Use tracking system from tracker (e.g. rs) if available. (!494)
- psmv: Introduce proper grip and aim poses, correctly rotate the grip pose to follow the spec more closely. The aim poses replaces the previous ball tip pose that was used before for aim. (!509)
- survive: Implement haptic feedback. (!557)
- dummy: Tidy the code a bit and switch over to the new logging API. (!572, !573)
- psvr: Switch to the new logging API. (!573)
- Add initial "Cardboard" phone-holder driver for Android. (!581)
- IPC
- Generalize handling of native-platform handles in IPC code, allow bi- directional handle transfer, and de-duplicate code between server and client. (!413, !427)
- generation: Fix handling 'in_handle' by adding a extra sync round-trip, this might be solvable by using
SOCK_SEQPACKET
. (!444)
- Implement the
xrt_compositor::import_swapchain
function, uses the earlier in_handle
work. (!444)
- proto: Transport the
xrt_compositor_info
over the wire so that the client can get the needed information. (!461)
- client: Implement the usage of the
xrt_image_native_allocator
, currently not used. But it is needed for platforms where for various reasons the allocation must happen on the client side. (!478)
- client: Add a "loopback" image allocator, this code allocates a swapchain from the service then imports that back to the service as if it was imported. This tests both the import code and the image allocator code. (!478)
- ipc: Allow sending zero handles as a reply, at least the Linux fd handling code allows this. (!491)
- Use a native AHardwareBuffer allocator on the client side when building for recent-enough Android. (!493)
- ipc: Add functionality to disable a device input via the
monado-ctl
utility, this allows us to pass the conformance tests that requires the runtime to turn off a device. (!511)
- Compositor
- compositor: Add support for alpha blending with premultiplied alpha. (!425)
- compositor: Implement subimage rectangle rendering for quad layers. (!433)
- compositor: Enable subimage rectangle rendering for projection layers. (!436)
- compositor: Fix printing of current connected displays on nvidia when no whitelisted display is found. (!477)
- compositor: Add env var to temporarily add display string to nvidia whitelist. (!477)
- compositor and clients: Use a generic typedef to represent the platform- specific graphics buffer, allowing use of
AHardwareBuffer
on recent Android. (!479)
- compositor: Check the protected content bit, and return a non-success code if it's set. Supporting this is optional in OpenXR, but lack of support must be reported to the application. (!481)
- compositor: Implement cylinder layers. (!495)
- main: Set the maximum layers supported to 16, we technically support more than 16, but things get out of hand if multiple clients are running and all are using max layers. (!501)
- main: Add code to check that a format is supported by the GPU before exposing. (!502)
- compositor: Remove panotools and vive shaders from compositor. (!538)
- Initial work on a port of the compositor to Android. (!547)
- render: Implement equirect layer rendering. (!566)
- main: Fix leaks of sampler objects that was introduced in !566. (!571)
- Helper Libraries
- u/vk: Remove unused vk_image struct, this is later recreated for the image allocator code. (!444)
- u/vk: Add a new image allocate helper, this is used by the main compositor to create, export and import swapchain images. (!444)
- u/vk: Rename
vk_create_semaphore_from_fd
to vk_create_semaphore_from_native
(!469)
- aux/android: New Android utility library added. (!493, !547, !581)
- aux/ogl: Add a function to compute the texture target and binding enum for a given swapchain image creation info. (!493)
- util: Tidy hand tracking header. (!574)
- math: Fix doxygen warnings in vector headers. (!574)
- Misc. Features
- Support building in-process Monado with meson. (!421)
- Allow building some components without Vulkan. Vulkan is still required for the compositor and therefore the OpenXR runtime target. (!429)
- Add an OpenXR Android target: an APK which provides an "About" activity and eventually, an OpenXR runtime. (!574, !581)
- Misc. Fixes
Monado 0.3.0 (2020-07-10)
- Major changes
- Centralise the logging functionality in Monado to a single util helper. Previously most of our logging was done via fprints and gated behind booleans, now there are common functions to call and a predefined set of levels. (!408, !409)
- XRT Interface
- compositor: Remove the
array_size
field from the struct, this was the only state tracker supplied value that was on the struct, only have values that the compositor decides over on the struct. (!359)
- Improve Doxygen documentation of interfaces. Now the inheritance structure and implementation of interfaces is shown in the docs, and helper functions that call through function pointers are listed as "member functions", to help developers understand the internal structure of Monado better. (!365, !367)
- xrt: Add xrt_result_t return type to many compositor functions that previously had no way to indicate failure. (!369)
- compositor: Introduce
xrt_swapchain_create_info
simplifying the argument passing between various layers of the compositor stack and also simplify future refactoring projects. (!407)
- State Trackers
- OpenXR: Update headers to 1.0.9. (!358)
- OpenXR: Verify that the XrViewConfigurationType is supported by the system as required by the OpenXR spec in xrEnumerateEnvironmentBlendModes. (!359)
- OpenXR: Return the correct error code when verifying the sub action, if it is a valid sub action path but not given at action creation we should return
XR_ERROR_PATH_UNSUPPORTED
. (!359)
- OpenXR: Validate the subImage data for both projection and quad layers layers, refactor code out so it can be shared with the different types of layers. Need to track some state on the
oxr_swapchain
in order to do the checking. (!359)
- OpenXR: Correct the return error code for action and action set localized name validation. (!359)
- OpenXR: Correct the error messages on sub action paths errors. (!359)
- OpenXR: Track the name and localized name for both actions and action sets, that way we can make sure that there are no duplicates. This is required by the spec. (!359)
- OpenXR: Do better checking if action sets and actions have been attached to the session or not. (!359)
- OpenXR: Validate the arguments for
xrSuggestInteractionProfileBindings
better so that it follows the spec better. (!359)
- OpenXR: Rework the logging formatting of error messages, this makes it easier to read for the application developer. (!359)
- OpenXR: Correctly ensure that the application has called the required get graphics requirements function when creating a session. (!359)
- OpenXR: When a
XrSession
is destroyed purge the event queue of any events that references to it so that no events gets delivered to the applications with stales handles. (!359)
- OpenXR: Make the event queue thread safe, all done with a simple mutex that is not held for long at all. (!359)
- OpenXR: A major overhaul of the swapchain acquire, wait and release code. This makes it almost completely conformant with the spec. Tricky parts include that multiple images can be acquired, but only one can be waited on before being released. (!359)
- OpenXR: Enforce that static swapchains can only be acquired once, this is required by the spec and make sure that a image is only rendered to once, and allows the runtime to perform special optimizations on the image. (!359)
- OpenXR: Make the function
xrGetReferenceSpaceBoundsRect
at least conform to the spec without actually implementing it, currently we do not track bounds in Monado. (!359)
- OpenXR: Make the session state changes obey the specification. The code is fairly hair as is and should be improved at a later time. (!359)
- OpenXR: Use the correct XrPath for
/user/gamepad
while it sits in the users hand itsn't /user/hand/gamepad
as previously believed. (!359)
- OpenXR: Where used make sure we verify the view configuration type is a valid enum value, the code is setup so that we in the future can support new values via extensions easily. (!368)
- OpenXR: More correctly verify the interactive profile binding data, including the given interactive profile is correct and the binding point is valid. (!377)
- OpenXR: Transform input types in a somewhat flexible, composable way. Also, do conversion at sync time, and use the transformed values to evaluate if the input has changed, per the spec. (!379)
- OpenXR: Tidy the extensions generated by the script and order them according to extension prefix, starting with KHR, EXT, Vendor, KHRX, EXTX, VendorX. Also rename the
MND_ball_on_stick_controller
to MNDX_ball_on_a_stick_controller
. (!410)
- OpenXR: Fix overly attached action sets, which would appear to be attached to a session even after the session has been destroyed. Also tidy up comments and other logic surrounding this. (!411)
- Drivers
- psvr: Normalize the rotation to not trip up the client app when it gives the rotation back to
st/oxr
again. (!359)
- vive: Create vive_config module to isolate config code and avoid duplication between controller and headset code. vive: Probe for controllers in vive_proper interface. vive: Fix a bug where using the Vive Pro crashed Monado. vive: Fix a bug where the controller didn't parse JSON vectors correctly. vive: Move missing functions to and use u_json. (!405)
- vive: Add support for Gen1 and Gen2 Vive Trackers. (!406)
- vive: Port to new u_logging API. (!417)
- comp: Set a compositor window title. (!418)
- IPC
- server: Almost completely overhaul the handling of swapchain lifecycle including: correctly track which swapchains are alive; reuse ids; enforce the maximum number of swapchains; and destroy underlying swapchains when they are destroyed by the client. (!359)
- util: Make sure to not dereference NULL control messages, say in the case of the server failing to create a swapchain. Also add a whole bunch of paranoia when it comes to the alignment of the control message buffers. (!359)
- ipc: Return XR_ERROR_INSTANCE_LOST on IPC errors. (!369)
- Compositor
- main: Include
<math.h>
in layers renderer for missing tanf
function. (!358)
- swapchain: Give out the oldset image index when a image is acquired. This logic can be made better, but will work for the good case. (!359)
- swapchain: Close any FDs that are still valid, for instance the ipc server copies the FDs to the client. (!359)
- client: When we give a image fd to the either OpenGL or Vulkan it is consumed and cannot be reused. So make sure that it is set to an invalid fd value on the
xrt_image_fd
on the owning xrt_swapchain_fd
. (!359)
- main: We were alpha blending all layers previously, but now we support the layer flag that OpenXR gives us. We do this by using different
VkImageView
s with different component swizzles. (!394)
- layer_rendering: Use the visibility flags on quad to correctly show the layers in each eye. (!394)
- Helper Libraries
- os/threading: Include
xrt_compiler.h
to fix missing stdint types. (!358)
- util: Add a very simple fifo for indices, this is used to keep track of swapchain in order of age (oldness). (!359)
- util: Expand
u_hashset
to be able to automatically allocate a u_hashet_item
and insert it. (!359)
- Misc. Features
- build: Allow enabling inter-procedural optimization in CMake GUIs, if supported by platform and compiler. (!330)
- Misc. Fixes
Monado 0.2 (2020-05-29)
- Major changes
- Add support for a new service process. This process houses the hardware drivers and compositor. In order to do this, a whole new subsection of Monado called ipc was added. It lives in
src/xrt/ipc
and sits between the state trackers and the service hosting the drivers and compositor. (!295)
- Support optional systemd socket-activation: if not disabled at configure time,
monado-service
can be launched by systemd as a service with an associated socket. If the service is launched this way, it will use the systemd-created domain socket instead of creating its own. (If launched manually, it will still create its own as normal.) This allows optional auto-launching of the service when running a client (OpenXR) application. Associated systemd unit files are also included. (!306)
- XRT Interface
- Add a new settings interface for transporting camera settings, in
xrt/xrt_settings.h
. (!266)
- Make it possible to send JSON object to drivers when probing for devices. (!266)
- Added new
xrt_instance
object to be root object, a singleton that allows us to better swap out the whole stack underneath the state trackers. This is now implemented by the xrt_prober
code and used by the OpenXR state tracker. (!274)
- Remove the
struct timestate
argument from the struct xrt_device
interface. It should be easy to write a driver and the state tracker should be the one that tracks this state. It was mostly triggered by the out of process compositor work. (!280)
- Add the new format
XRT_FORMAT_UYVY422
to the interface and various parts of the code where it is needed to be supported, like the conversion functions and calibration code. Also rename the XRT_FORMAT_YUV422
to XRT_FORMAT_YUYV422
. (!283)
- Expose manufacturer and serial number in the prober interface, right now only for the video device probing. But this is the only thing that really requires this in order to tell different cameras apart. (!286)
- Add
XRT_CAST_PTR_TO_OXR_HANDLE
and XRT_CAST_OXR_HANDLE_TO_PTR
macros to perform warning-free conversion between pointers and OpenXR handles, even on 32-bit platforms. They should be used instead of raw casts. (!294)
- Remove declaration and implementations of
xrt_prober_create
: the minimal functionality previously performed there should now be moved to xrt_instance_create
. (!347)
- State Trackers
- gui: Fix compilation issue in
st/gui
when building without OpenCV. (#63, !256)
- OpenXR: Don't return struct with invalid type from
xrEnumerateViewConfigurationViews
. (!234)
- prober: Print more information from the prober when spewing. (!261)
- gui: Save camera and calibration data using new settings structs and format. (!266)
- prober: Load tracking config from json and use new settings struct. (!266)
- gui: Fix name not being shown when video device does not have any modes. (!269)
- gui: Remove old video test scene, never used and seemed to be broken. (!275)
- gui: Fix build when OpenCV is not available or disabled. (!292)
- OpenXR: Fix build when OpenGL is not enabled. (!292)
- OpenXR: Validate that we support the given
XR_ENVIRONMENT_BLEND_MODE
as according to the OpenXR spec. And better print the error messages. (!345)
- OpenXR: Validate given
displayTime
in xrEndFrame
as required by the spec. (!345)
- OpenXR: Validate internal state that we get from the compositor. (!345)
- OpenXR: Validate time better in xrConvertTimeToTimespecTimeKHR and add better error print. (!348)
- OpenXR: Correctly translate the
XrSwapchainCreateFlags
flags to xrt ones. (!349)
- OpenXR: In order to be able to correctly validate
XrPath
ids turn them into a atom and keep all created paths in a array. (!349)
- OpenXR: Give better error messages on invalid poses in quad layers instead of using the simple macro. (!350)
- OpenXR: Validate poses for project layer views, using the same expressive error messages as the quad layers. (!350)
- OpenXR: Translate the swapchain usage bits from OpenXR enums to Monado's internal enums. (!350)
- OpenXR: Report a spec following amount of maximum layers supported. (!354)
- OpenXR: Correctly reject invalid times given to
xrLocateSpace
. (!354)
- OpenXR: Correctly handle the space relation flag bits, some old hacked up code left over since Monado's first days have been removed. (!356)
- Drivers
- dd: Add a driver for the Google Daydream View controller. (!242)
- all: Use new pre-filter and 3-DoF filter in drivers. (!249)
- arduino: Added a Arduino based flexible input device driver, along with Arduino C++ code for it. (!251)
- psmv: Use all 6 measurements to compute acceleration bias, and port to new IMU prefilter. (!255)
- v4l2: Add special tweaks for the ELP camera. (!266)
- vive: Add basic 3DOF driver for Vive Wand Controller with full input support and Valve Index Controller with partial input support. (!281)
- psvr: Use a better 3dof fusion for the PSVR when no tracking is available. (!282)
- psvm: Move the led and rumble updating from the application facing update_inputs function to the internal thread instead. (!287)
- psmv: Fix failure to build from source on PPC. (!288, #69)
- Compositor
- main: Fix XCB memory leaks and correctly use XCB/Xlib interop. (!257)
- main: Shorten Vulkan initializers. (!259)
- main: Port XCB and direct mode back ends to plain C. (!262)
- main: Add support for Vive Pro, Valve Index, Oculus DK1, DK2 and CV1 to NVIDIA direct mode. (!263)
- client: Make sure that the number of images is decided by the fd compositor. (!270)
- main: Split RandR and NVIDIA direct mode window back ends. (!271)
- main: Improve synchronization and remove redundant vkDeviceWaitIdle calls. (!277)
- main: Delay the destruction of swapchains until a time where it is safe, this allows swapchains to be destroyed from other threads. (!278)
- client: Propegate the supported formats from the real compositor to the client ones. (!282)
- renderer: Change the idle images colour from bright white to grey. (!282)
- main: Add support for multiple projection layers. (!340)
- main: Implement quad layers. (!340)
- main: Only allocate one image for static swapchains. (!349)
- Helper Libraries
- tracking: Add image undistort/normalize cache mechanism, to avoid needing to remap every frame. (!255)
- tracking: Improve readability and documentation of IMU fusion class. (!255)
- u/file: Add file helpers to load files from config directory. (!266)
- u/json: Add bool getter function. (!266)
- tracking: Expose save function with non-hardcoded path for calibration data. (!266)
- tracking: Remove all path hardcoded calibration data loading and saving functions. (!266)
- threading: New helper functions and structs for doing threaded work, these are on a higher level then the one in os wrappers. (!278)
- threading: Fix missing
#
pragma once
in os/os_threading.h
. (!282)
- u/time: Temporarily disable the time skew in time state and used fixed offset instead to fix various time issues in
st/oxr
. Will be fixed properly later. (!348)
- math: Correctly validate quaternion using non-squared "length" instead of squared "length", certain combinations of elements would produce valid regular "length" but not valid squared ones. (!350)
- Misc. Features
- build: Refactor CMake build system to make static (not object) libraries and explicitly describe dependencies. (!233, !237, !238, !240)
- os/ble: Add utility functionality for accessing Bluetooth Low-Energy (Bluetooth LE or BLE) over D-Bus, in
os/os_ble.h
and os/os_ble_dbus.c
. (!242)
- util: Add some bit manipulation helper functions in
util/u_bitwise.c
and util/u_bitwise.c
. (!242)
- tracking: Make stereo_camera_calibration reference counted, and have the prober, not the calibration, call the save function. (!245)
- math: Expand algebraic math functions in
math/m_api.h
, math/m_vec3.h
and math/m_base.cpp
. (!249)
- math: Add pre-filter and a simple understandable 3-DoF fusion filter. (!249)
- build: Enable the build system to install
monado-cli
and monado-gui
. (!252)
- build: Unify inputs for generated files between CMake and Meson builds. (!252)
- build: Support building with system cJSON instead of bundled copy. (!284, #62)
- ci: Perform test builds using the Android NDK (for armeabi-v7a and armv8-a). This is not a full Android port (missing a compositor, etc) but it ensures we don't add more Android porting problems. (!292)
- Misc. Fixes
- os/ble: Check if
org.bluez
name is available before calling in os/os_ble_dbus.c
. (#65, #64, !265)
- README: Added information to the README containing OpenHMD version requirement and information regarding the requirement of
GL_EXT_memory_object_fd
and limitations on Monado's compositor. (!4)
- build: Fix build issues and build warnings when 32-bit. (!230)
- os/ble: Fix crash due to bad dbus path, triggered by bad return checking when probing for BLE devices. (!247)
- d/dd: Use the correct time delta in DayDream driver. (!249)
- doc: Stop changelog snippets from showing up in 'Related Pages' (!253)
- build: Fix meson warnings, increase compiler warning level. (!258)
- os/ble: Fix leak in
os/os_ble_dbus.c
code when failing to find any device. (!264)
- os/ble: Make ble code check for some error returns in
os/os_ble_dbus.c
. (!265)
- u/hashset: Fix warnings in
util/u_hashset.h
after pedantic warnings were enabled for C++. (!268)
- build: Fix failure to build from source on ppc64 and s390x. (!284)
- build: Mark OpenXR runtime target in CMake as a MODULE library, instead of a SHARED library. (!284)
- windows: Way way back when Gallium was made
auxiliary
was named aux
but then it was ported to Windows and it was renamed to auxiliary
since Windows is allergic to filenames that match its device names (e.g., AUX
, CON
, PRN
, etc.). Through the ages, this knowledge was lost and so we find ourselves with the same problem. Although Monado inherited the correct name, the same old mistake was made in docs. (!314)
- build: For CMake rename (nearly) all build options so they begin with
XRT_
and match the defines used in the source. You will probably want to clear your build directory and reconfigure from scratch. (!327)
- ipc: Correctly set the shared semaphore value when creating it, the wrong value resulted in the client not blocking in
xrWaitFrame
. (!348)
- ipc: Previously some arguments where dropped at swapchain creation time, correct pass them between the client and server. (!349)
Monado 0.1.0 (2020-02-24)
Initial (non-release) tag to promote/support packaging.