diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-12-11 17:18:43 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-12-11 17:18:43 +0300 |
commit | f60018e425ac5c488789ee15055f89f39e5cbb05 (patch) | |
tree | e458a65f969fc161c39b829dac7f45c7a660209e /intern/cycles/render | |
parent | d415b5c7b85b07ce4e30e4dbe33491df23202cdc (diff) | |
parent | 84b02dc54a8c06e963a263e7232e41a993ab21c8 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'intern/cycles/render')
-rw-r--r-- | intern/cycles/render/nodes.cpp | 6 | ||||
-rw-r--r-- | intern/cycles/render/svm.cpp | 33 | ||||
-rw-r--r-- | intern/cycles/render/svm.h | 2 |
3 files changed, 15 insertions, 26 deletions
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 06a2baa8a38..4af0d8663e8 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -1710,9 +1710,9 @@ void RGBToBWNode::constant_fold(const ConstantFolder& folder) void RGBToBWNode::compile(SVMCompiler& compiler) { compiler.add_node(NODE_CONVERT, - NODE_CONVERT_CF, - compiler.stack_assign(inputs[0]), - compiler.stack_assign(outputs[0])); + NODE_CONVERT_CF, + compiler.stack_assign(inputs[0]), + compiler.stack_assign(outputs[0])); } void RGBToBWNode::compile(OSLCompiler& compiler) diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp index b380117e729..360b2b461cf 100644 --- a/intern/cycles/render/svm.cpp +++ b/intern/cycles/render/svm.cpp @@ -243,6 +243,7 @@ int SVMCompiler::stack_assign(ShaderInput *input) if(input->stack_offset == SVM_STACK_INVALID) { if(input->link) { /* linked to output -> use output offset */ + assert(input->link->stack_offset != SVM_STACK_INVALID); input->stack_offset = input->link->stack_offset; } else { @@ -408,31 +409,20 @@ uint SVMCompiler::attribute_standard(ustring name) return (std)? attribute(std): attribute(name); } -bool SVMCompiler::node_skip_input(ShaderNode * /*node*/, ShaderInput *input) -{ - /* nasty exception .. */ - if(current_type == SHADER_TYPE_DISPLACEMENT && input->link && input->link->parent->special_type == SHADER_SPECIAL_TYPE_BUMP) - return true; - - return false; -} - void SVMCompiler::find_dependencies(ShaderNodeSet& dependencies, const ShaderNodeSet& done, ShaderInput *input, ShaderNode *skip_node) { ShaderNode *node = (input->link)? input->link->parent: NULL; - if(node != NULL && done.find(node) == done.end() && node != skip_node && dependencies.find(node) == dependencies.end()) { - foreach(ShaderInput *in, node->inputs) - if(!node_skip_input(node, in)) - find_dependencies(dependencies, done, in, skip_node); - + foreach(ShaderInput *in, node->inputs) { + find_dependencies(dependencies, done, in, skip_node); + } dependencies.insert(node); } } @@ -479,18 +469,19 @@ void SVMCompiler::generate_svm_nodes(const ShaderNodeSet& nodes, if(!done_flag[node->id]) { bool inputs_done = true; - foreach(ShaderInput *input, node->inputs) - if(!node_skip_input(node, input)) - if(input->link && !done_flag[input->link->parent->id]) - inputs_done = false; - + foreach(ShaderInput *input, node->inputs) { + if(input->link && !done_flag[input->link->parent->id]) { + inputs_done = false; + } + } if(inputs_done) { generate_node(node, done); done.insert(node); done_flag[node->id] = true; } - else + else { nodes_done = false; + } } } } while(!nodes_done); @@ -501,7 +492,7 @@ void SVMCompiler::generate_closure_node(ShaderNode *node, { /* execute dependencies for closure */ foreach(ShaderInput *in, node->inputs) { - if(!node_skip_input(node, in) && in->link) { + if(in->link != NULL) { ShaderNodeSet dependencies; find_dependencies(dependencies, state->nodes_done, in); generate_svm_nodes(dependencies, state); diff --git a/intern/cycles/render/svm.h b/intern/cycles/render/svm.h index af97a490a87..ddf35602fa6 100644 --- a/intern/cycles/render/svm.h +++ b/intern/cycles/render/svm.h @@ -188,8 +188,6 @@ protected: int stack_size(SocketType::Type type); void stack_clear_users(ShaderNode *node, ShaderNodeSet& done); - bool node_skip_input(ShaderNode *node, ShaderInput *input); - /* single closure */ void find_dependencies(ShaderNodeSet& dependencies, const ShaderNodeSet& done, |