Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-12-11 17:18:43 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-12-11 17:18:43 +0300
commitf60018e425ac5c488789ee15055f89f39e5cbb05 (patch)
treee458a65f969fc161c39b829dac7f45c7a660209e /intern/cycles/render
parentd415b5c7b85b07ce4e30e4dbe33491df23202cdc (diff)
parent84b02dc54a8c06e963a263e7232e41a993ab21c8 (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'intern/cycles/render')
-rw-r--r--intern/cycles/render/nodes.cpp6
-rw-r--r--intern/cycles/render/svm.cpp33
-rw-r--r--intern/cycles/render/svm.h2
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,