diff options
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/device/device_split_kernel.cpp | 27 | ||||
-rw-r--r-- | intern/cycles/device/device_split_kernel.h | 3 |
2 files changed, 17 insertions, 13 deletions
diff --git a/intern/cycles/device/device_split_kernel.cpp b/intern/cycles/device/device_split_kernel.cpp index fa641161c05..981ec74fe56 100644 --- a/intern/cycles/device/device_split_kernel.cpp +++ b/intern/cycles/device/device_split_kernel.cpp @@ -128,26 +128,27 @@ bool DeviceSplitKernel::path_trace(DeviceTask *task, local_size[1] = lsize[1]; } - /* Set gloabl size */ - size_t global_size[2]; - { - int2 gsize = split_kernel_global_size(kgbuffer, kernel_data, task); - - /* Make sure that set work size is a multiple of local - * work size dimensions. - */ - global_size[0] = round_up(gsize[0], local_size[0]); - global_size[1] = round_up(gsize[1], local_size[1]); - } - /* Number of elements in the global state buffer */ int num_global_elements = global_size[0] * global_size[1]; - assert(num_global_elements % WORK_POOL_SIZE == 0); /* Allocate all required global memory once. */ if(first_tile) { first_tile = false; + /* Set gloabl size */ + { + int2 gsize = split_kernel_global_size(kgbuffer, kernel_data, task); + + /* Make sure that set work size is a multiple of local + * work size dimensions. + */ + global_size[0] = round_up(gsize[0], local_size[0]); + global_size[1] = round_up(gsize[1], local_size[1]); + } + + num_global_elements = global_size[0] * global_size[1]; + assert(num_global_elements % WORK_POOL_SIZE == 0); + /* Calculate max groups */ /* Denotes the maximum work groups possible w.r.t. current requested tile size. */ diff --git a/intern/cycles/device/device_split_kernel.h b/intern/cycles/device/device_split_kernel.h index 15a94953a11..55548122c0c 100644 --- a/intern/cycles/device/device_split_kernel.h +++ b/intern/cycles/device/device_split_kernel.h @@ -95,6 +95,9 @@ private: /* Marked True in constructor and marked false at the end of path_trace(). */ bool first_tile; + /* Cached global size */ + size_t global_size[2]; + public: explicit DeviceSplitKernel(Device* device); virtual ~DeviceSplitKernel(); |