diff options
Diffstat (limited to 'intern/cycles/integrator/path_trace_work_gpu.cpp')
-rw-r--r-- | intern/cycles/integrator/path_trace_work_gpu.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/intern/cycles/integrator/path_trace_work_gpu.cpp b/intern/cycles/integrator/path_trace_work_gpu.cpp index 706fc5799d0..df393bac0de 100644 --- a/intern/cycles/integrator/path_trace_work_gpu.cpp +++ b/intern/cycles/integrator/path_trace_work_gpu.cpp @@ -97,11 +97,15 @@ void PathTraceWorkGPU::alloc_integrator_soa() /* IntegrateState allocated as structure of arrays. */ /* Check if we already allocated memory for the required features. */ + const int requested_volume_stack_size = device_scene_->data.volume_stack_size; const uint kernel_features = device_scene_->data.kernel_features; - if ((integrator_state_soa_kernel_features_ & kernel_features) == kernel_features) { + if ((integrator_state_soa_kernel_features_ & kernel_features) == kernel_features && + integrator_state_soa_volume_stack_size_ >= requested_volume_stack_size) { return; } integrator_state_soa_kernel_features_ = kernel_features; + integrator_state_soa_volume_stack_size_ = max(integrator_state_soa_volume_stack_size_, + requested_volume_stack_size); /* Allocate a device only memory buffer before for each struct member, and then * write the pointers into a struct that resides in constant memory. @@ -133,7 +137,7 @@ void PathTraceWorkGPU::alloc_integrator_soa() break; \ } \ } -#define KERNEL_STRUCT_VOLUME_STACK_SIZE (device_scene_->data.volume_stack_size) +#define KERNEL_STRUCT_VOLUME_STACK_SIZE (integrator_state_soa_volume_stack_size_) #include "kernel/integrator/integrator_state_template.h" #undef KERNEL_STRUCT_BEGIN #undef KERNEL_STRUCT_MEMBER |