4 <script src="../js/webgpu-functions.js"></script>
5 <script src="../../resources/js-test-pre.js"></script>
11 compute void computeShader(device float[] buffer : register(u1)) {
16 async function start(device) {
17 device.pushErrorScope("validation");
18 const shaderModule = device.createShaderModule({code: shaderSource});
19 const computeStage = {module: shaderModule, entryPoint: "computeShader"};
21 const bindGroupLayoutDescriptor = {bindings: [{binding: 0, visibility: 7, type: "storage-buffer"}, {binding: 1, visibility: 7, type: "storage-buffer"}]};
22 const bindGroupLayout = device.createBindGroupLayout(bindGroupLayoutDescriptor);
23 const pipelineLayoutDescriptor = {bindGroupLayouts: [bindGroupLayout]};
24 const pipelineLayout = device.createPipelineLayout(pipelineLayoutDescriptor);
26 const computePipelineDescriptor = {computeStage, layout: pipelineLayout};
27 const computePipeline = device.createComputePipeline(computePipelineDescriptor);
28 device.popErrorScope().then(function(e) {
32 const size = Float32Array.BYTES_PER_ELEMENT * 1;
34 const buffer1 = device.createBuffer({size, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.MAP_READ});
35 const buffer2 = device.createBuffer({size, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.MAP_READ});
37 const bindGroup = device.createBindGroup({layout: bindGroupLayout, bindings: [{binding: 0, resource: {buffer: buffer1, size}}, {binding: 1, resource: {buffer: buffer2, size}}]});
39 const commandEncoder = device.createCommandEncoder(); // {}
40 const computePassEncoder = commandEncoder.beginComputePass();
41 computePassEncoder.setPipeline(computePipeline);
42 computePassEncoder.setBindGroup(0, bindGroup);
43 computePassEncoder.dispatch(1, 1, 1);
44 computePassEncoder.endPass();
45 const commandBuffer = commandEncoder.finish();
46 device.getQueue().submit([commandBuffer]);
48 const resultsArrayBuffer = await buffer2.mapReadAsync();
49 const resultsFloat32Array = new Float32Array(resultsArrayBuffer);
50 if (resultsFloat32Array[0] == 17)
57 window.jsTestIsAsync = true;
58 getBasicDevice().then(function(device) {
59 start(device).then(function() {
70 <script src="../../resources/js-test-post.js"></script>