@@ -393,7 +393,7 @@ class OutputSPIRVTraverser : public TIntermTraverser
393393 // - TVariable, or
394394 // - TInterfaceBlock: because TIntermSymbols referencing a field of an unnamed interface block
395395 // don't reference the TVariable that defines the struct, but the TInterfaceBlock itself.
396- angle::HashMap<const TSymbol * , spirv::IdRef> mSymbolIdMap ;
396+ angle::HashMap<TSymbolUniqueId , spirv::IdRef> mSymbolIdMap ;
397397
398398 // A map of TFunction to its various SPIR-V ids.
399399 angle::HashMap<const TFunction *, FunctionIds> mFunctionIdMap ;
@@ -544,7 +544,7 @@ spirv::IdRef OutputSPIRVTraverser::getSymbolIdAndStorageClass(const TSymbol *sym
544544 spv::StorageClass *storageClass)
545545{
546546 *storageClass = GetStorageClass (mCompileOptions , type, mCompiler ->getShaderType ());
547- auto iter = mSymbolIdMap .find (symbol);
547+ auto iter = mSymbolIdMap .find (symbol-> uniqueId () );
548548 if (iter != mSymbolIdMap .end ())
549549 {
550550 return iter->second ;
@@ -761,7 +761,7 @@ spirv::IdRef OutputSPIRVTraverser::getSymbolIdAndStorageClass(const TSymbol *sym
761761 break ;
762762 }
763763
764- mSymbolIdMap .insert ({symbol, varId});
764+ mSymbolIdMap .insert ({symbol-> uniqueId () , varId});
765765 return varId;
766766}
767767
@@ -1233,8 +1233,8 @@ void OutputSPIRVTraverser::declareConst(TIntermDeclaration *decl)
12331233 initializer->isConstantNullValue ());
12341234
12351235 // Remember the id of the variable for future look up.
1236- ASSERT (mSymbolIdMap .count (variable) == 0 );
1237- mSymbolIdMap [ variable] = constId;
1236+ ASSERT (mSymbolIdMap .count (variable-> uniqueId () ) == 0 );
1237+ mSymbolIdMap . emplace ( variable-> uniqueId (), constId) ;
12381238
12391239 if (!mInGlobalScope )
12401240 {
@@ -1267,8 +1267,8 @@ void OutputSPIRVTraverser::declareSpecConst(TIntermDeclaration *decl)
12671267 type.getBasicType (), type.getLayoutQualifier ().location , mBuilder .getName (variable).data ());
12681268
12691269 // Remember the id of the variable for future look up.
1270- ASSERT (mSymbolIdMap .count (variable) == 0 );
1271- mSymbolIdMap [ variable] = specConstId;
1270+ ASSERT (mSymbolIdMap .count (variable-> uniqueId () ) == 0 );
1271+ mSymbolIdMap . emplace ( variable-> uniqueId (), specConstId) ;
12721272}
12731273
12741274spirv::IdRef OutputSPIRVTraverser::createConstant (const TType &type,
@@ -4980,8 +4980,8 @@ void OutputSPIRVTraverser::visitSymbol(TIntermSymbol *node)
49804980 type.getQualifier () == EvqSpecConst)
49814981 {
49824982 ASSERT (interfaceBlock == nullptr );
4983- ASSERT (mSymbolIdMap .count (symbol) > 0 );
4984- nodeDataInitRValue (&mNodeData .back (), mSymbolIdMap [symbol], typeId);
4983+ ASSERT (mSymbolIdMap .count (symbol-> uniqueId () ) > 0 );
4984+ nodeDataInitRValue (&mNodeData .back (), mSymbolIdMap [symbol-> uniqueId () ], typeId);
49854985 return ;
49864986 }
49874987
@@ -5780,8 +5780,8 @@ bool OutputSPIRVTraverser::visitFunctionDefinition(Visit visit, TIntermFunctionD
57805780 ids.parameterTypeIds [paramIndex], paramId);
57815781
57825782 // Remember the id of the variable for future look up.
5783- ASSERT (mSymbolIdMap .count (paramVariable) == 0 );
5784- mSymbolIdMap [ paramVariable] = paramId;
5783+ ASSERT (mSymbolIdMap .count (paramVariable-> uniqueId () ) == 0 );
5784+ mSymbolIdMap . emplace ( paramVariable-> uniqueId (), paramId) ;
57855785
57865786 mBuilder .writeDebugName (paramId, mBuilder .getName (paramVariable).data ());
57875787 }
@@ -5881,9 +5881,9 @@ bool OutputSPIRVTraverser::visitGlobalQualifierDeclaration(Visit visit,
58815881 ASSERT (node->isInvariant ());
58825882
58835883 const TVariable *variable = &node->getSymbol ()->variable ();
5884- ASSERT (mSymbolIdMap .count (variable) > 0 );
5884+ ASSERT (mSymbolIdMap .count (variable-> uniqueId () ) > 0 );
58855885
5886- const spirv::IdRef variableId = mSymbolIdMap [variable];
5886+ const spirv::IdRef variableId = mSymbolIdMap [variable-> uniqueId () ];
58875887
58885888 spirv::WriteDecorate (mBuilder .getSpirvDecorations (), variableId, spv::DecorationInvariant, {});
58895889
@@ -6345,13 +6345,13 @@ bool OutputSPIRVTraverser::visitDeclaration(Visit visit, TIntermDeclaration *nod
63456345
63466346 // Remember the id of the variable for future look up. For interface blocks, also remember the
63476347 // id of the interface block.
6348- ASSERT (mSymbolIdMap .count (variable) == 0 );
6349- mSymbolIdMap [ variable] = variableId;
6348+ ASSERT (mSymbolIdMap .count (variable-> uniqueId () ) == 0 );
6349+ mSymbolIdMap . emplace ( variable-> uniqueId (), variableId) ;
63506350
63516351 if (type.isInterfaceBlock ())
63526352 {
6353- ASSERT (mSymbolIdMap .count (type.getInterfaceBlock ()) == 0 );
6354- mSymbolIdMap [ type.getInterfaceBlock ()] = variableId;
6353+ ASSERT (mSymbolIdMap .count (type.getInterfaceBlock ()-> uniqueId () ) == 0 );
6354+ mSymbolIdMap . emplace ( type.getInterfaceBlock ()-> uniqueId (), variableId) ;
63556355 }
63566356
63576357 return false ;
0 commit comments