Modules are workings \o/
This commit is contained in:
@@ -50,8 +50,11 @@ namespace Nz::ShaderAst
|
||||
virtual ExpressionPtr Clone(ConditionalExpression& node);
|
||||
virtual ExpressionPtr Clone(ConstantExpression& node);
|
||||
virtual ExpressionPtr Clone(ConstantValueExpression& node);
|
||||
virtual ExpressionPtr Clone(FunctionExpression& node);
|
||||
virtual ExpressionPtr Clone(IdentifierExpression& node);
|
||||
virtual ExpressionPtr Clone(IntrinsicExpression& node);
|
||||
virtual ExpressionPtr Clone(IntrinsicFunctionExpression& node);
|
||||
virtual ExpressionPtr Clone(StructTypeExpression& node);
|
||||
virtual ExpressionPtr Clone(SwizzleExpression& node);
|
||||
virtual ExpressionPtr Clone(VariableExpression& node);
|
||||
virtual ExpressionPtr Clone(UnaryExpression& node);
|
||||
|
||||
@@ -42,8 +42,11 @@ namespace Nz::ShaderAst
|
||||
inline bool Compare(const ConditionalExpression& lhs, const ConditionalExpression& rhs);
|
||||
inline bool Compare(const ConstantExpression& lhs, const ConstantExpression& rhs);
|
||||
inline bool Compare(const ConstantValueExpression& lhs, const ConstantValueExpression& rhs);
|
||||
inline bool Compare(const FunctionExpression& lhs, const FunctionExpression& rhs);
|
||||
inline bool Compare(const IdentifierExpression& lhs, const IdentifierExpression& rhs);
|
||||
inline bool Compare(const IntrinsicExpression& lhs, const IntrinsicExpression& rhs);
|
||||
inline bool Compare(const IntrinsicFunctionExpression& lhs, const IntrinsicFunctionExpression& rhs);
|
||||
inline bool Compare(const StructTypeExpression& lhs, const StructTypeExpression& rhs);
|
||||
inline bool Compare(const SwizzleExpression& lhs, const SwizzleExpression& rhs);
|
||||
inline bool Compare(const VariableExpression& lhs, const VariableExpression& rhs);
|
||||
inline bool Compare(const UnaryExpression& lhs, const UnaryExpression& rhs);
|
||||
|
||||
@@ -342,6 +342,14 @@ namespace Nz::ShaderAst
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool Compare(const FunctionExpression& lhs, const FunctionExpression& rhs)
|
||||
{
|
||||
if (!Compare(lhs.funcId, rhs.funcId))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool Compare(const IdentifierExpression& lhs, const IdentifierExpression& rhs)
|
||||
{
|
||||
if (!Compare(lhs.identifier, rhs.identifier))
|
||||
@@ -361,6 +369,22 @@ namespace Nz::ShaderAst
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool Compare(const IntrinsicFunctionExpression& lhs, const IntrinsicFunctionExpression& rhs)
|
||||
{
|
||||
if (!Compare(lhs.intrinsicId, rhs.intrinsicId))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool Compare(const StructTypeExpression& lhs, const StructTypeExpression& rhs)
|
||||
{
|
||||
if (!Compare(lhs.structTypeId, rhs.structTypeId))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool Compare(const SwizzleExpression& lhs, const SwizzleExpression& rhs)
|
||||
{
|
||||
if (!Compare(lhs.componentCount, rhs.componentCount))
|
||||
|
||||
@@ -38,8 +38,11 @@ NAZARA_SHADERAST_EXPRESSION(CastExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(ConditionalExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(ConstantExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(ConstantValueExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(FunctionExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(IdentifierExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(IntrinsicExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(IntrinsicFunctionExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(StructTypeExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(SwizzleExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(VariableExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(UnaryExpression)
|
||||
|
||||
@@ -30,8 +30,11 @@ namespace Nz::ShaderAst
|
||||
void Visit(ConditionalExpression& node) override;
|
||||
void Visit(ConstantValueExpression& node) override;
|
||||
void Visit(ConstantExpression& node) override;
|
||||
void Visit(FunctionExpression& node) override;
|
||||
void Visit(IdentifierExpression& node) override;
|
||||
void Visit(IntrinsicExpression& node) override;
|
||||
void Visit(IntrinsicFunctionExpression& node) override;
|
||||
void Visit(StructTypeExpression& node) override;
|
||||
void Visit(SwizzleExpression& node) override;
|
||||
void Visit(VariableExpression& node) override;
|
||||
void Visit(UnaryExpression& node) override;
|
||||
|
||||
@@ -33,8 +33,11 @@ namespace Nz::ShaderAst
|
||||
void Serialize(ConstantExpression& node);
|
||||
void Serialize(ConditionalExpression& node);
|
||||
void Serialize(ConstantValueExpression& node);
|
||||
void Serialize(FunctionExpression& node);
|
||||
void Serialize(IdentifierExpression& node);
|
||||
void Serialize(IntrinsicExpression& node);
|
||||
void Serialize(IntrinsicFunctionExpression& node);
|
||||
void Serialize(StructTypeExpression& node);
|
||||
void Serialize(SwizzleExpression& node);
|
||||
void Serialize(VariableExpression& node);
|
||||
void Serialize(UnaryExpression& node);
|
||||
|
||||
@@ -41,8 +41,11 @@ namespace Nz::ShaderAst
|
||||
void Visit(ConditionalExpression& node) override;
|
||||
void Visit(ConstantValueExpression& node) override;
|
||||
void Visit(ConstantExpression& node) override;
|
||||
void Visit(FunctionExpression& node) override;
|
||||
void Visit(IdentifierExpression& node) override;
|
||||
void Visit(IntrinsicExpression& node) override;
|
||||
void Visit(IntrinsicFunctionExpression& node) override;
|
||||
void Visit(StructTypeExpression& node) override;
|
||||
void Visit(SwizzleExpression& node) override;
|
||||
void Visit(VariableExpression& node) override;
|
||||
void Visit(UnaryExpression& node) override;
|
||||
|
||||
@@ -16,6 +16,9 @@ namespace Nz::ShaderAst
|
||||
inline ModulePtr EliminateUnusedPass(const Module& shaderModule, const DependencyCheckerVisitor::Config& config)
|
||||
{
|
||||
DependencyCheckerVisitor dependencyVisitor;
|
||||
for (const auto& importedModule : shaderModule.importedModules)
|
||||
dependencyVisitor.Process(*importedModule.module->rootNode, config);
|
||||
|
||||
dependencyVisitor.Process(*shaderModule.rootNode, config);
|
||||
dependencyVisitor.Resolve();
|
||||
|
||||
|
||||
@@ -45,7 +45,8 @@ namespace Nz::ShaderAst
|
||||
StatementPtr Clone(DeclareStructStatement& node) override;
|
||||
StatementPtr Clone(DeclareVariableStatement& node) override;
|
||||
|
||||
ExpressionPtr Clone(CallFunctionExpression& node) override;
|
||||
ExpressionPtr Clone(FunctionExpression& node) override;
|
||||
ExpressionPtr Clone(StructTypeExpression& node) override;
|
||||
ExpressionPtr Clone(VariableExpression& node) override;
|
||||
|
||||
void HandleType(ExpressionValue<ExpressionType>& exprType);
|
||||
|
||||
@@ -156,6 +156,14 @@ namespace Nz::ShaderAst
|
||||
ShaderAst::ConstantValue value;
|
||||
};
|
||||
|
||||
struct NAZARA_SHADER_API FunctionExpression : Expression
|
||||
{
|
||||
NodeType GetType() const override;
|
||||
void Visit(AstExpressionVisitor& visitor) override;
|
||||
|
||||
std::size_t funcId;
|
||||
};
|
||||
|
||||
struct NAZARA_SHADER_API IdentifierExpression : Expression
|
||||
{
|
||||
NodeType GetType() const override;
|
||||
@@ -173,6 +181,22 @@ namespace Nz::ShaderAst
|
||||
IntrinsicType intrinsic;
|
||||
};
|
||||
|
||||
struct NAZARA_SHADER_API IntrinsicFunctionExpression : Expression
|
||||
{
|
||||
NodeType GetType() const override;
|
||||
void Visit(AstExpressionVisitor& visitor) override;
|
||||
|
||||
std::size_t intrinsicId;
|
||||
};
|
||||
|
||||
struct NAZARA_SHADER_API StructTypeExpression : Expression
|
||||
{
|
||||
NodeType GetType() const override;
|
||||
void Visit(AstExpressionVisitor& visitor) override;
|
||||
|
||||
std::size_t structTypeId;
|
||||
};
|
||||
|
||||
struct NAZARA_SHADER_API SwizzleExpression : Expression
|
||||
{
|
||||
NodeType GetType() const override;
|
||||
|
||||
@@ -108,6 +108,8 @@ namespace Nz::ShaderAst
|
||||
template<typename F> const IdentifierData* FindIdentifier(const Environment& environment, const std::string_view& identifierName, F&& functor) const;
|
||||
TypeParameter FindTypeParameter(const std::string_view& identifierName) const;
|
||||
|
||||
ExpressionPtr HandleIdentifier(const IdentifierData* identifierData);
|
||||
|
||||
Expression& MandatoryExpr(const ExpressionPtr& node) const;
|
||||
Statement& MandatoryStatement(const StatementPtr& node) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user