Unreviewed, rolling out r243438.
[WebKit-https.git] / LayoutTests / webgpu / map-write-buffers.html
1 <!DOCTYPE html><!-- webkit-test-runner [ experimental:WebGPUEnabled=true ] -->
2 <meta charset=utf-8>
3 <title>Tests for mapWriteAsync on a GPUBuffer.</title>
4 <body>
5 <script src="../resources/testharness.js"></script>
6 <script src="../resources/testharnessreport.js"></script>
7 <script src="js/webgpu-functions.js"></script>
8 <script>
9 async function runTests() {
10     const device =  await getBasicDevice();
11
12     // Basic mapWriteAsync functionality
13     promise_test(async () => {
14         const buffer = device.createBuffer({ size: 16, usage: GPUBufferUsage.MAP_WRITE });
15         assert_true(buffer instanceof WebGPUBuffer, "createBuffer returned a WebGPUBuffer");
16
17         let arrayBuffer = await buffer.mapWriteAsync();
18
19         assert_true(arrayBuffer instanceof ArrayBuffer, "first mapWriteAsync resolved successfully");
20         
21         let array = new Float32Array(arrayBuffer);
22         assert_equals(array[0], 0, "mapWriteAsync zeroed out storage");
23         array.set([1, 2, 3, 4]);
24         
25         buffer.unmap();
26
27         const promise = buffer.mapWriteAsync(); // This will eventually reject due to buffer.destroy()
28
29         buffer.destroy();
30
31         await promise.then(() => {
32             assert_unreached("Buffer was destroyed!");
33         }, () => {});
34
35     }, "Map write, unmap, and destroy a GPUBuffer.");
36
37     /* Basic validation */
38     // FIXME: Test invalid combinations of GPUBufferUsage after implementing error handling.
39
40     promise_test(async () => {
41         const buffer = device.createBuffer({ size: 16, usage: GPUBufferUsage.MAP_READ });
42
43         await buffer.mapWriteAsync().then(() => {
44             assert_unreached("Buffer was not created with MAP_WRITE!");
45         }, () => {});
46     }, "Reject a map write on a buffer not created with MAP_WRITE usage.");
47
48     /* Extended unmap/destroy and promise settling testing */
49
50     promise_test(async () => {
51         const buffer = device.createBuffer({ size: 16, usage: GPUBufferUsage.MAP_WRITE });
52
53         buffer.mapWriteAsync().then(() => {
54             buffer.unmap();
55         }, () => { 
56             assert_unreached(); 
57         });
58
59         await buffer.mapWriteAsync().then(() => {
60             assert_unreached("Map operation was invalid!"); // buffer was still in mapped state during promise creation
61         }, () => {});
62     }, "Reject a map write on a mapped GPUBuffer.");
63
64     promise_test(async () => {
65         const buffer = device.createBuffer({ size: 16, usage: GPUBufferUsage.MAP_WRITE });
66
67         const promise = buffer.mapWriteAsync();
68         buffer.unmap();
69
70         await promise.then(() => {
71             assert_unreached("Buffer was unmapped!"); // buffer was unmapped, which rejects pending promises
72         },() => {});
73     }, "Reject a pending map write if GPUBuffer is unmapped.");
74 }
75
76 runTests();
77 </script>
78 </body>