[Bf-blender-cvs] [0ec814c] master: Cycles: Support building with latest OSL-1.7dev

Sergey Sharybin noreply at git.blender.org
Wed Sep 23 09:28:46 CEST 2015


Commit: 0ec814c91d82eca135354abc38889e2bfb64dd9a
Author: Sergey Sharybin
Date:   Wed Sep 23 12:23:37 2015 +0500
Branches: master
https://developer.blender.org/rB0ec814c91d82eca135354abc38889e2bfb64dd9a

Cycles: Support building with latest OSL-1.7dev

So now the following OSL versions are supported (at least for compilation):

- 1.5 with closure alignment patch applied
- 1.6.8 release
- 1.7 development version from latest git

===================================================================

M	intern/cycles/kernel/osl/background.cpp
M	intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
M	intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
M	intern/cycles/kernel/osl/emissive.cpp
M	intern/cycles/kernel/osl/osl_bssrdf.cpp
M	intern/cycles/kernel/osl/osl_closures.h
M	intern/cycles/kernel/osl/osl_shader.cpp

===================================================================

diff --git a/intern/cycles/kernel/osl/background.cpp b/intern/cycles/kernel/osl/background.cpp
index 2facced..4d70bc8 100644
--- a/intern/cycles/kernel/osl/background.cpp
+++ b/intern/cycles/kernel/osl/background.cpp
@@ -77,7 +77,7 @@ public:
 ClosureParam *closure_background_params()
 {
 	static ClosureParam params[] = {
-	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_STRING_KEYPARAM(GenericBackgroundClosure, label, "label"),
 	    CLOSURE_FINISH_PARAM(GenericBackgroundClosure)
 	};
 	return params;
@@ -98,7 +98,7 @@ CCLOSURE_PREPARE(closure_holdout_prepare, HoldoutClosure)
 ClosureParam *closure_ambient_occlusion_params()
 {
 	static ClosureParam params[] = {
-	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_STRING_KEYPARAM(AmbientOcclusionClosure, label, "label"),
 	    CLOSURE_FINISH_PARAM(AmbientOcclusionClosure)
 	};
 	return params;
diff --git a/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp b/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
index 43929fb..b3c71e4 100644
--- a/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
+++ b/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
@@ -93,7 +93,7 @@ ClosureParam *closure_bsdf_diffuse_ramp_params()
 	static ClosureParam params[] = {
 		CLOSURE_FLOAT3_PARAM(DiffuseRampClosure, sc.N),
 		CLOSURE_COLOR_ARRAY_PARAM(DiffuseRampClosure, colors, 8),
-		CLOSURE_STRING_KEYPARAM("label"),
+		CLOSURE_STRING_KEYPARAM(DiffuseRampClosure, label, "label"),
 	    CLOSURE_FINISH_PARAM(DiffuseRampClosure)
 	};
 	return params;
diff --git a/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp b/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
index 497c4f0..99f510d 100644
--- a/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
+++ b/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
@@ -93,7 +93,7 @@ ClosureParam *closure_bsdf_phong_ramp_params()
 		CLOSURE_FLOAT3_PARAM(PhongRampClosure, sc.N),
 		CLOSURE_FLOAT_PARAM(PhongRampClosure, sc.data0),
 		CLOSURE_COLOR_ARRAY_PARAM(PhongRampClosure, colors, 8),
-		CLOSURE_STRING_KEYPARAM("label"),
+		CLOSURE_STRING_KEYPARAM(PhongRampClosure, label, "label"),
 	    CLOSURE_FINISH_PARAM(PhongRampClosure)
 	};
 	return params;
diff --git a/intern/cycles/kernel/osl/emissive.cpp b/intern/cycles/kernel/osl/emissive.cpp
index 0293554..9a95fa5 100644
--- a/intern/cycles/kernel/osl/emissive.cpp
+++ b/intern/cycles/kernel/osl/emissive.cpp
@@ -77,7 +77,7 @@ public:
 ClosureParam *closure_emission_params()
 {
 	static ClosureParam params[] = {
-	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_STRING_KEYPARAM(GenericEmissiveClosure, label, "label"),
 	    CLOSURE_FINISH_PARAM(GenericEmissiveClosure)
 	};
 	return params;
diff --git a/intern/cycles/kernel/osl/osl_bssrdf.cpp b/intern/cycles/kernel/osl/osl_bssrdf.cpp
index 8899803..bc39592 100644
--- a/intern/cycles/kernel/osl/osl_bssrdf.cpp
+++ b/intern/cycles/kernel/osl/osl_bssrdf.cpp
@@ -69,7 +69,7 @@ ClosureParam *closure_bssrdf_cubic_params()
 		CLOSURE_FLOAT3_PARAM(CubicBSSRDFClosure, radius),
 		CLOSURE_FLOAT_PARAM(CubicBSSRDFClosure, sc.data1),
 		CLOSURE_FLOAT_PARAM(CubicBSSRDFClosure, sc.T.x),
-	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_STRING_KEYPARAM(CubicBSSRDFClosure, label, "label"),
 	    CLOSURE_FINISH_PARAM(CubicBSSRDFClosure)
 	};
 	return params;
@@ -97,7 +97,7 @@ ClosureParam *closure_bssrdf_gaussian_params()
 		CLOSURE_FLOAT3_PARAM(GaussianBSSRDFClosure, sc.N),
 		CLOSURE_FLOAT3_PARAM(GaussianBSSRDFClosure, radius),
 		CLOSURE_FLOAT_PARAM(GaussianBSSRDFClosure, sc.data1),
-	    CLOSURE_STRING_KEYPARAM("label"),
+	    CLOSURE_STRING_KEYPARAM(GaussianBSSRDFClosure, label, "label"),
 	    CLOSURE_FINISH_PARAM(GaussianBSSRDFClosure)
 	};
 	return params;
