linear.wgsl
1 @group(0) @binding(0) var<storage, read> input: array<f32>; 2 @group(0) @binding(1) var<storage, read> kernel: array<f32>; 3 @group(0) @binding(2) var<storage, read_write> output: array<f32>; 4 5 @compute @workgroup_size(64) 6 fn main(@builtin(global_invocation_id) global_id: vec3<u32>) { 7 let glob_i = global_id.x; 8 let input_len = arrayLength(&input); 9 let kernel_len = arrayLength(&kernel); 10 let output_len = arrayLength(&output); 11 if (glob_i >= output_len) { 12 return; 13 } 14 15 for (var i: u32; i <= input_len; i++) { 16 output[glob_i] += kernel[glob_i + i] * input[i]; 17 } 18 19 20 } 21