From 85ce6a4f43422abbefd42b7659cd8ace0737c1bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Wed, 14 Apr 2021 20:10:39 +0200 Subject: [PATCH] Shader: Fix struct nesting --- src/Nazara/Shader/Ast/TransformVisitor.cpp | 3 +++ src/Nazara/Shader/ShaderAstValidator.cpp | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Nazara/Shader/Ast/TransformVisitor.cpp b/src/Nazara/Shader/Ast/TransformVisitor.cpp index 14f127697..5e8e660ab 100644 --- a/src/Nazara/Shader/Ast/TransformVisitor.cpp +++ b/src/Nazara/Shader/Ast/TransformVisitor.cpp @@ -127,6 +127,9 @@ namespace Nz::ShaderAst void TransformVisitor::Visit(DeclareStructStatement& node) { + for (auto& member : node.description.members) + member.type = ResolveType(member.type); + node.structIndex = RegisterStruct(node.description.name, node.description); AstCloner::Visit(node); diff --git a/src/Nazara/Shader/ShaderAstValidator.cpp b/src/Nazara/Shader/ShaderAstValidator.cpp index c979ff4b0..d83e0dbce 100644 --- a/src/Nazara/Shader/ShaderAstValidator.cpp +++ b/src/Nazara/Shader/ShaderAstValidator.cpp @@ -589,7 +589,15 @@ namespace Nz::ShaderAst { assert(m_context); - //TODO: check members attributes + std::unordered_set declaredMembers; + + for (auto& member : node.description.members) + { + if (declaredMembers.find(member.name) != declaredMembers.end()) + throw AstError{ "struct member " + member.name + " found multiple time" }; + + declaredMembers.insert(member.name); + } AstScopedVisitor::Visit(node); }