tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_buffer_mapping.html (2189B)


      1 <!doctype html>
      2 <html>
      3  <head>
      4    <meta charset="utf-8" />
      5    <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6    <link rel="stylesheet" href="/tests/SimpleTest/test.css" />
      7  </head>
      8  <body>
      9    <script>
     10      ok(
     11        SpecialPowers.getBoolPref("dom.webgpu.enabled"),
     12        "Pref should be enabled."
     13      );
     14 
     15      async function testBody() {
     16        const adapter = await navigator.gpu.requestAdapter();
     17        const device = await adapter.requestDevice();
     18 
     19        const bufferRead = device.createBuffer({
     20          size: 4,
     21          usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,
     22        });
     23        const bufferWrite = device.createBuffer({
     24          size: 4,
     25          usage: GPUBufferUsage.COPY_SRC,
     26          mappedAtCreation: true,
     27        });
     28        new Float32Array(bufferWrite.getMappedRange()).set([1.0]);
     29        bufferWrite.unmap();
     30 
     31        const encoder = device.createCommandEncoder();
     32        encoder.copyBufferToBuffer(bufferWrite, 0, bufferRead, 0, 4);
     33        device.queue.submit([encoder.finish()]);
     34 
     35        await bufferRead.mapAsync(GPUMapMode.READ);
     36 
     37        try {
     38          bufferRead.getMappedRange(0, 5);
     39          ok(false, "mapped with size outside buffer should throw");
     40        } catch (e) {
     41          ok(
     42            true,
     43            "mapped with size outside buffer should throw OperationError"
     44          );
     45        }
     46 
     47        try {
     48          bufferRead.getMappedRange(4, 1);
     49          ok(false, "mapped with offset outside buffer should throw");
     50        } catch (e) {
     51          ok(
     52            true,
     53            "mapped with offset outside buffer should throw OperationError"
     54          );
     55        }
     56 
     57        const data = bufferRead.getMappedRange();
     58        is(data.byteLength, 4, "array should be 4 bytes long");
     59 
     60        const value = new Float32Array(data)[0];
     61        ok(value == 1.0, "value == 1.0");
     62 
     63        bufferRead.unmap();
     64        is(data.byteLength, 0, "array should be detached after explicit unmap");
     65      }
     66 
     67      SimpleTest.waitForExplicitFinish();
     68      testBody()
     69        .catch(e => ok(false, "Unhandled exception " + e))
     70        .finally(() => SimpleTest.finish());
     71    </script>
     72  </body>
     73 </html>