Blender V4.3
constant_fold.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#ifndef __CONSTANT_FOLD_H__
6#define __CONSTANT_FOLD_H__
7
8#include "kernel/svm/types.h"
9#include "util/types.h"
10
12
13class Scene;
14class ShaderGraph;
15class ShaderInput;
16class ShaderNode;
17class ShaderOutput;
18
20 public:
24
26
27 ConstantFolder(ShaderGraph *graph, ShaderNode *node, ShaderOutput *output, Scene *scene);
28
29 bool all_inputs_constant() const;
30
31 /* Constant folding helpers */
32 void make_constant(float value) const;
33 void make_constant(float3 value) const;
34 void make_constant(int value) const;
35 void make_constant_clamp(float value, bool clamp) const;
36 void make_constant_clamp(float3 value, bool clamp) const;
37 void make_zero() const;
38 void make_one() const;
39
40 /* Bypass node, relinking to another output socket. */
41 void bypass(ShaderOutput *output) const;
42
43 /* For closure nodes, discard node entirely or bypass to one of its inputs. */
44 void discard() const;
45 void bypass_or_discard(ShaderInput *input) const;
46
47 /* Bypass or make constant, unless we can't due to clamp being true. */
48 bool try_bypass_or_make_constant(ShaderInput *input, bool clamp = false) const;
49
50 /* Test if shader inputs of the current nodes have fixed values. */
51 bool is_zero(ShaderInput *input) const;
52 bool is_one(ShaderInput *input) const;
53
54 /* Specific nodes. */
55 void fold_mix(NodeMix type, bool clamp) const;
56 void fold_mix_color(NodeMix type, bool clamp_factor, bool clamp) const;
57 void fold_mix_float(bool clamp_factor, bool clamp) const;
58 void fold_math(NodeMathType type) const;
59 void fold_vector_math(NodeVectorMathType type) const;
60 void fold_mapping(NodeMappingType type) const;
61};
62
64
65#endif /* __CONSTANT_FOLD_H__ */
void make_one() const
void make_constant_clamp(float value, bool clamp) const
void discard() const
void bypass(ShaderOutput *output) const
void bypass_or_discard(ShaderInput *input) const
void fold_mapping(NodeMappingType type) const
ShaderGraph *const graph
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
void make_zero() const
bool is_zero(ShaderInput *input) const
bool is_one(ShaderInput *input) const
void fold_math(NodeMathType type) const
void make_constant(float value) const
ShaderOutput *const output
void fold_mix(NodeMix type, bool clamp) const
void fold_vector_math(NodeVectorMathType type) const
void fold_mix_color(NodeMix type, bool clamp_factor, bool clamp) const
ShaderNode *const node
#define CCL_NAMESPACE_END
NodeMathType
NodeMappingType
NodeVectorMathType