Blender
V3.3
|
#include <constant_fold.h>
Public Member Functions | |
ConstantFolder (ShaderGraph *graph, ShaderNode *node, ShaderOutput *output, Scene *scene) | |
bool | all_inputs_constant () const |
void | make_constant (float value) const |
void | make_constant (float3 value) const |
void | make_constant_clamp (float value, bool clamp) const |
void | make_constant_clamp (float3 value, bool clamp) const |
void | make_zero () const |
void | make_one () const |
void | bypass (ShaderOutput *output) const |
void | discard () const |
void | bypass_or_discard (ShaderInput *input) const |
bool | try_bypass_or_make_constant (ShaderInput *input, bool clamp=false) const |
bool | is_zero (ShaderInput *input) const |
bool | is_one (ShaderInput *input) const |
void | fold_mix (NodeMix type, bool clamp) const |
void | fold_math (NodeMathType type) const |
void | fold_vector_math (NodeVectorMathType type) const |
void | fold_mapping (NodeMappingType type) const |
Public Attributes | |
ShaderGraph *const | graph |
ShaderNode *const | node |
ShaderOutput *const | output |
Scene * | scene |
Definition at line 18 of file constant_fold.h.
CCL_NAMESPACE_BEGIN ConstantFolder::ConstantFolder | ( | ShaderGraph * | graph, |
ShaderNode * | node, | ||
ShaderOutput * | output, | ||
Scene * | scene | ||
) |
Definition at line 12 of file constant_fold.cpp.
bool ConstantFolder::all_inputs_constant | ( | ) | const |
Definition at line 20 of file constant_fold.cpp.
References input, ShaderNode::inputs, and node.
Referenced by MappingNode::constant_fold(), RGBToBWNode::constant_fold(), ConvertNode::constant_fold(), MixNode::constant_fold(), CombineColorNode::constant_fold(), CombineRGBNode::constant_fold(), CombineHSVNode::constant_fold(), CombineXYZNode::constant_fold(), GammaNode::constant_fold(), BrightContrastNode::constant_fold(), SeparateColorNode::constant_fold(), SeparateRGBNode::constant_fold(), SeparateHSVNode::constant_fold(), SeparateXYZNode::constant_fold(), BlackbodyNode::constant_fold(), ClampNode::constant_fold(), MathNode::constant_fold(), VectorMathNode::constant_fold(), FloatCurveNode::constant_fold(), RGBRampNode::constant_fold(), DisplacementNode::constant_fold(), VectorDisplacementNode::constant_fold(), and CurvesNode::constant_fold().
void ConstantFolder::bypass | ( | ShaderOutput * | output | ) | const |
Definition at line 99 of file constant_fold.cpp.
References ShaderGraph::connect(), ShaderGraph::disconnect(), graph, ShaderOutput::links, Node::name, ShaderOutput::name(), node, output, outputs, ShaderOutput::parent, and VLOG_DEBUG.
Referenced by bypass_or_discard(), ConvertNode::constant_fold(), InvertNode::constant_fold(), BumpNode::constant_fold(), FloatCurveNode::constant_fold(), CurvesNode::constant_fold(), and try_bypass_or_make_constant().
void ConstantFolder::bypass_or_discard | ( | ShaderInput * | input | ) | const |
Definition at line 127 of file constant_fold.cpp.
References bypass(), SocketType::CLOSURE, discard(), and input.
Referenced by AddClosureNode::constant_fold(), and MixClosureNode::constant_fold().
void ConstantFolder::discard | ( | ) | const |
Definition at line 118 of file constant_fold.cpp.
References SocketType::CLOSURE, ShaderGraph::disconnect(), graph, Node::name, node, output, ShaderOutput::type(), and VLOG_DEBUG.
Referenced by bypass_or_discard(), EmissionNode::constant_fold(), and BackgroundNode::constant_fold().
void ConstantFolder::fold_mapping | ( | NodeMappingType | type | ) | const |
Definition at line 422 of file constant_fold.cpp.
References ShaderNode::input(), is_one(), is_zero(), make_zero(), node, NODE_MAPPING_TYPE_NORMAL, NODE_MAPPING_TYPE_VECTOR, try_bypass_or_make_constant(), and type.
Referenced by MappingNode::constant_fold().
void ConstantFolder::fold_math | ( | NodeMathType | type | ) | const |
Definition at line 294 of file constant_fold.cpp.
References ShaderNode::input(), is_one(), is_zero(), make_one(), make_zero(), node, NODE_MATH_ADD, NODE_MATH_DIVIDE, NODE_MATH_MULTIPLY, NODE_MATH_POWER, NODE_MATH_SUBTRACT, try_bypass_or_make_constant(), and type.
Referenced by MathNode::constant_fold().
Definition at line 200 of file constant_fold.cpp.
References blender::math::clamp(), Node::get_float(), Node::get_float3(), ShaderNode::input(), is_one(), is_zero(), ShaderInput::link, make_zero(), node, NODE_MIX_ADD, NODE_MIX_BLEND, NODE_MIX_BURN, NODE_MIX_DIV, NODE_MIX_DODGE, NODE_MIX_LIGHT, NODE_MIX_MUL, NODE_MIX_SUB, saturatef(), ShaderInput::socket_type, try_bypass_or_make_constant(), and type.
Referenced by MixNode::constant_fold().
void ConstantFolder::fold_vector_math | ( | NodeVectorMathType | type | ) | const |
Definition at line 352 of file constant_fold.cpp.
References ShaderNode::input(), is_one(), is_zero(), make_zero(), node, NODE_VECTOR_MATH_ABSOLUTE, NODE_VECTOR_MATH_ADD, NODE_VECTOR_MATH_CROSS_PRODUCT, NODE_VECTOR_MATH_DIVIDE, NODE_VECTOR_MATH_DOT_PRODUCT, NODE_VECTOR_MATH_LENGTH, NODE_VECTOR_MATH_MULTIPLY, NODE_VECTOR_MATH_SCALE, NODE_VECTOR_MATH_SUBTRACT, try_bypass_or_make_constant(), and type.
Referenced by VectorMathNode::constant_fold().
bool ConstantFolder::is_one | ( | ShaderInput * | input | ) | const |
Definition at line 184 of file constant_fold.cpp.
References SocketType::FLOAT, Node::get_float(), Node::get_float3(), input, SocketType::is_float3(), node, and one_float3().
Referenced by GammaNode::constant_fold(), fold_mapping(), fold_math(), fold_mix(), and fold_vector_math().
bool ConstantFolder::is_zero | ( | ShaderInput * | input | ) | const |
Definition at line 170 of file constant_fold.cpp.
References SocketType::FLOAT, Node::get_float(), Node::get_float3(), input, SocketType::is_float3(), node, and zero_float3().
Referenced by GammaNode::constant_fold(), fold_mapping(), fold_math(), fold_mix(), and fold_vector_math().
Definition at line 31 of file constant_fold.cpp.
References ShaderInput::constant_folded_in, ShaderGraph::disconnect(), graph, ShaderOutput::links, Node::name, ShaderOutput::name(), node, output, ShaderInput::set(), and VLOG_DEBUG.
Referenced by MappingNode::constant_fold(), RGBToBWNode::constant_fold(), ConvertNode::constant_fold(), ValueNode::constant_fold(), ColorNode::constant_fold(), InvertNode::constant_fold(), CombineColorNode::constant_fold(), CombineRGBNode::constant_fold(), CombineHSVNode::constant_fold(), CombineXYZNode::constant_fold(), GammaNode::constant_fold(), BrightContrastNode::constant_fold(), SeparateColorNode::constant_fold(), SeparateRGBNode::constant_fold(), SeparateHSVNode::constant_fold(), SeparateXYZNode::constant_fold(), BlackbodyNode::constant_fold(), ClampNode::constant_fold(), MathNode::constant_fold(), VectorMathNode::constant_fold(), FloatCurveNode::constant_fold(), RGBRampNode::constant_fold(), CurvesNode::constant_fold(), make_constant_clamp(), make_one(), and make_zero().
Definition at line 44 of file constant_fold.cpp.
References ShaderInput::constant_folded_in, ShaderGraph::disconnect(), graph, ShaderOutput::links, Node::name, ShaderOutput::name(), node, output, ShaderInput::set(), and VLOG_DEBUG.
Definition at line 57 of file constant_fold.cpp.
References blender::math::clamp(), make_constant(), and saturatef().
Referenced by MixNode::constant_fold(), and try_bypass_or_make_constant().
Definition at line 62 of file constant_fold.cpp.
References blender::math::clamp(), make_constant(), saturatef(), float3::x, float3::y, and float3::z.
void ConstantFolder::make_one | ( | ) | const |
Definition at line 86 of file constant_fold.cpp.
References SocketType::FLOAT, SocketType::is_float3(), make_constant(), one_float3(), output, and ShaderOutput::type().
Referenced by GammaNode::constant_fold(), and fold_math().
void ConstantFolder::make_zero | ( | ) | const |
Definition at line 73 of file constant_fold.cpp.
References SocketType::FLOAT, SocketType::is_float3(), make_constant(), output, ShaderOutput::type(), and zero_float3().
Referenced by DisplacementNode::constant_fold(), VectorDisplacementNode::constant_fold(), fold_mapping(), fold_math(), fold_mix(), and fold_vector_math().
bool ConstantFolder::try_bypass_or_make_constant | ( | ShaderInput * | input, |
bool | clamp = false |
||
) | const |
Definition at line 139 of file constant_fold.cpp.
References bypass(), blender::math::clamp(), ShaderGraph::disconnect(), SocketType::FLOAT, Node::get_float(), Node::get_float3(), graph, input, ShaderNode::inputs, SocketType::is_float3(), ShaderInput::link, make_constant_clamp(), node, output, and ShaderOutput::type().
Referenced by GammaNode::constant_fold(), fold_mapping(), fold_math(), fold_mix(), and fold_vector_math().
ShaderGraph* const ConstantFolder::graph |
Definition at line 20 of file constant_fold.h.
Referenced by bypass(), BumpNode::constant_fold(), discard(), make_constant(), and try_bypass_or_make_constant().
ShaderNode* const ConstantFolder::node |
Definition at line 21 of file constant_fold.h.
Referenced by all_inputs_constant(), bypass(), discard(), fold_mapping(), fold_math(), fold_mix(), fold_vector_math(), is_one(), is_zero(), make_constant(), and try_bypass_or_make_constant().
ShaderOutput* const ConstantFolder::output |
Definition at line 22 of file constant_fold.h.
Referenced by bypass(), SeparateColorNode::constant_fold(), SeparateRGBNode::constant_fold(), SeparateHSVNode::constant_fold(), SeparateXYZNode::constant_fold(), VectorMathNode::constant_fold(), RGBRampNode::constant_fold(), discard(), make_constant(), make_one(), make_zero(), and try_bypass_or_make_constant().
Scene* ConstantFolder::scene |
Definition at line 24 of file constant_fold.h.
Referenced by RGBToBWNode::constant_fold(), ConvertNode::constant_fold(), and BlackbodyNode::constant_fold().