/ shaders / linear.wgsl
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