From 5fefc84783555152c0bb924b3f509c7ec8f1a04d Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sun, 6 Jul 2014 13:59:52 +0200 Subject: [PATCH] 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. --- intern/cycles/kernel/kernel_volume.h | 7 +------ 1 file changed, 1 insertion(+), 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