diff options
Diffstat (limited to 'intern/cycles/integrator/path_trace_work_gpu.cpp')
-rw-r--r-- | intern/cycles/integrator/path_trace_work_gpu.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/intern/cycles/integrator/path_trace_work_gpu.cpp b/intern/cycles/integrator/path_trace_work_gpu.cpp index fa313f6460a..ee250a6916b 100644 --- a/intern/cycles/integrator/path_trace_work_gpu.cpp +++ b/intern/cycles/integrator/path_trace_work_gpu.cpp @@ -204,22 +204,26 @@ void PathTraceWorkGPU::alloc_integrator_sorting() integrator_state_gpu_.sort_key_counter[DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE] = (int *)integrator_shader_sort_counter_.device_pointer; - if (device_scene_->data.kernel_features & KERNEL_FEATURE_NODE_RAYTRACE) { + integrator_shader_sort_prefix_sum_.alloc(sort_buckets); + integrator_shader_sort_prefix_sum_.zero_to_device(); + } + + if (device_scene_->data.kernel_features & KERNEL_FEATURE_NODE_RAYTRACE) { + if (integrator_shader_raytrace_sort_counter_.size() < sort_buckets) { integrator_shader_raytrace_sort_counter_.alloc(sort_buckets); integrator_shader_raytrace_sort_counter_.zero_to_device(); integrator_state_gpu_.sort_key_counter[DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_RAYTRACE] = (int *)integrator_shader_raytrace_sort_counter_.device_pointer; } + } - if (device_scene_->data.kernel_features & KERNEL_FEATURE_MNEE) { + if (device_scene_->data.kernel_features & KERNEL_FEATURE_MNEE) { + if (integrator_shader_mnee_sort_counter_.size() < sort_buckets) { integrator_shader_mnee_sort_counter_.alloc(sort_buckets); integrator_shader_mnee_sort_counter_.zero_to_device(); integrator_state_gpu_.sort_key_counter[DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_MNEE] = (int *)integrator_shader_mnee_sort_counter_.device_pointer; } - - integrator_shader_sort_prefix_sum_.alloc(sort_buckets); - integrator_shader_sort_prefix_sum_.zero_to_device(); } } |