Shader: Add support for compound operators
This commit is contained in:
@@ -16,7 +16,13 @@ namespace Nz
|
||||
{
|
||||
enum class AssignType
|
||||
{
|
||||
Simple //< =
|
||||
Simple, //< a = b
|
||||
CompoundAdd, //< a += b
|
||||
CompoundDivide, //< a /= b
|
||||
CompoundMultiply, //< a *= b
|
||||
CompoundLogicalAnd, //< a &&= b
|
||||
CompoundLogicalOr, //< a ||= b
|
||||
CompoundSubtract, //< a -= b
|
||||
};
|
||||
|
||||
enum class AttributeType
|
||||
|
||||
@@ -38,6 +38,7 @@ namespace Nz::ShaderAst
|
||||
std::unordered_set<std::string> reservedIdentifiers;
|
||||
std::unordered_map<std::size_t, ConstantValue> optionValues;
|
||||
bool makeVariableNameUnique = false;
|
||||
bool removeCompoundAssignments = false;
|
||||
bool removeOptionDeclaration = true;
|
||||
};
|
||||
|
||||
@@ -76,9 +77,9 @@ namespace Nz::ShaderAst
|
||||
|
||||
const Identifier* FindIdentifier(const std::string_view& identifierName) const;
|
||||
|
||||
Expression& MandatoryExpr(ExpressionPtr& node);
|
||||
Statement& MandatoryStatement(StatementPtr& node);
|
||||
void TypeMustMatch(ExpressionPtr& left, ExpressionPtr& right);
|
||||
Expression& MandatoryExpr(const ExpressionPtr& node);
|
||||
Statement& MandatoryStatement(const StatementPtr& node);
|
||||
void TypeMustMatch(const ExpressionPtr& left, const ExpressionPtr& right);
|
||||
void TypeMustMatch(const ExpressionType& left, const ExpressionType& right);
|
||||
|
||||
void PushScope();
|
||||
@@ -111,6 +112,7 @@ namespace Nz::ShaderAst
|
||||
void Validate(AccessIndexExpression& node);
|
||||
void Validate(CallFunctionExpression& node, const DeclareFunctionStatement* referenceDeclaration);
|
||||
void Validate(IntrinsicExpression& node);
|
||||
ExpressionType ValidateBinaryOp(BinaryType op, const ExpressionPtr& leftExpr, const ExpressionPtr& rightExpr);
|
||||
|
||||
struct FunctionData
|
||||
{
|
||||
|
||||
@@ -22,6 +22,7 @@ NAZARA_SHADERLANG_TOKEN(Const)
|
||||
NAZARA_SHADERLANG_TOKEN(ConstSelect)
|
||||
NAZARA_SHADERLANG_TOKEN(Discard)
|
||||
NAZARA_SHADERLANG_TOKEN(Divide)
|
||||
NAZARA_SHADERLANG_TOKEN(DivideAssign)
|
||||
NAZARA_SHADERLANG_TOKEN(Dot)
|
||||
NAZARA_SHADERLANG_TOKEN(Equal)
|
||||
NAZARA_SHADERLANG_TOKEN(Else)
|
||||
@@ -39,12 +40,17 @@ NAZARA_SHADERLANG_TOKEN(LessThan)
|
||||
NAZARA_SHADERLANG_TOKEN(LessThanEqual)
|
||||
NAZARA_SHADERLANG_TOKEN(Let)
|
||||
NAZARA_SHADERLANG_TOKEN(LogicalAnd)
|
||||
NAZARA_SHADERLANG_TOKEN(LogicalAndAssign)
|
||||
NAZARA_SHADERLANG_TOKEN(LogicalOr)
|
||||
NAZARA_SHADERLANG_TOKEN(LogicalOrAssign)
|
||||
NAZARA_SHADERLANG_TOKEN(Multiply)
|
||||
NAZARA_SHADERLANG_TOKEN(MultiplyAssign)
|
||||
NAZARA_SHADERLANG_TOKEN(Minus)
|
||||
NAZARA_SHADERLANG_TOKEN(MinusAssign)
|
||||
NAZARA_SHADERLANG_TOKEN(Not)
|
||||
NAZARA_SHADERLANG_TOKEN(NotEqual)
|
||||
NAZARA_SHADERLANG_TOKEN(Plus)
|
||||
NAZARA_SHADERLANG_TOKEN(PlusAssign)
|
||||
NAZARA_SHADERLANG_TOKEN(OpenCurlyBracket)
|
||||
NAZARA_SHADERLANG_TOKEN(OpenSquareBracket)
|
||||
NAZARA_SHADERLANG_TOKEN(OpenParenthesis)
|
||||
|
||||
Reference in New Issue
Block a user