| <script> |
| globalThis.testRunner?.waitUntilDone(); |
| const log = console.debug; |
| |
| onload = async () => { |
| let adapter = await navigator.gpu.requestAdapter({}); |
| let device = await adapter.requestDevice({}); |
| device.pushErrorScope('validation'); |
| let code = ` |
| @group(0) @binding(0) var<storage, read_write> buf: atomic<u32>; |
| |
| @compute @workgroup_size(1) |
| fn main() { |
| let u = 0u; |
| atomicCompareExchangeWeak(&buf, 0, vec4u(u + u).x); |
| } |
| `; |
| let module = device.createShaderModule({code}); |
| device.createComputePipeline({ |
| layout: 'auto', |
| compute: {module}, |
| }); |
| await device.queue.onSubmittedWorkDone(); |
| let error = await device.popErrorScope(); |
| if (error) { |
| log(error.message); |
| } else { |
| log('Pass: no validation error'); |
| } |
| globalThis.testRunner?.dumpAsText(); |
| globalThis.testRunner?.notifyDone(); |
| }; |
| </script> |