]> git.tdb.fi Git - libs/gl.git/commitdiff
Don't unresolve function declarations which were resolved previously
authorMikko Rasa <tdb@tdb.fi>
Sun, 17 Dec 2023 08:31:14 +0000 (10:31 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sun, 17 Dec 2023 08:34:12 +0000 (10:34 +0200)
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

index d89ac64205aeabbaa413cddd4f15e75086355669..c1771ea702ae07ab1ec59aa72bc0bb6b4e19bba9 100644 (file)
@@ -1326,7 +1326,7 @@ void FunctionResolver::visit(FunctionDeclaration &func)
        vector<FunctionDeclaration *> &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);