| <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> |