]> git.tdb.fi Git - libs/gl.git/commitdiff
Avoid collisions with members of nameless interface blocks when inlining
authorMikko Rasa <tdb@tdb.fi>
Sat, 4 Dec 2021 00:12:14 +0000 (02:12 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sat, 4 Dec 2021 00:12:14 +0000 (02:12 +0200)
source/glsl/optimize.cpp

index 1b9b41de20e07a63ff38cb7e6f984d7311df9664..6e4b56771fa3222ce778a53d37b828b5d34554cf 100644 (file)
@@ -115,12 +115,16 @@ string InlineContentInjector::apply(Stage &stage, FunctionDeclaration &target_fu
 
        /* Populate referenced_names from the target function so we can rename
        variables from the inlined function that would conflict.  Only consider
-       names which declared in blocks linearly related to the target block. */
+       names declared in blocks linearly related to the target block. */
        pass = REFERENCED;
        tgt_blk.visit(*this);
        for(const Block *b=&tgt_blk; b; b=b->parent)
                for(const auto &kvp: b->variables)
                        referenced_names.insert(kvp.first);
+       for(const auto &kvp: stage.interface_blocks)
+               if(kvp.second->name.find(' ')!=string::npos)
+                       for(const auto &kvp2: kvp.second->block_declaration->members.variables)
+                               referenced_names.insert(kvp2.first);
 
        /* Inline and rename passes must be interleaved so used variable names are
        known when inlining the return statement. */