Shader: StatementPtr& => const StatementPtr&

This commit is contained in:
Jérôme Leclercq 2021-04-17 18:10:48 +02:00
parent 1a8599ba29
commit 500ccda85a
12 changed files with 26 additions and 22 deletions

View File

@ -20,15 +20,16 @@ namespace Nz
class NAZARA_GRAPHICS_API UberShader
{
public:
UberShader(ShaderStageType shaderStage, ShaderAst::StatementPtr shaderAst);
UberShader(ShaderStageType shaderStage, const ShaderAst::StatementPtr& shaderAst);
~UberShader() = default;
UInt64 GetConditionFlagByName(const std::string_view& condition) const;
UInt64 GetOptionFlagByName(const std::string& optionName) const;
const std::shared_ptr<ShaderModule>& Get(UInt64 combination);
private:
std::unordered_map<UInt64 /*combination*/, std::shared_ptr<ShaderModule>> m_combinations;
std::unordered_map<std::string, std::size_t> m_optionIndexByName;
ShaderAst::StatementPtr m_shaderAst;
ShaderStageType m_shaderStage;
UInt64 m_combinationMask;

View File

@ -23,15 +23,15 @@ namespace Nz::ShaderAst
AstCloner(AstCloner&&) = delete;
~AstCloner() = default;
ExpressionPtr Clone(ExpressionPtr& statement);
StatementPtr Clone(StatementPtr& statement);
ExpressionPtr Clone(const ExpressionPtr& statement);
StatementPtr Clone(const StatementPtr& statement);
AstCloner& operator=(const AstCloner&) = delete;
AstCloner& operator=(AstCloner&&) = delete;
protected:
inline ExpressionPtr CloneExpression(ExpressionPtr& expr);
inline StatementPtr CloneStatement(StatementPtr& statement);
inline ExpressionPtr CloneExpression(const ExpressionPtr& expr);
inline StatementPtr CloneStatement(const StatementPtr& statement);
virtual ExpressionPtr CloneExpression(Expression& expr);
virtual StatementPtr CloneStatement(Statement& statement);

View File

@ -7,7 +7,7 @@
namespace Nz::ShaderAst
{
ExpressionPtr AstCloner::CloneExpression(ExpressionPtr& expr)
ExpressionPtr AstCloner::CloneExpression(const ExpressionPtr& expr)
{
if (!expr)
return nullptr;
@ -15,7 +15,7 @@ namespace Nz::ShaderAst
return CloneExpression(*expr);
}
StatementPtr AstCloner::CloneStatement(StatementPtr& statement)
StatementPtr AstCloner::CloneStatement(const StatementPtr& statement)
{
if (!statement)
return nullptr;

View File

@ -23,8 +23,8 @@ namespace Nz::ShaderAst
AstOptimizer(AstOptimizer&&) = delete;
~AstOptimizer() = default;
StatementPtr Optimise(StatementPtr& statement);
StatementPtr Optimise(StatementPtr& statement, UInt64 enabledConditions);
StatementPtr Optimise(const StatementPtr& statement);
StatementPtr Optimise(const StatementPtr& statement, UInt64 enabledConditions);
AstOptimizer& operator=(const AstOptimizer&) = delete;
AstOptimizer& operator=(AstOptimizer&&) = delete;

View File

@ -25,8 +25,8 @@ namespace Nz::ShaderAst
SanitizeVisitor(SanitizeVisitor&&) = delete;
~SanitizeVisitor() = default;
inline StatementPtr Sanitize(StatementPtr& statement, std::string* error = nullptr);
StatementPtr Sanitize(StatementPtr& statement, const Options& options, std::string* error = nullptr);
inline StatementPtr Sanitize(const StatementPtr& statement, std::string* error = nullptr);
StatementPtr Sanitize(const StatementPtr& statement, const Options& options, std::string* error = nullptr);
SanitizeVisitor& operator=(const SanitizeVisitor&) = delete;
SanitizeVisitor& operator=(SanitizeVisitor&&) = delete;
@ -125,8 +125,8 @@ namespace Nz::ShaderAst
Context* m_context;
};
inline StatementPtr Sanitize(StatementPtr& ast, std::string* error = nullptr);
inline StatementPtr Sanitize(StatementPtr& ast, const SanitizeVisitor::Options& options, std::string* error = nullptr);
inline StatementPtr Sanitize(const StatementPtr& ast, std::string* error = nullptr);
inline StatementPtr Sanitize(const StatementPtr& ast, const SanitizeVisitor::Options& options, std::string* error = nullptr);
}
#include <Nazara/Shader/Ast/SanitizeVisitor.inl>

View File

@ -12,7 +12,7 @@ namespace Nz::ShaderAst
{
}
inline StatementPtr SanitizeVisitor::Sanitize(StatementPtr& statement, std::string* error)
inline StatementPtr SanitizeVisitor::Sanitize(const StatementPtr& statement, std::string* error)
{
return Sanitize(statement, {}, error);
}
@ -76,13 +76,13 @@ namespace Nz::ShaderAst
return varIndex;
}
StatementPtr Sanitize(StatementPtr& ast, std::string* error)
StatementPtr Sanitize(const StatementPtr& ast, std::string* error)
{
SanitizeVisitor sanitizer;
return sanitizer.Sanitize(ast, error);
}
StatementPtr Sanitize(StatementPtr& ast, const SanitizeVisitor::Options& options, std::string* error)
StatementPtr Sanitize(const StatementPtr& ast, const SanitizeVisitor::Options& options, std::string* error)
{
SanitizeVisitor sanitizer;
return sanitizer.Sanitize(ast, options, error);

View File

@ -91,6 +91,7 @@ namespace Nz
void Visit(ShaderAst::ConditionalStatement& node) override;
void Visit(ShaderAst::DeclareExternalStatement& node) override;
void Visit(ShaderAst::DeclareFunctionStatement& node) override;
void Visit(ShaderAst::DeclareOptionStatement& node) override;
void Visit(ShaderAst::DeclareStructStatement& node) override;
void Visit(ShaderAst::DeclareVariableStatement& node) override;
void Visit(ShaderAst::DiscardStatement& node) override;

View File

@ -27,6 +27,7 @@ namespace Nz
struct States
{
Nz::UInt64 enabledOptions = 0;
bool sanitized = false;
};
};
}

