Don't allocate name strings for empty symbols
This removes unnecessary memory allocations.
BUG=angleproject:2267
TEST=angle_unittests
Change-Id: Ide575ea19ab2f8e9fc93092490f1352efa6024a3
Reviewed-on: https://chromium-review.googlesource.com/817415
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/translator/CollectVariables.cpp b/src/compiler/translator/CollectVariables.cpp
index b98c9a9..b7136f2 100644
--- a/src/compiler/translator/CollectVariables.cpp
+++ b/src/compiler/translator/CollectVariables.cpp
@@ -91,7 +91,8 @@
std::vector<InterfaceBlock> *infoList)
{
ASSERT(interfaceBlock);
- InterfaceBlock *namedBlock = FindVariable(interfaceBlock->name(), infoList);
+ ASSERT(interfaceBlock->name());
+ InterfaceBlock *namedBlock = FindVariable(*interfaceBlock->name(), infoList);
ASSERT(namedBlock);
// Set static use on the parent interface block here
@@ -569,7 +570,10 @@
{
// Structures use a NONE type that isn't exposed outside ANGLE.
variableOut->type = GL_NONE;
- variableOut->structName = structure->name().c_str();
+ if (structure->symbolType() != SymbolType::Empty)
+ {
+ variableOut->structName = structure->name()->c_str();
+ }
const TFieldList &fields = structure->fields();
@@ -578,7 +582,7 @@
// Regardless of the variable type (uniform, in/out etc.) its fields are always plain
// ShaderVariable objects.
ShaderVariable fieldVariable;
- setCommonVariableProperties(*field->type(), TName(field->name()), &fieldVariable);
+ setCommonVariableProperties(*field->type(), TName(&field->name()), &fieldVariable);
variableOut->fields.push_back(fieldVariable);
}
}
@@ -657,7 +661,7 @@
const TInterfaceBlock *blockType = interfaceBlockType.getInterfaceBlock();
ASSERT(blockType);
- interfaceBlock->name = blockType->name().c_str();
+ interfaceBlock->name = blockType->name()->c_str();
interfaceBlock->mappedName = getMappedName(TName(blockType->name()));
interfaceBlock->instanceName = instanceName.c_str();
ASSERT(!interfaceBlockType.isArrayOfArrays()); // Disallowed by GLSL ES 3.10 section 4.3.9
@@ -679,7 +683,7 @@
const TType &fieldType = *field->type();
InterfaceBlockField fieldVariable;
- setCommonVariableProperties(fieldType, TName(field->name()), &fieldVariable);
+ setCommonVariableProperties(fieldType, TName(&field->name()), &fieldVariable);
fieldVariable.isRowMajorLayout =
(fieldType.getLayoutQualifier().matrixPacking == EmpRowMajor);
interfaceBlock->fields.push_back(fieldVariable);
@@ -825,7 +829,7 @@
const TInterfaceBlock *interfaceBlock = blockNode->getType().getInterfaceBlock();
if (!namedBlock)
{
- namedBlock = findNamedInterfaceBlock(interfaceBlock->name());
+ namedBlock = findNamedInterfaceBlock(*interfaceBlock->name());
}
ASSERT(namedBlock);
namedBlock->staticUse = true;