Fix missing Cycles volume stack re-allocation

Need to check allocation size, as the features do not change with
volume stack depth detection.
This commit is contained in:
Sergey Sharybin 2021-10-12 11:54:33 +02:00
parent ad1735f8ed
commit cc04399937
2 changed files with 7 additions and 2 deletions

View File

@ -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

View File

@ -124,6 +124,7 @@ class PathTraceWorkGPU : public PathTraceWork {
/* SoA arrays for integrator state. */
vector<unique_ptr<device_memory>> integrator_state_soa_;
uint integrator_state_soa_kernel_features_;
int integrator_state_soa_volume_stack_size_ = 0;
/* Keep track of number of queued kernels. */
device_vector<IntegratorQueueCounter> integrator_queue_counter_;
/* Shader sorting. */