Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles')
-rw-r--r--intern/cycles/device/device_cpu.cpp16
-rw-r--r--intern/cycles/render/osl.cpp6
-rw-r--r--intern/cycles/util/util_aligned_malloc.h4
3 files changed, 11 insertions, 15 deletions
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index 5d279ebb965..837a8186064 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -43,7 +43,6 @@
#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"
@@ -166,7 +165,7 @@ class CPUDevice : public Device {
bool need_texture_info;
#ifdef WITH_OSL
- OSLGlobals *osl_globals;
+ OSLGlobals osl_globals;
#endif
bool use_split_kernel;
@@ -283,9 +282,7 @@ class CPUDevice : public Device {
}
#ifdef WITH_OSL
- /* Must use aligned malloc due to concurrent hash map. */
- osl_globals = util_aligned_new<OSLGlobals>();
- kernel_globals.osl = osl_globals;
+ kernel_globals.osl = &osl_globals;
#endif
use_split_kernel = DebugFlags().cpu.split_kernel;
if (use_split_kernel) {
@@ -320,9 +317,6 @@ class CPUDevice : public Device {
~CPUDevice()
{
-#ifdef WITH_OSL
- util_aligned_delete(osl_globals);
-#endif
task_pool.stop();
texture_info.free();
}
@@ -498,7 +492,7 @@ class CPUDevice : public Device {
void *osl_memory()
{
#ifdef WITH_OSL
- return osl_globals;
+ return &osl_globals;
#else
return NULL;
#endif
@@ -987,7 +981,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++)
@@ -1059,7 +1053,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;
}
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp
index 4bc18e53c9b..6f927bd5c42 100644
--- a/intern/cycles/render/osl.cpp
+++ b/intern/cycles/render/osl.cpp
@@ -30,6 +30,7 @@
# include "kernel/osl/osl_services.h"
# include "kernel/osl/osl_shader.h"
+# include "util/util_aligned_malloc.h"
# include "util/util_foreach.h"
# include "util/util_logging.h"
# include "util/util_md5.h"
@@ -224,7 +225,8 @@ void OSLShaderManager::shading_system_init()
thread_scoped_lock lock(ss_shared_mutex);
if (ss_shared_users == 0) {
- services_shared = new OSLRenderServices(ts_shared);
+ /* Must use aligned new due to concurrent hash map. */
+ services_shared = util_aligned_new<OSLRenderServices>(ts_shared);
string shader_path = path_get("shader");
# ifdef _WIN32
@@ -293,7 +295,7 @@ void OSLShaderManager::shading_system_free()
delete ss_shared;
ss_shared = NULL;
- delete services_shared;
+ util_aligned_delete(services_shared);
services_shared = NULL;
}
diff --git a/intern/cycles/util/util_aligned_malloc.h b/intern/cycles/util/util_aligned_malloc.h
index 7115e4cb0c6..df7d93c056d 100644
--- a/intern/cycles/util/util_aligned_malloc.h
+++ b/intern/cycles/util/util_aligned_malloc.h
@@ -31,10 +31,10 @@ void *util_aligned_malloc(size_t size, int alignment);
void util_aligned_free(void *ptr);
/* Aligned new operator. */
-template<typename T> T *util_aligned_new()
+template<typename T, typename... Args> T *util_aligned_new(Args... args)
{
void *mem = util_aligned_malloc(sizeof(T), alignof(T));
- return new (mem) T();
+ return new (mem) T(args...);
}
template<typename T> void util_aligned_delete(T *t)