]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.cpp
Assign the same specialization constant IDs in all stages
[libs/gl.git] / source / glsl / generate.cpp
index ec51c19cdd9cc90472a0b2471eff915823fae0d7..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,7 +45,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);
+                       }
                }
        }
 }