]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.cpp
Fixes for handling extended alignment in GLSL
[libs/gl.git] / source / glsl / generate.cpp
index ec51c19cdd9cc90472a0b2471eff915823fae0d7..3175c6c9f206fd0c64b4eb130dc461d6979865cb 100644 (file)
@@ -16,15 +16,23 @@ 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 = hash<32>(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())
                        i->value = id;
 
                used_ids.insert(id);
+               existing_constants[v->name] = id;
        }
 }
 
@@ -38,7 +46,10 @@ 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);
+                       }
                }
        }
 }