···4444 case XR_REFERENCE_SPACE_TYPE_VIEW:
4545 case XR_REFERENCE_SPACE_TYPE_LOCAL:
4646 case XR_REFERENCE_SPACE_TYPE_STAGE: return XR_SUCCESS;
4747+ case XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT:
4848+#ifdef OXR_HAVE_EXT_local_floor
4949+ if (sys->inst->extensions.EXT_local_floor) {
5050+ return XR_SUCCESS;
5151+ }
5252+#endif
5353+ return oxr_error(
5454+ log, XR_ERROR_VALIDATION_FAILURE,
5555+ "(%s == XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT) is only valid if XR_EXT_local_floor is enabled",
5656+ field_name);
4757 default: break;
4858 }
4959
+1-1
src/xrt/state_trackers/oxr/oxr_objects.h
···12761276 uint32_t blend_mode_count;
12771277 XrEnvironmentBlendMode blend_modes[3];
1278127812791279- XrReferenceSpaceType reference_spaces[3];
12791279+ XrReferenceSpaceType reference_spaces[4];
12801280 uint32_t reference_space_count;
1281128112821282 //! Cache of the last known system roles, see @xrt_system_roles::generation_id
+1-1
src/xrt/state_trackers/oxr/oxr_space.c
···9292 case OXR_SPACE_TYPE_ACTION: return get_xrt_space_action(log, spc, out_xspace);
9393 case OXR_SPACE_TYPE_REFERENCE_VIEW: xspace = spc->sess->sys->xso->semantic.view; break;
9494 case OXR_SPACE_TYPE_REFERENCE_LOCAL: xspace = spc->sess->sys->xso->semantic.local; break;
9595- case OXR_SPACE_TYPE_REFERENCE_LOCAL_FLOOR: xspace = NULL; break;
9595+ case OXR_SPACE_TYPE_REFERENCE_LOCAL_FLOOR: xspace = spc->sess->sys->xso->semantic.local_floor; break;
9696 case OXR_SPACE_TYPE_REFERENCE_STAGE: xspace = spc->sess->sys->xso->semantic.stage; break;
9797 case OXR_SPACE_TYPE_REFERENCE_UNBOUNDED_MSFT: xspace = spc->sess->sys->xso->semantic.unbounded; break;
9898 case OXR_SPACE_TYPE_REFERENCE_COMBINED_EYE_VARJO: xspace = NULL; break;
+13-1
src/xrt/state_trackers/oxr/oxr_system.c
···194194 * Reference space support.
195195 */
196196197197- static_assert(3 <= ARRAY_SIZE(sys->reference_spaces), "Not enough space in array");
197197+ static_assert(4 <= ARRAY_SIZE(sys->reference_spaces), "Not enough space in array");
198198199199 if (sys->xso->semantic.view != NULL) {
200200 sys->reference_spaces[sys->reference_space_count++] = XR_REFERENCE_SPACE_TYPE_VIEW;
···203203 if (sys->xso->semantic.local != NULL) {
204204 sys->reference_spaces[sys->reference_space_count++] = XR_REFERENCE_SPACE_TYPE_LOCAL;
205205 }
206206+207207+#ifdef OXR_HAVE_EXT_local_floor
208208+ if (sys->inst->extensions.EXT_local_floor) {
209209+ if (sys->xso->semantic.local_floor != NULL) {
210210+ sys->reference_spaces[sys->reference_space_count++] = XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT;
211211+ } else {
212212+ oxr_warn(log,
213213+ "XR_EXT_local_floor enabled but system doesn't support local_floor,"
214214+ " breaking spec by not exposing the reference space.");
215215+ }
216216+ }
217217+#endif
206218207219 if (sys->xso->semantic.stage != NULL) {
208220 sys->reference_spaces[sys->reference_space_count++] = XR_REFERENCE_SPACE_TYPE_STAGE;