alias number = f32; struct PackedMatrixBatch { size: vec4, data: array>, } struct MatrixBatch { size: vec4, data: array, } @group(0) @binding(0) var l: PackedMatrixBatch; @group(0) @binding(1) var tr: PackedMatrixBatch; @group(0) @binding(2) var result: MatrixBatch; @compute @workgroup_size(1) fn main(@builtin(global_invocation_id) global_id: vec3) { result.size = l.size; result.size.x = tr.size.y; var s = 0f; let vc = l.size.x / 4; let lo = (global_id.z * l.size.y + global_id.y) * vc; let ro = (global_id.z * tr.size.y + global_id.x) * vc; for (var i = 0u; i < vc; i++) { s += dot(l.data[lo + i], tr.data[ro + i]); } result.data[global_id.z * result.size.y * result.size.x + global_id.y * result.size.x + global_id.x] = s; }