···55SPDX-FileCopyrightText: 2020 Collabora, Ltd. and the Monado contributors
66```
7788+## Monado 0.3.0 (2020-07-10)
99+1010+- Major changes
1111+ - Centralise the logging functionality in Monado to a single util helper.
1212+ Previously most of our logging was done via fprints and gated behind booleans,
1313+ now there are common functions to call and a predfined set of levels.
1414+ ([!408](https://gitlab.freedesktop.org/monado/monado/merge_requests/408),
1515+ [!409](https://gitlab.freedesktop.org/monado/monado/merge_requests/409))
1616+- XRT Interface
1717+ - compositor: Remove the `array_size` field from the struct, this was the only
1818+ state tracker supplied value that was on the struct, only have values that the
1919+ compositor decides over on the struct.
2020+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
2121+ - Improve Doxygen documentation of interfaces. Now the inheritance structure and
2222+ implementation of interfaces is shown in the docs, and helper functions that
2323+ call through function pointers are listed as "member functions", to help
2424+ developers understand the internal structure of Monado better.
2525+ ([!365](https://gitlab.freedesktop.org/monado/monado/merge_requests/365),
2626+ [!367](https://gitlab.freedesktop.org/monado/monado/merge_requests/367))
2727+ - xrt: Add xrt_result_t return type to many compositor functions that previously
2828+ had no way to indicate failure.
2929+ ([!369](https://gitlab.freedesktop.org/monado/monado/merge_requests/369))
3030+ - compositor: Introduce `xrt_swapchain_create_info` simplifying the argument
3131+ passing between various layers of the compositor stack and also simplify future
3232+ refactoring projects.
3333+ ([!407](https://gitlab.freedesktop.org/monado/monado/merge_requests/407))
3434+- State Trackers
3535+ - OpenXR: Update headers to 1.0.9.
3636+ ([!358](https://gitlab.freedesktop.org/monado/monado/merge_requests/358))
3737+ - OpenXR: Verify that the XrViewConfigurationType is supported by the system as
3838+ required by the OpenXR spec in xrEnumerateEnvironmentBlendModes.
3939+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
4040+ - OpenXR: Return the correct error code when verifying the sub action, if it is
4141+ a
4242+ valid sub action path but not given at action creation we should return
4343+ `XR_ERROR_PATH_UNSUPPORTED`.
4444+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
4545+ - OpenXR: Validate the subImage data for both projection and quad layers layers,
4646+ refactor code out so it can be shared with the different types of layers. Need
4747+ to track some state on the `oxr_swapchain` in order to do the checking.
4848+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
4949+ - OpenXR: Correct the return error code for action and action set localized name
5050+ validation.
5151+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
5252+ - OpenXR: Correct the error messages on sub action paths errors.
5353+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
5454+ - OpenXR: Track the name and localized name for both actions and action sets,
5555+ that
5656+ way we can make sure that there are no duplicates. This is required by the
5757+ spec. ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
5858+ - OpenXR: Do better checking if action sets and actions have been attached to the
5959+ session or not.
6060+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
6161+ - OpenXR: Validate the arguments for `xrSuggestInteractionProfileBindings` better
6262+ so that it follows the spec better.
6363+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
6464+ - OpenXR: Rework the logging formatting of error messages, this makes it easier
6565+ to
6666+ read for the application developer.
6767+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
6868+ - OpenXR: Correctly ensure that the application has called the required get
6969+ graphics requirements function when creating a session.
7070+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
7171+ - OpenXR: When a `XrSession` is destroyed purge the event queue of any events
7272+ that
7373+ references to it so that no events gets delivered to the applications with
7474+ stales handles.
7575+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
7676+ - OpenXR: Make the event queue thread safe, all done with a simple mutex that is
7777+ not held for long at all.
7878+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
7979+ - OpenXR: A major overhaul of the swapchain acquire, wait and release code. This
8080+ makes it almost completely conformant with the spec. Tricky parts include that
8181+ multiple images can be acquired, but only one can be waited on before being
8282+ released.
8383+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
8484+ - OpenXR: Enforce that static swapchains can only be acquired once, this is
8585+ required by the spec and make sure that a image is only rendered to once, and
8686+ allows the runtime to perform special optimizations on the image.
8787+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
8888+ - OpenXR: Make the function `xrGetReferenceSpaceBoundsRect` at least conform to
8989+ the spec without actually implementing it, currently we do not track bounds in
9090+ Monado.
9191+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
9292+ - OpenXR: Make the session state changes obey the specification. The code is
9393+ fairly hair as is and should be improved at a later time.
9494+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
9595+ - OpenXR: Use the correct XrPath for `/user/gamepad` while it sits in the users
9696+ hand itsn't `/user/hand/gamepad` as previously believed.
9797+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
9898+ - OpenXR: Where used make sure we verify the view configuration type is a valid
9999+ enum value, the code is setup so that we in the future can support new values
100100+ via extensions easily.
101101+ ([!368](https://gitlab.freedesktop.org/monado/monado/merge_requests/368))
102102+ - OpenXR: More correctly verify the interactive profile binding data, including
103103+ the given interactive profile is correct and the binding point is valid.
104104+ ([!377](https://gitlab.freedesktop.org/monado/monado/merge_requests/377))
105105+ - OpenXR: Transform input types in a somewhat flexible, composable way. Also, do
106106+ conversion at sync time, and use the transformed values to evaluate if the
107107+ input has changed, per the spec.
108108+ ([!379](https://gitlab.freedesktop.org/monado/monado/merge_requests/379))
109109+ - OpenXR: Tidy the extensions generated by the script and order them according
110110+ to
111111+ extension prefix, starting with KHR, EXT, Vendor, KHRX, EXTX, VendorX. Also
112112+ rename the `MND_ball_on_stick_controller` to `MNDX_ball_on_a_stick_controller`.
113113+ ([!410](https://gitlab.freedesktop.org/monado/monado/merge_requests/410))
114114+ - OpenXR: Fix overly attached action sets, which would appear to be attached to
115115+ a
116116+ session even after the session has been destroyed. Also tidy up comments and
117117+ other logic surrounding this.
118118+ ([!411](https://gitlab.freedesktop.org/monado/monado/merge_requests/411))
119119+- Drivers
120120+ - psvr: Normalize the rotation to not trip up the client app when it gives the
121121+ rotation back to `st/oxr` again.
122122+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
123123+ - vive: Create vive_config module to isolate config code and avoid duplication
124124+ between controller and headset code.
125125+ vive: Probe for controllers in vive_proper
126126+ interface.
127127+ vive: Fix a bug where using the Vive Pro crashed Monado.
128128+ vive: Fix a
129129+ bug where the controller didn't parse JSON vectors correctly.
130130+ vive: Move
131131+ missing functions to and use u_json.
132132+ ([!405](https://gitlab.freedesktop.org/monado/monado/merge_requests/405))
133133+ - vive: Add support for Gen1 and Gen2 Vive Trackers.
134134+ ([!406](https://gitlab.freedesktop.org/monado/monado/merge_requests/406))
135135+ - vive: Port to new u_logging API.
136136+ ([!417](https://gitlab.freedesktop.org/monado/monado/merge_requests/417))
137137+ - comp: Set a compositor window title.
138138+ ([!418](https://gitlab.freedesktop.org/monado/monado/merge_requests/418))
139139+- IPC
140140+ - server: Almost completely overhaul the handling of swapchain life cycle
141141+ including: correctly track which swapchains are alive; reuse ids; enforce the
142142+ maximum number of swapchains; and destroy underlying swapchains when they are
143143+ destroyed by the client.
144144+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
145145+ - util: Make sure to not access NULL control messages, say in the case of the
146146+ server failing to create a swapchain. Also add a whole bunch of paranoia when
147147+ it comes to the alignment of the control message buffers.
148148+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
149149+ - ipc: Return XR_ERROR_INSTANCE_LOST on IPC errors.
150150+ ([!369](https://gitlab.freedesktop.org/monado/monado/merge_requests/369))
151151+- Compositor
152152+ - main: Include `<math.h>` in layers renderer for missing `tanf` function.
153153+ ([!358](https://gitlab.freedesktop.org/monado/monado/merge_requests/358))
154154+ - swapchain: Give out the oldset image index when a image is acquired. This logic
155155+ can be made better, but will work for the good case.
156156+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
157157+ - swapchain: Close any FDs that are still valid, for instance the ipc server
158158+ copies the FDs to the client.
159159+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
160160+ - client: When we give a image fd to the either OpenGL or Vulkan it is consumed
161161+ and can not be rused. So make sure that it is set to an invalid fd value on the
162162+ `xrt_image_fd` on the owning `xrt_swapchain_fd`.
163163+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
164164+ - main: We were alpha blending all layers previously, but now we support the
165165+ layer flag that OpenXR gives us. We do this by using different `VkImageView`s
166166+ with different component swizzles.
167167+ ([!394](https://gitlab.freedesktop.org/monado/monado/merge_requests/394))
168168+ - layer_rendering: Use the visibility flags on quad to correctly show the layers
169169+ in each eye.
170170+ ([!394](https://gitlab.freedesktop.org/monado/monado/merge_requests/394))
171171+- Helper Libraries
172172+ - os/threading: Include `xrt_compiler.h` to fix missing stdint types.
173173+ ([!358](https://gitlab.freedesktop.org/monado/monado/merge_requests/358))
174174+ - util: Add a very simple fifo for indices, this is used to keep track of
175175+ swapchain in order of age (oldness).
176176+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
177177+ - util: Expand `u_hashset` to be able to automatically allocate a `u_hashet_item`
178178+ and insert it.
179179+ ([!359](https://gitlab.freedesktop.org/monado/monado/merge_requests/359))
180180+- Misc. Features
181181+ - build: Allow enabling inter-procedural optimization in CMake GUIs, if supported
182182+ by platform and compiler.
183183+ ([!330](https://gitlab.freedesktop.org/monado/monado/merge_requests/330))
184184+- Misc. Fixes
185185+ - No significant changes
186186+8187## Monado 0.2 (2020-05-29)
918810189- Major changes