diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-12 00:42:38 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-12 19:29:44 +0300 |
commit | e07dd9fd59f5a598517c5c4ba18c81e97ffa9fee (patch) | |
tree | 365be973c5a8641521dbbee7422f19f1f8369c1b /intern | |
parent | 629d44e0492ac63fda9533d1fba349813a0e49f2 (diff) |
Cycles: add constant folding to displacement nodes.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/render/nodes.cpp | 19 | ||||
-rw-r--r-- | intern/cycles/render/nodes.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index e36a75f59b1..d732189af66 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -5785,6 +5785,15 @@ DisplacementNode::DisplacementNode() { } +void DisplacementNode::constant_fold(const ConstantFolder& folder) +{ + if(folder.all_inputs_constant()) { + if((height - midlevel == 0.0f) || (scale == 0.0f)) { + folder.make_zero(); + } + } +} + void DisplacementNode::compile(SVMCompiler& compiler) { ShaderInput *height_in = input("Height"); @@ -5836,6 +5845,16 @@ VectorDisplacementNode::VectorDisplacementNode() { } +void VectorDisplacementNode::constant_fold(const ConstantFolder& folder) +{ + if(folder.all_inputs_constant()) { + if((vector == make_float3(0.0f, 0.0f, 0.0f) && midlevel == 0.0f) || + (scale == 0.0f)) { + folder.make_zero(); + } + } +} + void VectorDisplacementNode::attributes(Shader *shader, AttributeRequestSet *attributes) { if(shader->has_surface && space == NODE_NORMAL_MAP_TANGENT) { diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h index 33df2866341..58c3d472cd3 100644 --- a/intern/cycles/render/nodes.h +++ b/intern/cycles/render/nodes.h @@ -1063,6 +1063,7 @@ public: class DisplacementNode : public ShaderNode { public: SHADER_NODE_CLASS(DisplacementNode) + void constant_fold(const ConstantFolder& folder); virtual int get_feature() { return NODE_FEATURE_BUMP; } @@ -1079,6 +1080,7 @@ public: SHADER_NODE_CLASS(VectorDisplacementNode) void attributes(Shader *shader, AttributeRequestSet *attributes); bool has_attribute_dependency() { return true; } + void constant_fold(const ConstantFolder& folder); virtual int get_feature() { return NODE_FEATURE_BUMP; } |