[Bf-blender-cvs] [c9b7d56] compositor-2016: Cycles: Fix compilation error of CUDA kernels after recent volume commit
Sergey Sharybin
noreply at git.blender.org
Wed Jun 8 21:47:49 CEST 2016
Commit: c9b7d56ddddd0e5335f89fa4710112ec172263ea
Author: Sergey Sharybin
Date: Wed May 18 11:15:28 2016 +0200
Branches: compositor-2016
https://developer.blender.org/rBc9b7d56ddddd0e5335f89fa4710112ec172263ea
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
}
}
More information about the Bf-blender-cvs
mailing list