Commit: 792e147e2ce6211af704ae20082f9e3d905afe32
Author: Sergey Sharybin
Date:   Wed May 18 11:15:28 2016 +0200
Branches: master
https://developer.blender.org/rB792e147e2ce6211af704ae20082f9e3d905afe32

Cycles: Fix compilation error of CUDA kernels after recent volume commit

Apparently the code path with malloc() was enabled for CUDA.

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

M       intern/cycles/kernel/kernel_volume.h

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

diff --git a/intern/cycles/kernel/kernel_volume.h 
b/intern/cycles/kernel/kernel_volume.h
index 224c275..0af5ff5 100644
--- a/intern/cycles/kernel/kernel_volume.h
+++ b/intern/cycles/kernel/kernel_volume.h
@@ -627,6 +627,11 @@ ccl_device void 
kernel_volume_decoupled_record(KernelGlobals *kg, PathState *sta
                step_size = kernel_data.integrator.volume_step_size;
                /* compute exact steps in advance for malloc */
                max_steps = max((int)ceilf(ray->t/step_size), 1);
+               if(max_steps > global_max_steps) {
+                       max_steps = global_max_steps;
+                       step_size = ray->t / (float)max_steps;
+               }
+#ifdef __KERNEL_CPU__
                /* NOTE: For the branched path tracing it's possible to have 
direct
                 * and indirect light integration both having volume segments 
allocated.
                 * We detect this using index in the pre-allocated memory. 
Currently we
@@ -640,17 +645,16 @@ ccl_device void 
kernel_volume_decoupled_record(KernelGlobals *kg, PathState *sta
                const int index = kg->decoupled_volume_steps_index;
                assert(index < sizeof(kg->decoupled_volume_steps) /
                               sizeof(*kg->decoupled_volume_steps));
-               if(max_steps > global_max_steps) {
-                       max_steps = global_max_steps;
-                       step_size = ray->t / (float)max_steps;
-               }
                if(kg->decoupled_volume_steps[index] == NULL) {
                        kg->decoupled_volume_steps[index] =
                                
(VolumeStep*)malloc(sizeof(VolumeStep)*global_max_steps);
                }
                segment->steps = kg->decoupled_volume_steps[index];
-               random_jitter_offset = lcg_step_float(&state->rng_congruential) 
* step_size;
                ++kg->decoupled_volume_steps_index;
+#else
+               segment->steps = 
(VolumeStep*)malloc(sizeof(VolumeStep)*max_steps);
+#endif
+               random_jitter_offset = lcg_step_float(&state->rng_congruential) 
* step_size;
        }
        else {
                max_steps = 1;
@@ -764,12 +768,16 @@ ccl_device void 
kernel_volume_decoupled_record(KernelGlobals *kg, PathState *sta
 ccl_device void kernel_volume_decoupled_free(KernelGlobals *kg, VolumeSegment 
*segment)
 {
        if(segment->steps != &segment->stack_step) {
+#ifdef __KERNEL_CPU__
                /* NOTE: We only allow free last allocated segment.
                 * No random order of alloc/free is supported.
                 */
                assert(kg->decoupled_volume_steps_index > 0);
                assert(segment->steps == 
kg->decoupled_volume_steps[kg->decoupled_volume_steps_index - 1]);
                --kg->decoupled_volume_steps_index;
+#else
+               free(segment->steps);
+#endif
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to