Shader: Add comments to surround modules
This commit is contained in:
parent
4bded2182c
commit
a4858d6793
|
|
@ -519,6 +519,9 @@ namespace Nz::ShaderAst
|
||||||
|
|
||||||
inline bool Compare(const MultiStatement& lhs, const MultiStatement& rhs)
|
inline bool Compare(const MultiStatement& lhs, const MultiStatement& rhs)
|
||||||
{
|
{
|
||||||
|
if (!Compare(lhs.sectionName, rhs.sectionName))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!Compare(lhs.statements, rhs.statements))
|
if (!Compare(lhs.statements, rhs.statements))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -385,6 +385,7 @@ namespace Nz::ShaderAst
|
||||||
NodeType GetType() const override;
|
NodeType GetType() const override;
|
||||||
void Visit(AstStatementVisitor& visitor) override;
|
void Visit(AstStatementVisitor& visitor) override;
|
||||||
|
|
||||||
|
std::string sectionName;
|
||||||
std::vector<StatementPtr> statements;
|
std::vector<StatementPtr> statements;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,7 @@ namespace Nz
|
||||||
void Append(const ShaderAst::VectorType& vecType);
|
void Append(const ShaderAst::VectorType& vecType);
|
||||||
template<typename T> void Append(const T& param);
|
template<typename T> void Append(const T& param);
|
||||||
template<typename T1, typename T2, typename... Args> void Append(const T1& firstParam, const T2& secondParam, Args&&... params);
|
template<typename T1, typename T2, typename... Args> void Append(const T1& firstParam, const T2& secondParam, Args&&... params);
|
||||||
|
void AppendComment(const std::string& section);
|
||||||
void AppendCommentSection(const std::string& section);
|
void AppendCommentSection(const std::string& section);
|
||||||
void AppendFunctionDeclaration(const ShaderAst::DeclareFunctionStatement& node, bool forward = false);
|
void AppendFunctionDeclaration(const ShaderAst::DeclareFunctionStatement& node, bool forward = false);
|
||||||
void AppendHeader();
|
void AppendHeader();
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,7 @@ namespace Nz
|
||||||
void AppendAttribute(LocationAttribute location);
|
void AppendAttribute(LocationAttribute location);
|
||||||
void AppendAttribute(SetAttribute set);
|
void AppendAttribute(SetAttribute set);
|
||||||
void AppendAttribute(UnrollAttribute unroll);
|
void AppendAttribute(UnrollAttribute unroll);
|
||||||
|
void AppendComment(const std::string& section);
|
||||||
void AppendCommentSection(const std::string& section);
|
void AppendCommentSection(const std::string& section);
|
||||||
void AppendHeader();
|
void AppendHeader();
|
||||||
void AppendLine(const std::string& txt = {});
|
void AppendLine(const std::string& txt = {});
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,7 @@ namespace Nz::ShaderAst
|
||||||
StatementPtr AstCloner::Clone(MultiStatement& node)
|
StatementPtr AstCloner::Clone(MultiStatement& node)
|
||||||
{
|
{
|
||||||
auto clone = std::make_unique<MultiStatement>();
|
auto clone = std::make_unique<MultiStatement>();
|
||||||
|
clone->sectionName = node.sectionName;
|
||||||
clone->statements.reserve(node.statements.size());
|
clone->statements.reserve(node.statements.size());
|
||||||
for (auto& statement : node.statements)
|
for (auto& statement : node.statements)
|
||||||
clone->statements.push_back(CloneStatement(statement));
|
clone->statements.push_back(CloneStatement(statement));
|
||||||
|
|
|
||||||
|
|
@ -315,6 +315,8 @@ namespace Nz::ShaderAst
|
||||||
|
|
||||||
void AstSerializerBase::Serialize(MultiStatement& node)
|
void AstSerializerBase::Serialize(MultiStatement& node)
|
||||||
{
|
{
|
||||||
|
Value(node.sectionName);
|
||||||
|
|
||||||
Container(node.statements);
|
Container(node.statements);
|
||||||
for (auto& statement : node.statements)
|
for (auto& statement : node.statements)
|
||||||
Node(statement);
|
Node(statement);
|
||||||
|
|
|
||||||
|
|
@ -1389,6 +1389,8 @@ namespace Nz::ShaderAst
|
||||||
if (!targetModule)
|
if (!targetModule)
|
||||||
throw AstError{ "module " + ModulePathAsString() + " not found" };
|
throw AstError{ "module " + ModulePathAsString() + " not found" };
|
||||||
|
|
||||||
|
targetModule->rootNode->sectionName = "Module " + targetModule->metadata->moduleId.ToString();
|
||||||
|
|
||||||
std::string error;
|
std::string error;
|
||||||
ModulePtr sanitizedModule = ShaderAst::Sanitize(*targetModule, m_context->options, &error);
|
ModulePtr sanitizedModule = ShaderAst::Sanitize(*targetModule, m_context->options, &error);
|
||||||
if (!sanitizedModule)
|
if (!sanitizedModule)
|
||||||
|
|
@ -1462,6 +1464,7 @@ namespace Nz::ShaderAst
|
||||||
StatementPtr SanitizeVisitor::Clone(MultiStatement& node)
|
StatementPtr SanitizeVisitor::Clone(MultiStatement& node)
|
||||||
{
|
{
|
||||||
auto clone = std::make_unique<MultiStatement>();
|
auto clone = std::make_unique<MultiStatement>();
|
||||||
|
clone->sectionName = node.sectionName;
|
||||||
clone->statements.reserve(node.statements.size());
|
clone->statements.reserve(node.statements.size());
|
||||||
|
|
||||||
std::vector<StatementPtr>* previousList = m_context->currentStatementList;
|
std::vector<StatementPtr>* previousList = m_context->currentStatementList;
|
||||||
|
|
|
||||||
|
|
@ -403,6 +403,26 @@ namespace Nz
|
||||||
Append(secondParam, std::forward<Args>(params)...);
|
Append(secondParam, std::forward<Args>(params)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GlslWriter::AppendComment(const std::string& section)
|
||||||
|
{
|
||||||
|
std::size_t lineFeed = section.find('\n');
|
||||||
|
if (lineFeed != section.npos)
|
||||||
|
{
|
||||||
|
std::size_t previousCut = 0;
|
||||||
|
|
||||||
|
AppendLine("/*");
|
||||||
|
do
|
||||||
|
{
|
||||||
|
AppendLine(section.substr(previousCut, lineFeed - previousCut));
|
||||||
|
previousCut = lineFeed + 1;
|
||||||
|
} while ((lineFeed = section.find('\n', previousCut)) != section.npos);
|
||||||
|
AppendLine(section.substr(previousCut));
|
||||||
|
AppendLine("*/");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AppendLine("// ", section);
|
||||||
|
}
|
||||||
|
|
||||||
void GlslWriter::AppendCommentSection(const std::string& section)
|
void GlslWriter::AppendCommentSection(const std::string& section)
|
||||||
{
|
{
|
||||||
NazaraAssert(m_currentState, "This function should only be called while processing an AST");
|
NazaraAssert(m_currentState, "This function should only be called while processing an AST");
|
||||||
|
|
@ -1208,7 +1228,13 @@ namespace Nz
|
||||||
|
|
||||||
void GlslWriter::Visit(ShaderAst::MultiStatement& node)
|
void GlslWriter::Visit(ShaderAst::MultiStatement& node)
|
||||||
{
|
{
|
||||||
|
if (!node.sectionName.empty())
|
||||||
|
AppendComment(node.sectionName);
|
||||||
|
|
||||||
AppendStatementList(node.statements);
|
AppendStatementList(node.statements);
|
||||||
|
|
||||||
|
if (!node.sectionName.empty())
|
||||||
|
AppendComment("End: " + node.sectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlslWriter::Visit(ShaderAst::NoOpStatement& /*node*/)
|
void GlslWriter::Visit(ShaderAst::NoOpStatement& /*node*/)
|
||||||
|
|
|
||||||
|
|
@ -502,6 +502,27 @@ namespace Nz
|
||||||
unroll.unroll.GetExpression()->Visit(*this);
|
unroll.unroll.GetExpression()->Visit(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LangWriter::AppendComment(const std::string& section)
|
||||||
|
{
|
||||||
|
std::size_t lineFeed = section.find('\n');
|
||||||
|
if (lineFeed != section.npos)
|
||||||
|
{
|
||||||
|
std::size_t previousCut = 0;
|
||||||
|
|
||||||
|
AppendLine("/*");
|
||||||
|
do
|
||||||
|
{
|
||||||
|
AppendLine(section.substr(previousCut, lineFeed - previousCut));
|
||||||
|
previousCut = lineFeed + 1;
|
||||||
|
}
|
||||||
|
while ((lineFeed = section.find('\n', previousCut)) != section.npos);
|
||||||
|
AppendLine(section.substr(previousCut));
|
||||||
|
AppendLine("*/");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AppendLine("// ", section);
|
||||||
|
}
|
||||||
|
|
||||||
void LangWriter::AppendCommentSection(const std::string& section)
|
void LangWriter::AppendCommentSection(const std::string& section)
|
||||||
{
|
{
|
||||||
NazaraAssert(m_currentState, "This function should only be called while processing an AST");
|
NazaraAssert(m_currentState, "This function should only be called while processing an AST");
|
||||||
|
|
@ -1032,7 +1053,13 @@ namespace Nz
|
||||||
|
|
||||||
void LangWriter::Visit(ShaderAst::MultiStatement& node)
|
void LangWriter::Visit(ShaderAst::MultiStatement& node)
|
||||||
{
|
{
|
||||||
|
if (!node.sectionName.empty())
|
||||||
|
AppendComment(node.sectionName);
|
||||||
|
|
||||||
AppendStatementList(node.statements);
|
AppendStatementList(node.statements);
|
||||||
|
|
||||||
|
if (!node.sectionName.empty())
|
||||||
|
AppendComment("End: " + node.sectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LangWriter::Visit(ShaderAst::NoOpStatement& /*node*/)
|
void LangWriter::Visit(ShaderAst::NoOpStatement& /*node*/)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue