Shader/ShaderAst: Rename AccessMember* to Access*
This commit is contained in:
parent
ce5ace52cc
commit
0f3c0abb96
|
|
@ -36,8 +36,8 @@ namespace Nz::ShaderAst
|
||||||
virtual ExpressionPtr CloneExpression(Expression& expr);
|
virtual ExpressionPtr CloneExpression(Expression& expr);
|
||||||
virtual StatementPtr CloneStatement(Statement& statement);
|
virtual StatementPtr CloneStatement(Statement& statement);
|
||||||
|
|
||||||
virtual ExpressionPtr Clone(AccessMemberIdentifierExpression& node);
|
virtual ExpressionPtr Clone(AccessIdentifierExpression& node);
|
||||||
virtual ExpressionPtr Clone(AccessMemberIndexExpression& node);
|
virtual ExpressionPtr Clone(AccessIndexExpression& node);
|
||||||
virtual ExpressionPtr Clone(AssignExpression& node);
|
virtual ExpressionPtr Clone(AssignExpression& node);
|
||||||
virtual ExpressionPtr Clone(BinaryExpression& node);
|
virtual ExpressionPtr Clone(BinaryExpression& node);
|
||||||
virtual ExpressionPtr Clone(CallFunctionExpression& node);
|
virtual ExpressionPtr Clone(CallFunctionExpression& node);
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@
|
||||||
#define NAZARA_SHADERAST_STATEMENT_LAST(X) NAZARA_SHADERAST_STATEMENT(X)
|
#define NAZARA_SHADERAST_STATEMENT_LAST(X) NAZARA_SHADERAST_STATEMENT(X)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAZARA_SHADERAST_EXPRESSION(AccessMemberIdentifierExpression)
|
NAZARA_SHADERAST_EXPRESSION(AccessIdentifierExpression)
|
||||||
NAZARA_SHADERAST_EXPRESSION(AccessMemberIndexExpression)
|
NAZARA_SHADERAST_EXPRESSION(AccessIndexExpression)
|
||||||
NAZARA_SHADERAST_EXPRESSION(AssignExpression)
|
NAZARA_SHADERAST_EXPRESSION(AssignExpression)
|
||||||
NAZARA_SHADERAST_EXPRESSION(BinaryExpression)
|
NAZARA_SHADERAST_EXPRESSION(BinaryExpression)
|
||||||
NAZARA_SHADERAST_EXPRESSION(CallFunctionExpression)
|
NAZARA_SHADERAST_EXPRESSION(CallFunctionExpression)
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ namespace Nz::ShaderAst
|
||||||
AstRecursiveVisitor() = default;
|
AstRecursiveVisitor() = default;
|
||||||
~AstRecursiveVisitor() = default;
|
~AstRecursiveVisitor() = default;
|
||||||
|
|
||||||
void Visit(AccessMemberIdentifierExpression& node) override;
|
void Visit(AccessIdentifierExpression& node) override;
|
||||||
void Visit(AccessMemberIndexExpression& node) override;
|
void Visit(AccessIndexExpression& node) override;
|
||||||
void Visit(AssignExpression& node) override;
|
void Visit(AssignExpression& node) override;
|
||||||
void Visit(BinaryExpression& node) override;
|
void Visit(BinaryExpression& node) override;
|
||||||
void Visit(CallFunctionExpression& node) override;
|
void Visit(CallFunctionExpression& node) override;
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,8 @@ namespace Nz::ShaderAst
|
||||||
AstSerializerBase(AstSerializerBase&&) = delete;
|
AstSerializerBase(AstSerializerBase&&) = delete;
|
||||||
~AstSerializerBase() = default;
|
~AstSerializerBase() = default;
|
||||||
|
|
||||||
void Serialize(AccessMemberIdentifierExpression& node);
|
void Serialize(AccessIdentifierExpression& node);
|
||||||
void Serialize(AccessMemberIndexExpression& node);
|
void Serialize(AccessIndexExpression& node);
|
||||||
void Serialize(AssignExpression& node);
|
void Serialize(AssignExpression& node);
|
||||||
void Serialize(BinaryExpression& node);
|
void Serialize(BinaryExpression& node);
|
||||||
void Serialize(CallFunctionExpression& node);
|
void Serialize(CallFunctionExpression& node);
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,8 @@ namespace Nz::ShaderAst
|
||||||
private:
|
private:
|
||||||
using AstExpressionVisitor::Visit;
|
using AstExpressionVisitor::Visit;
|
||||||
|
|
||||||
void Visit(AccessMemberIdentifierExpression& node) override;
|
void Visit(AccessIdentifierExpression& node) override;
|
||||||
void Visit(AccessMemberIndexExpression& node) override;
|
void Visit(AccessIndexExpression& node) override;
|
||||||
void Visit(AssignExpression& node) override;
|
void Visit(AssignExpression& node) override;
|
||||||
void Visit(BinaryExpression& node) override;
|
void Visit(BinaryExpression& node) override;
|
||||||
void Visit(CallFunctionExpression& node) override;
|
void Visit(CallFunctionExpression& node) override;
|
||||||
|
|
|
||||||
|
|
@ -64,21 +64,21 @@ namespace Nz::ShaderAst
|
||||||
std::optional<ExpressionType> cachedExpressionType;
|
std::optional<ExpressionType> cachedExpressionType;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NAZARA_SHADER_API AccessMemberIdentifierExpression : public Expression
|
struct NAZARA_SHADER_API AccessIdentifierExpression : public Expression
|
||||||
{
|
{
|
||||||
NodeType GetType() const override;
|
NodeType GetType() const override;
|
||||||
void Visit(AstExpressionVisitor& visitor) override;
|
void Visit(AstExpressionVisitor& visitor) override;
|
||||||
|
|
||||||
ExpressionPtr structExpr;
|
ExpressionPtr expr;
|
||||||
std::vector<std::string> memberIdentifiers;
|
std::vector<std::string> memberIdentifiers;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NAZARA_SHADER_API AccessMemberIndexExpression : public Expression
|
struct NAZARA_SHADER_API AccessIndexExpression : public Expression
|
||||||
{
|
{
|
||||||
NodeType GetType() const override;
|
NodeType GetType() const override;
|
||||||
void Visit(AstExpressionVisitor& visitor) override;
|
void Visit(AstExpressionVisitor& visitor) override;
|
||||||
|
|
||||||
ExpressionPtr structExpr;
|
ExpressionPtr expr;
|
||||||
std::vector<std::size_t> memberIndices;
|
std::vector<std::size_t> memberIndices;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ namespace Nz::ShaderAst
|
||||||
|
|
||||||
using AstCloner::CloneExpression;
|
using AstCloner::CloneExpression;
|
||||||
|
|
||||||
ExpressionPtr Clone(AccessMemberIdentifierExpression& node) override;
|
ExpressionPtr Clone(AccessIdentifierExpression& node) override;
|
||||||
ExpressionPtr Clone(AssignExpression& node) override;
|
ExpressionPtr Clone(AssignExpression& node) override;
|
||||||
ExpressionPtr Clone(BinaryExpression& node) override;
|
ExpressionPtr Clone(BinaryExpression& node) override;
|
||||||
ExpressionPtr Clone(CallFunctionExpression& node) override;
|
ExpressionPtr Clone(CallFunctionExpression& node) override;
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ namespace Nz
|
||||||
|
|
||||||
void Visit(ShaderAst::ExpressionPtr& expr, bool encloseIfRequired = false);
|
void Visit(ShaderAst::ExpressionPtr& expr, bool encloseIfRequired = false);
|
||||||
|
|
||||||
void Visit(ShaderAst::AccessMemberIndexExpression& node) override;
|
void Visit(ShaderAst::AccessIndexExpression& node) override;
|
||||||
void Visit(ShaderAst::AssignExpression& node) override;
|
void Visit(ShaderAst::AssignExpression& node) override;
|
||||||
void Visit(ShaderAst::BinaryExpression& node) override;
|
void Visit(ShaderAst::BinaryExpression& node) override;
|
||||||
void Visit(ShaderAst::CallFunctionExpression& node) override;
|
void Visit(ShaderAst::CallFunctionExpression& node) override;
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ namespace Nz
|
||||||
|
|
||||||
void Visit(ShaderAst::ExpressionPtr& expr, bool encloseIfRequired = false);
|
void Visit(ShaderAst::ExpressionPtr& expr, bool encloseIfRequired = false);
|
||||||
|
|
||||||
void Visit(ShaderAst::AccessMemberIndexExpression& node) override;
|
void Visit(ShaderAst::AccessIndexExpression& node) override;
|
||||||
void Visit(ShaderAst::AssignExpression& node) override;
|
void Visit(ShaderAst::AssignExpression& node) override;
|
||||||
void Visit(ShaderAst::BinaryExpression& node) override;
|
void Visit(ShaderAst::BinaryExpression& node) override;
|
||||||
void Visit(ShaderAst::CastExpression& node) override;
|
void Visit(ShaderAst::CastExpression& node) override;
|
||||||
|
|
|
||||||
|
|
@ -19,12 +19,12 @@ namespace Nz::ShaderBuilder
|
||||||
{
|
{
|
||||||
struct AccessIndex
|
struct AccessIndex
|
||||||
{
|
{
|
||||||
inline std::unique_ptr<ShaderAst::AccessMemberIndexExpression> operator()(ShaderAst::ExpressionPtr structExpr, std::vector<std::size_t> memberIndices) const;
|
inline std::unique_ptr<ShaderAst::AccessIndexExpression> operator()(ShaderAst::ExpressionPtr expr, std::vector<std::size_t> memberIndices) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AccessMember
|
struct AccessMember
|
||||||
{
|
{
|
||||||
inline std::unique_ptr<ShaderAst::AccessMemberIdentifierExpression> operator()(ShaderAst::ExpressionPtr structExpr, std::vector<std::string> memberIdentifiers) const;
|
inline std::unique_ptr<ShaderAst::AccessIdentifierExpression> operator()(ShaderAst::ExpressionPtr expr, std::vector<std::string> memberIdentifiers) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Assign
|
struct Assign
|
||||||
|
|
|
||||||
|
|
@ -7,19 +7,19 @@
|
||||||
|
|
||||||
namespace Nz::ShaderBuilder
|
namespace Nz::ShaderBuilder
|
||||||
{
|
{
|
||||||
inline std::unique_ptr<ShaderAst::AccessMemberIdentifierExpression> Impl::AccessMember::operator()(ShaderAst::ExpressionPtr structExpr, std::vector<std::string> memberIdentifiers) const
|
inline std::unique_ptr<ShaderAst::AccessIdentifierExpression> Impl::AccessMember::operator()(ShaderAst::ExpressionPtr expr, std::vector<std::string> memberIdentifiers) const
|
||||||
{
|
{
|
||||||
auto accessMemberNode = std::make_unique<ShaderAst::AccessMemberIdentifierExpression>();
|
auto accessMemberNode = std::make_unique<ShaderAst::AccessIdentifierExpression>();
|
||||||
accessMemberNode->structExpr = std::move(structExpr);
|
accessMemberNode->expr = std::move(expr);
|
||||||
accessMemberNode->memberIdentifiers = std::move(memberIdentifiers);
|
accessMemberNode->memberIdentifiers = std::move(memberIdentifiers);
|
||||||
|
|
||||||
return accessMemberNode;
|
return accessMemberNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::unique_ptr<ShaderAst::AccessMemberIndexExpression> Impl::AccessIndex::operator()(ShaderAst::ExpressionPtr structExpr, std::vector<std::size_t> memberIndices) const
|
inline std::unique_ptr<ShaderAst::AccessIndexExpression> Impl::AccessIndex::operator()(ShaderAst::ExpressionPtr expr, std::vector<std::size_t> memberIndices) const
|
||||||
{
|
{
|
||||||
auto accessMemberNode = std::make_unique<ShaderAst::AccessMemberIndexExpression>();
|
auto accessMemberNode = std::make_unique<ShaderAst::AccessIndexExpression>();
|
||||||
accessMemberNode->structExpr = std::move(structExpr);
|
accessMemberNode->expr = std::move(expr);
|
||||||
accessMemberNode->memberIndices = std::move(memberIndices);
|
accessMemberNode->memberIndices = std::move(memberIndices);
|
||||||
|
|
||||||
return accessMemberNode;
|
return accessMemberNode;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ namespace Nz
|
||||||
using ExpressionVisitorExcept::Visit;
|
using ExpressionVisitorExcept::Visit;
|
||||||
using StatementVisitorExcept::Visit;
|
using StatementVisitorExcept::Visit;
|
||||||
|
|
||||||
void Visit(ShaderAst::AccessMemberIndexExpression& node) override;
|
void Visit(ShaderAst::AccessIndexExpression& node) override;
|
||||||
void Visit(ShaderAst::AssignExpression& node) override;
|
void Visit(ShaderAst::AssignExpression& node) override;
|
||||||
void Visit(ShaderAst::BinaryExpression& node) override;
|
void Visit(ShaderAst::BinaryExpression& node) override;
|
||||||
void Visit(ShaderAst::BranchStatement& node) override;
|
void Visit(ShaderAst::BranchStatement& node) override;
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ namespace Nz
|
||||||
UInt32 Evaluate(ShaderAst::Expression& node);
|
UInt32 Evaluate(ShaderAst::Expression& node);
|
||||||
|
|
||||||
using ExpressionVisitorExcept::Visit;
|
using ExpressionVisitorExcept::Visit;
|
||||||
void Visit(ShaderAst::AccessMemberIndexExpression& node) override;
|
void Visit(ShaderAst::AccessIndexExpression& node) override;
|
||||||
void Visit(ShaderAst::VariableExpression& node) override;
|
void Visit(ShaderAst::VariableExpression& node) override;
|
||||||
|
|
||||||
SpirvExpressionLoad& operator=(const SpirvExpressionLoad&) = delete;
|
SpirvExpressionLoad& operator=(const SpirvExpressionLoad&) = delete;
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ namespace Nz
|
||||||
void Store(ShaderAst::ExpressionPtr& node, UInt32 resultId);
|
void Store(ShaderAst::ExpressionPtr& node, UInt32 resultId);
|
||||||
|
|
||||||
using ExpressionVisitorExcept::Visit;
|
using ExpressionVisitorExcept::Visit;
|
||||||
void Visit(ShaderAst::AccessMemberIndexExpression& node) override;
|
void Visit(ShaderAst::AccessIndexExpression& node) override;
|
||||||
void Visit(ShaderAst::SwizzleExpression& node) override;
|
void Visit(ShaderAst::SwizzleExpression& node) override;
|
||||||
void Visit(ShaderAst::VariableExpression& node) override;
|
void Visit(ShaderAst::VariableExpression& node) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -158,22 +158,22 @@ namespace Nz::ShaderAst
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExpressionPtr AstCloner::Clone(AccessMemberIdentifierExpression& node)
|
ExpressionPtr AstCloner::Clone(AccessIdentifierExpression& node)
|
||||||
{
|
{
|
||||||
auto clone = std::make_unique<AccessMemberIdentifierExpression>();
|
auto clone = std::make_unique<AccessIdentifierExpression>();
|
||||||
clone->memberIdentifiers = node.memberIdentifiers;
|
clone->memberIdentifiers = node.memberIdentifiers;
|
||||||
clone->structExpr = CloneExpression(node.structExpr);
|
clone->expr = CloneExpression(node.expr);
|
||||||
|
|
||||||
clone->cachedExpressionType = node.cachedExpressionType;
|
clone->cachedExpressionType = node.cachedExpressionType;
|
||||||
|
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExpressionPtr AstCloner::Clone(AccessMemberIndexExpression& node)
|
ExpressionPtr AstCloner::Clone(AccessIndexExpression& node)
|
||||||
{
|
{
|
||||||
auto clone = std::make_unique<AccessMemberIndexExpression>();
|
auto clone = std::make_unique<AccessIndexExpression>();
|
||||||
clone->memberIndices = node.memberIndices;
|
clone->memberIndices = node.memberIndices;
|
||||||
clone->structExpr = CloneExpression(node.structExpr);
|
clone->expr = CloneExpression(node.expr);
|
||||||
|
|
||||||
clone->cachedExpressionType = node.cachedExpressionType;
|
clone->cachedExpressionType = node.cachedExpressionType;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,14 @@
|
||||||
|
|
||||||
namespace Nz::ShaderAst
|
namespace Nz::ShaderAst
|
||||||
{
|
{
|
||||||
void AstRecursiveVisitor::Visit(AccessMemberIdentifierExpression& node)
|
void AstRecursiveVisitor::Visit(AccessIdentifierExpression& node)
|
||||||
{
|
{
|
||||||
node.structExpr->Visit(*this);
|
node.expr->Visit(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AstRecursiveVisitor::Visit(AccessMemberIndexExpression& node)
|
void AstRecursiveVisitor::Visit(AccessIndexExpression& node)
|
||||||
{
|
{
|
||||||
node.structExpr->Visit(*this);
|
node.expr->Visit(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AstRecursiveVisitor::Visit(AssignExpression& node)
|
void AstRecursiveVisitor::Visit(AssignExpression& node)
|
||||||
|
|
|
||||||
|
|
@ -33,18 +33,18 @@ namespace Nz::ShaderAst
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void AstSerializerBase::Serialize(AccessMemberIdentifierExpression& node)
|
void AstSerializerBase::Serialize(AccessIdentifierExpression& node)
|
||||||
{
|
{
|
||||||
Node(node.structExpr);
|
Node(node.expr);
|
||||||
|
|
||||||
Container(node.memberIdentifiers);
|
Container(node.memberIdentifiers);
|
||||||
for (std::string& identifier : node.memberIdentifiers)
|
for (std::string& identifier : node.memberIdentifiers)
|
||||||
Value(identifier);
|
Value(identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AstSerializerBase::Serialize(AccessMemberIndexExpression& node)
|
void AstSerializerBase::Serialize(AccessIndexExpression& node)
|
||||||
{
|
{
|
||||||
Node(node.structExpr);
|
Node(node.expr);
|
||||||
|
|
||||||
Container(node.memberIndices);
|
Container(node.memberIndices);
|
||||||
for (std::size_t& identifier : node.memberIndices)
|
for (std::size_t& identifier : node.memberIndices)
|
||||||
|
|
|
||||||
|
|
@ -13,14 +13,14 @@ namespace Nz::ShaderAst
|
||||||
return m_expressionCategory;
|
return m_expressionCategory;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderAstValueCategory::Visit(AccessMemberIdentifierExpression& node)
|
void ShaderAstValueCategory::Visit(AccessIdentifierExpression& node)
|
||||||
{
|
{
|
||||||
node.structExpr->Visit(*this);
|
node.expr->Visit(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderAstValueCategory::Visit(AccessMemberIndexExpression& node)
|
void ShaderAstValueCategory::Visit(AccessIndexExpression& node)
|
||||||
{
|
{
|
||||||
node.structExpr->Visit(*this);
|
node.expr->Visit(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderAstValueCategory::Visit(AssignExpression& /*node*/)
|
void ShaderAstValueCategory::Visit(AssignExpression& /*node*/)
|
||||||
|
|
|
||||||
|
|
@ -116,9 +116,9 @@ namespace Nz::ShaderAst
|
||||||
return member.type;
|
return member.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExpressionPtr SanitizeVisitor::Clone(AccessMemberIdentifierExpression& node)
|
ExpressionPtr SanitizeVisitor::Clone(AccessIdentifierExpression& node)
|
||||||
{
|
{
|
||||||
auto structExpr = CloneExpression(MandatoryExpr(node.structExpr));
|
auto structExpr = CloneExpression(MandatoryExpr(node.expr));
|
||||||
|
|
||||||
const ExpressionType& exprType = GetExpressionType(*structExpr);
|
const ExpressionType& exprType = GetExpressionType(*structExpr);
|
||||||
if (IsVectorType(exprType))
|
if (IsVectorType(exprType))
|
||||||
|
|
@ -177,9 +177,9 @@ namespace Nz::ShaderAst
|
||||||
return swizzle;
|
return swizzle;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transform to AccessMemberIndexExpression
|
// Transform to AccessIndexExpression
|
||||||
auto accessMemberIndex = std::make_unique<AccessMemberIndexExpression>();
|
auto accessMemberIndex = std::make_unique<AccessIndexExpression>();
|
||||||
accessMemberIndex->structExpr = std::move(structExpr);
|
accessMemberIndex->expr = std::move(structExpr);
|
||||||
|
|
||||||
StackArray<std::size_t> structIndices = NazaraStackArrayNoInit(std::size_t, node.memberIdentifiers.size());
|
StackArray<std::size_t> structIndices = NazaraStackArrayNoInit(std::size_t, node.memberIdentifiers.size());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -650,11 +650,11 @@ namespace Nz
|
||||||
Append(")");
|
Append(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlslWriter::Visit(ShaderAst::AccessMemberIndexExpression& node)
|
void GlslWriter::Visit(ShaderAst::AccessIndexExpression& node)
|
||||||
{
|
{
|
||||||
Visit(node.structExpr, true);
|
Visit(node.expr, true);
|
||||||
|
|
||||||
const ShaderAst::ExpressionType& exprType = GetExpressionType(*node.structExpr);
|
const ShaderAst::ExpressionType& exprType = GetExpressionType(*node.expr);
|
||||||
assert(IsStructType(exprType));
|
assert(IsStructType(exprType));
|
||||||
|
|
||||||
AppendField(std::get<ShaderAst::StructType>(exprType).structIndex, node.memberIndices.data(), node.memberIndices.size());
|
AppendField(std::get<ShaderAst::StructType>(exprType).structIndex, node.memberIndices.data(), node.memberIndices.size());
|
||||||
|
|
|
||||||
|
|
@ -438,11 +438,11 @@ namespace Nz
|
||||||
Append(")");
|
Append(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
void LangWriter::Visit(ShaderAst::AccessMemberIndexExpression& node)
|
void LangWriter::Visit(ShaderAst::AccessIndexExpression& node)
|
||||||
{
|
{
|
||||||
Visit(node.structExpr, true);
|
Visit(node.expr, true);
|
||||||
|
|
||||||
const ShaderAst::ExpressionType& exprType = GetExpressionType(*node.structExpr);
|
const ShaderAst::ExpressionType& exprType = GetExpressionType(*node.expr);
|
||||||
assert(IsStructType(exprType));
|
assert(IsStructType(exprType));
|
||||||
|
|
||||||
AppendField(std::get<ShaderAst::StructType>(exprType).structIndex, node.memberIndices.data(), node.memberIndices.size());
|
AppendField(std::get<ShaderAst::StructType>(exprType).structIndex, node.memberIndices.data(), node.memberIndices.size());
|
||||||
|
|
|
||||||
|
|
@ -816,8 +816,8 @@ namespace Nz::ShaderLang
|
||||||
|
|
||||||
if (currentOp.type == TokenType::Dot)
|
if (currentOp.type == TokenType::Dot)
|
||||||
{
|
{
|
||||||
std::unique_ptr<ShaderAst::AccessMemberIdentifierExpression> accessMemberNode = std::make_unique<ShaderAst::AccessMemberIdentifierExpression>();
|
std::unique_ptr<ShaderAst::AccessIdentifierExpression> accessMemberNode = std::make_unique<ShaderAst::AccessIdentifierExpression>();
|
||||||
accessMemberNode->structExpr = std::move(lhs);
|
accessMemberNode->expr = std::move(lhs);
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|
@ -833,7 +833,7 @@ namespace Nz::ShaderLang
|
||||||
if (Peek().type == TokenType::OpenParenthesis)
|
if (Peek().type == TokenType::OpenParenthesis)
|
||||||
{
|
{
|
||||||
auto parameters = ParseParameters();
|
auto parameters = ParseParameters();
|
||||||
parameters.insert(parameters.begin(), std::move(accessMemberNode->structExpr));
|
parameters.insert(parameters.begin(), std::move(accessMemberNode->expr));
|
||||||
|
|
||||||
lhs = ShaderBuilder::Intrinsic(ShaderAst::IntrinsicType::SampleTexture, std::move(parameters));
|
lhs = ShaderBuilder::Intrinsic(ShaderAst::IntrinsicType::SampleTexture, std::move(parameters));
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ namespace Nz
|
||||||
return *m_variables[varIndex];
|
return *m_variables[varIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpirvAstVisitor::Visit(ShaderAst::AccessMemberIndexExpression& node)
|
void SpirvAstVisitor::Visit(ShaderAst::AccessIndexExpression& node)
|
||||||
{
|
{
|
||||||
SpirvExpressionLoad accessMemberVisitor(m_writer, *this, *m_currentBlock);
|
SpirvExpressionLoad accessMemberVisitor(m_writer, *this, *m_currentBlock);
|
||||||
PushResultId(accessMemberVisitor.Evaluate(node));
|
PushResultId(accessMemberVisitor.Evaluate(node));
|
||||||
|
|
|
||||||
|
|
@ -40,9 +40,9 @@ namespace Nz
|
||||||
}, m_value);
|
}, m_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpirvExpressionLoad::Visit(ShaderAst::AccessMemberIndexExpression& node)
|
void SpirvExpressionLoad::Visit(ShaderAst::AccessIndexExpression& node)
|
||||||
{
|
{
|
||||||
node.structExpr->Visit(*this);
|
node.expr->Visit(*this);
|
||||||
|
|
||||||
const ShaderAst::ExpressionType& exprType = GetExpressionType(node);
|
const ShaderAst::ExpressionType& exprType = GetExpressionType(node);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,9 @@ namespace Nz
|
||||||
}, m_value);
|
}, m_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpirvExpressionStore::Visit(ShaderAst::AccessMemberIndexExpression& node)
|
void SpirvExpressionStore::Visit(ShaderAst::AccessIndexExpression& node)
|
||||||
{
|
{
|
||||||
node.structExpr->Visit(*this);
|
node.expr->Visit(*this);
|
||||||
|
|
||||||
const ShaderAst::ExpressionType& exprType = GetExpressionType(node);
|
const ShaderAst::ExpressionType& exprType = GetExpressionType(node);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ namespace Nz
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Visit(ShaderAst::AccessMemberIndexExpression& node) override
|
void Visit(ShaderAst::AccessIndexExpression& node) override
|
||||||
{
|
{
|
||||||
AstRecursiveVisitor::Visit(node);
|
AstRecursiveVisitor::Visit(node);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue