[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51117] trunk/blender/intern/cycles/kernel /osl: Fix for a case of 'static initialization fiasco' with OSL closure variables.

Lukas Toenne lukas.toenne at googlemail.com
Sat Oct 6 18:28:02 CEST 2012


Revision: 51117
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51117
Author:   lukastoenne
Date:     2012-10-06 16:28:02 +0000 (Sat, 06 Oct 2012)
Log Message:
-----------
Fix for a case of 'static initialization fiasco' with OSL closure variables. The parameter lists are using OIIO::TypeDesc static standards, which are also static variables. With static OSL libraries these are not initialized when the closure parameter lists are initialized, so OSL rejects the closure types.

Putting static initialization into functions works just as well, but ensures the OIIO::TypeDesc access is delayed until initialization is complete.

Modified Paths:
--------------
    trunk/blender/intern/cycles/kernel/osl/background.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_diffuse.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_microfacet.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_oren_nayar.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_phong.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_reflection.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_refraction.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_transparent.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_ward.cpp
    trunk/blender/intern/cycles/kernel/osl/bsdf_westin.cpp
    trunk/blender/intern/cycles/kernel/osl/bssrdf.cpp
    trunk/blender/intern/cycles/kernel/osl/debug.cpp
    trunk/blender/intern/cycles/kernel/osl/emissive.cpp
    trunk/blender/intern/cycles/kernel/osl/osl_closures.cpp
    trunk/blender/intern/cycles/kernel/osl/osl_closures.h
    trunk/blender/intern/cycles/kernel/osl/vol_subsurface.cpp

Modified: trunk/blender/intern/cycles/kernel/osl/background.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/background.cpp	2012-10-06 14:35:48 UTC (rev 51116)
+++ trunk/blender/intern/cycles/kernel/osl/background.cpp	2012-10-06 16:28:02 UTC (rev 51117)
@@ -85,16 +85,25 @@
 	}
 };
 
-ClosureParam closure_background_params[] = {
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(GenericBackgroundClosure)
-};
 
+ClosureParam *closure_background_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(GenericBackgroundClosure)
+	};
+	return params;
+}
+
 CLOSURE_PREPARE(closure_background_prepare, GenericBackgroundClosure)
 
-ClosureParam closure_holdout_params[] = {
-	CLOSURE_FINISH_PARAM(HoldoutClosure)
-};
+ClosureParam *closure_holdout_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_FINISH_PARAM(HoldoutClosure)
+	};
+	return params;
+}
 
 CLOSURE_PREPARE(closure_holdout_prepare, HoldoutClosure)
 

Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp	2012-10-06 14:35:48 UTC (rev 51116)
+++ trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp	2012-10-06 16:28:02 UTC (rev 51117)
@@ -173,12 +173,16 @@
 
 
 
-ClosureParam bsdf_ashikhmin_velvet_params[] = {
-	CLOSURE_VECTOR_PARAM(AshikhminVelvetClosure, m_N),
-	CLOSURE_FLOAT_PARAM(AshikhminVelvetClosure, m_sigma),
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(AshikhminVelvetClosure)
-};
+ClosureParam *bsdf_ashikhmin_velvet_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(AshikhminVelvetClosure, m_N),
+	    CLOSURE_FLOAT_PARAM(AshikhminVelvetClosure, m_sigma),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(AshikhminVelvetClosure)
+	};
+	return params;
+}
 
 CLOSURE_PREPARE(bsdf_ashikhmin_velvet_prepare, AshikhminVelvetClosure)
 

Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_diffuse.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/bsdf_diffuse.cpp	2012-10-06 14:35:48 UTC (rev 51116)
+++ trunk/blender/intern/cycles/kernel/osl/bsdf_diffuse.cpp	2012-10-06 16:28:02 UTC (rev 51117)
@@ -168,17 +168,25 @@
 	}
 };
 
-ClosureParam bsdf_diffuse_params[] = {
-	CLOSURE_VECTOR_PARAM(DiffuseClosure, m_N),
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(DiffuseClosure)
-};
+ClosureParam *bsdf_diffuse_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(DiffuseClosure, m_N),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(DiffuseClosure)
+	};
+	return params;
+}
 
