From 216602fe4b90c635cd1993aa1c1a9d866b6ae2cd Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 13 May 2011 12:11:08 +0000 Subject: Cycles: fix BSDF closure inputs ignoring links. --- intern/cycles/kernel/svm/svm.h | 2 +- intern/cycles/kernel/svm/svm_closure.h | 9 ++++++--- intern/cycles/render/nodes.cpp | 9 ++++++++- 3 files changed, 15 insertions(+), 5 deletions(-) (limited to 'intern/cycles') diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h index 5bd076c9cab..51445aece6c 100644 --- a/intern/cycles/kernel/svm/svm.h +++ b/intern/cycles/kernel/svm/svm.h @@ -167,7 +167,7 @@ __device void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderType type, 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) diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h index fe9edc36e95..58a916029f4 100644 --- a/intern/cycles/kernel/svm/svm_closure.h +++ b/intern/cycles/kernel/svm/svm_closure.h @@ -20,10 +20,13 @@ CCL_NAMESPACE_BEGIN /* 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, ¶m1_offset, ¶m2_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: diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index d437d0dfcc1..bcce6db6171 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -987,9 +987,16 @@ void BsdfNode::compile(SVMCompiler& compiler, ShaderInput *param1, ShaderInput * } 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)); } -- cgit v1.2.3