diff options
Diffstat (limited to 'intern/cycles/device/cpu/kernel_thread_globals.cpp')
-rw-r--r-- | intern/cycles/device/cpu/kernel_thread_globals.cpp | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/intern/cycles/device/cpu/kernel_thread_globals.cpp b/intern/cycles/device/cpu/kernel_thread_globals.cpp index 89545399602..90880f5e5f7 100644 --- a/intern/cycles/device/cpu/kernel_thread_globals.cpp +++ b/intern/cycles/device/cpu/kernel_thread_globals.cpp @@ -3,10 +3,7 @@ #include "device/cpu/kernel_thread_globals.h" -// clang-format off -#include "kernel/osl/shader.h" #include "kernel/osl/globals.h" -// clang-format on #include "util/profiling.h" @@ -17,25 +14,35 @@ CPUKernelThreadGlobals::CPUKernelThreadGlobals(const KernelGlobalsCPU &kernel_gl Profiler &cpu_profiler) : KernelGlobalsCPU(kernel_globals), cpu_profiler_(cpu_profiler) { - reset_runtime_memory(); + clear_runtime_pointers(); #ifdef WITH_OSL - OSLShader::thread_init(this, reinterpret_cast<OSLGlobals *>(osl_globals_memory)); + OSLGlobals::thread_init(this, static_cast<OSLGlobals *>(osl_globals_memory)); #else (void)osl_globals_memory; #endif + +#ifdef WITH_PATH_GUIDING + opgl_path_segment_storage = new openpgl::cpp::PathSegmentStorage(); +#endif } CPUKernelThreadGlobals::CPUKernelThreadGlobals(CPUKernelThreadGlobals &&other) noexcept : KernelGlobalsCPU(std::move(other)), cpu_profiler_(other.cpu_profiler_) { - other.reset_runtime_memory(); + other.clear_runtime_pointers(); } CPUKernelThreadGlobals::~CPUKernelThreadGlobals() { #ifdef WITH_OSL - OSLShader::thread_free(this); + OSLGlobals::thread_free(this); +#endif + +#ifdef WITH_PATH_GUIDING + delete opgl_path_segment_storage; + delete opgl_surface_sampling_distribution; + delete opgl_volume_sampling_distribution; #endif } @@ -47,16 +54,25 @@ CPUKernelThreadGlobals &CPUKernelThreadGlobals::operator=(CPUKernelThreadGlobals *static_cast<KernelGlobalsCPU *>(this) = *static_cast<KernelGlobalsCPU *>(&other); - other.reset_runtime_memory(); + other.clear_runtime_pointers(); return *this; } -void CPUKernelThreadGlobals::reset_runtime_memory() +void CPUKernelThreadGlobals::clear_runtime_pointers() { #ifdef WITH_OSL osl = nullptr; #endif + +#ifdef WITH_PATH_GUIDING + opgl_sample_data_storage = nullptr; + opgl_guiding_field = nullptr; + + opgl_path_segment_storage = nullptr; + opgl_surface_sampling_distribution = nullptr; + opgl_volume_sampling_distribution = nullptr; +#endif } void CPUKernelThreadGlobals::start_profiling() |