-ClosureParam bsdf_translucent_params[] = {
-	CLOSURE_VECTOR_PARAM(TranslucentClosure, m_N),
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(TranslucentClosure)
-};
+ClosureParam *bsdf_translucent_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(TranslucentClosure, m_N),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(TranslucentClosure)
+	};
+	return params;
+}
 
 CLOSURE_PREPARE(bsdf_diffuse_prepare, DiffuseClosure)
 CLOSURE_PREPARE(bsdf_translucent_prepare, TranslucentClosure)

Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_microfacet.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/bsdf_microfacet.cpp	2012-10-06 14:35:48 UTC (rev 51116)
+++ trunk/blender/intern/cycles/kernel/osl/bsdf_microfacet.cpp	2012-10-06 16:28:02 UTC (rev 51117)
@@ -503,35 +503,51 @@
 
 
 
-ClosureParam bsdf_microfacet_ggx_params[] = {
-	CLOSURE_VECTOR_PARAM(MicrofacetGGXClosure<0>, m_N),
-	CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<0>, m_ag),
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(MicrofacetGGXClosure<0>)
-};
+ClosureParam *bsdf_microfacet_ggx_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(MicrofacetGGXClosure<0>, m_N),
+	    CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<0>, m_ag),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(MicrofacetGGXClosure<0>)
+	};
+	return params;
+}
 
-ClosureParam bsdf_microfacet_ggx_refraction_params[] = {
-	CLOSURE_VECTOR_PARAM(MicrofacetGGXClosure<1>, m_N),
-	CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<1>, m_ag),
-	CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<1>, m_eta),
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(MicrofacetGGXClosure<1>)
-};
+ClosureParam *bsdf_microfacet_ggx_refraction_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(MicrofacetGGXClosure<1>, m_N),
+	    CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<1>, m_ag),
+	    CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<1>, m_eta),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(MicrofacetGGXClosure<1>)
+	};
+	return params;
+}
 
-ClosureParam bsdf_microfacet_beckmann_params[] = {
-	CLOSURE_VECTOR_PARAM(MicrofacetBeckmannClosure<0>, m_N),
-	CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<0>, m_ab),
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(MicrofacetBeckmannClosure<0>)
-};
+ClosureParam *bsdf_microfacet_beckmann_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(MicrofacetBeckmannClosure<0>, m_N),
+	    CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<0>, m_ab),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(MicrofacetBeckmannClosure<0>)
+	};
+	return params;
+}
 
-ClosureParam bsdf_microfacet_beckmann_refraction_params[] = {
-	CLOSURE_VECTOR_PARAM(MicrofacetBeckmannClosure<1>, m_N),
-	CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<1>, m_ab),
-	CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<1>, m_eta),
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(MicrofacetBeckmannClosure<1>)
-};
+ClosureParam *bsdf_microfacet_beckmann_refraction_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(MicrofacetBeckmannClosure<1>, m_N),
+	    CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<1>, m_ab),
+	    CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<1>, m_eta),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(MicrofacetBeckmannClosure<1>)
+	};
+	return params;
+}
 
 CLOSURE_PREPARE(bsdf_microfacet_ggx_prepare,                 MicrofacetGGXClosure<0>)
 CLOSURE_PREPARE(bsdf_microfacet_ggx_refraction_prepare,      MicrofacetGGXClosure<1>)

Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_oren_nayar.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/bsdf_oren_nayar.cpp	2012-10-06 14:35:48 UTC (rev 51116)
+++ trunk/blender/intern/cycles/kernel/osl/bsdf_oren_nayar.cpp	2012-10-06 16:28:02 UTC (rev 51117)
@@ -125,12 +125,16 @@
 	}
 };
 
