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@pandora.be>2011-09-16 17:00:09 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-09-16 17:00:09 +0400
commit0a5fcf3da3e82fd114095c8c2903d927f15ffc31 (patch)
treeab7206829b29a4225c5b66e7456a9d1484a17834 /intern/cycles/render/svm.cpp
parent376aede7a6dbe0d5beee4dc5fd89bd8608c36b09 (diff)
Cycles: fix issue with mix shaders, leading to use of uninitialized memory.
Diffstat (limited to 'intern/cycles/render/svm.cpp')
-rw-r--r--intern/cycles/render/svm.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index c4188fda421..8f3682cc349 100644
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@ -230,6 +230,11 @@ void SVMCompiler::stack_clear_users(ShaderNode *node, set<ShaderNode*>& done)
for(int i = 0; i < size; i++)
active_stack.users[output->stack_offset + i]--;
+
+ output->stack_offset = SVM_STACK_INVALID;
+
+ foreach(ShaderInput *in, output->links)
+ in->stack_offset = SVM_STACK_INVALID;
}
}
}
@@ -243,6 +248,8 @@ void SVMCompiler::stack_clear_temporary(ShaderNode *node)
for(int i = 0; i < size; i++)
active_stack.users[input->stack_offset + i]--;
+
+ input->stack_offset = SVM_STACK_INVALID;
}
}
}
@@ -397,6 +404,10 @@ void SVMCompiler::generate_closure(ShaderNode *node, set<ShaderNode*> done, Stac
/* set jump for mix node, -1 because offset is already
incremented when this jump is added to it */
svm_nodes[mix_offset].z = cl2_offset - mix_offset - 1;
+
+ done.insert(node);
+ stack_clear_users(node, done);
+ stack_clear_temporary(node);
}
else {
/* execute dependencies for closure */