Monado OpenXR Runtime
Loading...
Searching...
No Matches
xrt_session.h
Go to the documentation of this file.
1// Copyright 2020-2023, Collabora, Ltd.
2// Copyright 2025-2026, NVIDIA CORPORATION.
3// SPDX-License-Identifier: BSL-1.0
4/*!
5 * @file
6 * @brief Header for session object.
7 * @author Jakob Bornecrantz <jakob@collabora.com>
8 * @ingroup xrt_iface
9 */
10
11#pragma once
12
13#include "xrt/xrt_compiler.h"
14#include "xrt/xrt_defines.h"
15#include "xrt/xrt_results.h"
16#include "xrt/xrt_space.h"
17
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
24
25
26/*
27 *
28 * Session events.
29 *
30 */
31
32/*!
33 * Type of a @ref xrt_session event.
34 *
35 * @see xrt_session_event
36 * @ingroup xrt_iface
37 */
39{
40 //! This session has no pending events.
42
43 //! The state of the session has changed.
45
46 //! The state of the primary session has changed.
48
49 //! The session is about to be lost.
51
52 //! The session has been lost.
54
55 //! The refresh rate of session (compositor) has changed.
57
58 //! A reference space for this session has a pending change.
60
61 //! The performance of the session has changed
63
64 //! The passthrough state of the session has changed
66
67 // ! The visibility mask of given view has changed
68 XRT_SESSION_EVENT_VISIBILITY_MASK_CHANGE = 9,
69
70 //! Request the session to quit.
72};
73
74/*!
75 * Session state changes event, type @ref XRT_SESSION_EVENT_STATE_CHANGE.
76 *
77 * @see xrt_session_event
78 * @ingroup xrt_iface
79 */
81{
82 enum xrt_session_event_type type;
83 bool visible;
84 bool focused;
85 int64_t timestamp_ns;
86};
87
88/*!
89 * Primary session state changes event,
90 * type @ref XRT_SESSION_EVENT_OVERLAY_CHANGE.
91 *
92 * @see xrt_session_event
93 * @ingroup xrt_iface
94 */
96{
97 enum xrt_session_event_type type;
98 bool primary_focused;
99};
100
101/*!
102 * Loss pending event, @ref XRT_SESSION_EVENT_LOSS_PENDING.
103 *
104 * @see xrt_session_event
105 * @ingroup xrt_iface
106 */
108{
109 enum xrt_session_event_type type;
110 XRT_ALIGNAS(8) int64_t loss_time_ns;
111};
112
113/*!
114 * Session lost event, type @ref XRT_SESSION_EVENT_LOST.
115 *
116 * @see xrt_session_event
117 * @ingroup xrt_iface
118 */
120{
121 enum xrt_session_event_type type;
122};
123
124/*!
125 * Display refresh rate of compositor changed event,
126 * type @ref XRT_SESSION_EVENT_DISPLAY_REFRESH_RATE_CHANGE.
127 *
128 * @see xrt_session_event
129 * @ingroup xrt_iface
130 */
132{
133 enum xrt_session_event_type type;
134 float from_display_refresh_rate_hz;
135 float to_display_refresh_rate_hz;
136};
137
138/*!
139 * Event that tells the application that the reference space has a pending
140 * change to it, maps to @p XrEventDataReferenceSpaceChangePending,
141 * type @ref XRT_SESSION_EVENT_REFERENCE_SPACE_CHANGE_PENDING.
142 *
143 * @see xrt_session_event
144 * @ingroup xrt_iface
145 */
147{
148 enum xrt_session_event_type event_type;
149 enum xrt_reference_space_type ref_type;
150 int64_t timestamp_ns;
151 struct xrt_pose pose_in_previous_space;
152 bool pose_valid;
153};
154
155/*!
156 * Performance metrics change event.
157 */
159{
160 enum xrt_session_event_type type;
161 enum xrt_perf_domain domain;
162 enum xrt_perf_sub_domain sub_domain;
163 enum xrt_perf_notify_level from_level;
164 enum xrt_perf_notify_level to_level;
165};
166
167/*!
168 * Passthrough state change event.
169 */
175
176/*!
177 * Visibility mask changed event
178 */
180{
181 enum xrt_session_event_type type;
182 uint32_t view_index;
183};
184
185/*!
186 * Session stop event, type @ref XRT_SESSION_EVENT_REQUEST_EXIT.
187 *
188 * @see xrt_session_event
189 * @ingroup xrt_iface
190 */
195
196/*!
197 * Union of all session events, used to return multiple events through one call.
198 * Each event struct must start with a @ref xrt_session_event_type field.
199 *
200 * @see xrt_session_event
201 * @ingroup xrt_iface
202 */
216
217/*!
218 * Used internally from producers of events to push events into session, some
219 * sinks might multiplex events to multiple sessions.
220 *
221 * @ingroup xrt_iface
222 */
224{
225 /*!
226 * Push one event to this sink, data is copied so pointer only needs to
227 * be valid for the duration of the call.
228 *
229 * @param xses Self-pointer to event sink.
230 * @param xse A pre-filled out event.
231 */
233};
234
235/*!
236 * @copydoc xrt_session_event_sink::push_event
237 *
238 * Helper for calling through the function pointer.
239 *
240 * @public @memberof xrt_session_event_sink
241 */
242XRT_CHECK_RESULT XRT_NONNULL_ALL static inline xrt_result_t
244{
245 return xses->push_event(xses, xse);
246}
247
248
249/*
250 *
251 * Session.
252 *
253 */
254
255/*!
256 * The XRT representation of `XrSession`, this object does not have all of the
257 * functionality of a session, most are partitioned to the session level
258 * compositor object. Often this is @ref xrt_compositor_native, note that
259 * interface may also be a system level object depending in implementer.
260 *
261 * @ingroup xrt_iface
262 */
264{
265 /*!
266 * Poll a single event from this session, if no event is available then
267 * the type of the event will be @ref XRT_SESSION_EVENT_NONE.
268 *
269 * @param xs Pointer to self
270 * @param[out] out_xse Event to be returned.
271 */
273
274 /*!
275 * Request this session to exit.
276 *
277 * @param xs Pointer to self
278 */
280
281 /*!
282 * Destroy the session, must be destroyed after the native compositor.
283 *
284 * Code consuming this interface should use @ref xrt_session_destroy.
285 *
286 * @param xs Pointer to self
287 */
288 void (*destroy)(struct xrt_session *xs);
289};
290
291/*!
292 * @copydoc xrt_session::poll_events
293 *
294 * Helper for calling through the function pointer.
295 *
296 * @public @memberof xrt_session
297 */
298XRT_CHECK_RESULT XRT_NONNULL_ALL static inline xrt_result_t
300{
301 return xs->poll_events(xs, out_xse);
302}
303
304/*!
305 * @copydoc xrt_session::request_exit
306 *
307 * Helper for calling through the function pointer.
308 *
309 * @public @memberof xrt_session
310 */
311XRT_CHECK_RESULT static inline xrt_result_t
313{
314 return xs->request_exit(xs);
315}
316
317/*!
318 * Destroy an xrt_session - helper function.
319 *
320 * @param[in,out] xs_ptr A pointer to the xrt_session struct pointer.
321 *
322 * Will destroy the system if `*xs_ptr` is not NULL. Will then set `*xs_ptr` to
323 * NULL.
324 *
325 * @public @memberof xrt_session
326 */
327XRT_NONNULL_ALL static inline void
329{
330 struct xrt_session *xs = *xs_ptr;
331 if (xs == NULL) {
332 return;
333 }
334
335 *xs_ptr = NULL;
336 xs->destroy(xs);
337}
338
339
340#ifdef __cplusplus
341}
342#endif
xrt_session_event_type
Type of a xrt_session event.
Definition xrt_session.h:39
enum xrt_result xrt_result_t
Result type used across Monado.
xrt_reference_space_type
Type of a OpenXR mapped reference space, maps to the semantic spaces on the xrt_space_overseer struct...
Definition xrt_defines.h:625
@ XRT_SESSION_EVENT_PASSTHRU_STATE_CHANGE
The passthrough state of the session has changed.
Definition xrt_session.h:65
@ XRT_SESSION_EVENT_REFERENCE_SPACE_CHANGE_PENDING
A reference space for this session has a pending change.
Definition xrt_session.h:59
@ XRT_SESSION_EVENT_LOSS_PENDING
The session is about to be lost.
Definition xrt_session.h:50
@ XRT_SESSION_EVENT_LOST
The session has been lost.
Definition xrt_session.h:53
@ XRT_SESSION_EVENT_DISPLAY_REFRESH_RATE_CHANGE
The refresh rate of session (compositor) has changed.
Definition xrt_session.h:56
@ XRT_SESSION_EVENT_REQUEST_EXIT
Request the session to quit.
Definition xrt_session.h:71
@ XRT_SESSION_EVENT_STATE_CHANGE
The state of the session has changed.
Definition xrt_session.h:44
@ XRT_SESSION_EVENT_OVERLAY_CHANGE
The state of the primary session has changed.
Definition xrt_session.h:47
@ XRT_SESSION_EVENT_NONE
This session has no pending events.
Definition xrt_session.h:41
@ XRT_SESSION_EVENT_PERFORMANCE_CHANGE
The performance of the session has changed.
Definition xrt_session.h:62
Main compositor server interface.
Definition xrt_compositor.h:2290
A pose composed of a position and orientation.
Definition xrt_defines.h:492
Display refresh rate of compositor changed event, type XRT_SESSION_EVENT_DISPLAY_REFRESH_RATE_CHANGE.
Definition xrt_session.h:132
Loss pending event, XRT_SESSION_EVENT_LOSS_PENDING.
Definition xrt_session.h:108
Session lost event, type XRT_SESSION_EVENT_LOST.
Definition xrt_session.h:120
Primary session state changes event, type XRT_SESSION_EVENT_OVERLAY_CHANGE.
Definition xrt_session.h:96
Passthrough state change event.
Definition xrt_session.h:171
Performance metrics change event.
Definition xrt_session.h:159
Event that tells the application that the reference space has a pending change to it,...
Definition xrt_session.h:147
Session stop event, type XRT_SESSION_EVENT_REQUEST_EXIT.
Definition xrt_session.h:192
Used internally from producers of events to push events into session, some sinks might multiplex even...
Definition xrt_session.h:224
XRT_CHECK_RESULT static XRT_NONNULL_ALL xrt_result_t xrt_session_event_sink_push(struct xrt_session_event_sink *xses, const union xrt_session_event *xse)
Push one event to this sink, data is copied so pointer only needs to be valid for the duration of the...
Definition xrt_session.h:243
xrt_result_t(* push_event)(struct xrt_session_event_sink *xses, const union xrt_session_event *xse)
Push one event to this sink, data is copied so pointer only needs to be valid for the duration of the...
Definition xrt_session.h:232
Session state changes event, type XRT_SESSION_EVENT_STATE_CHANGE.
Definition xrt_session.h:81
Visibility mask changed event.
Definition xrt_session.h:180
The XRT representation of XrSession, this object does not have all of the functionality of a session,...
Definition xrt_session.h:264
XRT_CHECK_RESULT static XRT_NONNULL_ALL xrt_result_t xrt_session_poll_events(struct xrt_session *xs, union xrt_session_event *out_xse)
Poll a single event from this session, if no event is available then the type of the event will be XR...
Definition xrt_session.h:299
xrt_result_t(* poll_events)(struct xrt_session *xs, union xrt_session_event *out_xse)
Poll a single event from this session, if no event is available then the type of the event will be XR...
Definition xrt_session.h:272
static XRT_NONNULL_ALL void xrt_session_destroy(struct xrt_session **xs_ptr)
Destroy an xrt_session - helper function.
Definition xrt_session.h:328
xrt_result_t(* request_exit)(struct xrt_session *xs)
Request this session to exit.
Definition xrt_session.h:279
static XRT_CHECK_RESULT xrt_result_t xrt_session_request_exit(struct xrt_session *xs)
Request this session to exit.
Definition xrt_session.h:312
void(* destroy)(struct xrt_session *xs)
Destroy the session, must be destroyed after the native compositor.
Definition xrt_session.h:288
Union of all session events, used to return multiple events through one call.
Definition xrt_session.h:203
Header holding common defines.
Common defines and enums for XRT.
xrt_perf_notify_level
Performance level.
Definition xrt_defines.h:2456
xrt_perf_domain
Domain type.
Definition xrt_defines.h:2429
xrt_passthrough_state
Specify additional state change behavior.
Definition xrt_defines.h:136
Internal result type for XRT.
Header defining xrt space and space overseer.