73 lines
2.1 KiB
HTML
73 lines
2.1 KiB
HTML
<!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>
|