]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.cpp
Fix a name conflict in certain inlining scenarios
[libs/gl.git] / source / glsl / generate.cpp
index a17f7fb502a9e751eb17fe92f4b5d8c2ea383add..c82d1c6c58e4a59ef025fa3cf3f13c80b580342c 100644 (file)
@@ -16,9 +16,16 @@ void ConstantIdAssigner::apply(Module &module, const Features &features)
 
        for(VariableDeclaration *v: auto_constants)
        {
-               unsigned id = hash32(v->name)%features.constant_id_range;
-               while(used_ids.count(id))
-                       id = (id+1)%features.constant_id_range;
+               unsigned id;
+               auto j = existing_constants.find(v->name);
+               if(j!=existing_constants.end())
+                       id = j->second;
+               else
+               {
+                       id = hash32(v->name)%features.constant_id_range;
+                       while(used_ids.count(id))
+                               id = (id+1)%features.constant_id_range;
+               }
 
                auto i = find_member(v->layout->qualifiers, string("constant_id"), &Layout::Qualifier::name);
                if(i!=v->layout->qualifiers.end())
@@ -38,19 +45,15 @@ void ConstantIdAssigner::visit(VariableDeclaration &var)
                        if(i->value==-1)
                                auto_constants.push_back(&var);
                        else
+                       {
+                               existing_constants[var.name] = i->value;
                                used_ids.insert(i->value);
+                       }
                }
        }
 }
 
 
-InterfaceGenerator::InterfaceGenerator():
-       stage(0),
-       function_scope(false),
-       copy_block(false),
-       iface_target_block(0)
-{ }
-
 string InterfaceGenerator::get_out_prefix(Stage::Type type)
 {
        if(type==Stage::VERTEX)