Shader/ShaderLang: Add support for Unary operators
This commit is contained in:
@@ -48,6 +48,7 @@ namespace Nz::ShaderAst
|
||||
virtual ExpressionPtr Clone(SelectOptionExpression& node);
|
||||
virtual ExpressionPtr Clone(SwizzleExpression& node);
|
||||
virtual ExpressionPtr Clone(VariableExpression& node);
|
||||
virtual ExpressionPtr Clone(UnaryExpression& node);
|
||||
|
||||
virtual StatementPtr Clone(BranchStatement& node);
|
||||
virtual StatementPtr Clone(ConditionalStatement& node);
|
||||
|
||||
@@ -38,6 +38,7 @@ NAZARA_SHADERAST_EXPRESSION(IntrinsicExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(SelectOptionExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(SwizzleExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(VariableExpression)
|
||||
NAZARA_SHADERAST_EXPRESSION(UnaryExpression)
|
||||
NAZARA_SHADERAST_STATEMENT(BranchStatement)
|
||||
NAZARA_SHADERAST_STATEMENT(ConditionalStatement)
|
||||
NAZARA_SHADERAST_STATEMENT(DeclareExternalStatement)
|
||||
|
||||
@@ -32,10 +32,12 @@ namespace Nz::ShaderAst
|
||||
protected:
|
||||
ExpressionPtr Clone(BinaryExpression& node) override;
|
||||
ExpressionPtr Clone(ConditionalExpression& node) override;
|
||||
ExpressionPtr Clone(UnaryExpression& node) override;
|
||||
StatementPtr Clone(BranchStatement& node) override;
|
||||
StatementPtr Clone(ConditionalStatement& node) override;
|
||||
|
||||
template<BinaryType Type> ExpressionPtr PropagateConstant(std::unique_ptr<ConstantExpression>&& lhs, std::unique_ptr<ConstantExpression>&& rhs);
|
||||
template<UnaryType Type> ExpressionPtr PropagateConstant(std::unique_ptr<ConstantExpression>&& operand);
|
||||
|
||||
private:
|
||||
std::optional<UInt64> m_enabledOptions;
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Nz::ShaderAst
|
||||
void Visit(SelectOptionExpression& node) override;
|
||||
void Visit(SwizzleExpression& node) override;
|
||||
void Visit(VariableExpression& node) override;
|
||||
void Visit(UnaryExpression& node) override;
|
||||
|
||||
void Visit(BranchStatement& node) override;
|
||||
void Visit(ConditionalStatement& node) override;
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace Nz::ShaderAst
|
||||
void Serialize(SelectOptionExpression& node);
|
||||
void Serialize(SwizzleExpression& node);
|
||||
void Serialize(VariableExpression& node);
|
||||
void Serialize(UnaryExpression& node);
|
||||
|
||||
void Serialize(BranchStatement& node);
|
||||
void Serialize(ConditionalStatement& node);
|
||||
|
||||
@@ -43,6 +43,7 @@ namespace Nz::ShaderAst
|
||||
void Visit(SelectOptionExpression& node) override;
|
||||
void Visit(SwizzleExpression& node) override;
|
||||
void Visit(VariableExpression& node) override;
|
||||
void Visit(UnaryExpression& node) override;
|
||||
|
||||
ExpressionCategory m_expressionCategory;
|
||||
};
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace Nz::ShaderAst
|
||||
enum class BinaryType
|
||||
{
|
||||
Add, //< +
|
||||
Subtract, //< -
|
||||
Subtract, //< -
|
||||
Multiply, //< *
|
||||
Divide, //< /
|
||||
|
||||
@@ -89,6 +89,13 @@ namespace Nz::ShaderAst
|
||||
Third,
|
||||
Fourth
|
||||
};
|
||||
|
||||
enum class UnaryType
|
||||
{
|
||||
LogicalNot, //< !v
|
||||
Minus, //< -v
|
||||
Plus, //< +v
|
||||
};
|
||||
}
|
||||
|
||||
#endif // NAZARA_SHADER_ENUMS_HPP
|
||||
|
||||
@@ -176,6 +176,15 @@ namespace Nz::ShaderAst
|
||||
std::size_t variableId;
|
||||
};
|
||||
|
||||
struct NAZARA_SHADER_API UnaryExpression : public Expression
|
||||
{
|
||||
NodeType GetType() const override;
|
||||
void Visit(AstExpressionVisitor& visitor) override;
|
||||
|
||||
UnaryType op;
|
||||
ExpressionPtr expression;
|
||||
};
|
||||
|
||||
// Statements
|
||||
|
||||
struct Statement;
|
||||
|
||||
@@ -54,6 +54,7 @@ namespace Nz::ShaderAst
|
||||
ExpressionPtr Clone(IntrinsicExpression& node) override;
|
||||
ExpressionPtr Clone(SelectOptionExpression& node) override;
|
||||
ExpressionPtr Clone(SwizzleExpression& node) override;
|
||||
ExpressionPtr Clone(UnaryExpression& node) override;
|
||||
|
||||
StatementPtr Clone(BranchStatement& node) override;
|
||||
StatementPtr Clone(ConditionalStatement& node) override;
|
||||
|
||||
Reference in New Issue
Block a user