From 500ccda85acddc9682045baf00d37570d0070626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sat, 17 Apr 2021 18:10:48 +0200 Subject: [PATCH] Shader: StatementPtr& => const StatementPtr& --- include/Nazara/Graphics/UberShader.hpp | 5 +++-- include/Nazara/Shader/Ast/AstCloner.hpp | 8 ++++---- include/Nazara/Shader/Ast/AstCloner.inl | 4 ++-- include/Nazara/Shader/Ast/AstOptimizer.hpp | 4 ++-- include/Nazara/Shader/Ast/SanitizeVisitor.hpp | 8 ++++---- include/Nazara/Shader/Ast/SanitizeVisitor.inl | 6 +++--- include/Nazara/Shader/GlslWriter.hpp | 1 + include/Nazara/Shader/ShaderWriter.hpp | 1 + include/Nazara/Shader/SpirvAstVisitor.hpp | 1 + src/Nazara/Shader/Ast/AstCloner.cpp | 4 ++-- src/Nazara/Shader/Ast/AstOptimizer.cpp | 4 ++-- src/Nazara/Shader/Ast/SanitizeVisitor.cpp | 2 +- 12 files changed, 26 insertions(+), 22 deletions(-) diff --git a/include/Nazara/Graphics/UberShader.hpp b/include/Nazara/Graphics/UberShader.hpp index 78b39e232..f661b99be 100644 --- a/include/Nazara/Graphics/UberShader.hpp +++ b/include/Nazara/Graphics/UberShader.hpp @@ -20,15 +20,16 @@ namespace Nz class NAZARA_GRAPHICS_API UberShader { public: - UberShader(ShaderStageType shaderStage, ShaderAst::StatementPtr shaderAst); + UberShader(ShaderStageType shaderStage, const ShaderAst::StatementPtr& shaderAst); ~UberShader() = default; - UInt64 GetConditionFlagByName(const std::string_view& condition) const; + UInt64 GetOptionFlagByName(const std::string& optionName) const; const std::shared_ptr& Get(UInt64 combination); private: std::unordered_map> m_combinations; + std::unordered_map m_optionIndexByName; ShaderAst::StatementPtr m_shaderAst; ShaderStageType m_shaderStage; UInt64 m_combinationMask; diff --git a/include/Nazara/Shader/Ast/AstCloner.hpp b/include/Nazara/Shader/Ast/AstCloner.hpp index 35bd3b6ed..8c77768f6 100644 --- a/include/Nazara/Shader/Ast/AstCloner.hpp +++ b/include/Nazara/Shader/Ast/AstCloner.hpp @@ -23,15 +23,15 @@ namespace Nz::ShaderAst AstCloner(AstCloner&&) = delete; ~AstCloner() = default; - ExpressionPtr Clone(ExpressionPtr& statement); - StatementPtr Clone(StatementPtr& statement); + ExpressionPtr Clone(const ExpressionPtr& statement); + StatementPtr Clone(const StatementPtr& statement); AstCloner& operator=(const AstCloner&) = delete; AstCloner& operator=(AstCloner&&) = delete; protected: - inline ExpressionPtr CloneExpression(ExpressionPtr& expr); - inline StatementPtr CloneStatement(StatementPtr& statement); + inline ExpressionPtr CloneExpression(const ExpressionPtr& expr); + inline StatementPtr CloneStatement(const StatementPtr& statement); virtual ExpressionPtr CloneExpression(Expression& expr); virtual StatementPtr CloneStatement(Statement& statement); diff --git a/include/Nazara/Shader/Ast/AstCloner.inl b/include/Nazara/Shader/Ast/AstCloner.inl index d00b7365b..a4ee519f9 100644 --- a/include/Nazara/Shader/Ast/AstCloner.inl +++ b/include/Nazara/Shader/Ast/AstCloner.inl @@ -7,7 +7,7 @@ namespace Nz::ShaderAst { - ExpressionPtr AstCloner::CloneExpression(ExpressionPtr& expr) + ExpressionPtr AstCloner::CloneExpression(const ExpressionPtr& expr) { if (!expr) return nullptr; @@ -15,7 +15,7 @@ namespace Nz::ShaderAst return CloneExpression(*expr); } - StatementPtr AstCloner::CloneStatement(StatementPtr& statement) + StatementPtr AstCloner::CloneStatement(const StatementPtr& statement) { if (!statement) return nullptr; diff --git a/include/Nazara/Shader/Ast/AstOptimizer.hpp b/include/Nazara/Shader/Ast/AstOptimizer.hpp index c52e41ad9..69092dcbf 100644 --- a/include/Nazara/Shader/Ast/AstOptimizer.hpp +++ b/include/Nazara/Shader/Ast/AstOptimizer.hpp @@ -23,8 +23,8 @@ namespace Nz::ShaderAst AstOptimizer(AstOptimizer&&) = delete; ~AstOptimizer() = default; - StatementPtr Optimise(StatementPtr& statement); - StatementPtr Optimise(StatementPtr& statement, UInt64 enabledConditions); + StatementPtr Optimise(const StatementPtr& statement); + StatementPtr Optimise(const StatementPtr& statement, UInt64 enabledConditions); AstOptimizer& operator=(const AstOptimizer&) = delete; AstOptimizer& operator=(AstOptimizer&&) = delete; diff --git a/include/Nazara/Shader/Ast/SanitizeVisitor.hpp b/include/Nazara/Shader/Ast/SanitizeVisitor.hpp index 05de3850e..da66ff277 100644 --- a/include/Nazara/Shader/Ast/SanitizeVisitor.hpp +++ b/include/Nazara/Shader/Ast/SanitizeVisitor.hpp @@ -25,8 +25,8 @@ namespace Nz::ShaderAst SanitizeVisitor(SanitizeVisitor&&) = delete; ~SanitizeVisitor() = default; - inline StatementPtr Sanitize(StatementPtr& statement, std::string* error = nullptr); - StatementPtr Sanitize(StatementPtr& statement, const Options& options, std::string* error = nullptr); + inline StatementPtr Sanitize(const StatementPtr& statement, std::string* error = nullptr); + StatementPtr Sanitize(const StatementPtr& statement, const Options& options, std::string* error = nullptr); SanitizeVisitor& operator=(const SanitizeVisitor&) = delete; SanitizeVisitor& operator=(SanitizeVisitor&&) = delete; @@ -125,8 +125,8 @@ namespace Nz::ShaderAst Context* m_context; }; - inline StatementPtr Sanitize(StatementPtr& ast, std::string* error = nullptr); - inline StatementPtr Sanitize(StatementPtr& ast, const SanitizeVisitor::Options& options, std::string* error = nullptr); + inline StatementPtr Sanitize(const StatementPtr& ast, std::string* error = nullptr); + inline StatementPtr Sanitize(const StatementPtr& ast, const SanitizeVisitor::Options& options, std::string* error = nullptr); } #include diff --git a/include/Nazara/Shader/Ast/SanitizeVisitor.inl b/include/Nazara/Shader/Ast/SanitizeVisitor.inl index 5c1c32f93..727a79c22 100644 --- a/include/Nazara/Shader/Ast/SanitizeVisitor.inl +++ b/include/Nazara/Shader/Ast/SanitizeVisitor.inl @@ -12,7 +12,7 @@ namespace Nz::ShaderAst { } - inline StatementPtr SanitizeVisitor::Sanitize(StatementPtr& statement, std::string* error) + inline StatementPtr SanitizeVisitor::Sanitize(const StatementPtr& statement, std::string* error) { return Sanitize(statement, {}, error); } @@ -76,13 +76,13 @@ namespace Nz::ShaderAst return varIndex; } - StatementPtr Sanitize(StatementPtr& ast, std::string* error) + StatementPtr Sanitize(const StatementPtr& ast, std::string* error) { SanitizeVisitor sanitizer; return sanitizer.Sanitize(ast, error); } - StatementPtr Sanitize(StatementPtr& ast, const SanitizeVisitor::Options& options, std::string* error) + StatementPtr Sanitize(const StatementPtr& ast, const SanitizeVisitor::Options& options, std::string* error) { SanitizeVisitor sanitizer; return sanitizer.Sanitize(ast, options, error); diff --git a/include/Nazara/Shader/GlslWriter.hpp b/include/Nazara/Shader/GlslWriter.hpp index 582af602a..ca6ca8112 100644 --- a/include/Nazara/Shader/GlslWriter.hpp +++ b/include/Nazara/Shader/GlslWriter.hpp @@ -91,6 +91,7 @@ namespace Nz void Visit(ShaderAst::ConditionalStatement& node) override; void Visit(ShaderAst::DeclareExternalStatement& node) override; void Visit(ShaderAst::DeclareFunctionStatement& node) override; + void Visit(ShaderAst::DeclareOptionStatement& node) override; void Visit(ShaderAst::DeclareStructStatement& node) override; void Visit(ShaderAst::DeclareVariableStatement& node) override; void Visit(ShaderAst::DiscardStatement& node) override; diff --git a/include/Nazara/Shader/ShaderWriter.hpp b/include/Nazara/Shader/ShaderWriter.hpp index e955c8535..5433e0842 100644 --- a/include/Nazara/Shader/ShaderWriter.hpp +++ b/include/Nazara/Shader/ShaderWriter.hpp @@ -27,6 +27,7 @@ namespace Nz struct States { Nz::UInt64 enabledOptions = 0; + bool sanitized = false; }; }; } diff --git a/include/Nazara/Shader/SpirvAstVisitor.hpp b/include/Nazara/Shader/SpirvAstVisitor.hpp index 10eb271e2..b4dd9b8a7 100644 --- a/include/Nazara/Shader/SpirvAstVisitor.hpp +++ b/include/Nazara/Shader/SpirvAstVisitor.hpp @@ -51,6 +51,7 @@ namespace Nz void Visit(ShaderAst::ConstantExpression& node) override; void Visit(ShaderAst::DeclareExternalStatement& node) override; void Visit(ShaderAst::DeclareFunctionStatement& node) override; + void Visit(ShaderAst::DeclareOptionStatement& node) override; void Visit(ShaderAst::DeclareStructStatement& node) override; void Visit(ShaderAst::DeclareVariableStatement& node) override; void Visit(ShaderAst::DiscardStatement& node) override; diff --git a/src/Nazara/Shader/Ast/AstCloner.cpp b/src/Nazara/Shader/Ast/AstCloner.cpp index 2571b86e5..496b9d14e 100644 --- a/src/Nazara/Shader/Ast/AstCloner.cpp +++ b/src/Nazara/Shader/Ast/AstCloner.cpp @@ -8,7 +8,7 @@ namespace Nz::ShaderAst { - ExpressionPtr AstCloner::Clone(ExpressionPtr& expr) + ExpressionPtr AstCloner::Clone(const ExpressionPtr& expr) { expr->Visit(*this); @@ -16,7 +16,7 @@ namespace Nz::ShaderAst return PopExpression(); } - StatementPtr AstCloner::Clone(StatementPtr& statement) + StatementPtr AstCloner::Clone(const StatementPtr& statement) { statement->Visit(*this); diff --git a/src/Nazara/Shader/Ast/AstOptimizer.cpp b/src/Nazara/Shader/Ast/AstOptimizer.cpp index 53aff83a9..8ec3fe3ab 100644 --- a/src/Nazara/Shader/Ast/AstOptimizer.cpp +++ b/src/Nazara/Shader/Ast/AstOptimizer.cpp @@ -380,13 +380,13 @@ namespace Nz::ShaderAst #undef EnableOptimisation } - StatementPtr AstOptimizer::Optimise(StatementPtr& statement) + StatementPtr AstOptimizer::Optimise(const StatementPtr& statement) { m_enabledOptions.reset(); return CloneStatement(statement); } - StatementPtr AstOptimizer::Optimise(StatementPtr& statement, UInt64 enabledConditions) + StatementPtr AstOptimizer::Optimise(const StatementPtr& statement, UInt64 enabledConditions) { m_enabledOptions = enabledConditions; diff --git a/src/Nazara/Shader/Ast/SanitizeVisitor.cpp b/src/Nazara/Shader/Ast/SanitizeVisitor.cpp index 09bdd3db4..759a724ed 100644 --- a/src/Nazara/Shader/Ast/SanitizeVisitor.cpp +++ b/src/Nazara/Shader/Ast/SanitizeVisitor.cpp @@ -35,7 +35,7 @@ namespace Nz::ShaderAst std::unordered_set usedBindingIndexes; }; - StatementPtr SanitizeVisitor::Sanitize(StatementPtr& nodePtr, const Options& options, std::string* error) + StatementPtr SanitizeVisitor::Sanitize(const StatementPtr& nodePtr, const Options& options, std::string* error) { StatementPtr clone;