View File

@ -51,6 +51,7 @@ namespace Nz
void Visit(ShaderAst::ConstantExpression& node) override;
void Visit(ShaderAst::DeclareExternalStatement& node) override;
void Visit(ShaderAst::DeclareFunctionStatement& node) override;
void Visit(ShaderAst::DeclareOptionStatement& node) override;
void Visit(ShaderAst::DeclareStructStatement& node) override;
void Visit(ShaderAst::DeclareVariableStatement& node) override;
void Visit(ShaderAst::DiscardStatement& node) override;

View File

@ -8,7 +8,7 @@
namespace Nz::ShaderAst
{
ExpressionPtr AstCloner::Clone(ExpressionPtr& expr)
ExpressionPtr AstCloner::Clone(const ExpressionPtr& expr)
{
expr->Visit(*this);
@ -16,7 +16,7 @@ namespace Nz::ShaderAst
return PopExpression();
}
StatementPtr AstCloner::Clone(StatementPtr& statement)
StatementPtr AstCloner::Clone(const StatementPtr& statement)
{
statement->Visit(*this);

View File

@ -380,13 +380,13 @@ namespace Nz::ShaderAst
#undef EnableOptimisation
}
StatementPtr AstOptimizer::Optimise(StatementPtr& statement)
StatementPtr AstOptimizer::Optimise(const StatementPtr& statement)
{
m_enabledOptions.reset();
return CloneStatement(statement);
}
StatementPtr AstOptimizer::Optimise(StatementPtr& statement, UInt64 enabledConditions)
StatementPtr AstOptimizer::Optimise(const StatementPtr& statement, UInt64 enabledConditions)
{
m_enabledOptions = enabledConditions;

View File

@ -35,7 +35,7 @@ namespace Nz::ShaderAst
std::unordered_set<unsigned int> usedBindingIndexes;
};
StatementPtr SanitizeVisitor::Sanitize(StatementPtr& nodePtr, const Options& options, std::string* error)
StatementPtr SanitizeVisitor::Sanitize(const StatementPtr& nodePtr, const Options& options, std::string* error)
{
StatementPtr clone;