// 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 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: using AstCloner::Visit; void Visit(BinaryExpression& node) override; void Visit(ConditionalExpression& node) override; void Visit(BranchStatement& node) override; void Visit(ConditionalStatement& node) override; template void PropagateConstant(std::unique_ptr&& lhs, std::unique_ptr&& rhs); private: UInt64 m_enabledConditions; }; } #include #endif