Revert "Use one context per OSL thread. Not sure if this actually works, but the...
[blender.git] / intern / cycles / kernel / osl / osl_shader.cpp
index 7d6732b9e56b3ca762d51f9cda080d7abbac2e05..a7c21e7b595bcfbc3f0b001c2257258bb278c4be 100644 (file)
@@ -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)