[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36666] branches/cycles/intern/cycles: Cycles: fix BSDF closure inputs ignoring links.

Brecht Van Lommel brechtvanlommel at pandora.be
Fri May 13 14:11:08 CEST 2011


Revision: 36666
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36666
Author:   blendix
Date:     2011-05-13 12:11:08 +0000 (Fri, 13 May 2011)
Log Message:
-----------
Cycles: fix BSDF closure inputs ignoring links.

Modified Paths:
--------------
    branches/cycles/intern/cycles/kernel/svm/svm.h
    branches/cycles/intern/cycles/kernel/svm/svm_closure.h
    branches/cycles/intern/cycles/render/nodes.cpp

Modified: branches/cycles/intern/cycles/kernel/svm/svm.h
===================================================================
--- branches/cycles/intern/cycles/kernel/svm/svm.h	2011-05-13 12:10:03 UTC (rev 36665)
+++ branches/cycles/intern/cycles/kernel/svm/svm.h	2011-05-13 12:11:08 UTC (rev 36666)
@@ -167,7 +167,7 @@
 			else return;
 		}
 		else if(node.x == NODE_CLOSURE_BSDF)
-			svm_node_closure_bsdf(sd, node.y, node.z, node.w, randb);
+			svm_node_closure_bsdf(sd, stack, node, randb);
 		else if(node.x == NODE_CLOSURE_EMISSION)
 			svm_node_closure_emission(sd);
 		else if(node.x == NODE_CLOSURE_BACKGROUND)

Modified: branches/cycles/intern/cycles/kernel/svm/svm_closure.h
===================================================================
--- branches/cycles/intern/cycles/kernel/svm/svm_closure.h	2011-05-13 12:10:03 UTC (rev 36665)
+++ branches/cycles/intern/cycles/kernel/svm/svm_closure.h	2011-05-13 12:11:08 UTC (rev 36666)
@@ -20,11 +20,14 @@
 
 /* Closure Nodes */
 
-__device void svm_node_closure_bsdf(ShaderData *sd, uint type, int iparam1, int iparam2, float randb)
+__device void svm_node_closure_bsdf(ShaderData *sd, float *stack, uint4 node, float randb)
 {
-	float param1 = __int_as_float(iparam1);
-	float param2 = __int_as_float(iparam2);
+	uint type, param1_offset, param2_offset;
+	decode_node_uchar4(node.y, &type, &param1_offset, &param2_offset, NULL);
 
+	float param1 = (stack_valid(param1_offset))? stack_load_float(stack, param1_offset): __int_as_float(node.z);
+	float param2 = (stack_valid(param2_offset))? stack_load_float(stack, param2_offset): __int_as_float(node.w);
+
 	switch(type) {
 		case CLOSURE_BSDF_DIFFUSE_ID:
 			bsdf_diffuse_setup(sd, sd->N);

Modified: branches/cycles/intern/cycles/render/nodes.cpp
===================================================================
--- branches/cycles/intern/cycles/render/nodes.cpp	2011-05-13 12:10:03 UTC (rev 36665)
+++ branches/cycles/intern/cycles/render/nodes.cpp	2011-05-13 12:11:08 UTC (rev 36666)
@@ -987,9 +987,16 @@
 	}
 	else
 		compiler.add_node(NODE_CLOSURE_SET_WEIGHT, color_in->value);
+	
+	if(param1)
+		compiler.stack_assign(param1);
+	if(param2)
+		compiler.stack_assign(param2);
 
 	compiler.add_node(NODE_CLOSURE_BSDF,
-		closure,
+		compiler.encode_uchar4(closure,
+			(param1)? param1->stack_offset: SVM_STACK_INVALID,
+			(param2)? param2->stack_offset: SVM_STACK_INVALID),
 		__float_as_int((param1)? param1->value.x: 0.0f),
 		__float_as_int((param2)? param2->value.x: 0.0f));
 }




More information about the Bf-blender-cvs mailing list