Tracking uniform ownership

This is a prerequisite change for the upcoming sample(child, matrix)
function. By itself, this CL doesn't really change anything; it just
adds an ownership tracking feature which sample(child, matrix) depends
on.

Change-Id: I98b12e5fb062a2535af367931e7a932ea9c63a59
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/281337
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/gpu/gl/GrGLUniformHandler.cpp b/src/gpu/gl/GrGLUniformHandler.cpp
index 4a3b564..396a9ac 100644
--- a/src/gpu/gl/GrGLUniformHandler.cpp
+++ b/src/gpu/gl/GrGLUniformHandler.cpp
@@ -25,12 +25,13 @@
 }
 
 GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray(
-                                                                            uint32_t visibility,
-                                                                            GrSLType type,
-                                                                            const char* name,
-                                                                            bool mangleName,
-                                                                            int arrayCount,
-                                                                            const char** outName) {
+                                                                   const GrFragmentProcessor* owner,
+                                                                   uint32_t visibility,
+                                                                   GrSLType type,
+                                                                   const char* name,
+                                                                   bool mangleName,
+                                                                   int arrayCount,
+                                                                   const char** outName) {
     SkASSERT(name && strlen(name));
     SkASSERT(valid_name(name));
     SkASSERT(0 != visibility);
@@ -47,10 +48,13 @@
         prefix = '\0';
     }
     fProgramBuilder->nameVariable(&resolvedName, prefix, name, mangleName);
-
-    UniformInfo& uni = fUniforms.push_back(GrGLProgramDataManager::UniformInfo{
-        GrShaderVar{std::move(resolvedName), type, GrShaderVar::TypeModifier::Uniform, arrayCount},
-        visibility, -1
+    GLUniformInfo& uni = fUniforms.push_back(GrGLProgramDataManager::GLUniformInfo{
+        {
+            GrShaderVar{std::move(resolvedName), type, GrShaderVar::TypeModifier::Uniform,
+                        arrayCount},
+            visibility, owner, SkString(name)
+        },
+        -1
     });
 
     if (outName) {
@@ -70,11 +74,13 @@
 
     GrTextureType type = backendFormat.textureType();
 
-    fSamplers.push_back(GrGLProgramDataManager::UniformInfo{
-        GrShaderVar{std::move(mangleName),
-                    GrSLCombinedSamplerTypeForTextureType(type),
-                    GrShaderVar::TypeModifier::Uniform},
-        kFragment_GrShaderFlag, -1
+    fSamplers.push_back(GrGLProgramDataManager::GLUniformInfo{
+        {
+            GrShaderVar{std::move(mangleName), GrSLCombinedSamplerTypeForTextureType(type),
+                          GrShaderVar::TypeModifier::Uniform},
+            kFragment_GrShaderFlag, nullptr, SkString(name)
+        },
+        -1
     });
 
     if (shaderCaps->textureSwizzleAppliedInShader()) {
@@ -102,12 +108,12 @@
 void GrGLUniformHandler::bindUniformLocations(GrGLuint programID, const GrGLCaps& caps) {
     if (caps.bindUniformLocationSupport()) {
         int currUniform = 0;
-        for (UniformInfo& uniform : fUniforms.items()) {
+        for (GLUniformInfo& uniform : fUniforms.items()) {
             GL_CALL(BindUniformLocation(programID, currUniform, uniform.fVariable.c_str()));
             uniform.fLocation = currUniform;
             ++currUniform;
         }
-        for (UniformInfo& sampler : fSamplers.items()) {
+        for (GLUniformInfo& sampler : fSamplers.items()) {
             GL_CALL(BindUniformLocation(programID, currUniform, sampler.fVariable.c_str()));
             sampler.fLocation = currUniform;
             ++currUniform;
@@ -117,12 +123,12 @@
 
 void GrGLUniformHandler::getUniformLocations(GrGLuint programID, const GrGLCaps& caps, bool force) {
     if (!caps.bindUniformLocationSupport() || force) {
-        for (UniformInfo& uniform : fUniforms.items()) {
+        for (GLUniformInfo& uniform : fUniforms.items()) {
             GrGLint location;
             GL_CALL_RET(location, GetUniformLocation(programID, uniform.fVariable.c_str()));
             uniform.fLocation = location;
         }
-        for (UniformInfo& sampler : fSamplers.items()) {
+        for (GLUniformInfo& sampler : fSamplers.items()) {
             GrGLint location;
             GL_CALL_RET(location, GetUniformLocation(programID, sampler.fVariable.c_str()));
             sampler.fLocation = location;