33 LOG_TRACE <<
"Folding " <<
node->name <<
"::" <<
output->name() <<
" to constant (" << value
59 LOG_TRACE <<
"Folding " <<
node->name <<
"::" <<
output->name() <<
" to constant (" << value
127 graph->connect(new_output, sock);
175 graph->disconnect(other);
187 return node->get_float(
input->socket_type) == 0.0f;
201 return node->get_float(
input->socket_type) == 1.0f;
220 const bool fac_is_zero = !fac_in->
link && fac == 0.0f;
221 const bool fac_is_one = !fac_in->
link && fac == 1.0f;
236 if (color1_in->
link && color2_in->
link) {
237 if (color1_in->
link == color2_in->
link) {
242 else if (!color1_in->
link && !color2_in->
link) {
245 if (color1 == color2) {
258 if (
is_zero(color1_in) && fac_is_one) {
272 else if (color1_in->
link && color1_in->
link == color2_in->
link && fac_is_one) {
278 if (
is_one(color1_in) && fac_is_one) {
281 else if (
is_one(color2_in)) {
288 else if (
is_zero(color2_in) && fac_is_one) {
315 const bool fac_is_zero = !fac_in->
link && fac == 0.0f;
316 const bool fac_is_one = !fac_in->
link && fac == 1.0f;
331 if (color1_in->
link && color2_in->
link) {
332 if (color1_in->
link == color2_in->
link) {
340 else if (!color1_in->
link && !color2_in->
link) {
343 if (color1 == color2) {
356 if (
is_zero(color1_in) && fac_is_one) {
370 else if (color1_in->
link && color1_in->
link == color2_in->
link && fac_is_one) {
376 if (
is_one(color1_in) && fac_is_one) {
379 else if (
is_one(color2_in)) {
386 else if (
is_zero(color2_in) && fac_is_one) {
413 const bool fac_is_zero = !fac_in->
link && fac == 0.0f;
414 const bool fac_is_one = !fac_in->
link && fac == 1.0f;
424 if (float1_in->
link && float2_in->
link) {
425 if (float1_in->
link == float2_in->
link) {
430 else if (!float1_in->
link && !float2_in->
link) {
433 if (value1 == value2) {
471 else if (
is_one(value2_in)) {
495 else if (
is_one(value2_in)) {
515 else if (
is_zero(vector2_in)) {
530 else if (
is_one(vector1_in)) {
533 else if (
is_one(vector2_in)) {
542 else if (
is_one(vector2_in)) {
564 else if (
is_one(scale_in)) {
@ NODE_VECTOR_MATH_LENGTH
@ NODE_VECTOR_MATH_CROSS_PRODUCT
@ NODE_VECTOR_MATH_DOT_PRODUCT
@ NODE_VECTOR_MATH_ABSOLUTE
@ NODE_VECTOR_MATH_DIVIDE
@ NODE_VECTOR_MATH_MULTIPLY
@ NODE_VECTOR_MATH_SUBTRACT
@ NODE_MAPPING_TYPE_VECTOR
@ NODE_MAPPING_TYPE_NORMAL
void bypass(ShaderOutput *output) const
void bypass_or_discard(ShaderInput *input) const
void fold_mapping(NodeMappingType type) const
void fold_mix_float(bool clamp_factor, bool clamp) const
bool all_inputs_constant() const
ConstantFolder(ShaderGraph *graph, ShaderNode *node, ShaderOutput *output, Scene *scene)
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_math(NodeMathType type) const
void make_constant(const float value) const
ShaderOutput *const output
void fold_mix(NodeMix type, bool clamp) const
void make_constant_clamp(const float value, bool clamp) const
void fold_vector_math(NodeVectorMathType type) const
void fold_mix_color(NodeMix type, bool clamp_factor, bool clamp) const
#define CCL_NAMESPACE_END
#define assert(assertion)
constexpr T clamp(T, U, U) RET
ccl_device_inline float3 one_float3()
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
static blender::bke::bNodeSocketTemplate outputs[]
static bool is_float3(Type type)