Blender V5.0
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#pragma once
6
7#include "kernel/svm/types.h"
8#include "util/types.h"
9
11
12class Scene;
13class ShaderGraph;
14class ShaderInput;
15class ShaderNode;
16class ShaderOutput;
17
19 public:
23
25
27
28 bool all_inputs_constant() const;
29
30 /* Constant folding helpers */
31 void make_constant(const float value) const;
32 void make_constant(const float3 value) const;
33 void make_constant(const int value) const;
34 void make_constant_clamp(const float value, bool clamp) const;
35 void make_constant_clamp(const float3 value, bool clamp) const;
36 void make_zero() const;
37 void make_one() const;
38
39 /* Bypass node, relinking to another output socket. */
40 void bypass(ShaderOutput *output) const;
41
42 /* For closure nodes, discard node entirely or bypass to one of its inputs. */
43 void discard() const;
45
46 /* Bypass or make constant, unless we can't due to clamp being true. */
47 bool try_bypass_or_make_constant(ShaderInput *input, bool clamp = false) const;
48
49 /* Test if shader inputs of the current nodes have fixed values. */
50 bool is_zero(ShaderInput *input) const;
51 bool is_one(ShaderInput *input) const;
52
53 /* Specific nodes. */
54 void fold_mix(NodeMix type, bool clamp) const;
55 void fold_mix_color(NodeMix type, bool clamp_factor, bool clamp) const;
56 void fold_mix_float(bool clamp_factor, bool clamp) const;
57 void fold_math(NodeMathType type) const;
58 void fold_vector_math(NodeVectorMathType type) const;
59 void fold_mapping(NodeMappingType type) const;
60};
61
void make_one() 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(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
ShaderNode *const node
#define CCL_NAMESPACE_END
#define input
constexpr T clamp(T, U, U) RET
NodeMathType
NodeMappingType
NodeVectorMathType