-ClosureParam bsdf_oren_nayar_params[] = {
-	CLOSURE_VECTOR_PARAM(OrenNayarClosure, m_N),
-	CLOSURE_FLOAT_PARAM(OrenNayarClosure, m_sigma),
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(OrenNayarClosure)
-};
+ClosureParam *bsdf_oren_nayar_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(OrenNayarClosure, m_N),
+	    CLOSURE_FLOAT_PARAM(OrenNayarClosure, m_sigma),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(OrenNayarClosure)
+	};
+	return params;
+}
 
 CLOSURE_PREPARE(bsdf_oren_nayar_prepare, OrenNayarClosure)
 

Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_phong.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/bsdf_phong.cpp	2012-10-06 14:35:48 UTC (rev 51116)
+++ trunk/blender/intern/cycles/kernel/osl/bsdf_phong.cpp	2012-10-06 16:28:02 UTC (rev 51117)
@@ -258,18 +258,28 @@
 
 
 
-ClosureParam bsdf_phong_params[] = {
-    CLOSURE_VECTOR_PARAM(PhongClosure, m_N),
-    CLOSURE_FLOAT_PARAM (PhongClosure, m_exponent),
-    CLOSURE_STRING_KEYPARAM("label"),
-    CLOSURE_FINISH_PARAM(PhongClosure) };
+ClosureParam *bsdf_phong_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(PhongClosure, m_N),
+	    CLOSURE_FLOAT_PARAM (PhongClosure, m_exponent),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(PhongClosure)
+	};
+	return params;
+}
 
-ClosureParam bsdf_phong_ramp_params[] = {
-    CLOSURE_VECTOR_PARAM     (PhongRampClosure, m_N),
-    CLOSURE_FLOAT_PARAM      (PhongRampClosure, m_exponent),
-    CLOSURE_COLOR_ARRAY_PARAM(PhongRampClosure, m_colors, PhongRampClosure::MAXCOLORS),
-    CLOSURE_STRING_KEYPARAM("label"),
-    CLOSURE_FINISH_PARAM     (PhongRampClosure) };
+ClosureParam *bsdf_phong_ramp_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM     (PhongRampClosure, m_N),
+	    CLOSURE_FLOAT_PARAM      (PhongRampClosure, m_exponent),
+	    CLOSURE_COLOR_ARRAY_PARAM(PhongRampClosure, m_colors, PhongRampClosure::MAXCOLORS),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM     (PhongRampClosure)
+	};
+	return params;
+}
 
 CLOSURE_PREPARE(bsdf_phong_prepare, PhongClosure)
 CLOSURE_PREPARE(bsdf_phong_ramp_prepare, PhongRampClosure)

Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_reflection.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/bsdf_reflection.cpp	2012-10-06 14:35:48 UTC (rev 51116)
+++ trunk/blender/intern/cycles/kernel/osl/bsdf_reflection.cpp	2012-10-06 16:28:02 UTC (rev 51117)
@@ -97,11 +97,15 @@
 	}
 };
 
-ClosureParam bsdf_reflection_params[] = {
-	CLOSURE_VECTOR_PARAM(ReflectionClosure, m_N),
-	CLOSURE_STRING_KEYPARAM("label"),
-	CLOSURE_FINISH_PARAM(ReflectionClosure)
-};
+ClosureParam *bsdf_reflection_params()
+{
+	static ClosureParam params[] = {
+	    CLOSURE_VECTOR_PARAM(ReflectionClosure, m_N),
+	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_FINISH_PARAM(ReflectionClosure)
+	};
+	return params;
+}
 
 CLOSURE_PREPARE(bsdf_reflection_prepare, ReflectionClosure)
 

Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_refraction.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/bsdf_refraction.cpp	2012-10-06 14:35:48 UTC (rev 51116)
+++ trunk/blender/intern/cycles/kernel/osl/bsdf_refraction.cpp	2012-10-06 16:28:02 UTC (rev 51117)
@@ -108,12 +108,16 @@
 	}
 };
 
-ClosureParam bsdf_refraction_params[] = {
-	CLOSURE_VECTOR_PARAM(RefractionClosure, m_N),
-	CLOSURE_FLOAT_PARAM(RefractionClosure, m_eta),

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list