- vector<Layout::Qualifier> &qualifiers = var.layout->qualifiers;
- for(vector<Layout::Qualifier>::iterator i=qualifiers.begin(); i!=qualifiers.end(); ++i)
- if(i->name=="constant_id")
- {
- specializable = true;
- if(values)
- qualifiers.erase(i);
- else if(i->value==-1)
- i->value = hash32(var.name)&0x7FFFFFFF;
- break;
- }
+ 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())
+ i->value = id;