diff options
author | Thomas Dinges <blender@dingto.org> | 2014-07-06 15:59:52 +0400 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2014-07-06 16:00:11 +0400 |
commit | 5fefc84783555152c0bb924b3f509c7ec8f1a04d (patch) | |
tree | 5c0d5740db7f7a76bf41c5d4d15f9a343fecb75a | |
parent | 22fa83173b326ef1344ceec6623a5562d8b851f1 (diff) |
Cycles: Equi-Angular and MIS Volume sampling work on GPU now.
* malloc() is used now, which is supported since sm_20: http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#dynamic-global-memory-allocation-and-operations The performance of this needs to be tested on various cards still.
* This also works for Heterogeneous Decoupled Ray Marching, but in this case I get sporadic "Illegal Address" errors on my Geforce 540, therefore I did not remove the GPU check in kernel_volume_use_decoupled() yet.
I would appreciate some tests from people who compile themselves, enable Volumetrics in kernel_types.h.
-rw-r--r-- | intern/cycles/kernel/kernel_volume.h | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/intern/cycles/kernel/kernel_volume.h b/intern/cycles/kernel/kernel_volume.h index 844ca900821..cc4b2e3edf1 100644 --- a/intern/cycles/kernel/kernel_volume.h +++ b/intern/cycles/kernel/kernel_volume.h @@ -629,11 +629,8 @@ ccl_device void kernel_volume_decoupled_record(KernelGlobals *kg, PathState *sta segment->closure_flag = 0; segment->numsteps = 0; -#ifdef __KERNEL_CPU__ + segment->steps = (VolumeStep*)malloc(sizeof(VolumeStep)*max_steps); -#else - kernel_assert(max_steps == 1); -#endif VolumeStep *step = segment->steps; @@ -719,9 +716,7 @@ ccl_device void kernel_volume_decoupled_record(KernelGlobals *kg, PathState *sta ccl_device void kernel_volume_decoupled_free(KernelGlobals *kg, VolumeSegment *segment) { -#ifdef __KERNEL_CPU__ free(segment->steps); -#endif } /* scattering for homogeneous and heterogeneous volumes, using decoupled ray |