diff --git a/src/xrt/state_trackers/oxr/oxr_api_session.c b/src/xrt/state_trackers/oxr/oxr_api_session.c index 9c5889f12..d4fb0fd2e 100644 --- a/src/xrt/state_trackers/oxr/oxr_api_session.c +++ b/src/xrt/state_trackers/oxr/oxr_api_session.c @@ -1,4 +1,5 @@ // Copyright 2019-2024, Collabora, Ltd. +// Copyright 2025, NVIDIA CORPORATION. // SPDX-License-Identifier: BSL-1.0 /*! * @file @@ -99,6 +100,7 @@ oxr_xrBeginSession(XrSession session, const XrSessionBeginInfo *beginInfo) // in a headless session there is no compositor and primaryViewConfigurationType must be ignored if (sess->compositor != NULL) { OXR_VERIFY_VIEW_CONFIG_TYPE(&log, sess->sys->inst, beginInfo->primaryViewConfigurationType); + OXR_VERIFY_VIEW_CONFIG_TYPE_SUPPORTED(&log, sess->sys, beginInfo->primaryViewConfigurationType); } // Going to effectively double check this, but this gives us an early out. @@ -239,6 +241,7 @@ oxr_xrLocateViews(XrSession session, OXR_VERIFY_SPACE_NOT_NULL(&log, viewLocateInfo->space, spc); OXR_VERIFY_ARG_TYPE_AND_NOT_NULL(&log, viewState, XR_TYPE_VIEW_STATE); OXR_VERIFY_VIEW_CONFIG_TYPE(&log, sess->sys->inst, viewLocateInfo->viewConfigurationType); + OXR_VERIFY_VIEW_CONFIG_TYPE_SUPPORTED(&log, sess->sys, viewLocateInfo->viewConfigurationType); if (viewCapacityInput == 0) { OXR_VERIFY_ARG_NOT_NULL(&log, viewCountOutput); @@ -255,13 +258,6 @@ oxr_xrLocateViews(XrSession session, viewLocateInfo->displayTime); } - if (viewLocateInfo->viewConfigurationType != sess->sys->view_config_type) { - return oxr_error(&log, XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, - "(viewConfigurationType == 0x%08x) " - "unsupported view configuration type", - viewLocateInfo->viewConfigurationType); - } - return oxr_session_locate_views( // &log, // sess, // @@ -300,11 +296,7 @@ oxr_xrGetVisibilityMaskKHR(XrSession session, visibilityMask->indexCountOutput = 0; OXR_VERIFY_VIEW_CONFIG_TYPE(&log, sess->sys->inst, viewConfigurationType); - if (viewConfigurationType != sess->sys->view_config_type) { - return oxr_error(&log, XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, - "(viewConfigurationType == 0x%08x) unsupported view configuration type", - viewConfigurationType); - } + OXR_VERIFY_VIEW_CONFIG_TYPE_SUPPORTED(&log, sess->sys, viewConfigurationType); OXR_VERIFY_VIEW_INDEX(&log, viewIndex); diff --git a/src/xrt/state_trackers/oxr/oxr_api_system.c b/src/xrt/state_trackers/oxr/oxr_api_system.c index 1fe9a4a14..23e0c53b2 100644 --- a/src/xrt/state_trackers/oxr/oxr_api_system.c +++ b/src/xrt/state_trackers/oxr/oxr_api_system.c @@ -134,13 +134,7 @@ oxr_xrEnumerateEnvironmentBlendModes(XrInstance instance, OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrEnumerateEnvironmentBlendModes"); OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); OXR_VERIFY_VIEW_CONFIG_TYPE(&log, inst, viewConfigurationType); - - if (viewConfigurationType != sys->view_config_type) { - return oxr_error(&log, XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, - "(viewConfigurationType == 0x%08x) " - "unsupported view configuration type", - viewConfigurationType); - } + OXR_VERIFY_VIEW_CONFIG_TYPE_SUPPORTED(&log, sys, viewConfigurationType); return oxr_system_enumerate_blend_modes(&log, sys, viewConfigurationType, environmentBlendModeCapacityInput, environmentBlendModeCountOutput, environmentBlendModes); @@ -160,6 +154,7 @@ oxr_xrGetViewConfigurationProperties(XrInstance instance, OXR_VERIFY_ARG_TYPE_AND_NOT_NULL(&log, configurationProperties, XR_TYPE_VIEW_CONFIGURATION_PROPERTIES); OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); OXR_VERIFY_VIEW_CONFIG_TYPE(&log, inst, viewConfigurationType); + OXR_VERIFY_VIEW_CONFIG_TYPE_SUPPORTED(&log, sys, viewConfigurationType); return oxr_system_get_view_conf_properties(&log, sys, viewConfigurationType, configurationProperties); } @@ -178,6 +173,8 @@ oxr_xrEnumerateViewConfigurationViews(XrInstance instance, struct oxr_logger log; OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrEnumerateViewConfigurationViews"); OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); + OXR_VERIFY_VIEW_CONFIG_TYPE(&log, inst, viewConfigurationType); + OXR_VERIFY_VIEW_CONFIG_TYPE_SUPPORTED(&log, sys, viewConfigurationType); for (uint32_t i = 0; i < viewCapacityInput; i++) { OXR_VERIFY_ARG_ARRAY_ELEMENT_TYPE(&log, views, i, XR_TYPE_VIEW_CONFIGURATION_VIEW); diff --git a/src/xrt/state_trackers/oxr/oxr_api_verify.h b/src/xrt/state_trackers/oxr/oxr_api_verify.h index b7ef788ae..c21d4c96c 100644 --- a/src/xrt/state_trackers/oxr/oxr_api_verify.h +++ b/src/xrt/state_trackers/oxr/oxr_api_verify.h @@ -1,4 +1,5 @@ // Copyright 2018-2024, Collabora, Ltd. +// Copyright 2025, NVIDIA CORPORATION. // SPDX-License-Identifier: BSL-1.0 /*! * @file @@ -273,6 +274,14 @@ struct oxr_subaction_paths; } \ } while (false) +#define OXR_VERIFY_VIEW_CONFIG_TYPE_SUPPORTED(log, sys, view_conf) \ + do { \ + XrResult verify_ret = oxr_verify_view_config_type_supported(log, sys, view_conf, #view_conf); \ + if (verify_ret != XR_SUCCESS) { \ + return verify_ret; \ + } \ + } while (false) + #define OXR_VERIFY_VIEW_INDEX(log, index) \ do { \ if (index > 2) { \ @@ -436,6 +445,12 @@ oxr_verify_view_config_type(struct oxr_logger *log, XrViewConfigurationType view_conf, const char *view_conf_name); +XrResult +oxr_verify_view_config_type_supported(struct oxr_logger *log, + struct oxr_system *sys, + XrViewConfigurationType view_conf, + const char *view_conf_name); + XrResult oxr_verify_XrSessionCreateInfo(struct oxr_logger * /*log*/, const struct oxr_instance * /*inst*/, diff --git a/src/xrt/state_trackers/oxr/oxr_session.c b/src/xrt/state_trackers/oxr/oxr_session.c index 427bed724..856f5656c 100644 --- a/src/xrt/state_trackers/oxr/oxr_session.c +++ b/src/xrt/state_trackers/oxr/oxr_session.c @@ -283,18 +283,6 @@ oxr_session_begin(struct oxr_logger *log, struct oxr_session *sess, const XrSess struct xrt_compositor *xc = sess->compositor; if (xc != NULL) { - XrViewConfigurationType view_type = beginInfo->primaryViewConfigurationType; - - // in a headless session there is no compositor and primaryViewConfigurationType must be ignored - if (sess->compositor != NULL && view_type != sess->sys->view_config_type) { - /*! @todo we only support a single view config type per - * system right now */ - return oxr_error(log, XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, - "(beginInfo->primaryViewConfigurationType == " - "0x%08x) view configuration type not supported", - view_type); - } - const struct oxr_extension_status *extensions = &sess->sys->inst->extensions; const struct xrt_begin_session_info begin_session_info = { diff --git a/src/xrt/state_trackers/oxr/oxr_verify.c b/src/xrt/state_trackers/oxr/oxr_verify.c index be6b5747a..c19c2718f 100644 --- a/src/xrt/state_trackers/oxr/oxr_verify.c +++ b/src/xrt/state_trackers/oxr/oxr_verify.c @@ -458,6 +458,21 @@ oxr_verify_view_config_type(struct oxr_logger *log, view_conf_name, view_conf); } +XrResult +oxr_verify_view_config_type_supported(struct oxr_logger *log, + struct oxr_system *sys, + XrViewConfigurationType view_conf, + const char *view_conf_name) +{ + if (sys->view_config_type == view_conf) { + return XR_SUCCESS; + } + + return oxr_error(log, XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, + "(%s == 0x%08x) unsupported view configuration type by system %zu", view_conf_name, view_conf, + sys->systemId); +} + XrResult oxr_verify_XrSessionCreateInfo(struct oxr_logger *log, const struct oxr_instance *inst,