aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wpt/tests/webxr/depth-sensing/cpu/depth_sensing_cpu_matchDepthViewDepthData.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wpt/tests/webxr/depth-sensing/cpu/depth_sensing_cpu_matchDepthViewDepthData.https.html')
-rw-r--r--tests/wpt/tests/webxr/depth-sensing/cpu/depth_sensing_cpu_matchDepthViewDepthData.https.html92
1 files changed, 92 insertions, 0 deletions
diff --git a/tests/wpt/tests/webxr/depth-sensing/cpu/depth_sensing_cpu_matchDepthViewDepthData.https.html b/tests/wpt/tests/webxr/depth-sensing/cpu/depth_sensing_cpu_matchDepthViewDepthData.https.html
new file mode 100644
index 00000000000..a2316fac8c1
--- /dev/null
+++ b/tests/wpt/tests/webxr/depth-sensing/cpu/depth_sensing_cpu_matchDepthViewDepthData.https.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>WebXR Depth Sensing Test: XRDepthInformation.data buffer with matchDepthView and offset depth data (CPU)</title>
+<link rel="help" href="https://immersive-web.github.io/depth-sensing/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/webxr/resources/webxr_util.js"></script>
+<script src="/webxr/resources/webxr_test_constants.js"></script>
+<script src="/webxr/resources/webxr_test_constants_fake_depth.js"></script>
+<script src="/webxr/resources/webxr_test_asserts.js"></script>
+
+<canvas id="webgl-canvas"></canvas>
+<script>
+
+const offsetMatchDepthViewDataTestGenerator = function(matchDepthView) {
+ return function(session, controller, t, sessionObjects) {
+ return session.requestReferenceSpace('viewer').then((viewerSpace) => new Promise((resolve, reject) => {
+ const rafCb = function(time, frame) {
+ const pose = frame.getViewerPose(viewerSpace);
+
+ for (const view of pose.views) {
+ const depthInformation = frame.getDepthInformation(view);
+ t.step(() => {
+ assert_not_equals(depthInformation, null, "Depth information should not be null.");
+ assert_not_equals(depthInformation.data, null, "Depth information data ArrayBuffer should not be null.");
+
+ // OFFSET_DEPTH_SENSING_DATA.depthData is a Uint8Array.
+ // We need its underlying ArrayBuffer for comparison with depthInformation.data.
+ const rawDeviceDepthArrayBuffer = OFFSET_DEPTH_SENSING_DATA.depthData.buffer;
+ const pageVisibleDepthArrayBuffer = depthInformation.data;
+
+ if (matchDepthView) {
+ // When matchDepthView is true, depth data should be reprojected to the XRView.
+ // This reprojected data must be different from the raw device data.
+ assert_array_buffer_not_equals(
+ pageVisibleDepthArrayBuffer,
+ rawDeviceDepthArrayBuffer,
+ "Page depth data ArrayBuffer SHOULD NOT match raw device depth data ArrayBuffer when matchDepthView is true.");
+ } else {
+ // When matchDepthView is false, depth data should be the raw device data,
+ // without reprojection to the XRView.
+ assert_array_buffer_equals(
+ pageVisibleDepthArrayBuffer,
+ rawDeviceDepthArrayBuffer,
+ "Page depth data ArrayBuffer SHOULD match raw device depth data ArrayBuffer when matchDepthView is false.");
+ }
+ });
+ }
+ resolve();
+ };
+
+ session.requestAnimationFrame(rafCb);
+ }));
+ };
+};
+
+const fakeDeviceInitParams = {
+ supportedModes: ["immersive-ar"],
+ views: VALID_VIEWS,
+ supportedFeatures: ALL_FEATURES,
+ depthSensingData: OFFSET_DEPTH_SENSING_DATA,
+};
+
+xr_session_promise_test(
+ `XRDepthInformation.data matches raw device data when matchDepthView is false with offset depth (CPU)`,
+ offsetMatchDepthViewDataTestGenerator(/*matchDepthView=*/false),
+ fakeDeviceInitParams,
+ 'immersive-ar',
+ {
+ requiredFeatures: ['depth-sensing'],
+ depthSensing: {
+ usagePreference: ['cpu-optimized'],
+ dataFormatPreference: [OFFSET_DEPTH_SENSING_DATA.depthFormat],
+ matchDepthView: false
+ }
+});
+
+xr_session_promise_test(
+ `XRDepthInformation.data does NOT match raw device data when matchDepthView is true with offset depth (CPU)`,
+ offsetMatchDepthViewDataTestGenerator(/*matchDepthView=*/true),
+ fakeDeviceInitParams,
+ 'immersive-ar',
+ {
+ requiredFeatures: ['depth-sensing'],
+ depthSensing: {
+ usagePreference: ['cpu-optimized'],
+ dataFormatPreference: [OFFSET_DEPTH_SENSING_DATA.depthFormat],
+ matchDepthView: true
+ }
+ }
+);
+</script>