diff --git a/intern/cycles/kernel/osl/osl_closures.h b/intern/cycles/kernel/osl/osl_closures.h
index ef67ef5..97bd1b1 100644
--- a/intern/cycles/kernel/osl/osl_closures.h
+++ b/intern/cycles/kernel/osl/osl_closures.h
@@ -78,6 +78,11 @@ void name(RendererServices *, int id, void *data) \
 #define TO_COLOR3(v) OSL::Color3(v.x, v.y, v.z)
 #define TO_FLOAT3(v) make_float3(v[0], v[1], v[2])
 
+#if OSL_LIBRARY_VERSION_CODE < 10700
+#  undef CLOSURE_STRING_KEYPARAM
+#  define CLOSURE_STRING_KEYPARAM(st, fld, key) { TypeDesc::TypeString, 0, key, 0 }
+#endif
+
 /* Closure */
 
 class CClosurePrimitive {
@@ -97,6 +102,10 @@ public:
 	virtual void setup() {}
 
 	Category category;
+
+#if OSL_LIBRARY_VERSION_CODE >= 10700
+	OSL::ustring label;
+#endif
 };
 
 /* BSDF */
@@ -175,7 +184,7 @@ static ClosureParam *bsdf_##lower##_params() \
 /* parameters */
 
 #define BSDF_CLOSURE_CLASS_END(Upper, lower) \
