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