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:
authorLukas Toenne <lukas.toenne@googlemail.com>2012-09-04 21:28:36 +0400
committerLukas Toenne <lukas.toenne@googlemail.com>2012-09-04 21:28:36 +0400
commit95b85a8c37b71c7582d799c2a3177e7f5549f20c (patch)
tree60d4a23d7366589f772f410cc057bdcd27f09fa7 /intern/cycles/kernel/osl/osl_shader.cpp
parent927b7ed303358e4a7ad9876efd7b18ca08c6781d (diff)
Revert "Use one context per OSL thread. Not sure if this actually works, but the simple renderer example in OSL does it this way."
This does not actually work: The context must not be shared between threads, but using the same context between different samples actually seems to prevent OSL from switching between shaders. The proper solution would be to ensure memory pooling works correctly. This reverts commit 69f87e69258d6266dcb20f09f7e3d4021e663432.
Diffstat (limited to 'intern/cycles/kernel/osl/osl_shader.cpp')
-rw-r--r--intern/cycles/kernel/osl/osl_shader.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/intern/cycles/kernel/osl/osl_shader.cpp b/intern/cycles/kernel/osl/osl_shader.cpp
index 7d6732b9e56..a7c21e7b595 100644
--- a/intern/cycles/kernel/osl/osl_shader.cpp
+++ b/intern/cycles/kernel/osl/osl_shader.cpp
@@ -42,7 +42,6 @@ void OSLShader::thread_init(KernelGlobals *kg)
memset(&tdata->globals, 0, sizeof(OSL::ShaderGlobals));
tdata->thread_info = ss->create_thread_info();
- tdata->ctx = ss->get_context(tdata->thread_info);
tls_set(kg->osl.thread_data, tdata);
@@ -55,7 +54,6 @@ void OSLShader::thread_free(KernelGlobals *kg)
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
- ss->release_context(tdata->ctx);
ss->destroy_thread_info(tdata->thread_info);
delete tdata;
@@ -206,7 +204,7 @@ void OSLShader::eval_surface(KernelGlobals *kg, ShaderData *sd, float randb, int
OSL::ShadingSystem *ss = kg->osl.ss;
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
OSL::ShaderGlobals *globals = &tdata->globals;
- OSL::ShadingContext *ctx = tdata->ctx;
+ OSL::ShadingContext *ctx = ss->get_context(tdata->thread_info);
/* setup shader globals from shader data */
sd->osl_ctx = ctx;
@@ -264,7 +262,7 @@ float3 OSLShader::eval_background(KernelGlobals *kg, ShaderData *sd, int path_fl
OSL::ShadingSystem *ss = kg->osl.ss;
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
OSL::ShaderGlobals *globals = &tdata->globals;
- OSL::ShadingContext *ctx = tdata->ctx;
+ OSL::ShadingContext *ctx = ss->get_context(tdata->thread_info);
/* setup shader globals from shader data */
sd->osl_ctx = ctx;
@@ -341,7 +339,7 @@ void OSLShader::eval_volume(KernelGlobals *kg, ShaderData *sd, float randb, int
OSL::ShadingSystem *ss = kg->osl.ss;
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
OSL::ShaderGlobals *globals = &tdata->globals;
- OSL::ShadingContext *ctx = tdata->ctx;
+ OSL::ShadingContext *ctx = ss->get_context(tdata->thread_info);
/* setup shader globals from shader data */
sd->osl_ctx = ctx;
@@ -365,7 +363,7 @@ void OSLShader::eval_displacement(KernelGlobals *kg, ShaderData *sd)
OSL::ShadingSystem *ss = kg->osl.ss;
OSLGlobals::ThreadData *tdata = tls_get(OSLGlobals::ThreadData, kg->osl.thread_data);
OSL::ShaderGlobals *globals = &tdata->globals;
- OSL::ShadingContext *ctx = tdata->ctx;
+ OSL::ShadingContext *ctx = ss->get_context(tdata->thread_info);
/* setup shader globals from shader data */
sd->osl_ctx = ctx;
@@ -381,6 +379,13 @@ void OSLShader::eval_displacement(KernelGlobals *kg, ShaderData *sd)
sd->P = TO_FLOAT3(globals->P);
}
+void OSLShader::release(KernelGlobals *kg, const ShaderData *sd)
+{
+ OSL::ShadingSystem *ss = kg->osl.ss;
+
+ ss->release_context((OSL::ShadingContext *)sd->osl_ctx);
+}
+
/* BSDF Closure */
int OSLShader::bsdf_sample(const ShaderData *sd, const ShaderClosure *sc, float randu, float randv, float3& eval, float3& omega_in, differential3& domega_in, float& pdf)