From c1cef2ceba2b24bba19652c890454033d90d6695 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 17 Dec 2023 10:31:14 +0200 Subject: [PATCH] Don't unresolve function declarations which were resolved previously Even if they get resolved again to the same definition, it causes the any_resolved flag to be set, triggering superfluous additional resolve passes. --- source/glsl/resolve.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source/glsl/resolve.cpp b/source/glsl/resolve.cpp index d89ac642..c1771ea7 100644 --- a/source/glsl/resolve.cpp +++ b/source/glsl/resolve.cpp @@ -1326,7 +1326,7 @@ void FunctionResolver::visit(FunctionDeclaration &func) vector &decls = declarations[key]; if(func.definition==&func) { - if(stage_decl && stage_decl->definition) + if(stage_decl && stage_decl->definition && stage_decl->definition!=&func) { if(!func.overrd) stage->diagnostics.push_back(Diagnostic(Diagnostic::WARN, func.source, func.line, @@ -1345,15 +1345,13 @@ void FunctionResolver::visit(FunctionDeclaration &func) f->body.body.clear(); } } - else + else if(stage_decl) { - FunctionDeclaration *definition = (stage_decl ? stage_decl->definition : nullptr); - r_any_resolved |= (definition!=func.definition); - func.definition = definition; - - if(!stage_decl) - stage_decl = &func; + r_any_resolved |= (stage_decl->definition!=func.definition); + func.definition = stage_decl->definition; } + else + stage_decl = &func; decls.push_back(&func); TraversingVisitor::visit(func); -- 2.45.2