Fix nested uniforms in interface blocks to have the proper API-visible names.
TRAC #22856
Signed-off-by: Geoff Lang
Signed-off-by: Shannon Woods
Authored-by: Jamie Madill
diff --git a/src/libGLESv2/ProgramBinary.cpp b/src/libGLESv2/ProgramBinary.cpp
index 7ce0783..c424acd 100644
--- a/src/libGLESv2/ProgramBinary.cpp
+++ b/src/libGLESv2/ProgramBinary.cpp
@@ -2398,6 +2398,7 @@
for (unsigned int uniformIndex = 0; uniformIndex < uniforms.size(); uniformIndex++)
{
const sh::Uniform &uniform = uniforms[uniformIndex];
+ const std::string &uniformName = (prefix.empty() ? uniform.name : prefix + "." + uniform.name);
if (!uniform.fields.empty())
{
@@ -2405,18 +2406,17 @@
{
for (unsigned int arrayElement = 0; arrayElement < uniform.arraySize; arrayElement++)
{
- const std::string uniformElementName = uniform.name + arrayString(arrayElement);
+ const std::string uniformElementName = uniformName + arrayString(arrayElement);
defineUniformBlockMembers(uniform.fields, uniformElementName, blockIndex, blockInfoItr, blockUniformIndexes);
}
}
else
{
- defineUniformBlockMembers(uniform.fields, uniform.name, blockIndex, blockInfoItr, blockUniformIndexes);
+ defineUniformBlockMembers(uniform.fields, uniformName, blockIndex, blockInfoItr, blockUniformIndexes);
}
}
else
{
- const std::string &uniformName = (prefix.empty() ? uniform.name : prefix + "." + uniform.name);
Uniform *newUniform = new Uniform(uniform.type, uniform.precision, uniformName, uniform.arraySize,
blockIndex, **blockInfoItr);