blob: 87e051be12740b3c3e3b57d05ef62d63c39c8137 [file] [log] [blame]
// SPDX-License-Identifier: Apache-2.0 OR MIT OR Unlicense
// Linked list building.
#version 450
#define N_BUCKETS 65536
#define N_ITER 100
layout(local_size_x = 256, local_size_y = 1) in;
layout(set = 0, binding = 0) buffer MemBuf {
uint[] mem;
};
void main() {
uint rng = gl_GlobalInvocationID.x + 1;
for (uint i = 0; i < N_ITER; i++) {
// xorshift32
rng ^= rng << 13;
rng ^= rng >> 17;
rng ^= rng << 5;
uint bucket = rng % N_BUCKETS;
if (bucket != 0) {
uint alloc = atomicAdd(mem[0], 2) + N_BUCKETS;
uint old = atomicExchange(mem[bucket], alloc);
mem[alloc] = old;
mem[alloc + 1] = gl_GlobalInvocationID.x;
}
}
}