1layout(local_size_x = 16, local_size_y = 16) in; 2 3layout(set=0, binding=0) buffer sizeBuffer { 4 int2[] sizes; // in1, in2, out 5}; 6layout(set=0, binding=1) readonly buffer inputs1 { 7 float data1[]; 8}; 9layout(set=0, binding=2) readonly buffer inputs2 { 10 float data2[]; 11}; 12layout(set=0, binding=3) writeonly buffer result { 13 float resultData[]; 14}; 15 16void main() { 17 sizes[2] = int2(sizes[0].x, sizes[1].y); 18 19 int2 resultCell = int2(sk_GlobalInvocationID.x, sk_GlobalInvocationID.y); 20 float result = 0.0; 21 for (int i = 0; i < sizes[0].y; ++i) { 22 int a = i + resultCell.x * sizes[0].y; 23 int b = resultCell.y + i * sizes[1].y; 24 result += data1[a] * data2[b]; 25 } 26 27 int index = resultCell.y + resultCell.x * sizes[1].y; 28 resultData[index] = result; 29} 30