Add setXi and setXiv in GrGLSLProgramDataManager.

Previously, X = 1; this CL adds X = [2, 3, 4] to match the equivalent
vector support for floats.

It currently does not define any methods for setting unsigned integers
or for setting explicitly lower bit count integers.

Bug: skia:
Change-Id: Iaa1e9a6b979208a8c30b07b8ccb0792b3dd64c97
Reviewed-on: https://skia-review.googlesource.com/150261
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
diff --git a/src/gpu/gl/GrGLProgramDataManager.cpp b/src/gpu/gl/GrGLProgramDataManager.cpp
index 689b291..0f92d59 100644
--- a/src/gpu/gl/GrGLProgramDataManager.cpp
+++ b/src/gpu/gl/GrGLProgramDataManager.cpp
@@ -72,7 +72,7 @@
 
 void GrGLProgramDataManager::set1iv(UniformHandle u,
                                     int arrayCount,
-                                    const int v[]) const {
+                                    const int32_t v[]) const {
     const Uniform& uni = fUniforms[u.toIndex()];
     SkASSERT(uni.fType == kInt_GrSLType || uni.fType == kShort_GrSLType);
     SkASSERT(arrayCount > 0);
@@ -107,6 +107,27 @@
     }
 }
 
+void GrGLProgramDataManager::set2i(UniformHandle u, int32_t i0, int32_t i1) const {
+    const Uniform& uni = fUniforms[u.toIndex()];
+    SkASSERT(uni.fType == kInt2_GrSLType || uni.fType == kShort2_GrSLType);
+    SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
+    if (kUnusedUniform != uni.fLocation) {
+        GR_GL_CALL(fGpu->glInterface(), Uniform2i(uni.fLocation, i0, i1));
+    }
+}
+
+void GrGLProgramDataManager::set2iv(UniformHandle u,
+                                    int arrayCount,
+                                    const int32_t v[]) const {
+    const Uniform& uni = fUniforms[u.toIndex()];
+    SkASSERT(uni.fType == kInt2_GrSLType || uni.fType == kShort2_GrSLType);
+    SkASSERT(arrayCount > 0);
+    ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
+    if (kUnusedUniform != uni.fLocation) {
+        GR_GL_CALL(fGpu->glInterface(), Uniform2iv(uni.fLocation, arrayCount, v));
+    }
+}
+
 void GrGLProgramDataManager::set2f(UniformHandle u, float v0, float v1) const {
     const Uniform& uni = fUniforms[u.toIndex()];
     SkASSERT(uni.fType == kFloat2_GrSLType || uni.fType == kHalf2_GrSLType);
@@ -128,6 +149,27 @@
     }
 }
 
+void GrGLProgramDataManager::set3i(UniformHandle u, int32_t i0, int32_t i1, int32_t i2) const {
+    const Uniform& uni = fUniforms[u.toIndex()];
+    SkASSERT(uni.fType == kInt3_GrSLType || uni.fType == kShort3_GrSLType);
+    SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
+    if (kUnusedUniform != uni.fLocation) {
+        GR_GL_CALL(fGpu->glInterface(), Uniform3i(uni.fLocation, i0, i1, i2));
+    }
+}
+
+void GrGLProgramDataManager::set3iv(UniformHandle u,
+                                    int arrayCount,
+                                    const int32_t v[]) const {
+    const Uniform& uni = fUniforms[u.toIndex()];
+    SkASSERT(uni.fType == kInt3_GrSLType || uni.fType == kShort3_GrSLType);
+    SkASSERT(arrayCount > 0);
+    ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
+    if (kUnusedUniform != uni.fLocation) {
+        GR_GL_CALL(fGpu->glInterface(), Uniform3iv(uni.fLocation, arrayCount, v));
+    }
+}
+
 void GrGLProgramDataManager::set3f(UniformHandle u, float v0, float v1, float v2) const {
     const Uniform& uni = fUniforms[u.toIndex()];
     SkASSERT(uni.fType == kFloat3_GrSLType || uni.fType == kHalf3_GrSLType);
@@ -149,6 +191,31 @@
     }
 }
 
+void GrGLProgramDataManager::set4i(UniformHandle u,
+                                   int32_t i0,
+                                   int32_t i1,
+                                   int32_t i2,
+                                   int32_t i3) const {
+    const Uniform& uni = fUniforms[u.toIndex()];
+    SkASSERT(uni.fType == kInt4_GrSLType || uni.fType == kShort4_GrSLType);
+    SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
+    if (kUnusedUniform != uni.fLocation) {
+        GR_GL_CALL(fGpu->glInterface(), Uniform4i(uni.fLocation, i0, i1, i2, i3));
+    }
+}
+
+void GrGLProgramDataManager::set4iv(UniformHandle u,
+                                    int arrayCount,
+                                    const int32_t v[]) const {
+    const Uniform& uni = fUniforms[u.toIndex()];
+    SkASSERT(uni.fType == kInt4_GrSLType || uni.fType == kShort4_GrSLType);
+    SkASSERT(arrayCount > 0);
+    ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
+    if (kUnusedUniform != uni.fLocation) {
+        GR_GL_CALL(fGpu->glInterface(), Uniform4iv(uni.fLocation, arrayCount, v));
+    }
+}
+
 void GrGLProgramDataManager::set4f(UniformHandle u,
                                    float v0,
                                    float v1,