blob: 24f145ad3f5143ee1898ae644b8bfa33d8fd3ab5 [file] [log] [blame] [edit]
<script>
globalThis.testRunner?.waitUntilDone();
globalThis.testRunner?.dumpAsText();
onload = async () => {
let adapter = await navigator.gpu.requestAdapter({});
let device = await adapter.requestDevice({});
device.pushErrorScope('validation');
let module = device.createShaderModule({
code: `
@group(0) @binding(0) var<storage, read_write> buffer0: u32;
@compute @workgroup_size(1)
fn compute0() {
var i = 0x555u;
loop {
if i < 0x1000 { continue; }
break;
continuing { i += 1u; }
}
buffer0 = i;
}
`,
});
let bindGroupLayout0 = device.createBindGroupLayout({entries: [{binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: {type: 'storage'}}]});
let storageBuffer0 = device.createBuffer({size: 4, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC});
let commandEncoder0 = device.createCommandEncoder({});
let computePassEncoder0 = commandEncoder0.beginComputePass();
let pipeline0 = device.createComputePipeline({layout: device.createPipelineLayout({bindGroupLayouts: [bindGroupLayout0]}), compute: {module}});
computePassEncoder0.setPipeline(pipeline0);
let bindGroup0 = device.createBindGroup({layout: bindGroupLayout0, entries: [{binding: 0, resource: {buffer: storageBuffer0}}]});
computePassEncoder0.setBindGroup(0, bindGroup0);
computePassEncoder0.dispatchWorkgroups(1);
computePassEncoder0.end();
let outputBuffer0 = device.createBuffer({size: storageBuffer0.size, usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST});
commandEncoder0.copyBufferToBuffer(storageBuffer0, 0, outputBuffer0, 0, outputBuffer0.size);
let commandBuffer0 = commandEncoder0.finish();
device.queue.submit([commandBuffer0]);
await device.queue.onSubmittedWorkDone();
await outputBuffer0.mapAsync(GPUMapMode.READ);
console.log([...new Uint32Array(outputBuffer0.getMappedRange())].map(x => x.toString(0x10)).join(' '));
outputBuffer0.unmap();
let error = await device.popErrorScope();
if (error) {
console.log(error.message);
} else {
console.log('no validation error');
}
globalThis.testRunner?.notifyDone();
};
</script>