diff --git a/include/Nazara/Renderer.hpp b/include/Nazara/Renderer.hpp index 32e4f43de..8271bd3c8 100644 --- a/include/Nazara/Renderer.hpp +++ b/include/Nazara/Renderer.hpp @@ -53,17 +53,20 @@ #include #include #include +#include +#include +#include +#include #include #include #include +#include #include -#include #include -#include #include #include -#include #include +#include #include #include #include diff --git a/include/Nazara/Renderer/GlslWriter.hpp b/include/Nazara/Renderer/GlslWriter.hpp index f9694a8f1..8178c73d4 100644 --- a/include/Nazara/Renderer/GlslWriter.hpp +++ b/include/Nazara/Renderer/GlslWriter.hpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include #include @@ -20,7 +20,7 @@ namespace Nz { - class NAZARA_RENDERER_API GlslWriter : public ShaderWriter, public ShaderVarVisitor, public ShaderVisitor + class NAZARA_RENDERER_API GlslWriter : public ShaderWriter, public ShaderVarVisitor, public ShaderAstVisitor { public: struct Environment; @@ -60,7 +60,7 @@ namespace Nz void LeaveScope(); using ShaderVarVisitor::Visit; - using ShaderVisitor::Visit; + using ShaderAstVisitor::Visit; void Visit(const ShaderNodes::ExpressionPtr& expr, bool encloseIfRequired = false); void Visit(const ShaderNodes::AccessMember& node) override; void Visit(const ShaderNodes::AssignOp& node) override; diff --git a/include/Nazara/Renderer/ShaderRecursiveVisitor.hpp b/include/Nazara/Renderer/ShaderAstRecursiveVisitor.hpp similarity index 79% rename from include/Nazara/Renderer/ShaderRecursiveVisitor.hpp rename to include/Nazara/Renderer/ShaderAstRecursiveVisitor.hpp index 0e1087a58..622c1aef0 100644 --- a/include/Nazara/Renderer/ShaderRecursiveVisitor.hpp +++ b/include/Nazara/Renderer/ShaderAstRecursiveVisitor.hpp @@ -9,17 +9,17 @@ #include #include -#include +#include namespace Nz { - class NAZARA_RENDERER_API ShaderRecursiveVisitor : public ShaderVisitor + class NAZARA_RENDERER_API ShaderAstRecursiveVisitor : public ShaderAstVisitor { public: - ShaderRecursiveVisitor() = default; - ~ShaderRecursiveVisitor() = default; + ShaderAstRecursiveVisitor() = default; + ~ShaderAstRecursiveVisitor() = default; - using ShaderVisitor::Visit; + using ShaderAstVisitor::Visit; void Visit(const ShaderNodes::AccessMember& node) override; void Visit(const ShaderNodes::AssignOp& node) override; @@ -37,6 +37,6 @@ namespace Nz }; } -#include +#include #endif diff --git a/include/Nazara/Renderer/ShaderRecursiveVisitor.inl b/include/Nazara/Renderer/ShaderAstRecursiveVisitor.inl similarity index 82% rename from include/Nazara/Renderer/ShaderRecursiveVisitor.inl rename to include/Nazara/Renderer/ShaderAstRecursiveVisitor.inl index b107f06e7..3b2c6be62 100644 --- a/include/Nazara/Renderer/ShaderRecursiveVisitor.inl +++ b/include/Nazara/Renderer/ShaderAstRecursiveVisitor.inl @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include namespace Nz diff --git a/include/Nazara/Renderer/ShaderSerializer.hpp b/include/Nazara/Renderer/ShaderAstSerializer.hpp similarity index 85% rename from include/Nazara/Renderer/ShaderSerializer.hpp rename to include/Nazara/Renderer/ShaderAstSerializer.hpp index c6596b58d..68380054c 100644 --- a/include/Nazara/Renderer/ShaderSerializer.hpp +++ b/include/Nazara/Renderer/ShaderAstSerializer.hpp @@ -17,13 +17,13 @@ namespace Nz { - class NAZARA_RENDERER_API ShaderSerializerBase + class NAZARA_RENDERER_API ShaderAstSerializerBase { public: - ShaderSerializerBase() = default; - ShaderSerializerBase(const ShaderSerializerBase&) = delete; - ShaderSerializerBase(ShaderSerializerBase&&) = delete; - ~ShaderSerializerBase() = default; + ShaderAstSerializerBase() = default; + ShaderAstSerializerBase(const ShaderAstSerializerBase&) = delete; + ShaderAstSerializerBase(ShaderAstSerializerBase&&) = delete; + ~ShaderAstSerializerBase() = default; void Serialize(ShaderNodes::AccessMember& node); void Serialize(ShaderNodes::AssignOp& node); @@ -69,11 +69,11 @@ namespace Nz template void Variable(std::shared_ptr& var); }; - class NAZARA_RENDERER_API ShaderSerializer final : public ShaderSerializerBase + class NAZARA_RENDERER_API ShaderAstSerializer final : public ShaderAstSerializerBase { public: - inline ShaderSerializer(ByteStream& stream); - ~ShaderSerializer() = default; + inline ShaderAstSerializer(ByteStream& stream); + ~ShaderAstSerializer() = default; void Serialize(const ShaderAst& shader); @@ -96,11 +96,11 @@ namespace Nz ByteStream& m_stream; }; - class NAZARA_RENDERER_API ShaderUnserializer final : public ShaderSerializerBase + class NAZARA_RENDERER_API ShaderAstUnserializer final : public ShaderAstSerializerBase { public: - ShaderUnserializer(ByteStream& stream); - ~ShaderUnserializer() = default; + ShaderAstUnserializer(ByteStream& stream); + ~ShaderAstUnserializer() = default; ShaderAst Unserialize(); @@ -126,6 +126,6 @@ namespace Nz NAZARA_RENDERER_API ShaderAst UnserializeShader(ByteStream& stream); } -#include +#include #endif diff --git a/include/Nazara/Renderer/ShaderSerializer.inl b/include/Nazara/Renderer/ShaderAstSerializer.inl similarity index 74% rename from include/Nazara/Renderer/ShaderSerializer.inl rename to include/Nazara/Renderer/ShaderAstSerializer.inl index 51187d520..dd272e1fa 100644 --- a/include/Nazara/Renderer/ShaderSerializer.inl +++ b/include/Nazara/Renderer/ShaderAstSerializer.inl @@ -2,13 +2,13 @@ // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include namespace Nz { template - void ShaderSerializerBase::Container(T& container) + void ShaderAstSerializerBase::Container(T& container) { bool isWriting = IsWriting(); @@ -23,7 +23,7 @@ namespace Nz template - void ShaderSerializerBase::Enum(T& enumVal) + void ShaderAstSerializerBase::Enum(T& enumVal) { bool isWriting = IsWriting(); @@ -37,7 +37,7 @@ namespace Nz } template - void ShaderSerializerBase::OptEnum(std::optional& optVal) + void ShaderAstSerializerBase::OptEnum(std::optional& optVal) { bool isWriting = IsWriting(); @@ -55,7 +55,7 @@ namespace Nz } template - void ShaderSerializerBase::OptVal(std::optional& optVal) + void ShaderAstSerializerBase::OptVal(std::optional& optVal) { bool isWriting = IsWriting(); @@ -73,7 +73,7 @@ namespace Nz } template - void ShaderSerializerBase::Node(std::shared_ptr& node) + void ShaderAstSerializerBase::Node(std::shared_ptr& node) { bool isWriting = IsWriting(); @@ -87,7 +87,7 @@ namespace Nz } template - void ShaderSerializerBase::Variable(std::shared_ptr& var) + void ShaderAstSerializerBase::Variable(std::shared_ptr& var) { bool isWriting = IsWriting(); @@ -100,7 +100,7 @@ namespace Nz var = std::static_pointer_cast(value); } - inline void ShaderSerializerBase::Value(std::size_t& val) + inline void ShaderAstSerializerBase::Value(std::size_t& val) { bool isWriting = IsWriting(); @@ -113,12 +113,12 @@ namespace Nz val = static_cast(value); } - inline ShaderSerializer::ShaderSerializer(ByteStream& stream) : + inline ShaderAstSerializer::ShaderAstSerializer(ByteStream& stream) : m_stream(stream) { } - inline ShaderUnserializer::ShaderUnserializer(ByteStream& stream) : + inline ShaderAstUnserializer::ShaderAstUnserializer(ByteStream& stream) : m_stream(stream) { } diff --git a/include/Nazara/Renderer/ShaderValidator.hpp b/include/Nazara/Renderer/ShaderAstValidator.hpp similarity index 83% rename from include/Nazara/Renderer/ShaderValidator.hpp rename to include/Nazara/Renderer/ShaderAstValidator.hpp index edf54370f..aa586f99b 100644 --- a/include/Nazara/Renderer/ShaderValidator.hpp +++ b/include/Nazara/Renderer/ShaderAstValidator.hpp @@ -12,18 +12,18 @@ #include #include #include -#include +#include #include namespace Nz { - class NAZARA_RENDERER_API ShaderValidator : public ShaderRecursiveVisitor, public ShaderVarVisitor + class NAZARA_RENDERER_API ShaderAstValidator : public ShaderAstRecursiveVisitor, public ShaderVarVisitor { public: - inline ShaderValidator(const ShaderAst& shader); - ShaderValidator(const ShaderValidator&) = delete; - ShaderValidator(ShaderValidator&&) = delete; - ~ShaderValidator() = default; + inline ShaderAstValidator(const ShaderAst& shader); + ShaderAstValidator(const ShaderAstValidator&) = delete; + ShaderAstValidator(ShaderAstValidator&&) = delete; + ~ShaderAstValidator() = default; bool Validate(std::string* error = nullptr); @@ -33,7 +33,7 @@ namespace Nz void TypeMustMatch(const ShaderNodes::ExpressionPtr& left, const ShaderNodes::ExpressionPtr& right); void TypeMustMatch(const ShaderExpressionType& left, const ShaderExpressionType& right); - using ShaderRecursiveVisitor::Visit; + using ShaderAstRecursiveVisitor::Visit; void Visit(const ShaderNodes::AccessMember& node) override; void Visit(const ShaderNodes::AssignOp& node) override; void Visit(const ShaderNodes::BinaryOp& node) override; @@ -65,6 +65,6 @@ namespace Nz NAZARA_RENDERER_API bool ValidateShader(const ShaderAst& shader, std::string* error = nullptr); } -#include +#include #endif diff --git a/include/Nazara/Renderer/ShaderValidator.inl b/include/Nazara/Renderer/ShaderAstValidator.inl similarity index 72% rename from include/Nazara/Renderer/ShaderValidator.inl rename to include/Nazara/Renderer/ShaderAstValidator.inl index e609a144a..ee2628ce5 100644 --- a/include/Nazara/Renderer/ShaderValidator.inl +++ b/include/Nazara/Renderer/ShaderAstValidator.inl @@ -2,12 +2,12 @@ // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include namespace Nz { - ShaderValidator::ShaderValidator(const ShaderAst& shader) : + ShaderAstValidator::ShaderAstValidator(const ShaderAst& shader) : m_shader(shader) { } diff --git a/include/Nazara/Renderer/ShaderVisitor.hpp b/include/Nazara/Renderer/ShaderAstVisitor.hpp similarity index 87% rename from include/Nazara/Renderer/ShaderVisitor.hpp rename to include/Nazara/Renderer/ShaderAstVisitor.hpp index 1cd98fac3..d955f17e9 100644 --- a/include/Nazara/Renderer/ShaderVisitor.hpp +++ b/include/Nazara/Renderer/ShaderAstVisitor.hpp @@ -15,13 +15,13 @@ namespace Nz { - class NAZARA_RENDERER_API ShaderVisitor + class NAZARA_RENDERER_API ShaderAstVisitor { public: - ShaderVisitor() = default; - ShaderVisitor(const ShaderVisitor&) = delete; - ShaderVisitor(ShaderVisitor&&) = delete; - virtual ~ShaderVisitor(); + ShaderAstVisitor() = default; + ShaderAstVisitor(const ShaderAstVisitor&) = delete; + ShaderAstVisitor(ShaderAstVisitor&&) = delete; + virtual ~ShaderAstVisitor(); void EnableCondition(const std::string& name, bool cond); diff --git a/include/Nazara/Renderer/ShaderNodes.hpp b/include/Nazara/Renderer/ShaderNodes.hpp index 0b6daec79..5bfd47f6b 100644 --- a/include/Nazara/Renderer/ShaderNodes.hpp +++ b/include/Nazara/Renderer/ShaderNodes.hpp @@ -21,7 +21,7 @@ namespace Nz { - class ShaderVisitor; + class ShaderAstVisitor; namespace ShaderNodes { @@ -37,7 +37,7 @@ namespace Nz inline NodeType GetType() const; inline bool IsStatement() const; - virtual void Visit(ShaderVisitor& visitor) = 0; + virtual void Visit(ShaderAstVisitor& visitor) = 0; static inline unsigned int GetComponentCount(BasicType type); static inline BasicType GetComponentType(BasicType type); @@ -77,7 +77,7 @@ namespace Nz { inline ExpressionStatement(); - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; ExpressionPtr expression; @@ -90,7 +90,7 @@ namespace Nz { inline ConditionalStatement(); - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; std::string conditionName; StatementPtr statement; @@ -102,7 +102,7 @@ namespace Nz { inline StatementBlock(); - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; std::vector statements; @@ -113,7 +113,7 @@ namespace Nz { inline DeclareVariable(); - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; LocalVariablePtr variable; ExpressionPtr expression; @@ -127,7 +127,7 @@ namespace Nz ExpressionCategory GetExpressionCategory() const override; ShaderExpressionType GetExpressionType() const override; - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; VariablePtr var; @@ -140,7 +140,7 @@ namespace Nz ExpressionCategory GetExpressionCategory() const override; ShaderExpressionType GetExpressionType() const override; - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; std::size_t memberIndex; ExpressionPtr structExpr; @@ -156,7 +156,7 @@ namespace Nz inline AssignOp(); ShaderExpressionType GetExpressionType() const override; - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; AssignType op; ExpressionPtr left; @@ -170,7 +170,7 @@ namespace Nz inline BinaryOp(); ShaderExpressionType GetExpressionType() const override; - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; BinaryType op; ExpressionPtr left; @@ -185,7 +185,7 @@ namespace Nz inline Branch(); - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; std::vector condStatements; StatementPtr elseStatement; @@ -204,7 +204,7 @@ namespace Nz inline Cast(); ShaderExpressionType GetExpressionType() const override; - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; BasicType exprType; std::array expressions; @@ -218,7 +218,7 @@ namespace Nz inline Constant(); ShaderExpressionType GetExpressionType() const override; - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; using Variant = std::variant< bool, @@ -239,7 +239,7 @@ namespace Nz ExpressionCategory GetExpressionCategory() const override; ShaderExpressionType GetExpressionType() const override; - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; std::array components; std::size_t componentCount; @@ -255,7 +255,7 @@ namespace Nz inline Sample2D(); ShaderExpressionType GetExpressionType() const override; - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; ExpressionPtr sampler; ExpressionPtr coordinates; @@ -270,7 +270,7 @@ namespace Nz inline IntrinsicCall(); ShaderExpressionType GetExpressionType() const override; - void Visit(ShaderVisitor& visitor) override; + void Visit(ShaderAstVisitor& visitor) override; IntrinsicType intrinsic; std::vector parameters; diff --git a/include/Nazara/Renderer/SpirvWriter.hpp b/include/Nazara/Renderer/SpirvWriter.hpp index 5786ea55b..2301d6caf 100644 --- a/include/Nazara/Renderer/SpirvWriter.hpp +++ b/include/Nazara/Renderer/SpirvWriter.hpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include #include @@ -20,7 +20,7 @@ namespace Nz { - class NAZARA_RENDERER_API SpirvWriter : public ShaderVisitor + class NAZARA_RENDERER_API SpirvWriter : public ShaderAstVisitor { public: struct Environment; @@ -84,7 +84,7 @@ namespace Nz UInt32 RegisterType(ShaderExpressionType type); - using ShaderVisitor::Visit; + using ShaderAstVisitor::Visit; void Visit(const ShaderNodes::AccessMember& node) override; void Visit(const ShaderNodes::AssignOp& node) override; void Visit(const ShaderNodes::Branch& node) override; diff --git a/include/Nazara/Utility.hpp b/include/Nazara/Utility.hpp index 735b83c32..29acfe8b9 100644 --- a/include/Nazara/Utility.hpp +++ b/include/Nazara/Utility.hpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include diff --git a/src/Nazara/OpenGLRenderer/OpenGLShaderStage.cpp b/src/Nazara/OpenGLRenderer/OpenGLShaderStage.cpp index a2a3fbf7a..07f6de975 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLShaderStage.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLShaderStage.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/Nazara/Renderer/GlslWriter.cpp b/src/Nazara/Renderer/GlslWriter.cpp index fcb1847a7..1383da334 100644 --- a/src/Nazara/Renderer/GlslWriter.cpp +++ b/src/Nazara/Renderer/GlslWriter.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include @@ -305,7 +305,7 @@ namespace Nz if (enclose) Append("("); - ShaderVisitor::Visit(expr); + ShaderAstVisitor::Visit(expr); if (enclose) Append(")"); diff --git a/src/Nazara/Renderer/ShaderAstRecursiveVisitor.cpp b/src/Nazara/Renderer/ShaderAstRecursiveVisitor.cpp new file mode 100644 index 000000000..81344bcf0 --- /dev/null +++ b/src/Nazara/Renderer/ShaderAstRecursiveVisitor.cpp @@ -0,0 +1,93 @@ +// Copyright (C) 2015 Jérôme Leclercq +// This file is part of the "Nazara Engine - Renderer module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +namespace Nz +{ + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::AccessMember& node) + { + Visit(node.structExpr); + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::AssignOp& node) + { + Visit(node.left); + Visit(node.right); + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::BinaryOp& node) + { + Visit(node.left); + Visit(node.right); + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::Branch& node) + { + for (auto& cond : node.condStatements) + { + Visit(cond.condition); + Visit(cond.statement); + } + + if (node.elseStatement) + Visit(node.elseStatement); + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::Cast& node) + { + for (auto& expr : node.expressions) + { + if (!expr) + break; + + Visit(expr); + } + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::Constant& /*node*/) + { + /* Nothing to do */ + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::DeclareVariable& node) + { + if (node.expression) + Visit(node.expression); + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::ExpressionStatement& node) + { + Visit(node.expression); + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::Identifier& /*node*/) + { + /* Nothing to do */ + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::IntrinsicCall& node) + { + for (auto& param : node.parameters) + Visit(param); + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::Sample2D& node) + { + Visit(node.sampler); + Visit(node.coordinates); + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::StatementBlock& node) + { + for (auto& statement : node.statements) + Visit(statement); + } + + void ShaderAstRecursiveVisitor::Visit(const ShaderNodes::SwizzleOp& node) + { + Visit(node.expression); + } +} diff --git a/src/Nazara/Renderer/ShaderSerializer.cpp b/src/Nazara/Renderer/ShaderAstSerializer.cpp similarity index 81% rename from src/Nazara/Renderer/ShaderSerializer.cpp rename to src/Nazara/Renderer/ShaderAstSerializer.cpp index 2433bf070..b4de31cc7 100644 --- a/src/Nazara/Renderer/ShaderSerializer.cpp +++ b/src/Nazara/Renderer/ShaderAstSerializer.cpp @@ -2,9 +2,9 @@ // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include -#include +#include #include namespace Nz @@ -14,10 +14,10 @@ namespace Nz constexpr UInt32 s_magicNumber = 0x4E534852; constexpr UInt32 s_currentVersion = 1; - class ShaderSerializerVisitor : public ShaderVisitor, public ShaderVarVisitor + class ShaderSerializerVisitor : public ShaderAstVisitor, public ShaderVarVisitor { public: - ShaderSerializerVisitor(ShaderSerializerBase& serializer) : + ShaderSerializerVisitor(ShaderAstSerializerBase& serializer) : m_serializer(serializer) { } @@ -126,32 +126,32 @@ namespace Nz m_serializer.Serialize(const_cast(node)); } - ShaderSerializerBase& m_serializer; + ShaderAstSerializerBase& m_serializer; }; } - void ShaderSerializerBase::Serialize(ShaderNodes::AccessMember& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::AccessMember& node) { Value(node.memberIndex); Node(node.structExpr); Type(node.exprType); } - void ShaderSerializerBase::Serialize(ShaderNodes::AssignOp& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::AssignOp& node) { Enum(node.op); Node(node.left); Node(node.right); } - void ShaderSerializerBase::Serialize(ShaderNodes::BinaryOp& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::BinaryOp& node) { Enum(node.op); Node(node.left); Node(node.right); } - void ShaderSerializerBase::Serialize(ShaderNodes::Branch& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::Branch& node) { Container(node.condStatements); for (auto& condStatement : node.condStatements) @@ -163,20 +163,20 @@ namespace Nz Node(node.elseStatement); } - void ShaderSerializerBase::Serialize(ShaderNodes::BuiltinVariable& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::BuiltinVariable& node) { Enum(node.entry); Type(node.type); } - void ShaderSerializerBase::Serialize(ShaderNodes::Cast& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::Cast& node) { Enum(node.exprType); for (auto& expr : node.expressions) Node(expr); } - void ShaderSerializerBase::Serialize(ShaderNodes::Constant& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::Constant& node) { UInt32 typeIndex; if (IsWriting()) @@ -205,23 +205,23 @@ namespace Nz } } - void ShaderSerializerBase::Serialize(ShaderNodes::DeclareVariable& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::DeclareVariable& node) { Variable(node.variable); Node(node.expression); } - void ShaderSerializerBase::Serialize(ShaderNodes::ExpressionStatement& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::ExpressionStatement& node) { Node(node.expression); } - void ShaderSerializerBase::Serialize(ShaderNodes::Identifier& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::Identifier& node) { Variable(node.var); } - void ShaderSerializerBase::Serialize(ShaderNodes::IntrinsicCall& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::IntrinsicCall& node) { Enum(node.intrinsic); Container(node.parameters); @@ -229,26 +229,26 @@ namespace Nz Node(param); } - void ShaderSerializerBase::Serialize(ShaderNodes::NamedVariable& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::NamedVariable& node) { Value(node.name); Type(node.type); } - void ShaderSerializerBase::Serialize(ShaderNodes::Sample2D& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::Sample2D& node) { Node(node.sampler); Node(node.coordinates); } - void ShaderSerializerBase::Serialize(ShaderNodes::StatementBlock& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::StatementBlock& node) { Container(node.statements); for (auto& statement : node.statements) Node(statement); } - void ShaderSerializerBase::Serialize(ShaderNodes::SwizzleOp& node) + void ShaderAstSerializerBase::Serialize(ShaderNodes::SwizzleOp& node) { Value(node.componentCount); Node(node.expression); @@ -258,7 +258,7 @@ namespace Nz } - void ShaderSerializer::Serialize(const ShaderAst& shader) + void ShaderAstSerializer::Serialize(const ShaderAst& shader) { m_stream << s_magicNumber << s_currentVersion; @@ -346,12 +346,12 @@ namespace Nz m_stream.FlushBits(); } - bool ShaderSerializer::IsWriting() const + bool ShaderAstSerializer::IsWriting() const { return true; } - void ShaderSerializer::Node(ShaderNodes::NodePtr& node) + void ShaderAstSerializer::Node(ShaderNodes::NodePtr& node) { ShaderNodes::NodeType nodeType = (node) ? node->GetType() : ShaderNodes::NodeType::None; m_stream << static_cast(nodeType); @@ -363,7 +363,7 @@ namespace Nz } } - void ShaderSerializer::Type(ShaderExpressionType& type) + void ShaderAstSerializer::Type(ShaderExpressionType& type) { std::visit([&](auto&& arg) { @@ -383,57 +383,57 @@ namespace Nz }, type); } - void ShaderSerializer::Node(const ShaderNodes::NodePtr& node) + void ShaderAstSerializer::Node(const ShaderNodes::NodePtr& node) { Node(const_cast(node)); //< Yes const_cast is ugly but it won't be used for writing } - void ShaderSerializer::Value(bool& val) + void ShaderAstSerializer::Value(bool& val) { m_stream << val; } - void ShaderSerializer::Value(float& val) + void ShaderAstSerializer::Value(float& val) { m_stream << val; } - void ShaderSerializer::Value(std::string& val) + void ShaderAstSerializer::Value(std::string& val) { m_stream << val; } - void ShaderSerializer::Value(Vector2f& val) + void ShaderAstSerializer::Value(Vector2f& val) { m_stream << val; } - void ShaderSerializer::Value(Vector3f& val) + void ShaderAstSerializer::Value(Vector3f& val) { m_stream << val; } - void ShaderSerializer::Value(Vector4f& val) + void ShaderAstSerializer::Value(Vector4f& val) { m_stream << val; } - void ShaderSerializer::Value(UInt8& val) + void ShaderAstSerializer::Value(UInt8& val) { m_stream << val; } - void ShaderSerializer::Value(UInt16& val) + void ShaderAstSerializer::Value(UInt16& val) { m_stream << val; } - void ShaderSerializer::Value(UInt32& val) + void ShaderAstSerializer::Value(UInt32& val) { m_stream << val; } - void ShaderSerializer::Variable(ShaderNodes::VariablePtr& var) + void ShaderAstSerializer::Variable(ShaderNodes::VariablePtr& var) { ShaderNodes::VariableType nodeType = (var) ? var->GetType() : ShaderNodes::VariableType::None; m_stream << static_cast(nodeType); @@ -445,7 +445,7 @@ namespace Nz } } - ShaderAst ShaderUnserializer::Unserialize() + ShaderAst ShaderAstUnserializer::Unserialize() { UInt32 magicNumber; UInt32 version; @@ -558,12 +558,12 @@ namespace Nz return shader; } - bool ShaderUnserializer::IsWriting() const + bool ShaderAstUnserializer::IsWriting() const { return false; } - void ShaderUnserializer::Node(ShaderNodes::NodePtr& node) + void ShaderAstUnserializer::Node(ShaderNodes::NodePtr& node) { Int32 nodeTypeInt; m_stream >> nodeTypeInt; @@ -599,7 +599,7 @@ namespace Nz } } - void ShaderUnserializer::Type(ShaderExpressionType& type) + void ShaderAstUnserializer::Type(ShaderExpressionType& type) { UInt8 typeIndex; Value(typeIndex); @@ -629,52 +629,52 @@ namespace Nz } } - void ShaderUnserializer::Value(bool& val) + void ShaderAstUnserializer::Value(bool& val) { m_stream >> val; } - void ShaderUnserializer::Value(float& val) + void ShaderAstUnserializer::Value(float& val) { m_stream >> val; } - void ShaderUnserializer::Value(std::string& val) + void ShaderAstUnserializer::Value(std::string& val) { m_stream >> val; } - void ShaderUnserializer::Value(Vector2f& val) + void ShaderAstUnserializer::Value(Vector2f& val) { m_stream >> val; } - void ShaderUnserializer::Value(Vector3f& val) + void ShaderAstUnserializer::Value(Vector3f& val) { m_stream >> val; } - void ShaderUnserializer::Value(Vector4f& val) + void ShaderAstUnserializer::Value(Vector4f& val) { m_stream >> val; } - void ShaderUnserializer::Value(UInt8& val) + void ShaderAstUnserializer::Value(UInt8& val) { m_stream >> val; } - void ShaderUnserializer::Value(UInt16& val) + void ShaderAstUnserializer::Value(UInt16& val) { m_stream >> val; } - void ShaderUnserializer::Value(UInt32& val) + void ShaderAstUnserializer::Value(UInt32& val) { m_stream >> val; } - void ShaderUnserializer::Variable(ShaderNodes::VariablePtr& var) + void ShaderAstUnserializer::Variable(ShaderNodes::VariablePtr& var) { Int32 nodeTypeInt; m_stream >> nodeTypeInt; @@ -707,7 +707,7 @@ namespace Nz ByteArray byteArray; ByteStream stream(&byteArray, OpenModeFlags(OpenMode_WriteOnly)); - ShaderSerializer serializer(stream); + ShaderAstSerializer serializer(stream); serializer.Serialize(shader); return byteArray; @@ -715,7 +715,7 @@ namespace Nz ShaderAst UnserializeShader(ByteStream& stream) { - ShaderUnserializer unserializer(stream); + ShaderAstUnserializer unserializer(stream); return unserializer.Unserialize(); } } diff --git a/src/Nazara/Renderer/ShaderValidator.cpp b/src/Nazara/Renderer/ShaderAstValidator.cpp similarity index 79% rename from src/Nazara/Renderer/ShaderValidator.cpp rename to src/Nazara/Renderer/ShaderAstValidator.cpp index 351a46839..57404ba6b 100644 --- a/src/Nazara/Renderer/ShaderValidator.cpp +++ b/src/Nazara/Renderer/ShaderAstValidator.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include @@ -16,7 +16,7 @@ namespace Nz std::string errMsg; }; - struct ShaderValidator::Context + struct ShaderAstValidator::Context { struct Local { @@ -29,7 +29,7 @@ namespace Nz std::vector blockLocalIndex; }; - bool ShaderValidator::Validate(std::string* error) + bool ShaderAstValidator::Validate(std::string* error) { try { @@ -57,14 +57,14 @@ namespace Nz } } - const ShaderNodes::ExpressionPtr& ShaderValidator::MandatoryExpr(const ShaderNodes::ExpressionPtr& node) + const ShaderNodes::ExpressionPtr& ShaderAstValidator::MandatoryExpr(const ShaderNodes::ExpressionPtr& node) { MandatoryNode(node); return node; } - const ShaderNodes::NodePtr& ShaderValidator::MandatoryNode(const ShaderNodes::NodePtr& node) + const ShaderNodes::NodePtr& ShaderAstValidator::MandatoryNode(const ShaderNodes::NodePtr& node) { if (!node) throw AstError{ "Invalid node" }; @@ -72,18 +72,18 @@ namespace Nz return node; } - void ShaderValidator::TypeMustMatch(const ShaderNodes::ExpressionPtr& left, const ShaderNodes::ExpressionPtr& right) + void ShaderAstValidator::TypeMustMatch(const ShaderNodes::ExpressionPtr& left, const ShaderNodes::ExpressionPtr& right) { return TypeMustMatch(left->GetExpressionType(), right->GetExpressionType()); } - void ShaderValidator::TypeMustMatch(const ShaderExpressionType& left, const ShaderExpressionType& right) + void ShaderAstValidator::TypeMustMatch(const ShaderExpressionType& left, const ShaderExpressionType& right) { if (left != right) throw AstError{ "Left expression type must match right expression type" }; } - void ShaderValidator::Visit(const ShaderNodes::AccessMember& node) + void ShaderAstValidator::Visit(const ShaderNodes::AccessMember& node) { const ShaderExpressionType& exprType = MandatoryExpr(node.structExpr)->GetExpressionType(); if (!std::holds_alternative(exprType)) @@ -105,7 +105,7 @@ namespace Nz throw AstError{ "member type does not match node type" }; } - void ShaderValidator::Visit(const ShaderNodes::AssignOp& node) + void ShaderAstValidator::Visit(const ShaderNodes::AssignOp& node) { MandatoryNode(node.left); MandatoryNode(node.right); @@ -114,10 +114,10 @@ namespace Nz if (node.left->GetExpressionCategory() != ShaderNodes::ExpressionCategory::LValue) throw AstError { "Assignation is only possible with a l-value" }; - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::BinaryOp& node) + void ShaderAstValidator::Visit(const ShaderNodes::BinaryOp& node) { MandatoryNode(node.left); MandatoryNode(node.right); @@ -186,10 +186,10 @@ namespace Nz } } - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::Branch& node) + void ShaderAstValidator::Visit(const ShaderNodes::Branch& node) { for (const auto& condStatement : node.condStatements) { @@ -197,10 +197,10 @@ namespace Nz MandatoryNode(condStatement.statement); } - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::Cast& node) + void ShaderAstValidator::Visit(const ShaderNodes::Cast& node) { unsigned int componentCount = 0; unsigned int requiredComponents = node.GetComponentCount(node.exprType); @@ -219,14 +219,14 @@ namespace Nz if (componentCount != requiredComponents) throw AstError{ "Component count doesn't match required component count" }; - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::Constant& /*node*/) + void ShaderAstValidator::Visit(const ShaderNodes::Constant& /*node*/) { } - void ShaderValidator::Visit(const ShaderNodes::DeclareVariable& node) + void ShaderAstValidator::Visit(const ShaderNodes::DeclareVariable& node) { assert(m_context); @@ -234,17 +234,17 @@ namespace Nz local.name = node.variable->name; local.type = node.variable->type; - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::ExpressionStatement& node) + void ShaderAstValidator::Visit(const ShaderNodes::ExpressionStatement& node) { MandatoryNode(node.expression); - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::Identifier& node) + void ShaderAstValidator::Visit(const ShaderNodes::Identifier& node) { assert(m_context); @@ -254,7 +254,7 @@ namespace Nz Visit(node.var); } - void ShaderValidator::Visit(const ShaderNodes::IntrinsicCall& node) + void ShaderAstValidator::Visit(const ShaderNodes::IntrinsicCall& node) { switch (node.intrinsic) { @@ -292,10 +292,10 @@ namespace Nz break; } - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::Sample2D& node) + void ShaderAstValidator::Visit(const ShaderNodes::Sample2D& node) { if (MandatoryExpr(node.sampler)->GetExpressionType() != ShaderExpressionType{ ShaderNodes::BasicType::Sampler2D }) throw AstError{ "Sampler must be a Sampler2D" }; @@ -303,10 +303,10 @@ namespace Nz if (MandatoryExpr(node.coordinates)->GetExpressionType() != ShaderExpressionType{ ShaderNodes::BasicType::Float2 }) throw AstError{ "Coordinates must be a Float2" }; - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::StatementBlock& node) + void ShaderAstValidator::Visit(const ShaderNodes::StatementBlock& node) { assert(m_context); @@ -319,10 +319,10 @@ namespace Nz m_context->declaredLocals.resize(m_context->blockLocalIndex.back()); m_context->blockLocalIndex.pop_back(); - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::SwizzleOp& node) + void ShaderAstValidator::Visit(const ShaderNodes::SwizzleOp& node) { if (node.componentCount > 4) throw AstError{ "Cannot swizzle more than four elements" }; @@ -343,15 +343,15 @@ namespace Nz throw AstError{ "Cannot swizzle this type" }; } - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } - void ShaderValidator::Visit(const ShaderNodes::BuiltinVariable& /*var*/) + void ShaderAstValidator::Visit(const ShaderNodes::BuiltinVariable& /*var*/) { /* Nothing to do */ } - void ShaderValidator::Visit(const ShaderNodes::InputVariable& var) + void ShaderAstValidator::Visit(const ShaderNodes::InputVariable& var) { for (std::size_t i = 0; i < m_shader.GetInputCount(); ++i) { @@ -366,7 +366,7 @@ namespace Nz throw AstError{ "Input not found" }; } - void ShaderValidator::Visit(const ShaderNodes::LocalVariable& var) + void ShaderAstValidator::Visit(const ShaderNodes::LocalVariable& var) { const auto& vars = m_context->declaredLocals; @@ -377,7 +377,7 @@ namespace Nz TypeMustMatch(it->type, var.type); } - void ShaderValidator::Visit(const ShaderNodes::OutputVariable& var) + void ShaderAstValidator::Visit(const ShaderNodes::OutputVariable& var) { for (std::size_t i = 0; i < m_shader.GetOutputCount(); ++i) { @@ -392,7 +392,7 @@ namespace Nz throw AstError{ "Output not found" }; } - void ShaderValidator::Visit(const ShaderNodes::ParameterVariable& var) + void ShaderAstValidator::Visit(const ShaderNodes::ParameterVariable& var) { assert(m_context->currentFunction); @@ -405,7 +405,7 @@ namespace Nz TypeMustMatch(it->type, var.type); } - void ShaderValidator::Visit(const ShaderNodes::UniformVariable& var) + void ShaderAstValidator::Visit(const ShaderNodes::UniformVariable& var) { for (std::size_t i = 0; i < m_shader.GetUniformCount(); ++i) { @@ -422,7 +422,7 @@ namespace Nz bool ValidateShader(const ShaderAst& shader, std::string* error) { - ShaderValidator validator(shader); + ShaderAstValidator validator(shader); return validator.Validate(error); } } diff --git a/src/Nazara/Renderer/ShaderVisitor.cpp b/src/Nazara/Renderer/ShaderAstVisitor.cpp similarity index 55% rename from src/Nazara/Renderer/ShaderVisitor.cpp rename to src/Nazara/Renderer/ShaderAstVisitor.cpp index dd7e01542..49760f028 100644 --- a/src/Nazara/Renderer/ShaderVisitor.cpp +++ b/src/Nazara/Renderer/ShaderAstVisitor.cpp @@ -2,14 +2,14 @@ // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include namespace Nz { - ShaderVisitor::~ShaderVisitor() = default; + ShaderAstVisitor::~ShaderAstVisitor() = default; - void ShaderVisitor::EnableCondition(const std::string& name, bool cond) + void ShaderAstVisitor::EnableCondition(const std::string& name, bool cond) { if (cond) m_conditions.insert(name); @@ -17,12 +17,12 @@ namespace Nz m_conditions.erase(name); } - bool ShaderVisitor::IsConditionEnabled(const std::string& name) const + bool ShaderAstVisitor::IsConditionEnabled(const std::string& name) const { return m_conditions.count(name) != 0; } - void ShaderVisitor::Visit(const ShaderNodes::NodePtr& node) + void ShaderAstVisitor::Visit(const ShaderNodes::NodePtr& node) { node->Visit(*this); } diff --git a/src/Nazara/Renderer/ShaderNodes.cpp b/src/Nazara/Renderer/ShaderNodes.cpp index da2157826..7ea148cb6 100644 --- a/src/Nazara/Renderer/ShaderNodes.cpp +++ b/src/Nazara/Renderer/ShaderNodes.cpp @@ -4,8 +4,8 @@ #include #include -#include -#include +#include +#include #include #include @@ -18,26 +18,26 @@ namespace Nz::ShaderNodes return ExpressionCategory::RValue; } - void ExpressionStatement::Visit(ShaderVisitor& visitor) + void ExpressionStatement::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } - void ConditionalStatement::Visit(ShaderVisitor& visitor) + void ConditionalStatement::Visit(ShaderAstVisitor& visitor) { if (visitor.IsConditionEnabled(conditionName)) statement->Visit(visitor); } - void StatementBlock::Visit(ShaderVisitor& visitor) + void StatementBlock::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } - void DeclareVariable::Visit(ShaderVisitor& visitor) + void DeclareVariable::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } @@ -54,7 +54,7 @@ namespace Nz::ShaderNodes return var->type; } - void Identifier::Visit(ShaderVisitor& visitor) + void Identifier::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } @@ -69,7 +69,7 @@ namespace Nz::ShaderNodes return exprType; } - void AccessMember::Visit(ShaderVisitor& visitor) + void AccessMember::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } @@ -79,7 +79,7 @@ namespace Nz::ShaderNodes return left->GetExpressionType(); } - void AssignOp::Visit(ShaderVisitor& visitor) + void AssignOp::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } @@ -137,13 +137,13 @@ namespace Nz::ShaderNodes return *exprType; } - void BinaryOp::Visit(ShaderVisitor& visitor) + void BinaryOp::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } - void Branch::Visit(ShaderVisitor& visitor) + void Branch::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } @@ -170,7 +170,7 @@ namespace Nz::ShaderNodes }, value); } - void Constant::Visit(ShaderVisitor& visitor) + void Constant::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } @@ -180,7 +180,7 @@ namespace Nz::ShaderNodes return exprType; } - void Cast::Visit(ShaderVisitor& visitor) + void Cast::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } @@ -199,7 +199,7 @@ namespace Nz::ShaderNodes return static_cast(UnderlyingCast(GetComponentType(std::get(exprType))) + componentCount - 1); } - void SwizzleOp::Visit(ShaderVisitor& visitor) + void SwizzleOp::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } @@ -210,7 +210,7 @@ namespace Nz::ShaderNodes return BasicType::Float4; } - void Sample2D::Visit(ShaderVisitor& visitor) + void Sample2D::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } @@ -231,7 +231,7 @@ namespace Nz::ShaderNodes return BasicType::Void; } - void IntrinsicCall::Visit(ShaderVisitor& visitor) + void IntrinsicCall::Visit(ShaderAstVisitor& visitor) { visitor.Visit(*this); } diff --git a/src/Nazara/Renderer/ShaderRecursiveVisitor.cpp b/src/Nazara/Renderer/ShaderRecursiveVisitor.cpp deleted file mode 100644 index 2116da21c..000000000 --- a/src/Nazara/Renderer/ShaderRecursiveVisitor.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (C) 2015 Jérôme Leclercq -// This file is part of the "Nazara Engine - Renderer module" -// For conditions of distribution and use, see copyright notice in Config.hpp - -#include -#include - -namespace Nz -{ - void ShaderRecursiveVisitor::Visit(const ShaderNodes::AccessMember& node) - { - Visit(node.structExpr); - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::AssignOp& node) - { - Visit(node.left); - Visit(node.right); - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::BinaryOp& node) - { - Visit(node.left); - Visit(node.right); - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::Branch& node) - { - for (auto& cond : node.condStatements) - { - Visit(cond.condition); - Visit(cond.statement); - } - - if (node.elseStatement) - Visit(node.elseStatement); - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::Cast& node) - { - for (auto& expr : node.expressions) - { - if (!expr) - break; - - Visit(expr); - } - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::Constant& /*node*/) - { - /* Nothing to do */ - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::DeclareVariable& node) - { - if (node.expression) - Visit(node.expression); - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::ExpressionStatement& node) - { - Visit(node.expression); - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::Identifier& /*node*/) - { - /* Nothing to do */ - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::IntrinsicCall& node) - { - for (auto& param : node.parameters) - Visit(param); - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::Sample2D& node) - { - Visit(node.sampler); - Visit(node.coordinates); - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::StatementBlock& node) - { - for (auto& statement : node.statements) - Visit(statement); - } - - void ShaderRecursiveVisitor::Visit(const ShaderNodes::SwizzleOp& node) - { - Visit(node.expression); - } -} diff --git a/src/Nazara/Renderer/SpirvWriter.cpp b/src/Nazara/Renderer/SpirvWriter.cpp index 1ccf23f97..a94cd6ec9 100644 --- a/src/Nazara/Renderer/SpirvWriter.cpp +++ b/src/Nazara/Renderer/SpirvWriter.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include #include @@ -22,7 +22,7 @@ namespace Nz { using ConstantVariant = ShaderNodes::Constant::Variant; - class PreVisitor : public ShaderRecursiveVisitor, public ShaderVarVisitor + class PreVisitor : public ShaderAstRecursiveVisitor, public ShaderVarVisitor { public: using BuiltinContainer = std::unordered_set>; @@ -31,7 +31,7 @@ namespace Nz using LocalContainer = std::unordered_set>; using ParameterContainer = std::unordered_set< std::shared_ptr>; - using ShaderRecursiveVisitor::Visit; + using ShaderAstRecursiveVisitor::Visit; using ShaderVarVisitor::Visit; void Visit(const ShaderNodes::Constant& node) override @@ -68,26 +68,26 @@ namespace Nz }, node.value); - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } void Visit(const ShaderNodes::DeclareVariable& node) override { Visit(node.variable); - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } void Visit(const ShaderNodes::Identifier& node) override { Visit(node.var); - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); } void Visit(const ShaderNodes::IntrinsicCall& node) override { - ShaderRecursiveVisitor::Visit(node); + ShaderAstRecursiveVisitor::Visit(node); switch (node.intrinsic) { diff --git a/src/ShaderNode/Widgets/MainWindow.cpp b/src/ShaderNode/Widgets/MainWindow.cpp index f25f95a18..31665bb8d 100644 --- a/src/ShaderNode/Widgets/MainWindow.cpp +++ b/src/ShaderNode/Widgets/MainWindow.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include #include