diff options
Diffstat (limited to 'dom/webgpu/mochitest/test_buffer_mapping.html')
-rw-r--r-- | dom/webgpu/mochitest/test_buffer_mapping.html | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/dom/webgpu/mochitest/test_buffer_mapping.html b/dom/webgpu/mochitest/test_buffer_mapping.html new file mode 100644 index 0000000000..01dfbf893e --- /dev/null +++ b/dom/webgpu/mochitest/test_buffer_mapping.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" href="/tests/SimpleTest/test.css" /> + </head> + <body> + <script> + ok( + SpecialPowers.getBoolPref("dom.webgpu.enabled"), + "Pref should be enabled." + ); + + async function testBody() { + const adapter = await navigator.gpu.requestAdapter(); + const device = await adapter.requestDevice(); + + const bufferRead = device.createBuffer({ + size: 4, + usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, + }); + const bufferWrite = device.createBuffer({ + size: 4, + usage: GPUBufferUsage.COPY_SRC, + mappedAtCreation: true, + }); + new Float32Array(bufferWrite.getMappedRange()).set([1.0]); + bufferWrite.unmap(); + + const encoder = device.createCommandEncoder(); + encoder.copyBufferToBuffer(bufferWrite, 0, bufferRead, 0, 4); + device.queue.submit([encoder.finish()]); + + await bufferRead.mapAsync(GPUMapMode.READ); + + try { + bufferRead.getMappedRange(0, 5); + ok(false, "mapped with size outside buffer should throw"); + } catch (e) { + ok( + true, + "mapped with size outside buffer should throw OperationError" + ); + } + + try { + bufferRead.getMappedRange(4, 1); + ok(false, "mapped with offset outside buffer should throw"); + } catch (e) { + ok( + true, + "mapped with offset outside buffer should throw OperationError" + ); + } + + const data = bufferRead.getMappedRange(); + is(data.byteLength, 4, "array should be 4 bytes long"); + + const value = new Float32Array(data)[0]; + ok(value == 1.0, "value == 1.0"); + + bufferRead.unmap(); + is(data.byteLength, 0, "array should be detached after explicit unmap"); + } + + SimpleTest.waitForExplicitFinish(); + testBody() + .catch(e => ok(false, "Unhandled exception " + e)) + .finally(() => SimpleTest.finish()); + </script> + </body> +</html> |