X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fgenerate.cpp;h=3175c6c9f206fd0c64b4eb130dc461d6979865cb;hb=4ecc965177df174ed2d26cfedf24665c8879acda;hp=ec51c19cdd9cc90472a0b2471eff915823fae0d7;hpb=38712d8ecc57d043a2419ffbaeeb57f7a6586f14;p=libs%2Fgl.git diff --git a/source/glsl/generate.cpp b/source/glsl/generate.cpp index ec51c19c..3175c6c9 100644 --- a/source/glsl/generate.cpp +++ b/source/glsl/generate.cpp @@ -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); + } } } }