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