Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Side by Side Diff: gpu/command_buffer/service/program_manager_unittest.cc

Issue 23819037: Uniforms and attributes name conflicts should cause link failure (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/program_manager.h" 5 #include "gpu/command_buffer/service/program_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 static const GLenum kUniform3Type = GL_FLOAT_VEC3; 204 static const GLenum kUniform3Type = GL_FLOAT_VEC3;
205 static const GLint kInvalidUniformLocation = 30; 205 static const GLint kInvalidUniformLocation = 30;
206 static const GLint kBadUniformIndex = 1000; 206 static const GLint kBadUniformIndex = 1000;
207 207
208 static const size_t kNumAttribs; 208 static const size_t kNumAttribs;
209 static const size_t kNumUniforms; 209 static const size_t kNumUniforms;
210 210
211 protected: 211 protected:
212 typedef TestHelper::AttribInfo AttribInfo; 212 typedef TestHelper::AttribInfo AttribInfo;
213 typedef TestHelper::UniformInfo UniformInfo; 213 typedef TestHelper::UniformInfo UniformInfo;
214
215 typedef enum {
216 kVarUniform,
217 kVarVarying,
218 kVarAttribute
219 } VarCategory;
220
214 typedef struct { 221 typedef struct {
215 int type; 222 int type;
216 int size; 223 int size;
217 int precision; 224 int precision;
218 int static_use; 225 int static_use;
219 std::string name; 226 std::string name;
227 VarCategory category;
220 } VarInfo; 228 } VarInfo;
221 229
222 virtual void SetUp() { 230 virtual void SetUp() {
223 gl_.reset(new StrictMock<gfx::MockGLInterface>()); 231 gl_.reset(new StrictMock<gfx::MockGLInterface>());
224 ::gfx::GLInterface::SetGLInterface(gl_.get()); 232 ::gfx::GLInterface::SetGLInterface(gl_.get());
225 233
226 SetupDefaultShaderExpectations(); 234 SetupDefaultShaderExpectations();
227 235
228 Shader* vertex_shader = shader_manager_.CreateShader( 236 Shader* vertex_shader = shader_manager_.CreateShader(
229 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER); 237 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 if (expected_link_status) { 282 if (expected_link_status) {
275 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 283 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
276 service_id); 284 service_id);
277 } 285 }
278 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 286 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
279 GLint link_status; 287 GLint link_status;
280 program->GetProgramiv(GL_LINK_STATUS, &link_status); 288 program->GetProgramiv(GL_LINK_STATUS, &link_status);
281 return (static_cast<bool>(link_status) == expected_link_status); 289 return (static_cast<bool>(link_status) == expected_link_status);
282 } 290 }
283 291
284 Program* SetupVaryingsTest(const VarInfo* vertex_varyings, 292 Program* SetupShaderVariableTest(const VarInfo* vertex_variables,
Zhenyao Mo 2013/09/06 23:50:18 I could probably turn more tests to use this funct
285 size_t vertex_varying_size, 293 size_t vertex_variable_size,
286 const VarInfo* fragment_varyings, 294 const VarInfo* fragment_variables,
287 size_t fragment_varying_size) { 295 size_t fragment_variable_size) {
288 // Set up shader 296 // Set up shader
289 const GLuint kVShaderClientId = 1; 297 const GLuint kVShaderClientId = 1;
290 const GLuint kVShaderServiceId = 11; 298 const GLuint kVShaderServiceId = 11;
291 const GLuint kFShaderClientId = 2; 299 const GLuint kFShaderClientId = 2;
292 const GLuint kFShaderServiceId = 12; 300 const GLuint kFShaderServiceId = 12;
293 301
294 MockShaderTranslator vertex_shader_translator; 302 MockShaderTranslator vertex_shader_translator;
295 ShaderTranslator::VariableMap vertex_attrib_map; 303 ShaderTranslator::VariableMap vertex_attrib_map;
296 ShaderTranslator::VariableMap vertex_uniform_map; 304 ShaderTranslator::VariableMap vertex_uniform_map;
297 ShaderTranslator::VariableMap vertex_varying_map; 305 ShaderTranslator::VariableMap vertex_varying_map;
298 for (size_t ii = 0; ii < vertex_varying_size; ++ii) { 306 for (size_t ii = 0; ii < vertex_variable_size; ++ii) {
299 vertex_varying_map[vertex_varyings[ii].name] = 307 ShaderTranslator::VariableMap* map = NULL;
300 ShaderTranslator::VariableInfo(vertex_varyings[ii].type, 308 switch (vertex_variables[ii].category) {
301 vertex_varyings[ii].size, 309 case kVarAttribute:
302 vertex_varyings[ii].precision, 310 map = &vertex_attrib_map;
303 vertex_varyings[ii].static_use, 311 break;
304 vertex_varyings[ii].name); 312 case kVarUniform:
313 map = &vertex_uniform_map;
314 break;
315 case kVarVarying:
316 map = &vertex_varying_map;
317 break;
318 default:
319 NOTREACHED();
320 }
321 (*map)[vertex_variables[ii].name] =
322 ShaderTranslator::VariableInfo(vertex_variables[ii].type,
323 vertex_variables[ii].size,
324 vertex_variables[ii].precision,
325 vertex_variables[ii].static_use,
326 vertex_variables[ii].name);
305 } 327 }
306 ShaderTranslator::NameMap vertex_name_map; 328 ShaderTranslator::NameMap vertex_name_map;
307 EXPECT_CALL(vertex_shader_translator, attrib_map()) 329 EXPECT_CALL(vertex_shader_translator, attrib_map())
308 .WillRepeatedly(ReturnRef(vertex_attrib_map)); 330 .WillRepeatedly(ReturnRef(vertex_attrib_map));
309 EXPECT_CALL(vertex_shader_translator, uniform_map()) 331 EXPECT_CALL(vertex_shader_translator, uniform_map())
310 .WillRepeatedly(ReturnRef(vertex_uniform_map)); 332 .WillRepeatedly(ReturnRef(vertex_uniform_map));
311 EXPECT_CALL(vertex_shader_translator, varying_map()) 333 EXPECT_CALL(vertex_shader_translator, varying_map())
312 .WillRepeatedly(ReturnRef(vertex_varying_map)); 334 .WillRepeatedly(ReturnRef(vertex_varying_map));
313 EXPECT_CALL(vertex_shader_translator, name_map()) 335 EXPECT_CALL(vertex_shader_translator, name_map())
314 .WillRepeatedly(ReturnRef(vertex_name_map)); 336 .WillRepeatedly(ReturnRef(vertex_name_map));
315 337
316 MockShaderTranslator frag_shader_translator; 338 MockShaderTranslator frag_shader_translator;
317 ShaderTranslator::VariableMap frag_attrib_map; 339 ShaderTranslator::VariableMap frag_attrib_map;
318 ShaderTranslator::VariableMap frag_uniform_map; 340 ShaderTranslator::VariableMap frag_uniform_map;
319 ShaderTranslator::VariableMap frag_varying_map; 341 ShaderTranslator::VariableMap frag_varying_map;
320 for (size_t ii = 0; ii < fragment_varying_size; ++ii) { 342 for (size_t ii = 0; ii < fragment_variable_size; ++ii) {
321 frag_varying_map[fragment_varyings[ii].name] = 343 ShaderTranslator::VariableMap* map;
322 ShaderTranslator::VariableInfo(fragment_varyings[ii].type, 344 switch (fragment_variables[ii].category) {
323 fragment_varyings[ii].size, 345 case kVarAttribute:
324 fragment_varyings[ii].precision, 346 map = &frag_attrib_map;
325 fragment_varyings[ii].static_use, 347 break;
326 fragment_varyings[ii].name); 348 case kVarUniform:
349 map = &frag_uniform_map;
350 break;
351 case kVarVarying:
352 map = &frag_varying_map;
353 break;
354 default:
355 NOTREACHED();
356 }
357 (*map)[fragment_variables[ii].name] =
358 ShaderTranslator::VariableInfo(fragment_variables[ii].type,
359 fragment_variables[ii].size,
360 fragment_variables[ii].precision,
361 fragment_variables[ii].static_use,
362 fragment_variables[ii].name);
327 } 363 }
328 ShaderTranslator::NameMap frag_name_map; 364 ShaderTranslator::NameMap frag_name_map;
329 EXPECT_CALL(frag_shader_translator, attrib_map()) 365 EXPECT_CALL(frag_shader_translator, attrib_map())
330 .WillRepeatedly(ReturnRef(frag_attrib_map)); 366 .WillRepeatedly(ReturnRef(frag_attrib_map));
331 EXPECT_CALL(frag_shader_translator, uniform_map()) 367 EXPECT_CALL(frag_shader_translator, uniform_map())
332 .WillRepeatedly(ReturnRef(frag_uniform_map)); 368 .WillRepeatedly(ReturnRef(frag_uniform_map));
333 EXPECT_CALL(frag_shader_translator, varying_map()) 369 EXPECT_CALL(frag_shader_translator, varying_map())
334 .WillRepeatedly(ReturnRef(frag_varying_map)); 370 .WillRepeatedly(ReturnRef(frag_varying_map));
335 EXPECT_CALL(frag_shader_translator, name_map()) 371 EXPECT_CALL(frag_shader_translator, name_map())
336 .WillRepeatedly(ReturnRef(frag_name_map)); 372 .WillRepeatedly(ReturnRef(frag_name_map));
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 1206 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
1171 1207
1172 EXPECT_TRUE(program->DetectUniformsMismatch()); 1208 EXPECT_TRUE(program->DetectUniformsMismatch());
1173 EXPECT_TRUE(LinkAsExpected(program, false)); 1209 EXPECT_TRUE(LinkAsExpected(program, false));
1174 } 1210 }
1175 1211
1176 // If a varying has different type in the vertex and fragment 1212 // If a varying has different type in the vertex and fragment
1177 // shader, linking should fail. 1213 // shader, linking should fail.
1178 TEST_F(ProgramManagerWithShaderTest, VaryingTypeMismatch) { 1214 TEST_F(ProgramManagerWithShaderTest, VaryingTypeMismatch) {
1179 const VarInfo kVertexVarying = 1215 const VarInfo kVertexVarying =
1180 { SH_FLOAT_VEC3, 1, SH_PRECISION_MEDIUMP, 1, "a" }; 1216 { SH_FLOAT_VEC3, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1181 const VarInfo kFragmentVarying = 1217 const VarInfo kFragmentVarying =
1182 { SH_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a" }; 1218 { SH_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1183 Program* program = SetupVaryingsTest( 1219 Program* program = SetupShaderVariableTest(
1184 &kVertexVarying, 1, &kFragmentVarying, 1); 1220 &kVertexVarying, 1, &kFragmentVarying, 1);
1185 1221
1186 EXPECT_TRUE(program->DetectVaryingsMismatch()); 1222 EXPECT_TRUE(program->DetectVaryingsMismatch());
1187 EXPECT_TRUE(LinkAsExpected(program, false)); 1223 EXPECT_TRUE(LinkAsExpected(program, false));
1188 } 1224 }
1189 1225
1190 // If a varying has different array size in the vertex and fragment 1226 // If a varying has different array size in the vertex and fragment
1191 // shader, linking should fail. 1227 // shader, linking should fail.
1192 TEST_F(ProgramManagerWithShaderTest, VaryingArraySizeMismatch) { 1228 TEST_F(ProgramManagerWithShaderTest, VaryingArraySizeMismatch) {
1193 const VarInfo kVertexVarying = 1229 const VarInfo kVertexVarying =
1194 { SH_FLOAT, 2, SH_PRECISION_MEDIUMP, 1, "a" }; 1230 { SH_FLOAT, 2, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1195 const VarInfo kFragmentVarying = 1231 const VarInfo kFragmentVarying =
1196 { SH_FLOAT, 3, SH_PRECISION_MEDIUMP, 1, "a" }; 1232 { SH_FLOAT, 3, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1197 Program* program = SetupVaryingsTest( 1233 Program* program = SetupShaderVariableTest(
1198 &kVertexVarying, 1, &kFragmentVarying, 1); 1234 &kVertexVarying, 1, &kFragmentVarying, 1);
1199 1235
1200 EXPECT_TRUE(program->DetectVaryingsMismatch()); 1236 EXPECT_TRUE(program->DetectVaryingsMismatch());
1201 EXPECT_TRUE(LinkAsExpected(program, false)); 1237 EXPECT_TRUE(LinkAsExpected(program, false));
1202 } 1238 }
1203 1239
1204 // If a varying has different precision in the vertex and fragment 1240 // If a varying has different precision in the vertex and fragment
1205 // shader, linking should succeed. 1241 // shader, linking should succeed.
1206 TEST_F(ProgramManagerWithShaderTest, VaryingPrecisionMismatch) { 1242 TEST_F(ProgramManagerWithShaderTest, VaryingPrecisionMismatch) {
1207 const VarInfo kVertexVarying = 1243 const VarInfo kVertexVarying =
1208 { SH_FLOAT, 2, SH_PRECISION_HIGHP, 1, "a" }; 1244 { SH_FLOAT, 2, SH_PRECISION_HIGHP, 1, "a", kVarVarying };
1209 const VarInfo kFragmentVarying = 1245 const VarInfo kFragmentVarying =
1210 { SH_FLOAT, 2, SH_PRECISION_MEDIUMP, 1, "a" }; 1246 { SH_FLOAT, 2, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1211 Program* program = SetupVaryingsTest( 1247 Program* program = SetupShaderVariableTest(
1212 &kVertexVarying, 1, &kFragmentVarying, 1); 1248 &kVertexVarying, 1, &kFragmentVarying, 1);
1213 1249
1214 EXPECT_FALSE(program->DetectVaryingsMismatch()); 1250 EXPECT_FALSE(program->DetectVaryingsMismatch());
1215 EXPECT_TRUE(LinkAsExpected(program, true)); 1251 EXPECT_TRUE(LinkAsExpected(program, true));
1216 } 1252 }
1217 1253
1218 // If a varying is statically used in fragment shader but not 1254 // If a varying is statically used in fragment shader but not
1219 // declared in vertex shader, link should fail. 1255 // declared in vertex shader, link should fail.
1220 TEST_F(ProgramManagerWithShaderTest, VaryingMissing) { 1256 TEST_F(ProgramManagerWithShaderTest, VaryingMissing) {
1221 const VarInfo kFragmentVarying = 1257 const VarInfo kFragmentVarying =
1222 { SH_FLOAT, 3, SH_PRECISION_MEDIUMP, 1, "a" }; 1258 { SH_FLOAT, 3, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1223 Program* program = SetupVaryingsTest( 1259 Program* program = SetupShaderVariableTest(
1224 NULL, 0, &kFragmentVarying, 1); 1260 NULL, 0, &kFragmentVarying, 1);
1225 1261
1226 EXPECT_TRUE(program->DetectVaryingsMismatch()); 1262 EXPECT_TRUE(program->DetectVaryingsMismatch());
1227 EXPECT_TRUE(LinkAsExpected(program, false)); 1263 EXPECT_TRUE(LinkAsExpected(program, false));
1228 } 1264 }
1229 1265
1230 // If a varying is declared but not statically used in fragment 1266 // If a varying is declared but not statically used in fragment
1231 // shader, even if it's not declared in vertex shader, link should 1267 // shader, even if it's not declared in vertex shader, link should
1232 // succeed. 1268 // succeed.
1233 TEST_F(ProgramManagerWithShaderTest, InactiveVarying) { 1269 TEST_F(ProgramManagerWithShaderTest, InactiveVarying) {
1234 const VarInfo kFragmentVarying = 1270 const VarInfo kFragmentVarying =
1235 { SH_FLOAT, 3, SH_PRECISION_MEDIUMP, 0, "a" }; 1271 { SH_FLOAT, 3, SH_PRECISION_MEDIUMP, 0, "a", kVarVarying };
1236 Program* program = SetupVaryingsTest( 1272 Program* program = SetupShaderVariableTest(
1237 NULL, 0, &kFragmentVarying, 1); 1273 NULL, 0, &kFragmentVarying, 1);
1238 1274
1239 EXPECT_FALSE(program->DetectVaryingsMismatch()); 1275 EXPECT_FALSE(program->DetectVaryingsMismatch());
1240 EXPECT_TRUE(LinkAsExpected(program, true)); 1276 EXPECT_TRUE(LinkAsExpected(program, true));
1241 } 1277 }
1242 1278
1279 // Uniforms and attributes are both global variables, thus sharing
1280 // the same namespace. Any name conflicts should cause link
1281 // failure.
1282 TEST_F(ProgramManagerWithShaderTest, AttribUniformNameConflict) {
1283 const VarInfo kVertexAttribute =
1284 { SH_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarAttribute };
1285 const VarInfo kFragmentUniform =
1286 { SH_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarUniform };
1287 Program* program = SetupShaderVariableTest(
1288 &kVertexAttribute, 1, &kFragmentUniform, 1);
1289
1290 EXPECT_TRUE(program->DetectGlobalNameConflicts());
1291 EXPECT_TRUE(LinkAsExpected(program, false));
1292 }
1293
1243 // Varyings go over 8 rows. 1294 // Varyings go over 8 rows.
1244 TEST_F(ProgramManagerWithShaderTest, TooManyVaryings) { 1295 TEST_F(ProgramManagerWithShaderTest, TooManyVaryings) {
1245 const VarInfo kVertexVaryings[] = { 1296 const VarInfo kVertexVaryings[] = {
1246 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a" }, 1297 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying },
1247 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b" } 1298 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1248 }; 1299 };
1249 const VarInfo kFragmentVaryings[] = { 1300 const VarInfo kFragmentVaryings[] = {
1250 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a" }, 1301 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying },
1251 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b" } 1302 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1252 }; 1303 };
1253 Program* program = SetupVaryingsTest( 1304 Program* program = SetupShaderVariableTest(
1254 kVertexVaryings, 2, kFragmentVaryings, 2); 1305 kVertexVaryings, 2, kFragmentVaryings, 2);
1255 1306
1256 EXPECT_FALSE(program->CheckVaryingsPacking()); 1307 EXPECT_FALSE(program->CheckVaryingsPacking());
1257 EXPECT_TRUE(LinkAsExpected(program, false)); 1308 EXPECT_TRUE(LinkAsExpected(program, false));
1258 } 1309 }
1259 1310
1260 // Varyings go over 8 rows but some are inactive 1311 // Varyings go over 8 rows but some are inactive
1261 TEST_F(ProgramManagerWithShaderTest, TooManyInactiveVaryings) { 1312 TEST_F(ProgramManagerWithShaderTest, TooManyInactiveVaryings) {
1262 const VarInfo kVertexVaryings[] = { 1313 const VarInfo kVertexVaryings[] = {
1263 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a" }, 1314 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying },
1264 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b" } 1315 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1265 }; 1316 };
1266 const VarInfo kFragmentVaryings[] = { 1317 const VarInfo kFragmentVaryings[] = {
1267 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 0, "a" }, 1318 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 0, "a", kVarVarying },
1268 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b" } 1319 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1269 }; 1320 };
1270 Program* program = SetupVaryingsTest( 1321 Program* program = SetupShaderVariableTest(
1271 kVertexVaryings, 2, kFragmentVaryings, 2); 1322 kVertexVaryings, 2, kFragmentVaryings, 2);
1272 1323
1273 EXPECT_TRUE(program->CheckVaryingsPacking()); 1324 EXPECT_TRUE(program->CheckVaryingsPacking());
1274 EXPECT_TRUE(LinkAsExpected(program, true)); 1325 EXPECT_TRUE(LinkAsExpected(program, true));
1275 } 1326 }
1276 1327
1277 TEST_F(ProgramManagerWithShaderTest, ClearWithSamplerTypes) { 1328 TEST_F(ProgramManagerWithShaderTest, ClearWithSamplerTypes) {
1278 const GLuint kVShaderClientId = 2001; 1329 const GLuint kVShaderClientId = 2001;
1279 const GLuint kFShaderClientId = 2002; 1330 const GLuint kFShaderClientId = 2002;
1280 const GLuint kVShaderServiceId = 3001; 1331 const GLuint kVShaderServiceId = 3001;
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); 1698 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS);
1648 SetExpectationsForNotCachingProgram(); 1699 SetExpectationsForNotCachingProgram();
1649 SetExpectationsForProgramLoadSuccess(); 1700 SetExpectationsForProgramLoadSuccess();
1650 1701
1651 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, NULL, 1702 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, NULL,
1652 base::Bind(&ShaderCacheCb))); 1703 base::Bind(&ShaderCacheCb)));
1653 } 1704 }
1654 1705
1655 } // namespace gles2 1706 } // namespace gles2
1656 } // namespace gpu 1707 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698