diff --git a/src/xrt/include/xrt/xrt_compiler.h b/src/xrt/include/xrt/xrt_compiler.h index 6123e180c..fa619ddc4 100644 --- a/src/xrt/include/xrt/xrt_compiler.h +++ b/src/xrt/include/xrt/xrt_compiler.h @@ -22,7 +22,12 @@ #include // for atomic intrinsics #include "xrt_windows.h" -#endif // _MSC_VER +// Older MSVC versions do not have stdalign.h, define it manually using __declspec(align). +#define XRT_ALIGNAS(n) __declspec(align(n)) +#else // _MSC_VER +#include +#define XRT_ALIGNAS(align) alignas(align) +#endif #if (defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN) || \ (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \ diff --git a/src/xrt/include/xrt/xrt_compositor.h b/src/xrt/include/xrt/xrt_compositor.h index f86ed3f4b..12926fd45 100644 --- a/src/xrt/include/xrt/xrt_compositor.h +++ b/src/xrt/include/xrt/xrt_compositor.h @@ -20,8 +20,6 @@ #include "xrt/xrt_config_have.h" #include "xrt/xrt_windows.h" -#include - #if defined(XRT_HAVE_D3D11) #include #elif defined(XRT_DOXYGEN) @@ -412,7 +410,7 @@ struct xrt_layer_data * * alignas for 32 bit client support, */ - alignas(8) int64_t timestamp; + XRT_ALIGNAS(8) int64_t timestamp; /*! * Composition flags @@ -481,7 +479,7 @@ struct xrt_layer_data struct xrt_layer_frame_data { //! alignas for 32 bit client support, see @ref ipc-design - alignas(8) int64_t frame_id; + XRT_ALIGNAS(8) int64_t frame_id; int64_t display_time_ns; enum xrt_blend_mode env_blend_mode; }; @@ -935,7 +933,7 @@ struct xrt_session_info { bool is_overlay; //! alignas for 32 bit client support, see @ref ipc-design - alignas(8) uint64_t flags; + XRT_ALIGNAS(8) uint64_t flags; uint32_t z_order; }; @@ -953,7 +951,7 @@ struct xrt_compositor_info * Supported formats, never changes. * alignas for 32 bit client support, see @ref ipc-design */ - alignas(8) int64_t formats[XRT_MAX_SWAPCHAIN_FORMATS]; + XRT_ALIGNAS(8) int64_t formats[XRT_MAX_SWAPCHAIN_FORMATS]; //! Max texture size that GPU supports (size of a single dimension), zero means any size. uint32_t max_texture_size; diff --git a/src/xrt/include/xrt/xrt_device.h b/src/xrt/include/xrt/xrt_device.h index 557796603..ee286b9ff 100644 --- a/src/xrt/include/xrt/xrt_device.h +++ b/src/xrt/include/xrt/xrt_device.h @@ -17,8 +17,6 @@ #include "xrt/xrt_visibility_mask.h" #include "xrt/xrt_limits.h" -#include - #ifdef __cplusplus extern "C" { #endif @@ -167,7 +165,7 @@ struct xrt_input bool active; //! alignas for 32 bit client support, see @ref ipc-design - alignas(8) int64_t timestamp; + XRT_ALIGNAS(8) int64_t timestamp; enum xrt_input_name name; diff --git a/src/xrt/include/xrt/xrt_system.h b/src/xrt/include/xrt/xrt_system.h index 995f71bc3..961a806f4 100644 --- a/src/xrt/include/xrt/xrt_system.h +++ b/src/xrt/include/xrt/xrt_system.h @@ -15,8 +15,6 @@ #include "xrt/xrt_defines.h" #include "xrt/xrt_device.h" -#include - #ifdef __cplusplus extern "C" { #endif @@ -172,7 +170,7 @@ struct xrt_system_roles * * alignas for 32 bit client support, see @ref ipc-design */ - alignas(8) uint64_t generation_id; + XRT_ALIGNAS(8) uint64_t generation_id; /*! * Index in @ref xrt_system_devices::xdevs for the user's left