From 7a6a043578f3b7e1ca7557a53f548ec09640d54f Mon Sep 17 00:00:00 2001 From: "Roy.li" Date: Tue, 19 May 2020 19:21:41 +0800 Subject: [PATCH] Code refine. --- glslang/MachineIndependent/iomapper.cpp | 36 +++++++++++-------------- glslang/MachineIndependent/iomapper.h | 1 + 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 9dc1da2c9e..921a5eb664 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -579,10 +579,7 @@ TDefaultGlslIoResolver::TDefaultGlslIoResolver(const TIntermediate& intermediate int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); - const TString& name = IsAnonymous(ent.symbol->getName()) ? - ent.symbol->getType().getTypeName() - : - ent.symbol->getName(); + TString& name = getAccessName(ent.symbol); if (currentStage != stage) { preStage = currentStage; currentStage = stage; @@ -666,10 +663,7 @@ int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInf int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); - const TString& name = IsAnonymous(ent.symbol->getName()) ? - ent.symbol->getType().getTypeName() - : - ent.symbol->getName(); + TString& name = getAccessName(ent.symbol); // kick out of not doing this if (! doAutoLocationMapping()) { return ent.newLocation = -1; @@ -740,10 +734,7 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); - const TString& name = IsAnonymous(ent.symbol->getName()) ? - ent.symbol->getType().getTypeName() - : - ent.symbol->getName(); + TString& name = getAccessName(ent.symbol); // On OpenGL arrays of opaque types take a seperate binding for each element int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; TResourceType resource = getResourceType(type); @@ -818,10 +809,7 @@ void TDefaultGlslIoResolver::endCollect(EShLanguage /*stage*/) { void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { const TType& type = ent.symbol->getType(); - const TString& name = IsAnonymous(ent.symbol->getName()) ? - ent.symbol->getType().getTypeName() - : - ent.symbol->getName(); + TString& name = getAccessName(ent.symbol); TStorageQualifier storage = type.getQualifier().storage; EShLanguage stage(EShLangCount); switch (storage) { @@ -881,10 +869,7 @@ void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { const TType& type = ent.symbol->getType(); - const TString& name = IsAnonymous(ent.symbol->getName()) ? - ent.symbol->getType().getTypeName() - : - ent.symbol->getName(); + TString& name = getAccessName(ent.symbol); int resource = getResourceType(type); if (type.getQualifier().hasBinding()) { TVarSlotMap& varSlotMap = resourceSlotMap[resource]; @@ -907,6 +892,17 @@ void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& } } +TString& TDefaultGlslIoResolver::getAccessName(const TIntermSymbol* symbol) +{ + TString name; + if (symbol->getBasicType() == EbtBlock) { + name = symbol->getType().getTypeName(); + } else { + name = symbol->getName(); + } + return name; +} + //TDefaultGlslIoResolver end /* diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index a6f2480cab..d8aeddb665 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -203,6 +203,7 @@ struct TDefaultGlslIoResolver : public TDefaultIoResolverBase { void endCollect(EShLanguage) override; void reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override; void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override; + TString& getAccessName(const TIntermSymbol*); // in/out symbol and uniform symbol are stored in the same resourceSlotMap, the storage key is used to identify each type of symbol. // We use stage and storage qualifier to construct a storage key. it can help us identify the same storage resource used in different stage. // if a resource is a program resource and we don't need know it usage stage, we can use same stage to build storage key.