-		CLOSURE_STRING_KEYPARAM("label"), \
+		CLOSURE_STRING_KEYPARAM(Upper##Closure, label, "label"), \
 	    CLOSURE_FINISH_PARAM(Upper##Closure) \
 	}; \
 	return params; \
@@ -223,7 +232,7 @@ static ClosureParam *volume_##lower##_params() \
 /* parameters */
 
 #define VOLUME_CLOSURE_CLASS_END(Upper, lower) \
-		CLOSURE_STRING_KEYPARAM("label"), \
+		CLOSURE_STRING_KEYPARAM(Upper##Closure, label, "label"), \
 	    CLOSURE_FINISH_PARAM(Upper##Closure) \
 	}; \
 	return params; \
diff --git a/intern/cycles/kernel/osl/osl_shader.cpp b/intern/cycles/kernel/osl/osl_shader.cpp
index 8cfe0cb..2f234aa 100644
--- a/intern/cycles/kernel/osl/osl_shader.cpp
+++ b/intern/cycles/kernel/osl/osl_shader.cpp
@@ -146,165 +146,175 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
 	/* OSL gives us a closure tree, we flatten it into arrays per
 	 * closure type, for evaluation, sampling, etc later on. */
 
-	if(closure->type == OSL::ClosureColor::COMPONENT) {
-		OSL::ClosureComponent *comp = (OSL::ClosureComponent *)closure;
-		CClosurePrimitive *prim = (CClosurePrimitive *)comp->data();
+#if OSL_LIBRARY_VERSION_CODE < 10700
+	switch(closure->type) {
+#else
+	switch(closure->id) {
+#endif
+		case OSL::ClosureColor::MUL: {
+			OSL::ClosureMul *mul = (OSL::ClosureMul *)closure;
+			flatten_surface_closure_tree(sd, path_flag, mul->closure, TO_FLOAT3(mul->weight) * weight);
+			break;
+		}
+		case OSL::ClosureColor::ADD: {
+			OSL::ClosureAdd *add = (OSL::ClosureAdd *)closure;
+			flatten_surface_closure_tree(sd, path_flag, add->closureA, weight);
+			flatten_surface_closure_tree(sd, path_flag, add->closureB, weight);
+			break;
+		}
+		default: {
+			OSL::ClosureComponent *comp = (OSL::ClosureComponent *)closure;
+			CClosurePrimitive *prim = (CClosurePrimitive *)comp->data();
 
-		if(prim) {
-			ShaderClosure sc;
+			if(prim) {
+				ShaderClosure sc;
 
 #ifdef OSL_SUPPORTS_WEIGHTED_CLOSURE_COMPONENTS
-			weight = weight*TO_FLOAT3(comp->w);
+				weight = weight*TO_FLOAT3(comp->w);
 #endif
-			sc.weight = weight;
+				sc.weight = weight;
 
-			prim->setup();
+				prim->setup();
 
-			switch (prim->category) {
-				case CClosurePrimitive::BSDF: {
-					CBSDFClosure *bsdf = (CBSDFClosure *)prim;
-					int scattering = bsdf->scattering();
+				switch(prim->category) {
+					case CClosurePrimitive::BSDF: {
+						CBSDFClosure *bsdf = (CBSDFClosure *)prim;
+						int scattering = bsdf->scattering();
 
-					/* caustic options */
-					if((scattering & LABEL_GLOSSY) && (path_flag & PATH_RAY_DIFFUSE)) {
-						KernelGlobals *kg = sd->osl_globals;
+						/* caustic options */
+						if((scattering & LABEL_GLOSSY) && (path_flag & PATH_RAY_DIFFUSE)) {
+							KernelGlobals *kg = sd->osl_globals;
 
-						if((!kernel_data.integrator.caustics_reflective && (scattering & LABEL_REFLECT)) ||
-						   (!kernel_data.integrator.caustics_refractive && (scattering & LABEL_TRANSMIT))) {
-							return;
+							if((!kernel_data.integrator.caustics_reflective && (scattering & LABEL_REFLECT)) ||
+							   (!kernel_data.integrator.caustics_refractive && (scattering & LABEL_TRANSMIT)))
+							{
+								return;
+							}
 						}
-					}
 
-					/* sample weight */
-					float sample_weight = fabsf(average(weight));
+						/* sample weight */
+						float sample_weight = fabsf(average(weight));
 
-					sc.sample_weight = sample_weight;
+						sc.sample_weight = sample_weight;
 
-					sc.type = bsdf->sc.type;
-					sc.N = bsdf->sc.N;
-					sc.T = bsdf->sc.T;
-					sc.data0 = bsdf->sc.data0;
-					sc.data1 = bsdf->sc.data1;
-					sc.data2 = bsdf->sc.data2;
-					sc.prim = bsdf->sc.prim;
+						sc.type = bsdf->sc.type;
+						sc.N = bsdf->sc.N;
+						sc.T = bsdf->sc.T;
+						sc.data0 = bsdf->sc.data0;
+						sc.data1 = bsdf->sc.data1;
+						sc.data2 = bsdf->sc.data2;
+						sc.prim = bsdf->sc.prim;
 
-					/* add */
-					if(sc.sample_weight > CLOSURE_WEIGHT_CUTOFF && sd->num_closure < MAX_CLOSURE) {
-						sd->closure[sd->num_closure++] = sc;
-						sd->flag |= bsdf->shaderdata_flag();
-					}
-					break;
-				}
-				case CClosurePrimitive::Emissive: {
-					/* sample weight */
-					float sample_weight = fabsf(average(weight));
-
-					sc.sample_weight = sample_weight;
-					sc.type = CLOSURE_EMISSION_ID;
-					sc.data0 = 0.0f;
-					sc.data1 = 0.0f;
-					sc.data2 = 0.0f;
-					sc.prim = NULL;
-
-					/* flag */
-					if(sd->num_closure < MAX_CLOSURE) {
-						sd->closure[sd->num_closure++] = sc;
-						sd->flag |= SD_EMISSION;
-					}
-					break;
-				}
-				case CClosurePrimitive::AmbientOcclusion: {
-					/* sample weight */
-					float sample_weight = fabsf(average(weight));
-
-					sc.sample_weight = sample_weight;
-					sc.type = CLOSURE_AMBIENT_OCCLUSION_ID;
-					sc.data0 = 0.0f;
-					sc.data1 = 0.0f;
-					sc.data2 = 0.0f;
-					sc.prim = NULL;
-
-					if(sd->num_closure < MAX_CLOSURE) {
-						sd->closure[sd->num_closure++] = sc;
-						sd->flag |= SD_AO;
-					}
-					break;
-				}
-				case CClosurePrimitive::Holdout: {
-					sc.sample_weight = 0.0f;
-					sc.type = CLOSURE_HOLDOUT_ID;
-					sc.data0 = 0.0f;
-					sc.data1 = 0.0f;
-					sc.data2 = 0.0f;
-					sc.prim = NULL;
-
-					if(sd->num_closure < MAX_CLOSURE) {
-						sd->closure[sd->num_closure++] = sc;
-						sd->flag |= SD_HOLDOUT;
+						/* add */
+						if(sc.sample_weight > CLOSURE_WEIGHT_CUTOFF && sd->num_closure < MAX_CLOSURE) {
+							sd->closure[sd->num_closure++] = sc;
+							sd->flag |= bsdf->shaderdata_flag();
+						}
+						break;
 					}
-					break;
-				}
-				case CClosurePrimitive::BSSRDF: {
-					CBSSRDFClosure *bssrdf = (CBSSRDFClosure *)prim;
-					float sample_weight = fabsf(average(weight));
+					case CClo

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list