Monado OpenXR Runtime
Loading...
Searching...
No Matches
oxr_conversions.h
Go to the documentation of this file.
1// Copyright 2018-2024, Collabora, Ltd.
2// Copyright 2024-2026, NVIDIA CORPORATION.
3// SPDX-License-Identifier: BSL-1.0
4/*!
5 * @file
6 * @brief Smaller helper functions to convert between xrt and OpenXR things.
7 * @author Christoph Haag <christoph.haag@collabora.com>
8 * @author Jakob Bornecrantz <jakob@collabora.com>
9 * @ingroup oxr_main
10 */
11
12#pragma once
13
14#include "xrt/xrt_defines.h"
15#include "xrt/xrt_space.h"
16#include "xrt/xrt_system.h"
17#include "xrt/xrt_compositor.h"
20
21#include "oxr_defines.h"
22
23
24/*
25 *
26 * Space things.
27 *
28 */
29
30static inline XrSpaceLocationFlags
31xrt_to_xr_space_location_flags(enum xrt_space_relation_flags relation_flags)
32{
33 // clang-format off
34 bool valid_ori = (relation_flags & XRT_SPACE_RELATION_ORIENTATION_VALID_BIT) != 0;
35 bool tracked_ori = (relation_flags & XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT) != 0;
36 bool valid_pos = (relation_flags & XRT_SPACE_RELATION_POSITION_VALID_BIT) != 0;
37 bool tracked_pos = (relation_flags & XRT_SPACE_RELATION_POSITION_TRACKED_BIT) != 0;
38
39 bool linear_vel = (relation_flags & XRT_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT) != 0;
40 bool angular_vel = (relation_flags & XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT) != 0;
41 // clang-format on
42
43 XrSpaceLocationFlags location_flags = (XrSpaceLocationFlags)0;
44 if (valid_ori) {
45 location_flags |= XR_SPACE_LOCATION_ORIENTATION_VALID_BIT;
46 }
47 if (tracked_ori) {
48 location_flags |= XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT;
49 }
50 if (valid_pos) {
51 location_flags |= XR_SPACE_LOCATION_POSITION_VALID_BIT;
52 }
53 if (tracked_pos) {
54 location_flags |= XR_SPACE_LOCATION_POSITION_TRACKED_BIT;
55 }
56 if (linear_vel) {
57 location_flags |= XR_SPACE_VELOCITY_LINEAR_VALID_BIT;
58 }
59 if (angular_vel) {
60 location_flags |= XR_SPACE_VELOCITY_ANGULAR_VALID_BIT;
61 }
62
63 return location_flags;
64}
65
66static inline XrReferenceSpaceType
67oxr_ref_space_to_xr(enum oxr_space_type space_type)
68{
69 switch (space_type) {
70 case OXR_SPACE_TYPE_REFERENCE_VIEW: return XR_REFERENCE_SPACE_TYPE_VIEW;
71 case OXR_SPACE_TYPE_REFERENCE_LOCAL: return XR_REFERENCE_SPACE_TYPE_LOCAL;
72 case OXR_SPACE_TYPE_REFERENCE_LOCAL_FLOOR: return XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT;
73 case OXR_SPACE_TYPE_REFERENCE_STAGE: return XR_REFERENCE_SPACE_TYPE_STAGE;
74 case OXR_SPACE_TYPE_REFERENCE_UNBOUNDED_MSFT: return XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT;
75 case OXR_SPACE_TYPE_REFERENCE_COMBINED_EYE_VARJO: return XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO;
76 case OXR_SPACE_TYPE_REFERENCE_LOCALIZATION_MAP_ML: return XR_REFERENCE_SPACE_TYPE_LOCALIZATION_MAP_ML;
77 case OXR_SPACE_TYPE_REFERENCE_UNBOUNDED_ANDROID: return XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID;
78 case OXR_SPACE_TYPE_REFERENCE_STATIONARY_EXT: return XR_REFERENCE_SPACE_TYPE_STATIONARY_EXT;
79
80 case OXR_SPACE_TYPE_ACTION: return XR_REFERENCE_SPACE_TYPE_MAX_ENUM;
81 case OXR_SPACE_TYPE_XDEV_POSE: return XR_REFERENCE_SPACE_TYPE_MAX_ENUM;
82 }
83
84 return XR_REFERENCE_SPACE_TYPE_MAX_ENUM;
85}
86
87static inline enum oxr_space_type
88xr_ref_space_to_oxr(XrReferenceSpaceType space_type)
89{
90 switch (space_type) {
91 case XR_REFERENCE_SPACE_TYPE_VIEW: return OXR_SPACE_TYPE_REFERENCE_VIEW;
92 case XR_REFERENCE_SPACE_TYPE_LOCAL: return OXR_SPACE_TYPE_REFERENCE_LOCAL;
93 case XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT: return OXR_SPACE_TYPE_REFERENCE_LOCAL_FLOOR;
94 case XR_REFERENCE_SPACE_TYPE_STAGE: return OXR_SPACE_TYPE_REFERENCE_STAGE;
95 case XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT: return OXR_SPACE_TYPE_REFERENCE_UNBOUNDED_MSFT;
96 case XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO: return OXR_SPACE_TYPE_REFERENCE_COMBINED_EYE_VARJO;
97 case XR_REFERENCE_SPACE_TYPE_LOCALIZATION_MAP_ML: return OXR_SPACE_TYPE_REFERENCE_LOCALIZATION_MAP_ML;
98 case XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID: return OXR_SPACE_TYPE_REFERENCE_UNBOUNDED_ANDROID;
99 case XR_REFERENCE_SPACE_TYPE_STATIONARY_EXT: return OXR_SPACE_TYPE_REFERENCE_STATIONARY_EXT;
100
101 case XR_REFERENCE_SPACE_TYPE_MAX_ENUM: return (enum oxr_space_type) - 1;
102 }
103
104 // wrap around or negative depending on enum data type, invalid value either way.
105 return (enum oxr_space_type) - 1;
106}
107
108static inline const char *
109xr_ref_space_to_string(XrReferenceSpaceType space_type)
110{
111 switch (space_type) {
112 case XR_REFERENCE_SPACE_TYPE_VIEW: return "XR_REFERENCE_SPACE_TYPE_VIEW";
113 case XR_REFERENCE_SPACE_TYPE_LOCAL: return "XR_REFERENCE_SPACE_TYPE_LOCAL";
114 case XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT: return "XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT";
115 case XR_REFERENCE_SPACE_TYPE_STAGE: return "XR_REFERENCE_SPACE_TYPE_STAGE";
116 case XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT: return "XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT";
117 case XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO: return "XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO";
118 case XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID: return "XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID";
119 case XR_REFERENCE_SPACE_TYPE_STATIONARY_EXT: return "XR_REFERENCE_SPACE_TYPE_STATIONARY_EXT";
120 case XR_REFERENCE_SPACE_TYPE_MAX_ENUM: return "XR_REFERENCE_SPACE_TYPE_MAX_ENUM";
121 default: return "UNKNOWN REFERENCE SPACE";
122 }
123}
124
125static inline enum xrt_reference_space_type
126oxr_ref_space_to_xrt(enum oxr_space_type space_type)
127{
128 switch (space_type) {
129 case OXR_SPACE_TYPE_REFERENCE_VIEW: return XRT_SPACE_REFERENCE_TYPE_VIEW;
130 case OXR_SPACE_TYPE_REFERENCE_LOCAL: return XRT_SPACE_REFERENCE_TYPE_LOCAL;
131 case OXR_SPACE_TYPE_REFERENCE_LOCAL_FLOOR: return XRT_SPACE_REFERENCE_TYPE_LOCAL_FLOOR;
132 case OXR_SPACE_TYPE_REFERENCE_STAGE: return XRT_SPACE_REFERENCE_TYPE_STAGE;
133 case OXR_SPACE_TYPE_REFERENCE_UNBOUNDED_MSFT: return XRT_SPACE_REFERENCE_TYPE_UNBOUNDED;
134
135 // Has no mapping to a Monado semantic space.
136 case OXR_SPACE_TYPE_REFERENCE_COMBINED_EYE_VARJO: return XRT_SPACE_REFERENCE_TYPE_INVALID;
137 case OXR_SPACE_TYPE_REFERENCE_LOCALIZATION_MAP_ML: return XRT_SPACE_REFERENCE_TYPE_INVALID;
138 case OXR_SPACE_TYPE_REFERENCE_UNBOUNDED_ANDROID: return XRT_SPACE_REFERENCE_TYPE_INVALID;
139 case OXR_SPACE_TYPE_REFERENCE_STATIONARY_EXT: return XRT_SPACE_REFERENCE_TYPE_INVALID;
140 case OXR_SPACE_TYPE_ACTION: return XRT_SPACE_REFERENCE_TYPE_INVALID;
141 case OXR_SPACE_TYPE_XDEV_POSE: return XRT_SPACE_REFERENCE_TYPE_INVALID;
142 }
143
144 /*
145 * This is the default case, we do not have a explicit default case
146 * so that we get warnings for unhandled enum members. This is fine
147 * because the C specification says if there is no default case and
148 * and a non-matching value is given no case is executed.
149 */
150
152}
153
154static inline enum xrt_reference_space_type
155xr_ref_space_to_xrt(XrReferenceSpaceType space_type)
156{
157 switch (space_type) {
158 case XR_REFERENCE_SPACE_TYPE_VIEW: return XRT_SPACE_REFERENCE_TYPE_VIEW;
159 case XR_REFERENCE_SPACE_TYPE_LOCAL: return XRT_SPACE_REFERENCE_TYPE_LOCAL;
160 case XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT: return XRT_SPACE_REFERENCE_TYPE_LOCAL_FLOOR;
161 case XR_REFERENCE_SPACE_TYPE_STAGE: return XRT_SPACE_REFERENCE_TYPE_STAGE;
162 case XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT: return XRT_SPACE_REFERENCE_TYPE_UNBOUNDED;
163
164 case XR_REFERENCE_SPACE_TYPE_STATIONARY_EXT: return XRT_SPACE_REFERENCE_TYPE_INVALID;
165 case XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO: return XRT_SPACE_REFERENCE_TYPE_INVALID;
166 case XR_REFERENCE_SPACE_TYPE_LOCALIZATION_MAP_ML: return XRT_SPACE_REFERENCE_TYPE_INVALID;
167 case XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID: return XRT_SPACE_REFERENCE_TYPE_INVALID;
168 case XR_REFERENCE_SPACE_TYPE_MAX_ENUM: return XRT_SPACE_REFERENCE_TYPE_INVALID;
169 }
170
172}
173
174
175/*
176 *
177 * Form factor things.
178 *
179 */
180
181static inline enum xrt_form_factor
182xr_form_factor_to_xrt(XrFormFactor form_factor)
183{
184 switch (form_factor) {
185 case XR_FORM_FACTOR_HANDHELD_DISPLAY: return XRT_FORM_FACTOR_HANDHELD;
186 case XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY: return XRT_FORM_FACTOR_HMD;
187 case XR_FORM_FACTOR_MAX_ENUM: assert(false); return 0; // As good as any.
188 }
189
190 // Used as default, to get warnings.
191 return XRT_FORM_FACTOR_HMD;
192}
193
194static inline enum XrFormFactor
195xrt_form_factor_to_xr(enum xrt_form_factor form_factor)
196{
197 switch (form_factor) {
198 case XRT_FORM_FACTOR_HANDHELD: return XR_FORM_FACTOR_HANDHELD_DISPLAY;
199 case XRT_FORM_FACTOR_HMD: return XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
200 }
201
202 // Used as default, to get warnings.
203 return XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
204}
205
206
207/*
208 *
209 * IO things.
210 *
211 */
212
213static inline const char *
214xr_action_type_to_str(XrActionType type)
215{
216 // clang-format off
217 switch (type) {
218#define PRINT(name, value) \
219 case name: return #name;
220 XR_LIST_ENUM_XrActionType(PRINT)
221#undef PRINT
222 default: return "XR_ACTION_TYPE_UNKNOWN";
223 }
224 // clang-format on
225}
226
227static inline const char *
228xr_action_type_to_short_str(XrActionType type)
229{
230 switch (type) {
231 case XR_ACTION_TYPE_BOOLEAN_INPUT: return "BOOLEAN";
232 case XR_ACTION_TYPE_FLOAT_INPUT: return "FLOAT";
233 case XR_ACTION_TYPE_VECTOR2F_INPUT: return "VECTOR2";
234 case XR_ACTION_TYPE_POSE_INPUT: return "POSE";
235 case XR_ACTION_TYPE_VIBRATION_OUTPUT: return "VIBRATION";
236 default: return "UNKNOWN";
237 }
238}
239
240static inline const char *
241xrt_input_type_to_str(enum xrt_input_type type)
242{
243 // clang-format off
244 switch (type) {
245 case XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE: return "XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE";
246 case XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE: return "XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE";
247 case XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE: return "XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE";
248 case XRT_INPUT_TYPE_VEC3_MINUS_ONE_TO_ONE: return "XRT_INPUT_TYPE_VEC3_MINUS_ONE_TO_ONE";
249 case XRT_INPUT_TYPE_BOOLEAN: return "XRT_INPUT_TYPE_BOOLEAN";
250 case XRT_INPUT_TYPE_POSE: return "XRT_INPUT_TYPE_POSE";
251 default: return "XRT_INPUT_UNKNOWN";
252 }
253 // clang-format on
254}
255
256static inline enum xrt_perf_set_level
257xr_perf_level_to_xrt(XrPerfSettingsLevelEXT level)
258{
259 switch (level) {
260 case XR_PERF_SETTINGS_LEVEL_POWER_SAVINGS_EXT: return XRT_PERF_SET_LEVEL_POWER_SAVINGS;
261 case XR_PERF_SETTINGS_LEVEL_SUSTAINED_LOW_EXT: return XRT_PERF_SET_LEVEL_SUSTAINED_LOW;
262 case XR_PERF_SETTINGS_LEVEL_SUSTAINED_HIGH_EXT: return XRT_PERF_SET_LEVEL_SUSTAINED_HIGH;
263 case XR_PERF_SETTINGS_LEVEL_BOOST_EXT: return XRT_PERF_SET_LEVEL_BOOST;
264 default: assert(false); return 0;
265 }
266}
267
268static inline enum xrt_perf_domain
269xr_perf_domain_to_xrt(XrPerfSettingsDomainEXT domain)
270{
271 switch (domain) {
272 case XR_PERF_SETTINGS_DOMAIN_CPU_EXT: return XRT_PERF_DOMAIN_CPU;
273 case XR_PERF_SETTINGS_DOMAIN_GPU_EXT: return XRT_PERF_DOMAIN_GPU;
274 default: assert(false); return 0;
275 }
276}
277
278static inline XrPerfSettingsDomainEXT
279xrt_perf_domain_to_xr(enum xrt_perf_domain domain)
280{
281 switch (domain) {
282 case XRT_PERF_DOMAIN_CPU: return XR_PERF_SETTINGS_DOMAIN_CPU_EXT;
283 case XRT_PERF_DOMAIN_GPU: return XR_PERF_SETTINGS_DOMAIN_GPU_EXT;
284 default: assert(false); return 0;
285 }
286}
287
288static inline XrPerfSettingsSubDomainEXT
289xrt_perf_sub_domain_to_xr(enum xrt_perf_sub_domain subDomain)
290{
291 switch (subDomain) {
292 case XRT_PERF_SUB_DOMAIN_COMPOSITING: return XR_PERF_SETTINGS_SUB_DOMAIN_COMPOSITING_EXT;
293 case XRT_PERF_SUB_DOMAIN_RENDERING: return XR_PERF_SETTINGS_SUB_DOMAIN_RENDERING_EXT;
294 case XRT_PERF_SUB_DOMAIN_THERMAL: return XR_PERF_SETTINGS_SUB_DOMAIN_THERMAL_EXT;
295 default: assert(false); return 0;
296 }
297}
298
299static inline XrPerfSettingsNotificationLevelEXT
300xrt_perf_notify_level_to_xr(enum xrt_perf_notify_level level)
301{
302 switch (level) {
303 case XRT_PERF_NOTIFY_LEVEL_NORMAL: return XR_PERF_SETTINGS_NOTIF_LEVEL_NORMAL_EXT;
304 case XRT_PERF_NOTIFY_LEVEL_WARNING: return XR_PERF_SETTINGS_NOTIF_LEVEL_WARNING_EXT;
305 case XRT_PERF_NOTIFY_LEVEL_IMPAIRED: return XR_PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED_EXT;
306 default: assert(false); return 0;
307 }
308}
309
310static inline enum xrt_input_name
311xr_hand_tracking_data_source_to_xrt(XrHandTrackingDataSourceEXT data_source, enum XrHandEXT hand)
312{
313 switch (data_source) {
314 case XR_HAND_TRACKING_DATA_SOURCE_UNOBSTRUCTED_EXT:
315 return (hand == XR_HAND_LEFT_EXT) ? XRT_INPUT_HT_UNOBSTRUCTED_LEFT : XRT_INPUT_HT_UNOBSTRUCTED_RIGHT;
316 case XR_HAND_TRACKING_DATA_SOURCE_CONTROLLER_EXT:
317 return (hand == XR_HAND_LEFT_EXT) ? XRT_INPUT_HT_CONFORMING_LEFT : XRT_INPUT_HT_CONFORMING_RIGHT;
318 default: assert(false); return (enum xrt_input_name)(-1);
319 }
320}
321
322static inline XrHandTrackingDataSourceEXT
323xrt_hand_tracking_data_source_to_xr(enum xrt_input_name ht_input_name)
324{
325 switch (ht_input_name) {
326 case XRT_INPUT_HT_UNOBSTRUCTED_LEFT:
327 case XRT_INPUT_HT_UNOBSTRUCTED_RIGHT: return XR_HAND_TRACKING_DATA_SOURCE_UNOBSTRUCTED_EXT;
328 case XRT_INPUT_HT_CONFORMING_LEFT:
329 case XRT_INPUT_HT_CONFORMING_RIGHT: return XR_HAND_TRACKING_DATA_SOURCE_CONTROLLER_EXT;
330 default: assert(false); return XR_HAND_TRACKING_DATA_SOURCE_MAX_ENUM_EXT;
331 }
332}
333
334
335/*
336 *
337 * Swapchain
338 *
339 */
340
341static inline enum xrt_swapchain_usage_bits
342xr_swapchain_usage_to_xrt(XrSwapchainUsageFlags xr_usage)
343{
344 enum xrt_swapchain_usage_bits usage = 0;
345
346 if ((xr_usage & XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT) != 0) {
347 usage |= XRT_SWAPCHAIN_USAGE_COLOR;
348 }
349 if ((xr_usage & XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0) {
350 usage |= XRT_SWAPCHAIN_USAGE_DEPTH_STENCIL;
351 }
352 if ((xr_usage & XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT) != 0) {
353 usage |= XRT_SWAPCHAIN_USAGE_UNORDERED_ACCESS;
354 }
355 if ((xr_usage & XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT) != 0) {
356 usage |= XRT_SWAPCHAIN_USAGE_TRANSFER_SRC;
357 }
358 if ((xr_usage & XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT) != 0) {
359 usage |= XRT_SWAPCHAIN_USAGE_TRANSFER_DST;
360 }
361 if ((xr_usage & XR_SWAPCHAIN_USAGE_SAMPLED_BIT) != 0) {
362 usage |= XRT_SWAPCHAIN_USAGE_SAMPLED;
363 }
364 if ((xr_usage & XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT) != 0) {
365 usage |= XRT_SWAPCHAIN_USAGE_MUTABLE_FORMAT;
366 }
367 // aliased to XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND
368 if ((xr_usage & XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR) != 0) {
369 usage |= XRT_SWAPCHAIN_USAGE_INPUT_ATTACHMENT;
370 }
371
372 return usage;
373}
374
375static inline XrSwapchainUsageFlags
376xrt_swapchain_usage_to_xr(enum xrt_swapchain_usage_bits bits)
377{
378 XrSwapchainUsageFlags xr = 0;
379
380 if ((bits & XRT_SWAPCHAIN_USAGE_COLOR) != 0) {
381 xr |= XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT;
382 }
383 if ((bits & XRT_SWAPCHAIN_USAGE_DEPTH_STENCIL) != 0) {
384 xr |= XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
385 }
386 if ((bits & XRT_SWAPCHAIN_USAGE_UNORDERED_ACCESS) != 0) {
387 xr |= XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT;
388 }
389 if ((bits & XRT_SWAPCHAIN_USAGE_TRANSFER_SRC) != 0) {
390 xr |= XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT;
391 }
392 if ((bits & XRT_SWAPCHAIN_USAGE_TRANSFER_DST) != 0) {
393 xr |= XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT;
394 }
395 if ((bits & XRT_SWAPCHAIN_USAGE_SAMPLED) != 0) {
396 xr |= XR_SWAPCHAIN_USAGE_SAMPLED_BIT;
397 }
398 if ((bits & XRT_SWAPCHAIN_USAGE_MUTABLE_FORMAT) != 0) {
399 xr |= XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT;
400 }
401 if ((bits & XRT_SWAPCHAIN_USAGE_INPUT_ATTACHMENT) != 0) {
402 xr |= XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR;
403 }
404
405 return xr;
406}
407
408
409/*
410 *
411 * Basic types
412 *
413 */
414
415static inline XrExtent2Di
416xrt_size_to_xr(const struct xrt_size *x)
417{
418 return (XrExtent2Di){
419 .width = x->w,
420 .height = x->h,
421 };
422}
423
424static inline XrVector2f
425xrt_vec2_to_xr(const struct xrt_vec2 *v)
426{
427 return (XrVector2f){
428 .x = v->x,
429 .y = v->y,
430 };
431}
432
433static inline XrVector3f
434xrt_vec3_to_xr(const struct xrt_vec3 *v)
435{
436 return (XrVector3f){
437 .x = v->x,
438 .y = v->y,
439 .z = v->z,
440 };
441}
442
443static inline XrQuaternionf
444xrt_quat_to_xr(const struct xrt_quat *q)
445{
446 return (XrQuaternionf){
447 .x = q->x,
448 .y = q->y,
449 .z = q->z,
450 .w = q->w,
451 };
452}
453
454static inline XrPosef
455xrt_pose_to_xr(const struct xrt_pose *q)
456{
457 return (XrPosef){
458 .orientation = xrt_quat_to_xr(&q->orientation),
459 .position = xrt_vec3_to_xr(&q->position),
460 };
461}
462
463
464/*
465 *
466 * View things
467 *
468 */
469
470static inline XrViewConfigurationType
471xrt_view_type_to_xr(enum xrt_view_type view_type)
472{
473 switch (view_type) {
474 case XRT_VIEW_TYPE_MAX:
475 case XRT_VIEW_TYPE_INVALID: break;
476 case XRT_VIEW_TYPE_MONO: return XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO;
477 case XRT_VIEW_TYPE_STEREO: return XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;
478 case XRT_VIEW_TYPE_QUAD: return XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO_WITH_FOVEATED_INSET;
479 }
480
481 // Used as default, to get warnings.
482 assert(false && "Invalid view type");
483 return XR_VIEW_CONFIGURATION_TYPE_MAX_ENUM;
484}
oxr_space_type
Internal enum for the type of space, lets us reason about action spaces.
Definition oxr_defines.h:80
xrt_input_type
Base type of this inputs.
Definition xrt_defines.h:878
xrt_swapchain_usage_bits
Usage of the swapchain images.
Definition xrt_compositor.h:571
xrt_form_factor
What form factor is this device, mostly maps onto OpenXR's XrFormFactor.
Definition xrt_defines.h:2444
xrt_input_name
Every internal input source known to monado with a baked in type.
Definition xrt_defines.h:961
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:655
#define XRT_SPACE_REFERENCE_TYPE_INVALID
An invalid xrt_reference_space_type, since it's invalid it's not listed in the enum.
Definition xrt_defines.h:676
xrt_space_relation_flags
Flags of which components of a xrt_space_relation is valid.
Definition xrt_defines.h:685
@ XRT_INPUT_TYPE_POSE
A tracked pose.
Definition xrt_defines.h:891
@ XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE
Vec2 input, components in [-1, 1].
Definition xrt_defines.h:885
@ XRT_INPUT_TYPE_VEC3_MINUS_ONE_TO_ONE
Vec3 input, components in [-1, 1].
Definition xrt_defines.h:887
@ XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE
Float input in [-1, 1].
Definition xrt_defines.h:883
@ XRT_INPUT_TYPE_BOOLEAN
Boolean (digital, binary) input.
Definition xrt_defines.h:889
@ XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE
Float input in [0, 1].
Definition xrt_defines.h:881
@ XRT_FORM_FACTOR_HANDHELD
Handheld display.
Definition xrt_defines.h:2446
@ XRT_FORM_FACTOR_HMD
Head mounted display.
Definition xrt_defines.h:2445
Shared internal defines and enums in the state tracker.
A pose composed of a position and orientation.
Definition xrt_defines.h:522
A quaternion with single floats.
Definition xrt_defines.h:246
Image size.
Definition xrt_defines.h:466
A 2 element vector with single floats.
Definition xrt_defines.h:279
A 3 element vector with single floats.
Definition xrt_defines.h:310
Header declaring XRT graphics interfaces.
Common defines and enums for XRT.
xrt_perf_notify_level
Performance level.
Definition xrt_defines.h:2494
xrt_perf_domain
Domain type.
Definition xrt_defines.h:2467
xrt_view_type
View type to be rendered to by the compositor.
Definition xrt_defines.h:2453
xrt_perf_set_level
Performance level.
Definition xrt_defines.h:2483
Include all of the openxr headers in one place.
Header defining xrt space and space overseer.
Header for system objects.
Include all of the Vulkan headers in one place, and cope with any "messy" includes implied by it.