// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Shader generator" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_SHADERASTOPTIMISER_HPP #define NAZARA_SHADERASTOPTIMISER_HPP #include #include #include #include #include namespace Nz::ShaderAst { class NAZARA_SHADER_API AstOptimizer : public AstCloner { public: AstOptimizer() = default; AstOptimizer(const AstOptimizer&) = delete; AstOptimizer(AstOptimizer&&) = delete; ~AstOptimizer() = default; StatementPtr Optimise(StatementPtr& statement); StatementPtr Optimise(StatementPtr& statement, UInt64 enabledConditions); AstOptimizer& operator=(const AstOptimizer&) = delete; AstOptimizer& operator=(AstOptimizer&&) = delete; protected: ExpressionPtr Clone(BinaryExpression& node) override; ExpressionPtr Clone(ConditionalExpression& node) override; StatementPtr Clone(BranchStatement& node) override; StatementPtr Clone(ConditionalStatement& node) override; template ExpressionPtr PropagateConstant(std::unique_ptr&& lhs, std::unique_ptr&& rhs); private: std::optional m_enabledOptions; }; } #include #endif