The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

xrt: Expose the form factor on the system

This is to allow system implementations to specify the form factor and make
it available to IPC clients.

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2492>

authored by

Andrei Aristarkhov and committed by
Marge Bot
74902966 53376776

+43 -15
+1
src/xrt/auxiliary/util/u_system.c
··· 263 263 usys->base.properties.vendor_id = 42; 264 264 // The magical 247 number, is to silence warnings. 265 265 snprintf(usys->base.properties.name, XRT_MAX_SYSTEM_NAME_SIZE, "Monado: %.*s", 247, name); 266 + usys->base.properties.form_factor = XRT_FORM_FACTOR_HMD; 266 267 }
+2 -1
src/xrt/include/xrt/xrt_system.h
··· 1 1 // Copyright 2020-2024, Collabora, Ltd. 2 - // Copyright 2023, NVIDIA CORPORATION. 2 + // Copyright 2023-2025, NVIDIA CORPORATION. 3 3 // SPDX-License-Identifier: BSL-1.0 4 4 /*! 5 5 * @file ··· 43 43 { 44 44 uint32_t vendor_id; 45 45 char name[XRT_MAX_SYSTEM_NAME_SIZE]; 46 + enum xrt_form_factor form_factor; 46 47 }; 47 48 48 49 /*!
+34
src/xrt/state_trackers/oxr/oxr_conversions.h
··· 1 1 // Copyright 2018-2024, Collabora, Ltd. 2 + // Copyright 2024-2025, NVIDIA CORPORATION. 2 3 // SPDX-License-Identifier: BSL-1.0 3 4 /*! 4 5 * @file ··· 155 156 156 157 return XRT_SPACE_REFERENCE_TYPE_INVALID; 157 158 } 159 + 160 + 161 + /* 162 + * 163 + * Form factor things. 164 + * 165 + */ 166 + 167 + static inline enum xrt_form_factor 168 + xr_form_factor_to_xrt(XrFormFactor form_factor) 169 + { 170 + switch (form_factor) { 171 + case XR_FORM_FACTOR_HANDHELD_DISPLAY: return XRT_FORM_FACTOR_HANDHELD; 172 + case XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY: return XRT_FORM_FACTOR_HMD; 173 + case XR_FORM_FACTOR_MAX_ENUM: assert(false); return 0; // As good as any. 174 + } 175 + 176 + // Used as default, to get warnings. 177 + return XRT_FORM_FACTOR_HMD; 178 + } 179 + 180 + static inline enum XrFormFactor 181 + xrt_form_factor_to_xr(enum xrt_form_factor form_factor) 182 + { 183 + switch (form_factor) { 184 + case XRT_FORM_FACTOR_HANDHELD: return XR_FORM_FACTOR_HANDHELD_DISPLAY; 185 + case XRT_FORM_FACTOR_HMD: return XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY; 186 + } 187 + 188 + // Used as default, to get warnings. 189 + return XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY; 190 + } 191 + 158 192 159 193 /* 160 194 *
-1
src/xrt/state_trackers/oxr/oxr_objects.h
··· 1501 1501 //! Have the client application called the gfx api requirements func? 1502 1502 bool gotten_requirements; 1503 1503 1504 - XrFormFactor form_factor; 1505 1504 XrViewConfigurationType view_config_type; 1506 1505 XrViewConfigurationView views[2]; 1507 1506 uint32_t blend_mode_count;
+6 -13
src/xrt/state_trackers/oxr/oxr_system.c
··· 1 1 // Copyright 2018-2024, Collabora, Ltd. 2 + // Copyright 2024-2025, NVIDIA CORPORATION. 2 3 // SPDX-License-Identifier: BSL-1.0 3 4 /*! 4 5 * @file ··· 22 23 #include "oxr_two_call.h" 23 24 #include "oxr_chain.h" 24 25 #include "oxr_api_verify.h" 26 + #include "oxr_conversions.h" 25 27 26 28 27 29 DEBUG_GET_ONCE_NUM_OPTION(scale_percentage, "OXR_VIEWPORT_SCALE_PERCENTAGE", 100) 28 30 29 - static enum xrt_form_factor 30 - convert_form_factor(XrFormFactor form_factor) 31 - { 32 - switch (form_factor) { 33 - case XR_FORM_FACTOR_HANDHELD_DISPLAY: return XRT_FORM_FACTOR_HANDHELD; 34 - case XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY: return XRT_FORM_FACTOR_HMD; 35 - default: return XRT_FORM_FACTOR_HMD; 36 - } 37 - } 31 + 38 32 39 33 static bool 40 34 oxr_system_matches(struct oxr_logger *log, struct oxr_system *sys, XrFormFactor form_factor) 41 35 { 42 - return form_factor == sys->form_factor; 36 + return xr_form_factor_to_xrt(form_factor) == sys->xsys->properties.form_factor; 43 37 } 44 38 45 39 XrResult ··· 66 60 return oxr_error(log, XR_ERROR_FORM_FACTOR_UNSUPPORTED, 67 61 "(getInfo->formFactor) no matching system " 68 62 "(given: %i, first: %i)", 69 - form_factor, systems[0]->form_factor); 63 + form_factor, xrt_form_factor_to_xr(systems[0]->xsys->properties.form_factor)); 70 64 } 71 65 72 66 struct xrt_device *xdev = GET_XDEV_BY_ROLE(selected, head); 73 67 if (xdev->supported.form_factor_check && 74 - !xrt_device_is_form_factor_available(xdev, convert_form_factor(form_factor))) { 68 + !xrt_device_is_form_factor_available(xdev, xr_form_factor_to_xrt(form_factor))) { 75 69 return oxr_error(log, XR_ERROR_FORM_FACTOR_UNAVAILABLE, "request form factor %i is unavailable now", 76 70 form_factor); 77 71 } ··· 114 108 115 109 sys->inst = inst; 116 110 sys->systemId = systemId; 117 - sys->form_factor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY; 118 111 if (view_count == 1) { 119 112 sys->view_config_type = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO; 120 113 } else if (view_count == 2) {