Khronos’ Monado Improvements Project 2023

This project ran from September 2023 to January 2024, with the purpose of implementing specific features within the Monado OpenXR Runtime deemed useful by the Khronos OpenXR Working Group.

Total hours: 480 hours


The Khronos Group issued an RFP for the Monado Improvements project on July 3rd 2023. Collabora was selected as the contractor for the project, which ran from September 2023 to February 2024.

Work done during this project

Refactoring the layer “squashing” code to process each view separately - #2


Rework of Monado’s compute renderer to dispatch the rendering process once per view. This reduces the number of samplers required and allows a per-view target

Refactoring of the compositor graphics pipeline code to the new render architecture - #3


Complete rework of Monado’s graphics pipeline, improving our Vulkan code on all sides.

New code for cylinder and equirect2 layer types to compute path and equirect - #4


Follow up of #2, the cylinder and equirect2 layers were deactivated during the refactoring, the shaders were improved before plugging them back in.

Addition of the layer “squasher” helper function(s) - #5


Refactor of the compositor’s utils functions, to have better and more coherent helper functions to take account of the device pose and scratch images.

Implement XR_KHR_visibility_mask - #7


Implement XR_KHR_vulkan_swapchain_format_list - #8


Improve spaces - #9


Enhance the Monado “spaces” by implementing XR_EXT_local_floor and XR_MSFT_unbounded_reference_space, and adding the capability to recenter.

Implement XrEventDataReferenceSpaceChangePending - #10


IPC improvement - #11


Improve the general state of the Monado IPC, make it more flexible and generic.

Implementation of an interface for tracking plugins - #12


Add a C interface to Monado (with a C++ helper) to dynamically load VIT (Visual Intertial Tracking) systems.

The VIT interface has been implemented in Basalt as a testing ground (not part of the Khronos-funded project).

We moved the interface files into their own repo.

Implement XR_EXT_conformance_automation - #13

In Progress

Pending topics

These were tasks that were in scope for the project but could not be completed in the funded time available.

Enhancements to the compositor so that it uses xrt_space for poses

Follow up work for the Monado space work.

Implementation of “Direct Mode” compositor target on Windows

Requires specialized hardware following the EDID extension for head-mounted and specialized monitors 2 spec.

Some work has been on the subject 2 years ago.` Monado MR !738

Implementation of Helper code and configuration format for device attachment hierarchy

Improve the xrt_device creation process to logically group devices together without having to create a builder for every device combination.

Work on extension : XR_EXT_debug_utils

All of the ground work is already done. The oxr_logger object in the state tracker needs to be extended to collect and push messages to the application. Optionally the work done on the IPC can be used to get data

Work on extension : XR_EXT_eye_gaze_interaction

Parts of the work is already done in Monado, the state tracker part is done and some work in the service is to be done.

Needs hardware supporting eyes tracking.

Work on extension : XR_EXT_hand_joints_motion_range

A new interface in Monado to have hand-trackers per hand is needed.

Work on extension : XR_EXT_palm_pose

The extension implementation is complete. The remaining work is to collect grip pose to palm pose offset data from as many controllers as possible.

Work on extension : XR_EXT_win32_appcontainer_compatible

Requires more Windows knowledge, figure out the installer and a way to create the swapchain on the server and share the handles to the client due to permission restrictions.

Improvements to binding code to lay the foundations for user-driven input remapping, aka action based remapping

Requires a lot of rework on Monado’s input code, blocked by another project.

Mac support (Apple SoC)

This issue is almost a project of its own. We outlined the work in an issue on the Monado repo.

Monado issue #318