mirror of
https://github.com/italicsjenga/vello.git
synced 2025-01-11 04:51:32 +11:00
36 lines
973 B
Plaintext
36 lines
973 B
Plaintext
|
// 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]);
|
||
|
}
|