Cycles: Remove old nasty workaround

It used to be used for some sort of ignoring automatically
generated bump nodes. But nowadays it causes one of the shaders
in Classroom demo file to be compiled wrong.
This commit is contained in:
Sergey Sharybin
2018-12-11 14:33:24 +01:00
parent 765795aed7
commit b45b082531
2 changed files with 11 additions and 23 deletions

View File

@@ -411,31 +411,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);
}
}
@@ -482,18 +471,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);
@@ -504,7 +494,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);

View File

@@ -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,