]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/finalize.cpp
Propagate locations from existing variables before optimization
[libs/gl.git] / source / glsl / finalize.cpp
index 7eb0165dc5b82156d6a71caca7953508ad74aa33..cb304aa31d6b979efab1d9e3f63659be10334e3d 100644 (file)
@@ -62,8 +62,9 @@ void StructOrganizer::visit(VariableDeclaration &var)
 }
 
 
-void LocationAllocator::apply(Module &module, const Features &features)
+void LocationAllocator::apply(Module &module, const Features &features, bool a)
 {
+       alloc_new = a;
        for(Stage &s: module.stages)
                apply(s);
 
@@ -111,6 +112,9 @@ void LocationAllocator::allocate_locations(const string &iface)
                        }
                }
 
+               if(!alloc_new)
+                       continue;
+
                set<unsigned> &used = used_locations[(*i)->interface];
 
                unsigned size = LocationCounter().apply(**i);
@@ -142,7 +146,7 @@ void LocationAllocator::bind_uniform(RefPtr<Layout> &layout, const string &name,
        auto i = uniforms.find(name);
        if(i!=uniforms.end() && i->second.bind_point>=0)
                add_layout_qualifier(layout, Layout::Qualifier("binding", i->second.bind_point));
-       else
+       else if(alloc_new)
        {
                set<unsigned> &used = used_bindings[0];