Fix location distribution not in order
This commit is contained in:
		
							parent
							
								
									1247baa678
								
							
						
					
					
						commit
						c24033afc3
					
				@ -1054,7 +1054,7 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    resolver->addStage(stage);
 | 
					    resolver->addStage(stage);
 | 
				
			||||||
    TVarLiveMap inVarMap, outVarMap, uniformVarMap;
 | 
					    TVarLiveMap inVarMap, outVarMap, uniformVarMap;
 | 
				
			||||||
    TVarLiveVector uniformVector;
 | 
					    TVarLiveVector inVector, outVector, uniformVector;
 | 
				
			||||||
    TVarGatherTraverser iter_binding_all(intermediate, true, inVarMap, outVarMap, uniformVarMap);
 | 
					    TVarGatherTraverser iter_binding_all(intermediate, true, inVarMap, outVarMap, uniformVarMap);
 | 
				
			||||||
    TVarGatherTraverser iter_binding_live(intermediate, false, inVarMap, outVarMap, uniformVarMap);
 | 
					    TVarGatherTraverser iter_binding_live(intermediate, false, inVarMap, outVarMap, uniformVarMap);
 | 
				
			||||||
    root->traverse(&iter_binding_all);
 | 
					    root->traverse(&iter_binding_all);
 | 
				
			||||||
@ -1065,6 +1065,16 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi
 | 
				
			|||||||
        function->traverse(&iter_binding_live);
 | 
					        function->traverse(&iter_binding_live);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
 | 
					    // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
 | 
				
			||||||
 | 
					    std::for_each(inVarMap.begin(), inVarMap.end(),
 | 
				
			||||||
 | 
					                  [&inVector](TVarLivePair p) { inVector.push_back(p); });
 | 
				
			||||||
 | 
					    std::sort(inVector.begin(), inVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
 | 
				
			||||||
 | 
					        return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    std::for_each(outVarMap.begin(), outVarMap.end(),
 | 
				
			||||||
 | 
					                  [&outVector](TVarLivePair p) { outVector.push_back(p); });
 | 
				
			||||||
 | 
					    std::sort(outVector.begin(), outVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
 | 
				
			||||||
 | 
					        return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    std::for_each(uniformVarMap.begin(), uniformVarMap.end(),
 | 
					    std::for_each(uniformVarMap.begin(), uniformVarMap.end(),
 | 
				
			||||||
                  [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); });
 | 
					                  [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); });
 | 
				
			||||||
    std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
 | 
					    std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
 | 
				
			||||||
@ -1076,13 +1086,23 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi
 | 
				
			|||||||
    TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError);
 | 
					    TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError);
 | 
				
			||||||
    TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError);
 | 
					    TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError);
 | 
				
			||||||
    resolver->beginNotifications(stage);
 | 
					    resolver->beginNotifications(stage);
 | 
				
			||||||
    std::for_each(inVarMap.begin(), inVarMap.end(), inOutNotify);
 | 
					    std::for_each(inVector.begin(), inVector.end(), inOutNotify);
 | 
				
			||||||
    std::for_each(outVarMap.begin(), outVarMap.end(), inOutNotify);
 | 
					    std::for_each(outVector.begin(), outVector.end(), inOutNotify);
 | 
				
			||||||
    std::for_each(uniformVector.begin(), uniformVector.end(), uniformNotify);
 | 
					    std::for_each(uniformVector.begin(), uniformVector.end(), uniformNotify);
 | 
				
			||||||
    resolver->endNotifications(stage);
 | 
					    resolver->endNotifications(stage);
 | 
				
			||||||
    resolver->beginResolve(stage);
 | 
					    resolver->beginResolve(stage);
 | 
				
			||||||
    std::for_each(inVarMap.begin(), inVarMap.end(), inOutResolve);
 | 
					    std::for_each(inVector.begin(), inVector.end(), inOutResolve);
 | 
				
			||||||
    std::for_each(outVarMap.begin(), outVarMap.end(), inOutResolve);
 | 
					    std::for_each(inVector.begin(), inVector.end(), [&inVarMap](TVarLivePair p) {
 | 
				
			||||||
 | 
					        auto at = inVarMap.find(p.second.symbol->getName());
 | 
				
			||||||
 | 
					        if (at != inVarMap.end())
 | 
				
			||||||
 | 
					            at->second = p.second;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    std::for_each(outVector.begin(), outVector.end(), inOutResolve);
 | 
				
			||||||
 | 
					    std::for_each(outVector.begin(), outVector.end(), [&outVarMap](TVarLivePair p) {
 | 
				
			||||||
 | 
					        auto at = outVarMap.find(p.second.symbol->getName());
 | 
				
			||||||
 | 
					        if (at != outVarMap.end())
 | 
				
			||||||
 | 
					            at->second = p.second;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve);
 | 
					    std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve);
 | 
				
			||||||
    std::for_each(uniformVector.begin(), uniformVector.end(), [&uniformVarMap](TVarLivePair p) {
 | 
					    std::for_each(uniformVector.begin(), uniformVector.end(), [&uniformVarMap](TVarLivePair p) {
 | 
				
			||||||
        auto at = uniformVarMap.find(p.second.symbol->getName());
 | 
					        auto at = uniformVarMap.find(p.second.symbol->getName());
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user