diff options
Diffstat (limited to 'intern/cycles/kernel/osl')
-rw-r--r-- | intern/cycles/kernel/osl/osl_globals.h | 1 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/osl_shader.cpp | 17 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/osl_shader.h | 3 |
3 files changed, 14 insertions, 7 deletions
diff --git a/intern/cycles/kernel/osl/osl_globals.h b/intern/cycles/kernel/osl/osl_globals.h index 17cee675177..075c68824e6 100644 --- a/intern/cycles/kernel/osl/osl_globals.h +++ b/intern/cycles/kernel/osl/osl_globals.h @@ -64,7 +64,6 @@ struct OSLGlobals { struct ThreadData { OSL::ShaderGlobals globals; OSL::PerThreadInfo *thread_info; - OSL::ShadingContext *ctx; }; static tls_ptr(ThreadData, thread_data); 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) diff --git a/intern/cycles/kernel/osl/osl_shader.h b/intern/cycles/kernel/osl/osl_shader.h index a888335aad6..815557ed203 100644 --- a/intern/cycles/kernel/osl/osl_shader.h +++ b/intern/cycles/kernel/osl/osl_shader.h @@ -77,6 +77,9 @@ public: static float3 volume_eval_phase(const ShaderData *sd, const ShaderClosure *sc, const float3 omega_in, const float3 omega_out); + + /* release */ + static void release(KernelGlobals *kg, const ShaderData *sd); }; CCL_NAMESPACE_END |