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;
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;
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);
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) {
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];
}
}
+TString& TDefaultGlslIoResolver::getAccessName(const TIntermSymbol* symbol)
+{
+ TString name;
+ if (symbol->getBasicType() == EbtBlock) {
+ name = symbol->getType().getTypeName();
+ } else {
+ name = symbol->getName();
+ }
+ return name;
+}
+
//TDefaultGlslIoResolver end
/*
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.