blob: 74bb651fa4b5a6b55680c9d5be49e9ccaaa45568 [file] [log] [blame]
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "gl/GrGLShaderBuilder.h"
9#include "gl/GrGLProgram.h"
10#include "gl/GrGLUniformHandle.h"
commit-bot@chromium.org9188a152013-09-05 18:28:24 +000011#include "gl/GrGpuGL.h"
bsalomon@google.comd8b5fac2012-11-01 17:02:46 +000012#include "SkMatrix.h"
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000013
14#define ASSERT_ARRAY_UPLOAD_IN_BOUNDS(UNI, OFFSET, COUNT) \
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000015 SkASSERT(offset + arrayCount <= uni.fArrayCount || \
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000016 (0 == offset && 1 == arrayCount && GrGLShaderVar::kNonArray == uni.fArrayCount))
17
18GrGLUniformManager::UniformHandle GrGLUniformManager::appendUniform(GrSLType type, int arrayCount) {
19 int idx = fUniforms.count();
20 Uniform& uni = fUniforms.push_back();
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000021 SkASSERT(GrGLShaderVar::kNonArray == arrayCount || arrayCount > 0);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000022 uni.fArrayCount = arrayCount;
23 uni.fType = type;
24 uni.fVSLocation = kUnusedUniform;
25 uni.fFSLocation = kUnusedUniform;
commit-bot@chromium.org7425c122013-08-14 18:14:19 +000026 return GrGLUniformManager::UniformHandle::CreateFromUniformIndex(idx);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000027}
28
29void GrGLUniformManager::setSampler(UniformHandle u, GrGLint texUnit) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +000030 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000031 SkASSERT(uni.fType == kSampler2D_GrSLType);
32 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount);
bsalomon@google.com0982d352012-07-31 15:33:25 +000033 // FIXME: We still insert a single sampler uniform for every stage. If the shader does not
34 // reference the sampler then the compiler may have optimized it out. Uncomment this assert
35 // once stages insert their own samplers.
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000036 // SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000037 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +000038 GR_GL_CALL(fGpu->glInterface(), Uniform1i(uni.fFSLocation, texUnit));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000039 }
40 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +000041 GR_GL_CALL(fGpu->glInterface(), Uniform1i(uni.fVSLocation, texUnit));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000042 }
43}
44
45void GrGLUniformManager::set1f(UniformHandle u, GrGLfloat v0) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +000046 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000047 SkASSERT(uni.fType == kFloat_GrSLType);
48 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount);
49 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000050 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +000051 GR_GL_CALL(fGpu->glInterface(), Uniform1f(uni.fFSLocation, v0));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000052 }
53 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +000054 GR_GL_CALL(fGpu->glInterface(), Uniform1f(uni.fVSLocation, v0));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000055 }
56}
57
58void GrGLUniformManager::set1fv(UniformHandle u,
59 int offset,
60 int arrayCount,
61 const GrGLfloat v[]) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +000062 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000063 SkASSERT(uni.fType == kFloat_GrSLType);
64 SkASSERT(arrayCount > 0);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000065 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, offset, arrayCount);
66 // This assert fires in some instances of the two-pt gradient for its VSParams.
67 // Once the uniform manager is responsible for inserting the duplicate uniform
68 // arrays in VS and FS driver bug workaround, this can be enabled.
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000069 //SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000070 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +000071 GR_GL_CALL(fGpu->glInterface(), Uniform1fv(uni.fFSLocation + offset, arrayCount, v));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000072 }
73 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +000074 GR_GL_CALL(fGpu->glInterface(), Uniform1fv(uni.fVSLocation + offset, arrayCount, v));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000075 }
76}
77
78void GrGLUniformManager::set2f(UniformHandle u, GrGLfloat v0, GrGLfloat v1) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +000079 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000080 SkASSERT(uni.fType == kVec2f_GrSLType);
81 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount);
82 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000083 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +000084 GR_GL_CALL(fGpu->glInterface(), Uniform2f(uni.fFSLocation, v0, v1));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000085 }
86 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +000087 GR_GL_CALL(fGpu->glInterface(), Uniform2f(uni.fVSLocation, v0, v1));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000088 }
89}
90
91void GrGLUniformManager::set2fv(UniformHandle u,
92 int offset,
93 int arrayCount,
94 const GrGLfloat v[]) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +000095 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000096 SkASSERT(uni.fType == kVec2f_GrSLType);
97 SkASSERT(arrayCount > 0);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +000098 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, offset, arrayCount);
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000099 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000100 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000101 GR_GL_CALL(fGpu->glInterface(), Uniform2fv(uni.fFSLocation + offset, arrayCount, v));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000102 }
103 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000104 GR_GL_CALL(fGpu->glInterface(), Uniform2fv(uni.fVSLocation + offset, arrayCount, v));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000105 }
106}
107
108void GrGLUniformManager::set3f(UniformHandle u, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +0000109 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000110 SkASSERT(uni.fType == kVec3f_GrSLType);
111 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount);
112 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000113 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000114 GR_GL_CALL(fGpu->glInterface(), Uniform3f(uni.fFSLocation, v0, v1, v2));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000115 }
116 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000117 GR_GL_CALL(fGpu->glInterface(), Uniform3f(uni.fVSLocation, v0, v1, v2));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000118 }
119}
120
121void GrGLUniformManager::set3fv(UniformHandle u,
122 int offset,
123 int arrayCount,
124 const GrGLfloat v[]) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +0000125 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000126 SkASSERT(uni.fType == kVec3f_GrSLType);
127 SkASSERT(arrayCount > 0);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000128 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, offset, arrayCount);
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000129 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000130 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000131 GR_GL_CALL(fGpu->glInterface(), Uniform3fv(uni.fFSLocation + offset, arrayCount, v));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000132 }
133 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000134 GR_GL_CALL(fGpu->glInterface(), Uniform3fv(uni.fVSLocation + offset, arrayCount, v));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000135 }
136}
137
138void GrGLUniformManager::set4f(UniformHandle u,
139 GrGLfloat v0,
140 GrGLfloat v1,
141 GrGLfloat v2,
142 GrGLfloat v3) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +0000143 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000144 SkASSERT(uni.fType == kVec4f_GrSLType);
145 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount);
146 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000147 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000148 GR_GL_CALL(fGpu->glInterface(), Uniform4f(uni.fFSLocation, v0, v1, v2, v3));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000149 }
150 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000151 GR_GL_CALL(fGpu->glInterface(), Uniform4f(uni.fVSLocation, v0, v1, v2, v3));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000152 }
153}
154
155void GrGLUniformManager::set4fv(UniformHandle u,
156 int offset,
157 int arrayCount,
158 const GrGLfloat v[]) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +0000159 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000160 SkASSERT(uni.fType == kVec4f_GrSLType);
161 SkASSERT(arrayCount > 0);
162 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000163 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000164 GR_GL_CALL(fGpu->glInterface(), Uniform4fv(uni.fFSLocation + offset, arrayCount, v));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000165 }
166 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000167 GR_GL_CALL(fGpu->glInterface(), Uniform4fv(uni.fVSLocation + offset, arrayCount, v));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000168 }
169}
170
171void GrGLUniformManager::setMatrix3f(UniformHandle u, const GrGLfloat matrix[]) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +0000172 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000173 SkASSERT(uni.fType == kMat33f_GrSLType);
174 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount);
bsalomon@google.com8ea78d82012-10-24 20:11:30 +0000175 // TODO: Re-enable this assert once texture matrices aren't forced on all effects
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000176 // SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000177 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000178 GR_GL_CALL(fGpu->glInterface(), UniformMatrix3fv(uni.fFSLocation, 1, false, matrix));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000179 }
180 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000181 GR_GL_CALL(fGpu->glInterface(), UniformMatrix3fv(uni.fVSLocation, 1, false, matrix));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000182 }
183}
184
185void GrGLUniformManager::setMatrix4f(UniformHandle u, const GrGLfloat matrix[]) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +0000186 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000187 SkASSERT(uni.fType == kMat44f_GrSLType);
188 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount);
189 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000190 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000191 GR_GL_CALL(fGpu->glInterface(), UniformMatrix4fv(uni.fFSLocation, 1, false, matrix));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000192 }
193 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000194 GR_GL_CALL(fGpu->glInterface(), UniformMatrix4fv(uni.fVSLocation, 1, false, matrix));
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000195 }
196}
197
198void GrGLUniformManager::setMatrix3fv(UniformHandle u,
199 int offset,
200 int arrayCount,
201 const GrGLfloat matrices[]) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +0000202 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000203 SkASSERT(uni.fType == kMat33f_GrSLType);
204 SkASSERT(arrayCount > 0);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000205 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, offset, arrayCount);
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000206 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000207 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000208 GR_GL_CALL(fGpu->glInterface(),
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000209 UniformMatrix3fv(uni.fFSLocation + offset, arrayCount, false, matrices));
210 }
211 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000212 GR_GL_CALL(fGpu->glInterface(),
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000213 UniformMatrix3fv(uni.fVSLocation + offset, arrayCount, false, matrices));
214 }
215}
216
217void GrGLUniformManager::setMatrix4fv(UniformHandle u,
218 int offset,
219 int arrayCount,
220 const GrGLfloat matrices[]) const {
commit-bot@chromium.org7425c122013-08-14 18:14:19 +0000221 const Uniform& uni = fUniforms[u.toUniformIndex()];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000222 SkASSERT(uni.fType == kMat44f_GrSLType);
223 SkASSERT(arrayCount > 0);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000224 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, offset, arrayCount);
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000225 SkASSERT(kUnusedUniform != uni.fFSLocation || kUnusedUniform != uni.fVSLocation);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000226 if (kUnusedUniform != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000227 GR_GL_CALL(fGpu->glInterface(),
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000228 UniformMatrix4fv(uni.fFSLocation + offset, arrayCount, false, matrices));
229 }
230 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) {
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000231 GR_GL_CALL(fGpu->glInterface(),
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000232 UniformMatrix4fv(uni.fVSLocation + offset, arrayCount, false, matrices));
233 }
234}
235
bsalomon@google.comd8b5fac2012-11-01 17:02:46 +0000236void GrGLUniformManager::setSkMatrix(UniformHandle u, const SkMatrix& matrix) const {
robertphillips@google.come41fee92012-11-01 22:18:10 +0000237// GR_STATIC_ASSERT(SK_SCALAR_IS_FLOAT);
bsalomon@google.comd8b5fac2012-11-01 17:02:46 +0000238 GrGLfloat mt[] = {
239 matrix.get(SkMatrix::kMScaleX),
240 matrix.get(SkMatrix::kMSkewY),
241 matrix.get(SkMatrix::kMPersp0),
242 matrix.get(SkMatrix::kMSkewX),
243 matrix.get(SkMatrix::kMScaleY),
244 matrix.get(SkMatrix::kMPersp1),
245 matrix.get(SkMatrix::kMTransX),
246 matrix.get(SkMatrix::kMTransY),
247 matrix.get(SkMatrix::kMPersp2),
248 };
249 this->setMatrix3f(u, mt);
250}
251
252
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000253void GrGLUniformManager::getUniformLocations(GrGLuint programID, const BuilderUniformArray& uniforms) {
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000254 SkASSERT(uniforms.count() == fUniforms.count());
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000255 int count = fUniforms.count();
256 for (int i = 0; i < count; ++i) {
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000257 SkASSERT(uniforms[i].fVariable.getType() == fUniforms[i].fType);
258 SkASSERT(uniforms[i].fVariable.getArrayCount() == fUniforms[i].fArrayCount);
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000259 GrGLint location;
260 // TODO: Move the Xoom uniform array in both FS and VS bug workaround here.
commit-bot@chromium.org9188a152013-09-05 18:28:24 +0000261 GR_GL_CALL_RET(fGpu->glInterface(), location,
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000262 GetUniformLocation(programID, uniforms[i].fVariable.c_str()));
commit-bot@chromium.org74a3a212013-08-30 19:43:59 +0000263 if (GrGLShaderBuilder::kVertex_Visibility & uniforms[i].fVisibility) {
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000264 fUniforms[i].fVSLocation = location;
265 }
commit-bot@chromium.org74a3a212013-08-30 19:43:59 +0000266 if (GrGLShaderBuilder::kFragment_Visibility & uniforms[i].fVisibility) {
bsalomon@google.comdbbc4e22012-07-25 17:48:39 +0000267 fUniforms[i].fFSLocation = location;
268 }
269 }
270}
commit-bot@chromium.org7425c122013-08-14 18:14:19 +0000271
272const GrGLUniformManager::BuilderUniform&
273GrGLUniformManager::getBuilderUniform(const BuilderUniformArray& array, UniformHandle handle) const {
274 return array[handle.toUniformIndex()];
275}