OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
| 8 #include "SkMatrix.h" |
8 #include "gl/GrGLProgramDataManager.h" | 9 #include "gl/GrGLProgramDataManager.h" |
9 #include "gl/GrGLUniformHandle.h" | |
10 #include "gl/GrGLGpu.h" | 10 #include "gl/GrGLGpu.h" |
11 #include "SkMatrix.h" | |
12 | 11 |
13 #define ASSERT_ARRAY_UPLOAD_IN_BOUNDS(UNI, COUNT) \ | 12 #define ASSERT_ARRAY_UPLOAD_IN_BOUNDS(UNI, COUNT) \ |
14 SkASSERT(arrayCount <= uni.fArrayCount || \ | 13 SkASSERT(arrayCount <= uni.fArrayCount || \ |
15 (1 == arrayCount && GrGLShaderVar::kNonArray == uni.fArrayCoun
t)) | 14 (1 == arrayCount && GrGLShaderVar::kNonArray == uni.fArrayCoun
t)) |
16 | 15 |
17 GrGLProgramDataManager::GrGLProgramDataManager(GrGLGpu* gpu, const UniformInfoAr
ray& uniforms) | 16 GrGLProgramDataManager::GrGLProgramDataManager(GrGLGpu* gpu, const UniformInfoAr
ray& uniforms) |
18 : fGpu(gpu) { | 17 : fGpu(gpu) { |
19 int count = uniforms.count(); | 18 int count = uniforms.count(); |
20 fUniforms.push_back_n(count); | 19 fUniforms.push_back_n(count); |
21 for (int i = 0; i < count; i++) { | 20 for (int i = 0; i < count; i++) { |
(...skipping 14 matching lines...) Expand all Loading... |
36 } | 35 } |
37 if (GrGLProgramBuilder::kFragment_Visibility & builderUniform.fVisibilit
y) { | 36 if (GrGLProgramBuilder::kFragment_Visibility & builderUniform.fVisibilit
y) { |
38 uniform.fFSLocation = builderUniform.fLocation; | 37 uniform.fFSLocation = builderUniform.fLocation; |
39 } else { | 38 } else { |
40 uniform.fFSLocation = kUnusedUniform; | 39 uniform.fFSLocation = kUnusedUniform; |
41 } | 40 } |
42 } | 41 } |
43 } | 42 } |
44 | 43 |
45 void GrGLProgramDataManager::setSampler(UniformHandle u, GrGLint texUnit) const
{ | 44 void GrGLProgramDataManager::setSampler(UniformHandle u, GrGLint texUnit) const
{ |
46 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 45 const Uniform& uni = fUniforms[u.toIndex()]; |
47 SkASSERT(uni.fType == kSampler2D_GrSLType); | 46 SkASSERT(uni.fType == kSampler2D_GrSLType); |
48 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); | 47 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); |
49 // FIXME: We still insert a single sampler uniform for every stage. If the s
hader does not | 48 // FIXME: We still insert a single sampler uniform for every stage. If the s
hader does not |
50 // reference the sampler then the compiler may have optimized it out. Uncomm
ent this assert | 49 // reference the sampler then the compiler may have optimized it out. Uncomm
ent this assert |
51 // once stages insert their own samplers. | 50 // once stages insert their own samplers. |
52 // this->printUnused(uni); | 51 // this->printUnused(uni); |
53 if (kUnusedUniform != uni.fFSLocation) { | 52 if (kUnusedUniform != uni.fFSLocation) { |
54 GR_GL_CALL(fGpu->glInterface(), Uniform1i(uni.fFSLocation, texUnit)); | 53 GR_GL_CALL(fGpu->glInterface(), Uniform1i(uni.fFSLocation, texUnit)); |
55 } | 54 } |
56 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 55 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
57 GR_GL_CALL(fGpu->glInterface(), Uniform1i(uni.fVSLocation, texUnit)); | 56 GR_GL_CALL(fGpu->glInterface(), Uniform1i(uni.fVSLocation, texUnit)); |
58 } | 57 } |
59 } | 58 } |
60 | 59 |
61 void GrGLProgramDataManager::set1f(UniformHandle u, GrGLfloat v0) const { | 60 void GrGLProgramDataManager::set1f(UniformHandle u, GrGLfloat v0) const { |
62 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 61 const Uniform& uni = fUniforms[u.toIndex()]; |
63 SkASSERT(uni.fType == kFloat_GrSLType); | 62 SkASSERT(uni.fType == kFloat_GrSLType); |
64 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); | 63 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); |
65 SkDEBUGCODE(this->printUnused(uni);) | 64 SkDEBUGCODE(this->printUnused(uni);) |
66 if (kUnusedUniform != uni.fFSLocation) { | 65 if (kUnusedUniform != uni.fFSLocation) { |
67 GR_GL_CALL(fGpu->glInterface(), Uniform1f(uni.fFSLocation, v0)); | 66 GR_GL_CALL(fGpu->glInterface(), Uniform1f(uni.fFSLocation, v0)); |
68 } | 67 } |
69 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 68 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
70 GR_GL_CALL(fGpu->glInterface(), Uniform1f(uni.fVSLocation, v0)); | 69 GR_GL_CALL(fGpu->glInterface(), Uniform1f(uni.fVSLocation, v0)); |
71 } | 70 } |
72 } | 71 } |
73 | 72 |
74 void GrGLProgramDataManager::set1fv(UniformHandle u, | 73 void GrGLProgramDataManager::set1fv(UniformHandle u, |
75 int arrayCount, | 74 int arrayCount, |
76 const GrGLfloat v[]) const { | 75 const GrGLfloat v[]) const { |
77 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 76 const Uniform& uni = fUniforms[u.toIndex()]; |
78 SkASSERT(uni.fType == kFloat_GrSLType); | 77 SkASSERT(uni.fType == kFloat_GrSLType); |
79 SkASSERT(arrayCount > 0); | 78 SkASSERT(arrayCount > 0); |
80 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); | 79 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); |
81 // This assert fires in some instances of the two-pt gradient for its VSPara
ms. | 80 // This assert fires in some instances of the two-pt gradient for its VSPara
ms. |
82 // Once the uniform manager is responsible for inserting the duplicate unifo
rm | 81 // Once the uniform manager is responsible for inserting the duplicate unifo
rm |
83 // arrays in VS and FS driver bug workaround, this can be enabled. | 82 // arrays in VS and FS driver bug workaround, this can be enabled. |
84 // this->printUni(uni); | 83 // this->printUni(uni); |
85 if (kUnusedUniform != uni.fFSLocation) { | 84 if (kUnusedUniform != uni.fFSLocation) { |
86 GR_GL_CALL(fGpu->glInterface(), Uniform1fv(uni.fFSLocation, arrayCount,
v)); | 85 GR_GL_CALL(fGpu->glInterface(), Uniform1fv(uni.fFSLocation, arrayCount,
v)); |
87 } | 86 } |
88 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 87 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
89 GR_GL_CALL(fGpu->glInterface(), Uniform1fv(uni.fVSLocation, arrayCount,
v)); | 88 GR_GL_CALL(fGpu->glInterface(), Uniform1fv(uni.fVSLocation, arrayCount,
v)); |
90 } | 89 } |
91 } | 90 } |
92 | 91 |
93 void GrGLProgramDataManager::set2f(UniformHandle u, GrGLfloat v0, GrGLfloat v1)
const { | 92 void GrGLProgramDataManager::set2f(UniformHandle u, GrGLfloat v0, GrGLfloat v1)
const { |
94 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 93 const Uniform& uni = fUniforms[u.toIndex()]; |
95 SkASSERT(uni.fType == kVec2f_GrSLType); | 94 SkASSERT(uni.fType == kVec2f_GrSLType); |
96 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); | 95 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); |
97 SkDEBUGCODE(this->printUnused(uni);) | 96 SkDEBUGCODE(this->printUnused(uni);) |
98 if (kUnusedUniform != uni.fFSLocation) { | 97 if (kUnusedUniform != uni.fFSLocation) { |
99 GR_GL_CALL(fGpu->glInterface(), Uniform2f(uni.fFSLocation, v0, v1)); | 98 GR_GL_CALL(fGpu->glInterface(), Uniform2f(uni.fFSLocation, v0, v1)); |
100 } | 99 } |
101 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 100 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
102 GR_GL_CALL(fGpu->glInterface(), Uniform2f(uni.fVSLocation, v0, v1)); | 101 GR_GL_CALL(fGpu->glInterface(), Uniform2f(uni.fVSLocation, v0, v1)); |
103 } | 102 } |
104 } | 103 } |
105 | 104 |
106 void GrGLProgramDataManager::set2fv(UniformHandle u, | 105 void GrGLProgramDataManager::set2fv(UniformHandle u, |
107 int arrayCount, | 106 int arrayCount, |
108 const GrGLfloat v[]) const { | 107 const GrGLfloat v[]) const { |
109 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 108 const Uniform& uni = fUniforms[u.toIndex()]; |
110 SkASSERT(uni.fType == kVec2f_GrSLType); | 109 SkASSERT(uni.fType == kVec2f_GrSLType); |
111 SkASSERT(arrayCount > 0); | 110 SkASSERT(arrayCount > 0); |
112 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); | 111 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); |
113 SkDEBUGCODE(this->printUnused(uni);) | 112 SkDEBUGCODE(this->printUnused(uni);) |
114 if (kUnusedUniform != uni.fFSLocation) { | 113 if (kUnusedUniform != uni.fFSLocation) { |
115 GR_GL_CALL(fGpu->glInterface(), Uniform2fv(uni.fFSLocation, arrayCount,
v)); | 114 GR_GL_CALL(fGpu->glInterface(), Uniform2fv(uni.fFSLocation, arrayCount,
v)); |
116 } | 115 } |
117 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 116 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
118 GR_GL_CALL(fGpu->glInterface(), Uniform2fv(uni.fVSLocation, arrayCount,
v)); | 117 GR_GL_CALL(fGpu->glInterface(), Uniform2fv(uni.fVSLocation, arrayCount,
v)); |
119 } | 118 } |
120 } | 119 } |
121 | 120 |
122 void GrGLProgramDataManager::set3f(UniformHandle u, GrGLfloat v0, GrGLfloat v1,
GrGLfloat v2) const { | 121 void GrGLProgramDataManager::set3f(UniformHandle u, GrGLfloat v0, GrGLfloat v1,
GrGLfloat v2) const { |
123 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 122 const Uniform& uni = fUniforms[u.toIndex()]; |
124 SkASSERT(uni.fType == kVec3f_GrSLType); | 123 SkASSERT(uni.fType == kVec3f_GrSLType); |
125 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); | 124 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); |
126 SkDEBUGCODE(this->printUnused(uni);) | 125 SkDEBUGCODE(this->printUnused(uni);) |
127 if (kUnusedUniform != uni.fFSLocation) { | 126 if (kUnusedUniform != uni.fFSLocation) { |
128 GR_GL_CALL(fGpu->glInterface(), Uniform3f(uni.fFSLocation, v0, v1, v2)); | 127 GR_GL_CALL(fGpu->glInterface(), Uniform3f(uni.fFSLocation, v0, v1, v2)); |
129 } | 128 } |
130 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 129 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
131 GR_GL_CALL(fGpu->glInterface(), Uniform3f(uni.fVSLocation, v0, v1, v2)); | 130 GR_GL_CALL(fGpu->glInterface(), Uniform3f(uni.fVSLocation, v0, v1, v2)); |
132 } | 131 } |
133 } | 132 } |
134 | 133 |
135 void GrGLProgramDataManager::set3fv(UniformHandle u, | 134 void GrGLProgramDataManager::set3fv(UniformHandle u, |
136 int arrayCount, | 135 int arrayCount, |
137 const GrGLfloat v[]) const { | 136 const GrGLfloat v[]) const { |
138 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 137 const Uniform& uni = fUniforms[u.toIndex()]; |
139 SkASSERT(uni.fType == kVec3f_GrSLType); | 138 SkASSERT(uni.fType == kVec3f_GrSLType); |
140 SkASSERT(arrayCount > 0); | 139 SkASSERT(arrayCount > 0); |
141 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); | 140 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); |
142 SkDEBUGCODE(this->printUnused(uni);) | 141 SkDEBUGCODE(this->printUnused(uni);) |
143 if (kUnusedUniform != uni.fFSLocation) { | 142 if (kUnusedUniform != uni.fFSLocation) { |
144 GR_GL_CALL(fGpu->glInterface(), Uniform3fv(uni.fFSLocation, arrayCount,
v)); | 143 GR_GL_CALL(fGpu->glInterface(), Uniform3fv(uni.fFSLocation, arrayCount,
v)); |
145 } | 144 } |
146 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 145 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
147 GR_GL_CALL(fGpu->glInterface(), Uniform3fv(uni.fVSLocation, arrayCount,
v)); | 146 GR_GL_CALL(fGpu->glInterface(), Uniform3fv(uni.fVSLocation, arrayCount,
v)); |
148 } | 147 } |
149 } | 148 } |
150 | 149 |
151 void GrGLProgramDataManager::set4f(UniformHandle u, | 150 void GrGLProgramDataManager::set4f(UniformHandle u, |
152 GrGLfloat v0, | 151 GrGLfloat v0, |
153 GrGLfloat v1, | 152 GrGLfloat v1, |
154 GrGLfloat v2, | 153 GrGLfloat v2, |
155 GrGLfloat v3) const { | 154 GrGLfloat v3) const { |
156 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 155 const Uniform& uni = fUniforms[u.toIndex()]; |
157 SkASSERT(uni.fType == kVec4f_GrSLType); | 156 SkASSERT(uni.fType == kVec4f_GrSLType); |
158 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); | 157 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); |
159 SkDEBUGCODE(this->printUnused(uni);) | 158 SkDEBUGCODE(this->printUnused(uni);) |
160 if (kUnusedUniform != uni.fFSLocation) { | 159 if (kUnusedUniform != uni.fFSLocation) { |
161 GR_GL_CALL(fGpu->glInterface(), Uniform4f(uni.fFSLocation, v0, v1, v2, v
3)); | 160 GR_GL_CALL(fGpu->glInterface(), Uniform4f(uni.fFSLocation, v0, v1, v2, v
3)); |
162 } | 161 } |
163 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 162 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
164 GR_GL_CALL(fGpu->glInterface(), Uniform4f(uni.fVSLocation, v0, v1, v2, v
3)); | 163 GR_GL_CALL(fGpu->glInterface(), Uniform4f(uni.fVSLocation, v0, v1, v2, v
3)); |
165 } | 164 } |
166 } | 165 } |
167 | 166 |
168 void GrGLProgramDataManager::set4fv(UniformHandle u, | 167 void GrGLProgramDataManager::set4fv(UniformHandle u, |
169 int arrayCount, | 168 int arrayCount, |
170 const GrGLfloat v[]) const { | 169 const GrGLfloat v[]) const { |
171 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 170 const Uniform& uni = fUniforms[u.toIndex()]; |
172 SkASSERT(uni.fType == kVec4f_GrSLType); | 171 SkASSERT(uni.fType == kVec4f_GrSLType); |
173 SkASSERT(arrayCount > 0); | 172 SkASSERT(arrayCount > 0); |
174 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); | 173 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); |
175 SkDEBUGCODE(this->printUnused(uni);) | 174 SkDEBUGCODE(this->printUnused(uni);) |
176 if (kUnusedUniform != uni.fFSLocation) { | 175 if (kUnusedUniform != uni.fFSLocation) { |
177 GR_GL_CALL(fGpu->glInterface(), Uniform4fv(uni.fFSLocation, arrayCount,
v)); | 176 GR_GL_CALL(fGpu->glInterface(), Uniform4fv(uni.fFSLocation, arrayCount,
v)); |
178 } | 177 } |
179 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 178 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
180 GR_GL_CALL(fGpu->glInterface(), Uniform4fv(uni.fVSLocation, arrayCount,
v)); | 179 GR_GL_CALL(fGpu->glInterface(), Uniform4fv(uni.fVSLocation, arrayCount,
v)); |
181 } | 180 } |
182 } | 181 } |
183 | 182 |
184 void GrGLProgramDataManager::setMatrix3f(UniformHandle u, const GrGLfloat matrix
[]) const { | 183 void GrGLProgramDataManager::setMatrix3f(UniformHandle u, const GrGLfloat matrix
[]) const { |
185 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 184 const Uniform& uni = fUniforms[u.toIndex()]; |
186 SkASSERT(uni.fType == kMat33f_GrSLType); | 185 SkASSERT(uni.fType == kMat33f_GrSLType); |
187 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); | 186 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); |
188 SkDEBUGCODE(this->printUnused(uni);) | 187 SkDEBUGCODE(this->printUnused(uni);) |
189 if (kUnusedUniform != uni.fFSLocation) { | 188 if (kUnusedUniform != uni.fFSLocation) { |
190 GR_GL_CALL(fGpu->glInterface(), UniformMatrix3fv(uni.fFSLocation, 1, fal
se, matrix)); | 189 GR_GL_CALL(fGpu->glInterface(), UniformMatrix3fv(uni.fFSLocation, 1, fal
se, matrix)); |
191 } | 190 } |
192 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 191 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
193 GR_GL_CALL(fGpu->glInterface(), UniformMatrix3fv(uni.fVSLocation, 1, fal
se, matrix)); | 192 GR_GL_CALL(fGpu->glInterface(), UniformMatrix3fv(uni.fVSLocation, 1, fal
se, matrix)); |
194 } | 193 } |
195 } | 194 } |
196 | 195 |
197 void GrGLProgramDataManager::setMatrix4f(UniformHandle u, const GrGLfloat matrix
[]) const { | 196 void GrGLProgramDataManager::setMatrix4f(UniformHandle u, const GrGLfloat matrix
[]) const { |
198 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 197 const Uniform& uni = fUniforms[u.toIndex()]; |
199 SkASSERT(uni.fType == kMat44f_GrSLType); | 198 SkASSERT(uni.fType == kMat44f_GrSLType); |
200 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); | 199 SkASSERT(GrGLShaderVar::kNonArray == uni.fArrayCount); |
201 SkDEBUGCODE(this->printUnused(uni);) | 200 SkDEBUGCODE(this->printUnused(uni);) |
202 if (kUnusedUniform != uni.fFSLocation) { | 201 if (kUnusedUniform != uni.fFSLocation) { |
203 GR_GL_CALL(fGpu->glInterface(), UniformMatrix4fv(uni.fFSLocation, 1, fal
se, matrix)); | 202 GR_GL_CALL(fGpu->glInterface(), UniformMatrix4fv(uni.fFSLocation, 1, fal
se, matrix)); |
204 } | 203 } |
205 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 204 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
206 GR_GL_CALL(fGpu->glInterface(), UniformMatrix4fv(uni.fVSLocation, 1, fal
se, matrix)); | 205 GR_GL_CALL(fGpu->glInterface(), UniformMatrix4fv(uni.fVSLocation, 1, fal
se, matrix)); |
207 } | 206 } |
208 } | 207 } |
209 | 208 |
210 void GrGLProgramDataManager::setMatrix3fv(UniformHandle u, | 209 void GrGLProgramDataManager::setMatrix3fv(UniformHandle u, |
211 int arrayCount, | 210 int arrayCount, |
212 const GrGLfloat matrices[]) const { | 211 const GrGLfloat matrices[]) const { |
213 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 212 const Uniform& uni = fUniforms[u.toIndex()]; |
214 SkASSERT(uni.fType == kMat33f_GrSLType); | 213 SkASSERT(uni.fType == kMat33f_GrSLType); |
215 SkASSERT(arrayCount > 0); | 214 SkASSERT(arrayCount > 0); |
216 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); | 215 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); |
217 SkDEBUGCODE(this->printUnused(uni);) | 216 SkDEBUGCODE(this->printUnused(uni);) |
218 if (kUnusedUniform != uni.fFSLocation) { | 217 if (kUnusedUniform != uni.fFSLocation) { |
219 GR_GL_CALL(fGpu->glInterface(), | 218 GR_GL_CALL(fGpu->glInterface(), |
220 UniformMatrix3fv(uni.fFSLocation, arrayCount, false, matrices
)); | 219 UniformMatrix3fv(uni.fFSLocation, arrayCount, false, matrices
)); |
221 } | 220 } |
222 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 221 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
223 GR_GL_CALL(fGpu->glInterface(), | 222 GR_GL_CALL(fGpu->glInterface(), |
224 UniformMatrix3fv(uni.fVSLocation, arrayCount, false, matrices
)); | 223 UniformMatrix3fv(uni.fVSLocation, arrayCount, false, matrices
)); |
225 } | 224 } |
226 } | 225 } |
227 | 226 |
228 void GrGLProgramDataManager::setMatrix4fv(UniformHandle u, | 227 void GrGLProgramDataManager::setMatrix4fv(UniformHandle u, |
229 int arrayCount, | 228 int arrayCount, |
230 const GrGLfloat matrices[]) const { | 229 const GrGLfloat matrices[]) const { |
231 const Uniform& uni = fUniforms[u.toProgramDataIndex()]; | 230 const Uniform& uni = fUniforms[u.toIndex()]; |
232 SkASSERT(uni.fType == kMat44f_GrSLType); | 231 SkASSERT(uni.fType == kMat44f_GrSLType); |
233 SkASSERT(arrayCount > 0); | 232 SkASSERT(arrayCount > 0); |
234 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); | 233 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount); |
235 SkDEBUGCODE(this->printUnused(uni);) | 234 SkDEBUGCODE(this->printUnused(uni);) |
236 if (kUnusedUniform != uni.fFSLocation) { | 235 if (kUnusedUniform != uni.fFSLocation) { |
237 GR_GL_CALL(fGpu->glInterface(), | 236 GR_GL_CALL(fGpu->glInterface(), |
238 UniformMatrix4fv(uni.fFSLocation, arrayCount, false, matrices
)); | 237 UniformMatrix4fv(uni.fFSLocation, arrayCount, false, matrices
)); |
239 } | 238 } |
240 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ | 239 if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation)
{ |
241 GR_GL_CALL(fGpu->glInterface(), | 240 GR_GL_CALL(fGpu->glInterface(), |
(...skipping 16 matching lines...) Expand all Loading... |
258 this->setMatrix3f(u, mt); | 257 this->setMatrix3f(u, mt); |
259 } | 258 } |
260 | 259 |
261 #ifdef SK_DEBUG | 260 #ifdef SK_DEBUG |
262 void GrGLProgramDataManager::printUnused(const Uniform& uni) const { | 261 void GrGLProgramDataManager::printUnused(const Uniform& uni) const { |
263 if (kUnusedUniform == uni.fFSLocation && kUnusedUniform == uni.fVSLocation)
{ | 262 if (kUnusedUniform == uni.fFSLocation && kUnusedUniform == uni.fVSLocation)
{ |
264 GrCapsDebugf(fGpu->caps(), "Unused uniform in shader\n"); | 263 GrCapsDebugf(fGpu->caps(), "Unused uniform in shader\n"); |
265 } | 264 } |
266 } | 265 } |
267 #endif | 266 #endif |
OLD | NEW |