Shader: Serialize cached expression type

This commit is contained in:
Jérôme Leclercq 2022-03-09 12:32:48 +01:00
parent d45ba6696f
commit ce93b61c91
3 changed files with 30 additions and 1 deletions

View File

@ -41,6 +41,7 @@ namespace Nz::ShaderAst
void Serialize(SwizzleExpression& node); void Serialize(SwizzleExpression& node);
void Serialize(VariableValueExpression& node); void Serialize(VariableValueExpression& node);
void Serialize(UnaryExpression& node); void Serialize(UnaryExpression& node);
void SerializeExpressionCommon(Expression& expr);
void Serialize(BranchStatement& node); void Serialize(BranchStatement& node);
void Serialize(ConditionalStatement& node); void Serialize(ConditionalStatement& node);
@ -67,6 +68,7 @@ namespace Nz::ShaderAst
template<typename T> void Enum(T& enumVal); template<typename T> void Enum(T& enumVal);
template<typename T> void ExprValue(ExpressionValue<T>& attribute); template<typename T> void ExprValue(ExpressionValue<T>& attribute);
template<typename T> void OptEnum(std::optional<T>& optVal); template<typename T> void OptEnum(std::optional<T>& optVal);
inline void OptType(std::optional<ExpressionType>& optType);
template<typename T> void OptVal(std::optional<T>& optVal); template<typename T> void OptVal(std::optional<T>& optVal);
virtual bool IsWriting() const = 0; virtual bool IsWriting() const = 0;

View File

@ -126,6 +126,23 @@ namespace Nz::ShaderAst
Enum(optVal.value()); Enum(optVal.value());
} }
inline void AstSerializerBase::OptType(std::optional<ExpressionType>& optType)
{
bool isWriting = IsWriting();
bool hasValue;
if (isWriting)
hasValue = optType.has_value();
Value(hasValue);
if (!isWriting && hasValue)
optType.emplace();
if (optType.has_value())
Type(optType.value());
}
template<typename T> template<typename T>
void AstSerializerBase::OptVal(std::optional<T>& optVal) void AstSerializerBase::OptVal(std::optional<T>& optVal)
{ {

View File

@ -23,7 +23,13 @@ namespace Nz::ShaderAst
{ {
} }
#define NAZARA_SHADERAST_NODE(Node) void Visit(Node& node) override \ #define NAZARA_SHADERAST_EXPRESSION(Node) void Visit(Node& node) override \
{ \
m_serializer.Serialize(node); \
m_serializer.SerializeExpressionCommon(node); \
}
#define NAZARA_SHADERAST_STATEMENT(Node) void Visit(Node& node) override \
{ \ { \
m_serializer.Serialize(node); \ m_serializer.Serialize(node); \
} }
@ -188,6 +194,10 @@ namespace Nz::ShaderAst
Node(node.expression); Node(node.expression);
} }
void AstSerializerBase::SerializeExpressionCommon(Expression& expr)
{
OptType(expr.cachedExpressionType);
}
void AstSerializerBase::Serialize(BranchStatement& node) void AstSerializerBase::Serialize(BranchStatement& node)
{ {