ShaderAst: Add NoOp node
This commit is contained in:
parent
a9f2e05b57
commit
acb998f67e
|
|
@ -79,6 +79,7 @@ namespace Nz
|
||||||
void Visit(ShaderNodes::InputVariable& var) override;
|
void Visit(ShaderNodes::InputVariable& var) override;
|
||||||
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
||||||
void Visit(ShaderNodes::LocalVariable& var) override;
|
void Visit(ShaderNodes::LocalVariable& var) override;
|
||||||
|
void Visit(ShaderNodes::NoOp& node) override;
|
||||||
void Visit(ShaderNodes::ParameterVariable& var) override;
|
void Visit(ShaderNodes::ParameterVariable& var) override;
|
||||||
void Visit(ShaderNodes::OutputVariable& var) override;
|
void Visit(ShaderNodes::OutputVariable& var) override;
|
||||||
void Visit(ShaderNodes::Sample2D& node) override;
|
void Visit(ShaderNodes::Sample2D& node) override;
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ namespace Nz
|
||||||
void Visit(ShaderNodes::ExpressionStatement& node) override;
|
void Visit(ShaderNodes::ExpressionStatement& node) override;
|
||||||
void Visit(ShaderNodes::Identifier& node) override;
|
void Visit(ShaderNodes::Identifier& node) override;
|
||||||
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
||||||
|
void Visit(ShaderNodes::NoOp& node) override;
|
||||||
void Visit(ShaderNodes::Sample2D& node) override;
|
void Visit(ShaderNodes::Sample2D& node) override;
|
||||||
void Visit(ShaderNodes::StatementBlock& node) override;
|
void Visit(ShaderNodes::StatementBlock& node) override;
|
||||||
void Visit(ShaderNodes::SwizzleOp& node) override;
|
void Visit(ShaderNodes::SwizzleOp& node) override;
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ namespace Nz
|
||||||
void Visit(ShaderNodes::ExpressionStatement& node) override;
|
void Visit(ShaderNodes::ExpressionStatement& node) override;
|
||||||
void Visit(ShaderNodes::Identifier& node) override;
|
void Visit(ShaderNodes::Identifier& node) override;
|
||||||
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
||||||
|
void Visit(ShaderNodes::NoOp& node) override;
|
||||||
void Visit(ShaderNodes::Sample2D& node) override;
|
void Visit(ShaderNodes::Sample2D& node) override;
|
||||||
void Visit(ShaderNodes::StatementBlock& node) override;
|
void Visit(ShaderNodes::StatementBlock& node) override;
|
||||||
void Visit(ShaderNodes::SwizzleOp& node) override;
|
void Visit(ShaderNodes::SwizzleOp& node) override;
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ namespace Nz
|
||||||
void Serialize(ShaderNodes::Identifier& node);
|
void Serialize(ShaderNodes::Identifier& node);
|
||||||
void Serialize(ShaderNodes::IntrinsicCall& node);
|
void Serialize(ShaderNodes::IntrinsicCall& node);
|
||||||
void Serialize(ShaderNodes::NamedVariable& var);
|
void Serialize(ShaderNodes::NamedVariable& var);
|
||||||
|
void Serialize(ShaderNodes::NoOp& node);
|
||||||
void Serialize(ShaderNodes::Sample2D& node);
|
void Serialize(ShaderNodes::Sample2D& node);
|
||||||
void Serialize(ShaderNodes::StatementBlock& node);
|
void Serialize(ShaderNodes::StatementBlock& node);
|
||||||
void Serialize(ShaderNodes::SwizzleOp& node);
|
void Serialize(ShaderNodes::SwizzleOp& node);
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ namespace Nz
|
||||||
virtual void Visit(ShaderNodes::ExpressionStatement& node) = 0;
|
virtual void Visit(ShaderNodes::ExpressionStatement& node) = 0;
|
||||||
virtual void Visit(ShaderNodes::Identifier& node) = 0;
|
virtual void Visit(ShaderNodes::Identifier& node) = 0;
|
||||||
virtual void Visit(ShaderNodes::IntrinsicCall& node) = 0;
|
virtual void Visit(ShaderNodes::IntrinsicCall& node) = 0;
|
||||||
|
virtual void Visit(ShaderNodes::NoOp& node) = 0;
|
||||||
virtual void Visit(ShaderNodes::Sample2D& node) = 0;
|
virtual void Visit(ShaderNodes::Sample2D& node) = 0;
|
||||||
virtual void Visit(ShaderNodes::StatementBlock& node) = 0;
|
virtual void Visit(ShaderNodes::StatementBlock& node) = 0;
|
||||||
virtual void Visit(ShaderNodes::SwizzleOp& node) = 0;
|
virtual void Visit(ShaderNodes::SwizzleOp& node) = 0;
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ namespace Nz
|
||||||
void Visit(ShaderNodes::ExpressionStatement& node) override;
|
void Visit(ShaderNodes::ExpressionStatement& node) override;
|
||||||
void Visit(ShaderNodes::Identifier& node) override;
|
void Visit(ShaderNodes::Identifier& node) override;
|
||||||
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
||||||
|
void Visit(ShaderNodes::NoOp& node) override;
|
||||||
void Visit(ShaderNodes::Sample2D& node) override;
|
void Visit(ShaderNodes::Sample2D& node) override;
|
||||||
void Visit(ShaderNodes::StatementBlock& node) override;
|
void Visit(ShaderNodes::StatementBlock& node) override;
|
||||||
void Visit(ShaderNodes::SwizzleOp& node) override;
|
void Visit(ShaderNodes::SwizzleOp& node) override;
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,7 @@ namespace Nz::ShaderNodes
|
||||||
ExpressionStatement,
|
ExpressionStatement,
|
||||||
Identifier,
|
Identifier,
|
||||||
IntrinsicCall,
|
IntrinsicCall,
|
||||||
|
NoOp,
|
||||||
Sample2D,
|
Sample2D,
|
||||||
SwizzleOp,
|
SwizzleOp,
|
||||||
StatementBlock,
|
StatementBlock,
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,15 @@ namespace Nz
|
||||||
static inline std::shared_ptr<AccessMember> Build(ExpressionPtr structExpr, std::vector<std::size_t> memberIndices, ShaderExpressionType exprType);
|
static inline std::shared_ptr<AccessMember> Build(ExpressionPtr structExpr, std::vector<std::size_t> memberIndices, ShaderExpressionType exprType);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct NAZARA_SHADER_API NoOp : public Statement
|
||||||
|
{
|
||||||
|
inline NoOp();
|
||||||
|
|
||||||
|
void Visit(ShaderAstVisitor& visitor) override;
|
||||||
|
|
||||||
|
static inline std::shared_ptr<NoOp> Build();
|
||||||
|
};
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
struct NAZARA_SHADER_API AssignOp : public Expression
|
struct NAZARA_SHADER_API AssignOp : public Expression
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,17 @@ namespace Nz::ShaderNodes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline ShaderNodes::NoOp::NoOp() :
|
||||||
|
Statement(NodeType::NoOp)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline std::shared_ptr<NoOp> NoOp::Build()
|
||||||
|
{
|
||||||
|
return std::make_shared<NoOp>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline AssignOp::AssignOp() :
|
inline AssignOp::AssignOp() :
|
||||||
Expression(NodeType::AssignOp)
|
Expression(NodeType::AssignOp)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ namespace Nz
|
||||||
void Visit(ShaderNodes::ExpressionStatement& node) override;
|
void Visit(ShaderNodes::ExpressionStatement& node) override;
|
||||||
void Visit(ShaderNodes::Identifier& node) override;
|
void Visit(ShaderNodes::Identifier& node) override;
|
||||||
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
void Visit(ShaderNodes::IntrinsicCall& node) override;
|
||||||
|
void Visit(ShaderNodes::NoOp& node) override;
|
||||||
void Visit(ShaderNodes::Sample2D& node) override;
|
void Visit(ShaderNodes::Sample2D& node) override;
|
||||||
void Visit(ShaderNodes::StatementBlock& node) override;
|
void Visit(ShaderNodes::StatementBlock& node) override;
|
||||||
void Visit(ShaderNodes::SwizzleOp& node) override;
|
void Visit(ShaderNodes::SwizzleOp& node) override;
|
||||||
|
|
|
||||||
|
|
@ -574,6 +574,11 @@ namespace Nz
|
||||||
Append(var.name);
|
Append(var.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GlslWriter::Visit(ShaderNodes::NoOp& /*node*/)
|
||||||
|
{
|
||||||
|
/* nothing to do */
|
||||||
|
}
|
||||||
|
|
||||||
void GlslWriter::Visit(ShaderNodes::ParameterVariable& var)
|
void GlslWriter::Visit(ShaderNodes::ParameterVariable& var)
|
||||||
{
|
{
|
||||||
Append(var.name);
|
Append(var.name);
|
||||||
|
|
@ -598,7 +603,7 @@ namespace Nz
|
||||||
bool first = true;
|
bool first = true;
|
||||||
for (const ShaderNodes::StatementPtr& statement : node.statements)
|
for (const ShaderNodes::StatementPtr& statement : node.statements)
|
||||||
{
|
{
|
||||||
if (!first)
|
if (!first && statement->GetType() != ShaderNodes::NodeType::NoOp)
|
||||||
AppendLine();
|
AppendLine();
|
||||||
|
|
||||||
Visit(statement);
|
Visit(statement);
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,11 @@ namespace Nz
|
||||||
PushExpression(ShaderNodes::IntrinsicCall::Build(node.intrinsic, std::move(parameters)));
|
PushExpression(ShaderNodes::IntrinsicCall::Build(node.intrinsic, std::move(parameters)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShaderAstCloner::Visit(ShaderNodes::NoOp& /*node*/)
|
||||||
|
{
|
||||||
|
PushStatement(ShaderNodes::NoOp::Build());
|
||||||
|
}
|
||||||
|
|
||||||
void ShaderAstCloner::Visit(ShaderNodes::Sample2D& node)
|
void ShaderAstCloner::Visit(ShaderNodes::Sample2D& node)
|
||||||
{
|
{
|
||||||
PushExpression(ShaderNodes::Sample2D::Build(CloneExpression(node.sampler), CloneExpression(node.coordinates)));
|
PushExpression(ShaderNodes::Sample2D::Build(CloneExpression(node.sampler), CloneExpression(node.coordinates)));
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,11 @@ namespace Nz
|
||||||
Visit(param);
|
Visit(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShaderAstRecursiveVisitor::Visit(ShaderNodes::NoOp& /*node*/)
|
||||||
|
{
|
||||||
|
/* Nothing to do */
|
||||||
|
}
|
||||||
|
|
||||||
void ShaderAstRecursiveVisitor::Visit(ShaderNodes::Sample2D& node)
|
void ShaderAstRecursiveVisitor::Visit(ShaderNodes::Sample2D& node)
|
||||||
{
|
{
|
||||||
Visit(node.sampler);
|
Visit(node.sampler);
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,11 @@ namespace Nz
|
||||||
Serialize(node);
|
Serialize(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Visit(ShaderNodes::NoOp& node) override
|
||||||
|
{
|
||||||
|
Serialize(node);
|
||||||
|
}
|
||||||
|
|
||||||
void Visit(ShaderNodes::Sample2D& node) override
|
void Visit(ShaderNodes::Sample2D& node) override
|
||||||
{
|
{
|
||||||
Serialize(node);
|
Serialize(node);
|
||||||
|
|
@ -276,6 +281,11 @@ namespace Nz
|
||||||
Type(node.type);
|
Type(node.type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShaderAstSerializerBase::Serialize(ShaderNodes::NoOp& /*node*/)
|
||||||
|
{
|
||||||
|
/* Nothing to do */
|
||||||
|
}
|
||||||
|
|
||||||
void ShaderAstSerializerBase::Serialize(ShaderNodes::Sample2D& node)
|
void ShaderAstSerializerBase::Serialize(ShaderNodes::Sample2D& node)
|
||||||
{
|
{
|
||||||
Node(node.sampler);
|
Node(node.sampler);
|
||||||
|
|
@ -682,6 +692,7 @@ namespace Nz
|
||||||
HandleType(ExpressionStatement);
|
HandleType(ExpressionStatement);
|
||||||
HandleType(Identifier);
|
HandleType(Identifier);
|
||||||
HandleType(IntrinsicCall);
|
HandleType(IntrinsicCall);
|
||||||
|
HandleType(NoOp);
|
||||||
HandleType(Sample2D);
|
HandleType(Sample2D);
|
||||||
HandleType(SwizzleOp);
|
HandleType(SwizzleOp);
|
||||||
HandleType(StatementBlock);
|
HandleType(StatementBlock);
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,11 @@ namespace Nz
|
||||||
throw std::runtime_error("unhandled IntrinsicCall node");
|
throw std::runtime_error("unhandled IntrinsicCall node");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShaderAstVisitorExcept::Visit(ShaderNodes::NoOp& node)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("unhandled NoOp node");
|
||||||
|
}
|
||||||
|
|
||||||
void ShaderAstVisitorExcept::Visit(ShaderNodes::Sample2D& /*node*/)
|
void ShaderAstVisitorExcept::Visit(ShaderNodes::Sample2D& /*node*/)
|
||||||
{
|
{
|
||||||
throw std::runtime_error("unhandled Sample2D node");
|
throw std::runtime_error("unhandled Sample2D node");
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,11 @@ namespace Nz::ShaderNodes
|
||||||
visitor.Visit(*this);
|
visitor.Visit(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NoOp::Visit(ShaderAstVisitor& visitor)
|
||||||
|
{
|
||||||
|
visitor.Visit(*this);
|
||||||
|
}
|
||||||
|
|
||||||
ShaderExpressionType AssignOp::GetExpressionType() const
|
ShaderExpressionType AssignOp::GetExpressionType() const
|
||||||
{
|
{
|
||||||
return left->GetExpressionType();
|
return left->GetExpressionType();
|
||||||
|
|
|
||||||
|
|
@ -605,6 +605,11 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpirvAstVisitor::Visit(ShaderNodes::NoOp& /*node*/)
|
||||||
|
{
|
||||||
|
// nothing to do
|
||||||
|
}
|
||||||
|
|
||||||
void SpirvAstVisitor::Visit(ShaderNodes::Sample2D& node)
|
void SpirvAstVisitor::Visit(ShaderNodes::Sample2D& node)
|
||||||
{
|
{
|
||||||
UInt32 typeId = m_writer.GetTypeId(ShaderNodes::BasicType::Float4);
|
UInt32 typeId = m_writer.GetTypeId(ShaderNodes::BasicType::Float4);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue