diff options
Diffstat (limited to 'intern/cycles/device/device_cpu.cpp')
-rw-r--r-- | intern/cycles/device/device_cpu.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp index 837a8186064..32911e054fe 100644 --- a/intern/cycles/device/device_cpu.cpp +++ b/intern/cycles/device/device_cpu.cpp @@ -43,6 +43,7 @@ #include "render/buffers.h" #include "render/coverage.h" +#include "util/util_aligned_malloc.h" #include "util/util_debug.h" #include "util/util_foreach.h" #include "util/util_function.h" @@ -165,7 +166,7 @@ class CPUDevice : public Device { bool need_texture_info; #ifdef WITH_OSL - OSLGlobals osl_globals; + OSLGlobals *osl_globals; #endif bool use_split_kernel; @@ -282,7 +283,9 @@ class CPUDevice : public Device { } #ifdef WITH_OSL - kernel_globals.osl = &osl_globals; + /* Must use aligned malloc due to concurrent hash map. */ + osl_globals = util_aligned_new<OSLGlobals>(); + kernel_globals.osl = osl_globals; #endif use_split_kernel = DebugFlags().cpu.split_kernel; if (use_split_kernel) { @@ -317,6 +320,9 @@ class CPUDevice : public Device { ~CPUDevice() { +#ifdef WITH_OSL + delete osl_globals; +#endif task_pool.stop(); texture_info.free(); } @@ -492,7 +498,7 @@ class CPUDevice : public Device { void *osl_memory() { #ifdef WITH_OSL - return &osl_globals; + return osl_globals; #else return NULL; #endif @@ -981,7 +987,7 @@ class CPUDevice : public Device { KernelGlobals kg = kernel_globals; #ifdef WITH_OSL - OSLShader::thread_init(&kg, &kernel_globals, &osl_globals); + OSLShader::thread_init(&kg, &kernel_globals, osl_globals); #endif for (int sample = 0; sample < task.num_samples; sample++) { for (int x = task.shader_x; x < task.shader_x + task.shader_w; x++) @@ -1053,7 +1059,7 @@ class CPUDevice : public Device { kg.decoupled_volume_steps_index = 0; kg.coverage_asset = kg.coverage_object = kg.coverage_material = NULL; #ifdef WITH_OSL - OSLShader::thread_init(&kg, &kernel_globals, &osl_globals); + OSLShader::thread_init(&kg, &kernel_globals, osl_globals); #endif return kg; } |