Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/constant_fold.h
| Show All 12 Lines | |||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #ifndef __CONSTANT_FOLD_H__ | #ifndef __CONSTANT_FOLD_H__ | ||||
| #define __CONSTANT_FOLD_H__ | #define __CONSTANT_FOLD_H__ | ||||
| #include "util_types.h" | #include "util_types.h" | ||||
| #include "util_vector.h" | #include "svm_types.h" | ||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| class ShaderGraph; | class ShaderGraph; | ||||
| class ShaderInput; | class ShaderInput; | ||||
| class ShaderNode; | class ShaderNode; | ||||
| class ShaderOutput; | class ShaderOutput; | ||||
| class ConstantFolder { | class ConstantFolder { | ||||
| public: | public: | ||||
| ShaderGraph *const graph; | ShaderGraph *const graph; | ||||
| ShaderNode *const node; | ShaderNode *const node; | ||||
| ShaderOutput *const output; | ShaderOutput *const output; | ||||
| ConstantFolder(ShaderGraph *graph, ShaderNode *node, ShaderOutput *output); | ConstantFolder(ShaderGraph *graph, ShaderNode *node, ShaderOutput *output); | ||||
| bool all_inputs_constant() const; | bool all_inputs_constant() const; | ||||
| /* Constant folding helpers, always return true for convenience. */ | /* Constant folding helpers */ | ||||
| void make_constant(float value) const; | void make_constant(float value) const; | ||||
| void make_constant(float3 value) const; | void make_constant(float3 value) const; | ||||
| void make_constant_clamp(float value, bool clamp) const; | void make_constant_clamp(float value, bool clamp) const; | ||||
| void make_constant_clamp(float3 value, bool clamp) const; | void make_constant_clamp(float3 value, bool clamp) const; | ||||
| void make_zero() const; | |||||
| /* Bypass node, relinking to another output socket. */ | /* Bypass node, relinking to another output socket. */ | ||||
| void bypass(ShaderOutput *output) const; | void bypass(ShaderOutput *output) const; | ||||
| /* For closure nodes, discard node entirely or bypass to one of its inputs. */ | /* For closure nodes, discard node entirely or bypass to one of its inputs. */ | ||||
| void discard() const; | void discard() const; | ||||
| void bypass_or_discard(ShaderInput *input) const; | void bypass_or_discard(ShaderInput *input) const; | ||||
| /* Bypass or make constant, unless we can't due to clamp being true. */ | /* Bypass or make constant, unless we can't due to clamp being true. */ | ||||
| bool try_bypass_or_make_constant(ShaderInput *input, float3 input_value, bool clamp) const; | bool try_bypass_or_make_constant(ShaderInput *input, bool clamp = false) const; | ||||
| /* Test if shader inputs of the current nodes have fixed values. */ | |||||
| bool is_zero(ShaderInput *input) const; | |||||
| bool is_one(ShaderInput *input) const; | |||||
| /* Specific nodes. */ | |||||
| void fold_mix(NodeMix type, bool clamp) const; | |||||
| void fold_math(NodeMath type, bool clamp) const; | |||||
| void fold_vector_math(NodeVectorMath type) const; | |||||
| }; | }; | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||
| #endif /* __CONSTANT_FOLD_H__ */ | #endif /* __CONSTANT_FOLD_H__ */ | ||||