Shader: Add support for branching and discard statements
This commit is contained in:
@@ -35,16 +35,15 @@ namespace Nz
|
||||
enum class BinaryType
|
||||
{
|
||||
Add, //< +
|
||||
Subtract, //< -
|
||||
Multiply, //< *
|
||||
Divide, //< /
|
||||
|
||||
CompEq, //< ==
|
||||
CompGe, //< >=
|
||||
CompGt, //< >
|
||||
CompLe, //< <=
|
||||
CompLt, //< <
|
||||
CompNe //< <=
|
||||
CompNe, //< <=
|
||||
Divide, //< /
|
||||
Multiply, //< *
|
||||
Subtract, //< -
|
||||
};
|
||||
|
||||
enum class BuiltinEntry
|
||||
|
||||
@@ -83,6 +83,8 @@ namespace Nz::ShaderLang
|
||||
std::vector<ShaderAst::Attribute> ParseAttributes();
|
||||
|
||||
// Statements
|
||||
ShaderAst::StatementPtr ParseBranchStatement();
|
||||
ShaderAst::StatementPtr ParseDiscardStatement();
|
||||
ShaderAst::StatementPtr ParseExternalBlock(std::vector<ShaderAst::Attribute> attributes = {});
|
||||
std::vector<ShaderAst::StatementPtr> ParseFunctionBody();
|
||||
ShaderAst::StatementPtr ParseFunctionDeclaration(std::vector<ShaderAst::Attribute> attributes = {});
|
||||
@@ -90,6 +92,7 @@ namespace Nz::ShaderLang
|
||||
ShaderAst::StatementPtr ParseOptionDeclaration();
|
||||
ShaderAst::StatementPtr ParseStructDeclaration(std::vector<ShaderAst::Attribute> attributes = {});
|
||||
ShaderAst::StatementPtr ParseReturnStatement();
|
||||
ShaderAst::StatementPtr ParseSingleStatement();
|
||||
ShaderAst::StatementPtr ParseStatement();
|
||||
std::vector<ShaderAst::StatementPtr> ParseStatementList();
|
||||
ShaderAst::StatementPtr ParseVariableDeclaration();
|
||||
@@ -126,6 +129,7 @@ namespace Nz::ShaderLang
|
||||
Context* m_context;
|
||||
};
|
||||
|
||||
inline ShaderAst::StatementPtr Parse(const std::string_view& source);
|
||||
inline ShaderAst::StatementPtr Parse(const std::vector<Token>& tokens);
|
||||
NAZARA_SHADER_API ShaderAst::StatementPtr Parse(const std::filesystem::path& sourcePath);
|
||||
}
|
||||
|
||||
@@ -12,6 +12,11 @@ namespace Nz::ShaderLang
|
||||
{
|
||||
}
|
||||
|
||||
inline ShaderAst::StatementPtr Parse(const std::string_view& source)
|
||||
{
|
||||
return Parse(Tokenize(source));
|
||||
}
|
||||
|
||||
inline ShaderAst::StatementPtr Parse(const std::vector<Token>& tokens)
|
||||
{
|
||||
Parser parser;
|
||||
|
||||
@@ -18,18 +18,21 @@ NAZARA_SHADERLANG_TOKEN(ClosingCurlyBracket)
|
||||
NAZARA_SHADERLANG_TOKEN(ClosingSquareBracket)
|
||||
NAZARA_SHADERLANG_TOKEN(Colon)
|
||||
NAZARA_SHADERLANG_TOKEN(Comma)
|
||||
NAZARA_SHADERLANG_TOKEN(Discard)
|
||||
NAZARA_SHADERLANG_TOKEN(Divide)
|
||||
NAZARA_SHADERLANG_TOKEN(Dot)
|
||||
NAZARA_SHADERLANG_TOKEN(Equal)
|
||||
NAZARA_SHADERLANG_TOKEN(Else)
|
||||
NAZARA_SHADERLANG_TOKEN(EndOfStream)
|
||||
NAZARA_SHADERLANG_TOKEN(External)
|
||||
NAZARA_SHADERLANG_TOKEN(FloatingPointValue)
|
||||
NAZARA_SHADERLANG_TOKEN(EndOfStream)
|
||||
NAZARA_SHADERLANG_TOKEN(FunctionDeclaration)
|
||||
NAZARA_SHADERLANG_TOKEN(FunctionReturn)
|
||||
NAZARA_SHADERLANG_TOKEN(GreatherThan)
|
||||
NAZARA_SHADERLANG_TOKEN(GreatherThanEqual)
|
||||
NAZARA_SHADERLANG_TOKEN(GreaterThan)
|
||||
NAZARA_SHADERLANG_TOKEN(GreaterThanEqual)
|
||||
NAZARA_SHADERLANG_TOKEN(IntegerValue)
|
||||
NAZARA_SHADERLANG_TOKEN(Identifier)
|
||||
NAZARA_SHADERLANG_TOKEN(If)
|
||||
NAZARA_SHADERLANG_TOKEN(LessThan)
|
||||
NAZARA_SHADERLANG_TOKEN(LessThanEqual)
|
||||
NAZARA_SHADERLANG_TOKEN(Let)
|
||||
|
||||
Reference in New Issue
Block a user