diff options
-rw-r--r-- | intern/cycles/kernel/kernel_random.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/intern/cycles/kernel/kernel_random.h b/intern/cycles/kernel/kernel_random.h index a5ae427c2d3..80738213d2a 100644 --- a/intern/cycles/kernel/kernel_random.h +++ b/intern/cycles/kernel/kernel_random.h @@ -41,10 +41,9 @@ ccl_device uint sobol_dimension(KernelGlobals *kg, int index, int dimension) { uint result = 0; uint i = index + SOBOL_SKIP; - for (uint j = 0; i; i >>= 1, j++) { - if (i & 1) { - result ^= kernel_tex_fetch(__sobol_directions, 32 * dimension + j); - } + for (int j = 0, x; (x = find_first_set(i)); i >>= x) { + j += x; + result ^= kernel_tex_fetch(__sobol_directions, 32 * dimension + j - 1); } return result; } |