1*c8dee2aaSAndroid Build Coastguard Workerlayout(local_size_x = 64) in; 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workerlayout(metal, binding = 0) buffer ssbo { 4*c8dee2aaSAndroid Build Coastguard Worker atomicUint globalCounter; 5*c8dee2aaSAndroid Build Coastguard Worker}; 6*c8dee2aaSAndroid Build Coastguard Worker 7*c8dee2aaSAndroid Build Coastguard Workerworkgroup atomic_uint localCounter; // atomic_uint is a synonym for atomicUint 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Workervoid main() { 10*c8dee2aaSAndroid Build Coastguard Worker // Initialize the local counter. 11*c8dee2aaSAndroid Build Coastguard Worker if (sk_LocalInvocationID.x == 0) { 12*c8dee2aaSAndroid Build Coastguard Worker atomicStore(localCounter, 0); 13*c8dee2aaSAndroid Build Coastguard Worker } 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker // Synchronize the threads in the workgroup so they all see the initial value. 16*c8dee2aaSAndroid Build Coastguard Worker workgroupBarrier(); 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker // All threads increment the counter. 19*c8dee2aaSAndroid Build Coastguard Worker atomicAdd(localCounter, 1); 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker // Synchronize the threads again to ensure they have all executed the increment 22*c8dee2aaSAndroid Build Coastguard Worker // and the following load reads the same value across all threads in the 23*c8dee2aaSAndroid Build Coastguard Worker // workgroup. 24*c8dee2aaSAndroid Build Coastguard Worker workgroupBarrier(); 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker // Add the workgroup-only tally to the global counter. 27*c8dee2aaSAndroid Build Coastguard Worker if (sk_LocalInvocationID.x == 0) { 28*c8dee2aaSAndroid Build Coastguard Worker atomicAdd(globalCounter, atomicLoad(localCounter)); 29*c8dee2aaSAndroid Build Coastguard Worker } 30*c8dee2aaSAndroid Build Coastguard Worker} 31