Commit defe3937 by Olli Etuaho Committed by Commit Bot

Store invariant varying names as ImmutableString

This gets rid of a few extra ImmutableString to std::string conversions which makes the code clearer. There doesn't seem to be any significant effect on performance. BUG=angleproject:2267 TEST=angle_unittests Change-Id: I36ebbc8a4130ab8f9d6194feca83ec5dcbc95f78 Reviewed-on: https://chromium-review.googlesource.com/916141Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent bf107be4
...@@ -284,7 +284,7 @@ void CollectVariablesTraverser::recordBuiltInVaryingUsed(const ImmutableString & ...@@ -284,7 +284,7 @@ void CollectVariablesTraverser::recordBuiltInVaryingUsed(const ImmutableString &
Varying info; Varying info;
setBuiltInInfoFromSymbolTable(name, &info); setBuiltInInfoFromSymbolTable(name, &info);
info.staticUse = true; info.staticUse = true;
info.isInvariant = mSymbolTable->isVaryingInvariant(name.data()); info.isInvariant = mSymbolTable->isVaryingInvariant(name);
varyings->push_back(info); varyings->push_back(info);
(*addedFlag) = true; (*addedFlag) = true;
} }
...@@ -677,7 +677,7 @@ Varying CollectVariablesTraverser::recordVarying(const TIntermSymbol &variable) ...@@ -677,7 +677,7 @@ Varying CollectVariablesTraverser::recordVarying(const TIntermSymbol &variable)
case EvqFlatOut: case EvqFlatOut:
case EvqCentroidOut: case EvqCentroidOut:
case EvqGeometryOut: case EvqGeometryOut:
if (mSymbolTable->isVaryingInvariant(varying.name) || type.isInvariant()) if (mSymbolTable->isVaryingInvariant(variable.getName()) || type.isInvariant())
{ {
varying.isInvariant = true; varying.isInvariant = true;
} }
......
...@@ -2639,7 +2639,7 @@ TIntermInvariantDeclaration *TParseContext::parseInvariantDeclaration( ...@@ -2639,7 +2639,7 @@ TIntermInvariantDeclaration *TParseContext::parseInvariantDeclaration(
typeQualifier.line); typeQualifier.line);
checkMemoryQualifierIsNotSpecified(typeQualifier.memoryQualifier, typeQualifier.line); checkMemoryQualifierIsNotSpecified(typeQualifier.memoryQualifier, typeQualifier.line);
symbolTable.addInvariantVarying(std::string(identifier.data())); symbolTable.addInvariantVarying(identifier);
TIntermSymbol *intermSymbol = new TIntermSymbol(variable); TIntermSymbol *intermSymbol = new TIntermSymbol(variable);
intermSymbol->setLine(identifierLoc); intermSymbol->setLine(identifierLoc);
......
...@@ -36,9 +36,9 @@ class TSymbolTable::TSymbolTableLevel ...@@ -36,9 +36,9 @@ class TSymbolTable::TSymbolTableLevel
TSymbol *find(const ImmutableString &name) const; TSymbol *find(const ImmutableString &name) const;
void addInvariantVarying(const std::string &name) { mInvariantVaryings.insert(name); } void addInvariantVarying(const ImmutableString &name) { mInvariantVaryings.insert(name); }
bool isVaryingInvariant(const std::string &name) bool isVaryingInvariant(const ImmutableString &name)
{ {
return (mGlobalInvariant || mInvariantVaryings.count(name) > 0); return (mGlobalInvariant || mInvariantVaryings.count(name) > 0);
} }
...@@ -54,7 +54,7 @@ class TSymbolTable::TSymbolTableLevel ...@@ -54,7 +54,7 @@ class TSymbolTable::TSymbolTableLevel
tLevel level; tLevel level;
std::set<std::string> mInvariantVaryings; std::set<ImmutableString> mInvariantVaryings;
bool mGlobalInvariant; bool mGlobalInvariant;
}; };
...@@ -717,13 +717,13 @@ TPrecision TSymbolTable::getDefaultPrecision(TBasicType type) const ...@@ -717,13 +717,13 @@ TPrecision TSymbolTable::getDefaultPrecision(TBasicType type) const
return prec; return prec;
} }
void TSymbolTable::addInvariantVarying(const std::string &originalName) void TSymbolTable::addInvariantVarying(const ImmutableString &originalName)
{ {
ASSERT(atGlobalLevel()); ASSERT(atGlobalLevel());
mTable.back()->addInvariantVarying(originalName); mTable.back()->addInvariantVarying(originalName);
} }
bool TSymbolTable::isVaryingInvariant(const std::string &originalName) const bool TSymbolTable::isVaryingInvariant(const ImmutableString &originalName) const
{ {
ASSERT(atGlobalLevel()); ASSERT(atGlobalLevel());
return mTable.back()->isVaryingInvariant(originalName); return mTable.back()->isVaryingInvariant(originalName);
......
...@@ -113,13 +113,13 @@ class TSymbolTable : angle::NonCopyable ...@@ -113,13 +113,13 @@ class TSymbolTable : angle::NonCopyable
// This records invariant varyings declared through // This records invariant varyings declared through
// "invariant varying_name;". // "invariant varying_name;".
void addInvariantVarying(const std::string &originalName); void addInvariantVarying(const ImmutableString &originalName);
// If this returns false, the varying could still be invariant // If this returns false, the varying could still be invariant
// if it is set as invariant during the varying variable // if it is set as invariant during the varying variable
// declaration - this piece of information is stored in the // declaration - this piece of information is stored in the
// variable's type, not here. // variable's type, not here.
bool isVaryingInvariant(const std::string &originalName) const; bool isVaryingInvariant(const ImmutableString &originalName) const;
void setGlobalInvariant(bool invariant); void setGlobalInvariant(bool invariant);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment