Fix iomapper issue
Use type name to index map to instead of use instance name to index map, or anonymous block will cause a map issue.
This commit is contained in:
		
							parent
							
								
									48bc10b79f
								
							
						
					
					
						commit
						615ae25891
					
				| @ -579,7 +579,10 @@ TDefaultGlslIoResolver::TDefaultGlslIoResolver(const TIntermediate& intermediate | |||||||
| 
 | 
 | ||||||
| int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) { | int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) { | ||||||
|     const TType& type = ent.symbol->getType(); |     const TType& type = ent.symbol->getType(); | ||||||
|     const TString& name = ent.symbol->getName(); |     const TString& name = IsAnonymous(ent.symbol->getName()) ? | ||||||
|  |                             ent.symbol->getType().getTypeName() | ||||||
|  |                             : | ||||||
|  |                             ent.symbol->getName(); | ||||||
|     if (currentStage != stage) { |     if (currentStage != stage) { | ||||||
|         preStage = currentStage; |         preStage = currentStage; | ||||||
|         currentStage = stage; |         currentStage = stage; | ||||||
| @ -663,7 +666,10 @@ int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInf | |||||||
| 
 | 
 | ||||||
| int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) { | int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) { | ||||||
|     const TType& type = ent.symbol->getType(); |     const TType& type = ent.symbol->getType(); | ||||||
|     const TString& name = ent.symbol->getName(); |     const TString& name = IsAnonymous(ent.symbol->getName()) ? | ||||||
|  |                             ent.symbol->getType().getTypeName() | ||||||
|  |                             : | ||||||
|  |                             ent.symbol->getName(); | ||||||
|     // kick out of not doing this
 |     // kick out of not doing this
 | ||||||
|     if (! doAutoLocationMapping()) { |     if (! doAutoLocationMapping()) { | ||||||
|         return ent.newLocation = -1; |         return ent.newLocation = -1; | ||||||
| @ -734,7 +740,10 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn | |||||||
| 
 | 
 | ||||||
| int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) { | int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) { | ||||||
|     const TType& type = ent.symbol->getType(); |     const TType& type = ent.symbol->getType(); | ||||||
|     const TString& name = ent.symbol->getName(); |     const TString& name = IsAnonymous(ent.symbol->getName()) ? | ||||||
|  |                             ent.symbol->getType().getTypeName() | ||||||
|  |                             : | ||||||
|  |                             ent.symbol->getName(); | ||||||
|     // On OpenGL arrays of opaque types take a seperate binding for each element
 |     // On OpenGL arrays of opaque types take a seperate binding for each element
 | ||||||
|     int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; |     int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; | ||||||
|     TResourceType resource = getResourceType(type); |     TResourceType resource = getResourceType(type); | ||||||
| @ -809,7 +818,10 @@ void TDefaultGlslIoResolver::endCollect(EShLanguage /*stage*/) { | |||||||
| 
 | 
 | ||||||
| void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { | void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { | ||||||
|     const TType& type = ent.symbol->getType(); |     const TType& type = ent.symbol->getType(); | ||||||
|     const TString& name = ent.symbol->getName(); |     const TString& name = IsAnonymous(ent.symbol->getName()) ? | ||||||
|  |                             ent.symbol->getType().getTypeName() | ||||||
|  |                             : | ||||||
|  |                             ent.symbol->getName(); | ||||||
|     TStorageQualifier storage = type.getQualifier().storage; |     TStorageQualifier storage = type.getQualifier().storage; | ||||||
|     EShLanguage stage(EShLangCount); |     EShLanguage stage(EShLangCount); | ||||||
|     switch (storage) { |     switch (storage) { | ||||||
| @ -869,7 +881,10 @@ void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& | |||||||
| 
 | 
 | ||||||
| void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { | void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { | ||||||
|     const TType& type = ent.symbol->getType(); |     const TType& type = ent.symbol->getType(); | ||||||
|     const TString& name = ent.symbol->getName(); |     const TString& name = IsAnonymous(ent.symbol->getName()) ? | ||||||
|  |                             ent.symbol->getType().getTypeName() | ||||||
|  |                             : | ||||||
|  |                             ent.symbol->getName(); | ||||||
|     int resource = getResourceType(type); |     int resource = getResourceType(type); | ||||||
|     if (type.getQualifier().hasBinding()) { |     if (type.getQualifier().hasBinding()) { | ||||||
|         TVarSlotMap& varSlotMap = resourceSlotMap[resource]; |         TVarSlotMap& varSlotMap = resourceSlotMap[resource]; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Roy.li
						Roy.li