From 12d78144f6918221da2fc951afd5f55fcbec31c7 Mon Sep 17 00:00:00 2001 From: Jakob Bornecrantz <jakob@collabora.com> Date: Sat, 30 May 2020 11:58:06 +0100 Subject: [PATCH] st/oxr: Verify XrViewConfigurationType in xrEnumerateEnvironmentBlendModes --- doc/changes/state_trackers/mr.359.1.md | 2 ++ src/xrt/state_trackers/oxr/oxr_api_system.c | 31 +++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 doc/changes/state_trackers/mr.359.1.md diff --git a/doc/changes/state_trackers/mr.359.1.md b/doc/changes/state_trackers/mr.359.1.md new file mode 100644 index 000000000..9fefbca1f --- /dev/null +++ b/doc/changes/state_trackers/mr.359.1.md @@ -0,0 +1,2 @@ +OpenXR: Verify that the XrViewConfigurationType is supported by the system as +required by the OpenXR spec in xrEnumerateEnvironmentBlendModes. diff --git a/src/xrt/state_trackers/oxr/oxr_api_system.c b/src/xrt/state_trackers/oxr/oxr_api_system.c index 7a593d0af..e21ff4b5a 100644 --- a/src/xrt/state_trackers/oxr/oxr_api_system.c +++ b/src/xrt/state_trackers/oxr/oxr_api_system.c @@ -101,6 +101,23 @@ oxr_xrEnumerateViewConfigurations( viewConfigurationTypeCountOutput, viewConfigurationTypes); } +static XrResult +check_view_config_type(struct oxr_logger *log, + struct oxr_instance *inst, + XrViewConfigurationType view_conf) +{ + // These are always valid. + if (view_conf == XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO || + view_conf == XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO) { + return XR_SUCCESS; + } + + return oxr_error( + log, XR_ERROR_VALIDATION_FAILURE, + "(viewConfigurationType == 0x%08x) invalid view configuration type", + view_conf); +} + XrResult oxr_xrEnumerateEnvironmentBlendModes( XrInstance instance, @@ -112,10 +129,24 @@ oxr_xrEnumerateEnvironmentBlendModes( { struct oxr_instance *inst; struct oxr_logger log; + XrResult ret; OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrEnumerateEnvironmentBlendModes"); OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); + ret = check_view_config_type(&log, inst, viewConfigurationType); + if (ret != XR_SUCCESS) { + return ret; + } + + if (viewConfigurationType != sys->view_config_type) { + return oxr_error(&log, + XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, + "(viewConfigurationType == 0x%08x) " + "unsupported view configuration type", + viewConfigurationType); + } + return oxr_system_enumerate_blend_modes( &log, sys, viewConfigurationType, environmentBlendModeCapacityInput, environmentBlendModeCountOutput, environmentBlendModes);