Commit f9978366 authored by Patrick To's avatar Patrick To Committed by Commit Bot

Fix errors caused by incorrect use of the OpenXR APIs

Future OpenXR runtimes are more stringent on validating correct usage
of APIs. The structure type of XrView objects passed into xrLocateViews
are not currently set. The current version of the WMR OpenXR runtime
from the Windows store does not do this validation, but future versions
will.


Bug: 1015223
Change-Id: Ib4e3fca557cc6e192bd166e2ebb604a3884e7811
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865042Reviewed-by: default avatarAlexander Cooper <alcooper@chromium.org>
Commit-Queue: Patrick To <patrto@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#709617}
parent 49acf1ec
...@@ -478,7 +478,9 @@ XrResult OpenXrApiWrapper::LocateViews(XrReferenceSpaceType type, ...@@ -478,7 +478,9 @@ XrResult OpenXrApiWrapper::LocateViews(XrReferenceSpaceType type,
NOTREACHED(); NOTREACHED();
} }
std::vector<XrView> new_views(kNumViews); // Initialize the XrView objects' type field to XR_TYPE_VIEW. xrLocateViews
// fails validation if this isn't set.
std::vector<XrView> new_views(kNumViews, {XR_TYPE_VIEW});
uint32_t view_count; uint32_t view_count;
RETURN_IF_XR_FAILED(xrLocateViews(session_, &view_locate_info, &view_state, RETURN_IF_XR_FAILED(xrLocateViews(session_, &view_locate_info, &view_state,
new_views.size(), &view_count, new_views.size(), &view_count,
......
...@@ -161,10 +161,12 @@ XrResult xrCreateReferenceSpace(XrSession session, ...@@ -161,10 +161,12 @@ XrResult xrCreateReferenceSpace(XrSession session,
RETURN_IF(create_info->type != XR_TYPE_REFERENCE_SPACE_CREATE_INFO, RETURN_IF(create_info->type != XR_TYPE_REFERENCE_SPACE_CREATE_INFO,
XR_ERROR_VALIDATION_FAILURE, XR_ERROR_VALIDATION_FAILURE,
"XrReferenceSpaceCreateInfo type invalid"); "XrReferenceSpaceCreateInfo type invalid");
RETURN_IF(create_info->referenceSpaceType != XR_REFERENCE_SPACE_TYPE_LOCAL && RETURN_IF(
create_info->referenceSpaceType != XR_REFERENCE_SPACE_TYPE_VIEW, create_info->referenceSpaceType != XR_REFERENCE_SPACE_TYPE_LOCAL &&
XR_ERROR_VALIDATION_FAILURE, create_info->referenceSpaceType != XR_REFERENCE_SPACE_TYPE_VIEW &&
"XrReferenceSpaceCreateInfo referenceSpaceType invalid"); create_info->referenceSpaceType != XR_REFERENCE_SPACE_TYPE_STAGE,
XR_ERROR_VALIDATION_FAILURE,
"XrReferenceSpaceCreateInfo referenceSpaceType invalid");
RETURN_IF_XR_FAILED(g_test_helper.ValidateXrPosefIsIdentity( RETURN_IF_XR_FAILED(g_test_helper.ValidateXrPosefIsIdentity(
create_info->poseInReferenceSpace)); create_info->poseInReferenceSpace));
...@@ -595,6 +597,8 @@ XrResult xrLocateViews(XrSession session, ...@@ -595,6 +597,8 @@ XrResult xrLocateViews(XrSession session,
"xrLocateViews view_locate_info type invalid"); "xrLocateViews view_locate_info type invalid");
RETURN_IF_XR_FAILED(g_test_helper.ValidateSpace(view_locate_info->space)); RETURN_IF_XR_FAILED(g_test_helper.ValidateSpace(view_locate_info->space));
if (view_capacity_input != 0) { if (view_capacity_input != 0) {
RETURN_IF_XR_FAILED(
g_test_helper.ValidateViews(view_capacity_input, views));
RETURN_IF_FALSE(g_test_helper.UpdateViewFOV(views, view_capacity_input), RETURN_IF_FALSE(g_test_helper.UpdateViewFOV(views, view_capacity_input),
XR_ERROR_VALIDATION_FAILURE, XR_ERROR_VALIDATION_FAILURE,
"xrLocateViews UpdateViewFOV failed"); "xrLocateViews UpdateViewFOV failed");
......
...@@ -238,9 +238,11 @@ XrSpace OpenXrTestHelper::CreateReferenceSpace(XrReferenceSpaceType type) { ...@@ -238,9 +238,11 @@ XrSpace OpenXrTestHelper::CreateReferenceSpace(XrReferenceSpaceType type) {
case XR_REFERENCE_SPACE_TYPE_LOCAL: case XR_REFERENCE_SPACE_TYPE_LOCAL:
reference_spaces_[cur_space] = "/reference_space/local"; reference_spaces_[cur_space] = "/reference_space/local";
break; break;
case XR_REFERENCE_SPACE_TYPE_STAGE:
reference_spaces_[cur_space] = "/reference_space/stage";
break;
default: default:
NOTREACHED() << "Test currently only supports to create View space and " NOTREACHED() << "Unsupported XrReferenceSpaceType: " << type;
"local space";
} }
return cur_space; return cur_space;
} }
...@@ -753,3 +755,14 @@ XrResult OpenXrTestHelper::ValidateXrPosefIsIdentity( ...@@ -753,3 +755,14 @@ XrResult OpenXrTestHelper::ValidateXrPosefIsIdentity(
return XR_SUCCESS; return XR_SUCCESS;
} }
XrResult OpenXrTestHelper::ValidateViews(uint32_t view_capacity_input,
XrView* views) const {
for (uint32_t i = 0; i < view_capacity_input; i++) {
XrView view = views[i];
RETURN_IF_FALSE(view.type == XR_TYPE_VIEW, XR_ERROR_VALIDATION_FAILURE,
"XrView type invalid");
}
return XR_SUCCESS;
}
...@@ -96,6 +96,7 @@ class OpenXrTestHelper : public device::ServiceTestHook { ...@@ -96,6 +96,7 @@ class OpenXrTestHelper : public device::ServiceTestHook {
XrResult ValidatePath(XrPath path) const; XrResult ValidatePath(XrPath path) const;
XrResult ValidatePredictedDisplayTime(XrTime time) const; XrResult ValidatePredictedDisplayTime(XrTime time) const;
XrResult ValidateXrPosefIsIdentity(const XrPosef& pose) const; XrResult ValidateXrPosefIsIdentity(const XrPosef& pose) const;
XrResult ValidateViews(uint32_t view_capacity_input, XrView* views) const;
// Properties of the mock OpenXR runtime that does not change are created // Properties of the mock OpenXR runtime that does not change are created
// as static variables. // as static variables.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment