···110110111111 //! Ptrs to the localspace
112112 struct xrt_space *localspace[XRT_MAX_CLIENT_SPACES];
113113+ //! Ptrs to the localfloorspace
114114+ struct xrt_space *localfloorspace[XRT_MAX_CLIENT_SPACES];
113115114116 /*!
115117 * Create a space with a fixed offset to the parent space.
···291293 const struct xrt_pose *offset);
292294293295 /*!
294294- * Create a localspace.
296296+ * Create a localspace and a localfloorspace.
295297 *
296298 * @param[in] xso Owning space overseer.
297297- * @param[out] out_space The newly created localspace.
299299+ * @param[out] out_local_space The newly created localspace.
300300+ * @param[out] out_local_floor_space The newly created localfloorspace.
298301 */
299299- xrt_result_t (*create_local_space)(struct xrt_space_overseer *xso, struct xrt_space **out_space);
302302+ xrt_result_t (*create_local_space)(struct xrt_space_overseer *xso,
303303+ struct xrt_space **out_local_space,
304304+ struct xrt_space **out_local_floor_space);
300305301306 /*!
302307 * Destroy function.
···496501}
497502498503/*!
499499- * @copydoc xrt_space_overseer::create_localspace_space
504504+ * @copydoc xrt_space_overseer::create_local_space
500505 *
501506 * Helper for calling through the function pointer.
502507 *
503508 * @public @memberof xrt_space_overseer
504509 */
505510static inline xrt_result_t
506506-xrt_space_overseer_create_local_space(struct xrt_space_overseer *xso, struct xrt_space **out_space)
511511+xrt_space_overseer_create_local_space(struct xrt_space_overseer *xso,
512512+ struct xrt_space **out_local_space,
513513+ struct xrt_space **out_local_floor_space)
507514{
508508- return xso->create_local_space(xso, out_space);
515515+ return xso->create_local_space(xso, out_local_space, out_local_floor_space);
509516}
510517511518/*!
+4
src/xrt/ipc/server/ipc_server.h
···120120 uint32_t local_space_index;
121121 //! Index of localspace in space overseer.
122122 uint32_t local_space_overseer_index;
123123+ //! Index of localfloorspace in ipc client.
124124+ uint32_t local_floor_space_index;
125125+ //! Index of localfloorspace in space overseer.
126126+ uint32_t local_floor_space_overseer_index;
123127124128 //! Ptrs to the spaces.
125129 struct xrt_space *xspcs[IPC_MAX_CLIENT_SPACES];
···7272 NULL);
7373 }
74747575+ if (ics->local_floor_space_overseer_index < IPC_MAX_CLIENT_SPACES && //
7676+ ics->local_floor_space_overseer_index >= 0) {
7777+ xrt_space_reference(
7878+ (struct xrt_space **)&ics->server->xso->localfloorspace[ics->local_floor_space_overseer_index],
7979+ NULL);
8080+ }
8181+7582 // Mark an still in use reference spaces as no longer used.
7683 for (uint32_t i = 0; i < ARRAY_SIZE(ics->ref_space_used); i++) {
7784 bool used = ics->ref_space_used[i];