// Copied from wgpu hello-compute example // TODO: delete or clean up attribution before releasing #version 450 layout(local_size_x = 1) in; layout(set = 0, binding = 0) buffer PrimeIndices { uint[] indices; }; // this is used as both input and output for convenience // The Collatz Conjecture states that for any integer n: // If n is even, n = n/2 // If n is odd, n = 3n+1 // And repeat this process for each new n, you will always eventually reach 1. // Though the conjecture has not been proven, no counterexample has ever been found. // This function returns how many times this recurrence needs to be applied to reach 1. uint collatz_iterations(uint n) { uint i = 0; while(n != 1) { if (mod(n, 2) == 0) { n = n / 2; } else { n = (3 * n) + 1; } i++; } return i; } void main() { uint index = gl_GlobalInvocationID.x; indices[index] = collatz_iterations(indices[index]); }