Implement support for CHROMIUM_bind_uniform_location.
BUG=angleproject:1353
Change-Id: Ia219ff973de0de2f8e112c276b3ab6319f7d3884
Reviewed-on: https://chromium-review.googlesource.com/334252
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/gl/ProgramGL.cpp b/src/libANGLE/renderer/gl/ProgramGL.cpp
index 71d73fd..6a2bc44 100644
--- a/src/libANGLE/renderer/gl/ProgramGL.cpp
+++ b/src/libANGLE/renderer/gl/ProgramGL.cpp
@@ -157,9 +157,17 @@
// Query the uniform information
ASSERT(mUniformRealLocationMap.empty());
+ const auto &uniformLocations = mData.getUniformLocations();
const auto &uniforms = mData.getUniforms();
- for (const gl::VariableLocation &entry : mData.getUniformLocations())
+ mUniformRealLocationMap.resize(uniformLocations.size(), GL_INVALID_INDEX);
+ for (size_t uniformLocation = 0; uniformLocation < uniformLocations.size(); uniformLocation++)
{
+ const auto &entry = uniformLocations[uniformLocation];
+ if (!entry.used)
+ {
+ continue;
+ }
+
// From the spec:
// "Locations for sequential array indices are not required to be sequential."
const gl::LinkedUniform &uniform = uniforms[entry.index];
@@ -172,7 +180,7 @@
const std::string &fullName = fullNameStr.str();
GLint realLocation = mFunctions->getUniformLocation(mProgramID, fullName.c_str());
- mUniformRealLocationMap.push_back(realLocation);
+ mUniformRealLocationMap[uniformLocation] = realLocation;
}
mUniformIndexToSamplerIndex.resize(mData.getUniforms().size(), GL_INVALID_INDEX);