diff options
Diffstat (limited to 'intern/cycles/kernel/kernel_random.h')
-rw-r--r-- | intern/cycles/kernel/kernel_random.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/intern/cycles/kernel/kernel_random.h b/intern/cycles/kernel/kernel_random.h index dae9c8f930c..ec41ef2f0e9 100644 --- a/intern/cycles/kernel/kernel_random.h +++ b/intern/cycles/kernel/kernel_random.h @@ -294,12 +294,15 @@ ccl_device_inline bool sample_is_even(int pattern, int sample) if (pattern == SAMPLING_PATTERN_PMJ) { /* See Section 10.2.1, "Progressive Multi-Jittered Sample Sequences", Christensen et al. * We can use this to get divide sample sequence into two classes for easier variance - * estimation. There must be a more elegant way of writing this? */ + * estimation. */ #if defined(__GNUC__) && !defined(__KERNEL_GPU__) return __builtin_popcount(sample & 0xaaaaaaaa) & 1; #elif defined(__NVCC__) return __popc(sample & 0xaaaaaaaa) & 1; +#elif defined(__KERNEL_OPENCL__) + return popcount(sample & 0xaaaaaaaa) & 1; #else +/* TODO(Stefan): popcnt intrinsic for Windows with fallback for older CPUs. */ int i = sample & 0xaaaaaaaa; i = i - ((i >> 1) & 0x55555555); i = (i & 0x33333333) + ((i >> 2) & 0x33333333); |