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));
 }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to