[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50375] trunk/blender/intern/cycles/kernel : Use one context per OSL thread.

Lukas Toenne lukas.toenne at googlemail.com
Tue Sep 4 10:53:47 CEST 2012


Revision: 50375
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50375
Author:   lukastoenne
Date:     2012-09-04 08:53:47 +0000 (Tue, 04 Sep 2012)
Log Message:
-----------
Use one context per OSL thread. Not sure if this actually works, but the simple renderer example in OSL does it this way.

Modified Paths:
--------------
    trunk/blender/intern/cycles/kernel/kernel_emission.h
    trunk/blender/intern/cycles/kernel/kernel_path.h
    trunk/blender/intern/cycles/kernel/kernel_shader.h
    trunk/blender/intern/cycles/kernel/osl/osl_globals.h
    trunk/blender/intern/cycles/kernel/osl/osl_shader.cpp
    trunk/blender/intern/cycles/kernel/osl/osl_shader.h

Modified: trunk/blender/intern/cycles/kernel/kernel_emission.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_emission.h	2012-09-04 08:53:44 UTC (rev 50374)
+++ trunk/blender/intern/cycles/kernel/kernel_emission.h	2012-09-04 08:53:47 UTC (rev 50375)
@@ -54,8 +54,6 @@
 			eval = make_float3(0.0f, 0.0f, 0.0f);
 	}
 
-	shader_release(kg, &sd);
-
 	return eval;
 }
 
@@ -164,7 +162,6 @@
 	ShaderData sd;
 	shader_setup_from_background(kg, &sd, ray);
 	float3 L = shader_eval_background(kg, &sd, path_flag);
-	shader_release(kg, &sd);
 
 #ifdef __BACKGROUND_MIS__
 	/* check if background light exists or if we should skip pdf */

Modified: trunk/blender/intern/cycles/kernel/kernel_path.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_path.h	2012-09-04 08:53:44 UTC (rev 50374)
+++ trunk/blender/intern/cycles/kernel/kernel_path.h	2012-09-04 08:53:47 UTC (rev 50375)
@@ -395,8 +395,6 @@
 		label = shader_bsdf_sample(kg, &sd, bsdf_u, bsdf_v, &bsdf_eval,
 			&bsdf_omega_in, &bsdf_domega_in, &bsdf_pdf);
 
-		shader_release(kg, &sd);
-
 		if(bsdf_pdf == 0.0f || bsdf_eval_is_zero(&bsdf_eval))
 			break;
 
@@ -569,8 +567,6 @@
 		label = shader_bsdf_sample(kg, &sd, bsdf_u, bsdf_v, &bsdf_eval,
 			&bsdf_omega_in, &bsdf_domega_in, &bsdf_pdf);
 
-		shader_release(kg, &sd);
-
 		if(bsdf_pdf == 0.0f || bsdf_eval_is_zero(&bsdf_eval))
 			break;
 
@@ -862,7 +858,6 @@
 
 		/* continue in case of transparency */
 		throughput *= shader_bsdf_transparency(kg, &sd);
-		shader_release(kg, &sd);
 
 		if(is_zero(throughput))
 			break;

Modified: trunk/blender/intern/cycles/kernel/kernel_shader.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_shader.h	2012-09-04 08:53:44 UTC (rev 50374)
+++ trunk/blender/intern/cycles/kernel/kernel_shader.h	2012-09-04 08:53:47 UTC (rev 50375)
@@ -773,15 +773,5 @@
 }
 #endif
 
-/* Free ShaderData */
-
-__device void shader_release(KernelGlobals *kg, ShaderData *sd)
-{
-#ifdef __OSL__
-	if (kernel_osl_use(kg))
-		OSLShader::release(kg, sd);
-#endif
-}
-
 CCL_NAMESPACE_END
 

Modified: trunk/blender/intern/cycles/kernel/osl/osl_globals.h
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/osl_globals.h	2012-09-04 08:53:44 UTC (rev 50374)
+++ trunk/blender/intern/cycles/kernel/osl/osl_globals.h	2012-09-04 08:53:47 UTC (rev 50375)
@@ -64,6 +64,7 @@
 	struct ThreadData {
 		OSL::ShaderGlobals globals;
 		OSL::PerThreadInfo *thread_info;
+		OSL::ShadingContext *ctx;
 	};
 
 	static tls_ptr(ThreadData, thread_data);

Modified: trunk/blender/intern/cycles/kernel/osl/osl_shader.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/osl_shader.cpp	2012-09-04 08:53:44 UTC (rev 50374)
+++ trunk/blender/intern/cycles/kernel/osl/osl_shader.cpp	2012-09-04 08:53:47 UTC (rev 50375)
@@ -42,6 +42,7 @@
 
 	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);
 
@@ -54,6 +55,7 @@
 
 	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;
@@ -204,7 +206,7 @@
 	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 = ss->get_context(tdata->thread_info);
+	OSL::ShadingContext *ctx = tdata->ctx;
 
 	/* setup shader globals from shader data */
 	sd->osl_ctx = ctx;
@@ -262,7 +264,7 @@
 	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 = ss->get_context(tdata->thread_info);
+	OSL::ShadingContext *ctx = tdata->ctx;
 
 	/* setup shader globals from shader data */
 	sd->osl_ctx = ctx;
@@ -339,7 +341,7 @@
 	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 = ss->get_context(tdata->thread_info);
+	OSL::ShadingContext *ctx = tdata->ctx;
 
 	/* setup shader globals from shader data */
 	sd->osl_ctx = ctx;
@@ -363,7 +365,7 @@
 	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 = ss->get_context(tdata->thread_info);
+	OSL::ShadingContext *ctx = tdata->ctx;
 
 	/* setup shader globals from shader data */
 	sd->osl_ctx = ctx;
@@ -379,13 +381,6 @@
 	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)

Modified: trunk/blender/intern/cycles/kernel/osl/osl_shader.h
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/osl_shader.h	2012-09-04 08:53:44 UTC (rev 50374)
+++ trunk/blender/intern/cycles/kernel/osl/osl_shader.h	2012-09-04 08:53:47 UTC (rev 50375)
@@ -77,9 +77,6 @@
 
 	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




More information about the Bf-blender-cvs mailing list