···228228[SCM_RIGHTS]: https://man7.org/linux/man-pages/man3/cmsg.3.html
229229[win32handles]: https://lackingrhoticity.blogspot.com/2015/05/passing-fds-handles-between-processes.html
230230[WinSCM_RIGHTS]: https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/#unsupportedunavailable
231231+232232+## 32 bits client support on 64 bits server
233233+234234+On 64 bits system, the server process will typically be a 64 bits executable,
235235+clients may be 32 or 64 bits. As IPC either through socket or shared memory will
236236+share C struct directly, we must pay attention to memory layout.
237237+238238+All data types must be fixed size and alignments must be based on the 64 bits
239239+targets. On Linux this mostly means `alignas(8)` must be used for (u)int64_t.
+8-1
src/xrt/include/xrt/xrt_compositor.h
···409409 *
410410 * The layer may be displayed after this point, but must never be
411411 * displayed before.
412412+ *
413413+ * alignas for 32 bit client support,
412414 */
413415 alignas(8) int64_t timestamp;
414416···478480 */
479481struct xrt_layer_frame_data
480482{
483483+ //! alignas for 32 bit client support, see @ref ipc-design
481484 alignas(8) int64_t frame_id;
482485 int64_t display_time_ns;
483486 enum xrt_blend_mode env_blend_mode;
···931934struct xrt_session_info
932935{
933936 bool is_overlay;
937937+ //! alignas for 32 bit client support, see @ref ipc-design
934938 alignas(8) uint64_t flags;
935939 uint32_t z_order;
936940};
···945949 //! Number of formats, never changes.
946950 uint32_t format_count;
947951948948- //! Supported formats, never changes.
952952+ /*!
953953+ * Supported formats, never changes.
954954+ * alignas for 32 bit client support, see @ref ipc-design
955955+ */
949956 alignas(8) int64_t formats[XRT_MAX_SWAPCHAIN_FORMATS];
950957951958 //! Max texture size that GPU supports (size of a single dimension), zero means any size.
+1
src/xrt/include/xrt/xrt_device.h
···164164 //! Is this input active.
165165 bool active;
166166167167+ //! alignas for 32 bit client support, see @ref ipc-design
167168 alignas(8) int64_t timestamp;
168169169170 enum xrt_input_name name;
+2
src/xrt/include/xrt/xrt_system.h
···169169 * All valid values are greater then zero; this is to
170170 * make init easier where any cache can start at zero and be guaranteed
171171 * to be replaced with a new @ref xrt_system_roles.
172172+ *
173173+ * alignas for 32 bit client support, see @ref ipc-design
172174 */
173175 alignas(8) uint64_t generation_id;
174176