From b47eaaa2661feab8c20dd1e15898eaa198e530de Mon Sep 17 00:00:00 2001 From: Christoph Haag <christoph.haag@collabora.com> Date: Thu, 29 Feb 2024 20:58:09 +0100 Subject: [PATCH] st/oxr: Record OpenXR major.minor version on oxr_instance This is needed to differentiate e.g. OpenXR 1.1 functionality from OpenXR 1.0. Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2194> --- src/xrt/state_trackers/oxr/oxr_api_instance.c | 2 +- src/xrt/state_trackers/oxr/oxr_instance.c | 2 ++ src/xrt/state_trackers/oxr/oxr_objects.h | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/xrt/state_trackers/oxr/oxr_api_instance.c b/src/xrt/state_trackers/oxr/oxr_api_instance.c index 9ace06072..3c84ee6c2 100644 --- a/src/xrt/state_trackers/oxr/oxr_api_instance.c +++ b/src/xrt/state_trackers/oxr/oxr_api_instance.c @@ -201,7 +201,7 @@ oxr_xrCreateInstance(const XrInstanceCreateInfo *createInfo, XrInstance *out_ins #endif struct oxr_instance *inst = NULL; - ret = oxr_instance_create(&log, createInfo, &extensions, &inst); + ret = oxr_instance_create(&log, createInfo, app_major_minor, &extensions, &inst); if (ret != XR_SUCCESS) { return ret; } diff --git a/src/xrt/state_trackers/oxr/oxr_instance.c b/src/xrt/state_trackers/oxr/oxr_instance.c index fb29a915b..6ee0906ae 100644 --- a/src/xrt/state_trackers/oxr/oxr_instance.c +++ b/src/xrt/state_trackers/oxr/oxr_instance.c @@ -193,6 +193,7 @@ apply_quirks(struct oxr_logger *log, struct oxr_instance *inst) XrResult oxr_instance_create(struct oxr_logger *log, const XrInstanceCreateInfo *createInfo, + XrVersion major_minor, const struct oxr_extension_status *extensions, struct oxr_instance **out_instance) { @@ -205,6 +206,7 @@ oxr_instance_create(struct oxr_logger *log, OXR_ALLOCATE_HANDLE_OR_RETURN(log, inst, OXR_XR_DEBUG_INSTANCE, oxr_instance_destroy, NULL); inst->extensions = *extensions; // Sets the enabled extensions. + inst->openxr_version.major_minor = major_minor; inst->lifecycle_verbose = debug_get_bool_option_lifecycle_verbose(); inst->debug_spaces = debug_get_bool_option_debug_spaces(); inst->debug_views = debug_get_bool_option_debug_views(); diff --git a/src/xrt/state_trackers/oxr/oxr_objects.h b/src/xrt/state_trackers/oxr/oxr_objects.h index 25644b054..1ce757f06 100644 --- a/src/xrt/state_trackers/oxr/oxr_objects.h +++ b/src/xrt/state_trackers/oxr/oxr_objects.h @@ -226,6 +226,7 @@ oxr_instance_to_openxr(struct oxr_instance *inst) XrResult oxr_instance_create(struct oxr_logger *log, const XrInstanceCreateInfo *createInfo, + XrVersion major_minor, const struct oxr_extension_status *extensions, struct oxr_instance **out_inst); @@ -1604,6 +1605,13 @@ struct oxr_instance //! Enabled extensions struct oxr_extension_status extensions; + //! The OpenXR version requested in the app info. It determines the instance's OpenXR version. + struct + { + //! Stores only major.minor version. Simplifies comparisons for e.g. "at least OpenXR 1.1". + XrVersion major_minor; + } openxr_version; + // Hardcoded single system. struct oxr_system system;