[Bf-blender-cvs] [811569dc11d] master: Cycles: Using OpenCL popcount() in PMJ sampler.

Stefan Werner noreply at git.blender.org
Tue Mar 10 08:53:33 CET 2020


Commit: 811569dc11deba7ccf0570dd8d6235482de3626c
Author: Stefan Werner
Date:   Tue Mar 10 08:53:30 2020 +0100
Branches: master
https://developer.blender.org/rB811569dc11deba7ccf0570dd8d6235482de3626c

Cycles: Using OpenCL popcount() in PMJ sampler.

===================================================================

M	intern/cycles/kernel/kernel_random.h

===================================================================

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);



More information about the Bf-blender-cvs mailing list