Here's a test case
```html
<html><body><canvas id="canvas"></canvas>
<script type="module">
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.pushErrorScope('validation');
const ctx = document.getElementById('canvas').getContext('webgpu');
ctx.configure({ device, format: navigator.gpu.getPreferredCanvasFormat() });
const dstBuffer = device.createBuffer({
size: 8,
usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,
});
const encoder = device.createCommandEncoder();
const memory = new WebAssembly.Memory({ initial: 1024*1024*1024*4/65536 });
const heap64 = new BigUint64Array(memory.buffer);
heap64[0] = 0x0123456789ABCDEFn;
var heap8 = new Uint8Array(memory.buffer);
device.queue.writeBuffer(dstBuffer, 0, heap8, 0, 8);
device.queue.submit([encoder.finish()]);
const error = await device.popErrorScope();
if (error) throw new Error(error.message);
await dstBuffer.mapAsync(GPUMapMode.READ);
const dstValue = new BigUint64Array(dstBuffer.getMappedRange(0, 8))[0];
console.log(`Got: 0x${dstValue.toString(16)}, expected: 0x${heap64[0].toString(16)}`);
if (dstValue !== heap64[0]) throw new Error('Read-back value mismatch');
dstBuffer.unmap();
console.log('Test OK');
</script></body></html>
```
Bug 2022805 Comment 6 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
Here's a test case
```html
<html><body><canvas id="canvas"></canvas>
<script type="module">
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.pushErrorScope('validation');
const ctx = document.getElementById('canvas').getContext('webgpu');
ctx.configure({ device, format: navigator.gpu.getPreferredCanvasFormat() });
const dstBuffer = device.createBuffer({
size: 8,
usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,
});
const encoder = device.createCommandEncoder();
// Allocate 16GB WebAssembly Memory.
const instance = await WebAssembly.instantiate(new Uint8Array([0,97,115,109,1,0,0,0,5,8,1,5,128,128,4,128,128,16,7,7,1,3,109,101,109,2,0]));
const memory = instance.instance.exports.mem;
memory.grow(196608n);
// Alternatively, for just 4GB: const memory = new WebAssembly.Memory({ initial: 1024*1024*1024*4/65536 });
const heap64 = new BigUint64Array(memory.buffer);
heap64[0] = 0x0123456789ABCDEFn;
const heap8 = new Uint8Array(memory.buffer);
device.queue.writeBuffer(dstBuffer, 0, heap8, 0, 8);
device.queue.submit([encoder.finish()]);
const error = await device.popErrorScope();
if (error) throw new Error(error.message);
await dstBuffer.mapAsync(GPUMapMode.READ);
const dstValue = new BigUint64Array(dstBuffer.getMappedRange(0, 8))[0];
console.log(`Got: 0x${dstValue.toString(16)}, expected: 0x${heap64[0].toString(16)}`);
if (dstValue !== heap64[0]) throw new Error('Read-back value mismatch');
dstBuffer.unmap();
console.log('Test OK');
</script></body></html>
```