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

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

Issue 998423005: Updated shader program caching to account for transform feedback varyings (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed zmo@'s feedback Created 5 years, 9 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
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/memory_program_cache.h" 5 #include "gpu/command_buffer/service/memory_program_cache.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "gpu/command_buffer/common/gles2_cmd_format.h" 8 #include "gpu/command_buffer/common/gles2_cmd_format.h"
9 #include "gpu/command_buffer/service/gl_utils.h" 9 #include "gpu/command_buffer/service/gl_utils.h"
10 #include "gpu/command_buffer/service/gpu_service_test.h" 10 #include "gpu/command_buffer/service/gpu_service_test.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 const int kProgramId = 10; 184 const int kProgramId = 10;
185 const int kBinaryLength = 20; 185 const int kBinaryLength = 20;
186 char test_binary[kBinaryLength]; 186 char test_binary[kBinaryLength];
187 for (int i = 0; i < kBinaryLength; ++i) { 187 for (int i = 0; i < kBinaryLength; ++i) {
188 test_binary[i] = i; 188 test_binary[i] = i;
189 } 189 }
190 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 190 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
191 191
192 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 192 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
193 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 193 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
194 fragment_shader_, NULL, 194 fragment_shader_, NULL, NULL, GL_NONE,
195 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 195 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
196 base::Unretained(this))); 196 base::Unretained(this)));
197 197
198 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 198 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
199 vertex_shader_->last_compiled_signature(), 199 vertex_shader_->last_compiled_signature(),
200 fragment_shader_->last_compiled_signature(), 200 fragment_shader_->last_compiled_signature(),
201 NULL)); 201 NULL, NULL, GL_NONE));
202 EXPECT_EQ(1, shader_cache_count()); 202 EXPECT_EQ(1, shader_cache_count());
203 } 203 }
204 204
205 TEST_F(MemoryProgramCacheTest, LoadProgram) { 205 TEST_F(MemoryProgramCacheTest, LoadProgram) {
206 const GLenum kFormat = 1; 206 const GLenum kFormat = 1;
207 const int kProgramId = 10; 207 const int kProgramId = 10;
208 const int kBinaryLength = 20; 208 const int kBinaryLength = 20;
209 char test_binary[kBinaryLength]; 209 char test_binary[kBinaryLength];
210 for (int i = 0; i < kBinaryLength; ++i) { 210 for (int i = 0; i < kBinaryLength; ++i) {
211 test_binary[i] = i; 211 test_binary[i] = i;
212 } 212 }
213 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 213 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
214 214
215 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 215 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
216 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 216 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
217 fragment_shader_, NULL, 217 fragment_shader_, NULL, NULL, GL_NONE,
218 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 218 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
219 base::Unretained(this))); 219 base::Unretained(this)));
220 220
221 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 221 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
222 vertex_shader_->last_compiled_signature(), 222 vertex_shader_->last_compiled_signature(),
223 fragment_shader_->last_compiled_signature(), 223 fragment_shader_->last_compiled_signature(),
224 NULL)); 224 NULL, NULL, GL_NONE));
225 EXPECT_EQ(1, shader_cache_count()); 225 EXPECT_EQ(1, shader_cache_count());
226 226
227 cache_->Clear(); 227 cache_->Clear();
228 228
229 cache_->LoadProgram(shader_cache_shader()); 229 cache_->LoadProgram(shader_cache_shader());
230 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 230 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
231 vertex_shader_->last_compiled_signature(), 231 vertex_shader_->last_compiled_signature(),
232 fragment_shader_->last_compiled_signature(), 232 fragment_shader_->last_compiled_signature(),
233 NULL)); 233 NULL, NULL, GL_NONE));
234 } 234 }
235 235
236 TEST_F(MemoryProgramCacheTest, CacheLoadMatchesSave) { 236 TEST_F(MemoryProgramCacheTest, CacheLoadMatchesSave) {
237 const GLenum kFormat = 1; 237 const GLenum kFormat = 1;
238 const int kProgramId = 10; 238 const int kProgramId = 10;
239 const int kBinaryLength = 20; 239 const int kBinaryLength = 20;
240 char test_binary[kBinaryLength]; 240 char test_binary[kBinaryLength];
241 for (int i = 0; i < kBinaryLength; ++i) { 241 for (int i = 0; i < kBinaryLength; ++i) {
242 test_binary[i] = i; 242 test_binary[i] = i;
243 } 243 }
244 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 244 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
245 245
246 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 246 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
247 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 247 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
248 fragment_shader_, NULL, 248 fragment_shader_, NULL, NULL, GL_NONE,
249 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 249 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
250 base::Unretained(this))); 250 base::Unretained(this)));
251 EXPECT_EQ(1, shader_cache_count()); 251 EXPECT_EQ(1, shader_cache_count());
252 252
253 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); 253 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map();
254 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); 254 UniformMap vertex_uniform_map = vertex_shader_->uniform_map();
255 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); 255 VaryingMap vertex_varying_map = vertex_shader_->varying_map();
256 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); 256 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map();
257 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); 257 UniformMap fragment_uniform_map = fragment_shader_->uniform_map();
258 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); 258 VaryingMap fragment_varying_map = fragment_shader_->varying_map();
259 259
260 vertex_shader_->set_attrib_map(AttributeMap()); 260 vertex_shader_->set_attrib_map(AttributeMap());
261 vertex_shader_->set_uniform_map(UniformMap()); 261 vertex_shader_->set_uniform_map(UniformMap());
262 vertex_shader_->set_varying_map(VaryingMap()); 262 vertex_shader_->set_varying_map(VaryingMap());
263 fragment_shader_->set_attrib_map(AttributeMap()); 263 fragment_shader_->set_attrib_map(AttributeMap());
264 fragment_shader_->set_uniform_map(UniformMap()); 264 fragment_shader_->set_uniform_map(UniformMap());
265 fragment_shader_->set_varying_map(VaryingMap()); 265 fragment_shader_->set_varying_map(VaryingMap());
266 266
267 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); 267 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator);
268 268
269 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 269 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
270 kProgramId, 270 kProgramId,
271 vertex_shader_, 271 vertex_shader_,
272 fragment_shader_, 272 fragment_shader_,
273 NULL, 273 NULL,
274 NULL,
275 GL_NONE,
274 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 276 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
275 base::Unretained(this)))); 277 base::Unretained(this))));
276 278
277 // apparently the hash_map implementation on android doesn't have the 279 // apparently the hash_map implementation on android doesn't have the
278 // equality operator 280 // equality operator
279 #if !defined(OS_ANDROID) 281 #if !defined(OS_ANDROID)
280 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map()); 282 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map());
281 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map()); 283 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map());
282 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map()); 284 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map());
283 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map()); 285 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map());
284 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map()); 286 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map());
285 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map()); 287 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map());
286 #endif 288 #endif
287 } 289 }
288 290
289 TEST_F(MemoryProgramCacheTest, LoadProgramMatchesSave) { 291 TEST_F(MemoryProgramCacheTest, LoadProgramMatchesSave) {
290 const GLenum kFormat = 1; 292 const GLenum kFormat = 1;
291 const int kProgramId = 10; 293 const int kProgramId = 10;
292 const int kBinaryLength = 20; 294 const int kBinaryLength = 20;
293 char test_binary[kBinaryLength]; 295 char test_binary[kBinaryLength];
294 for (int i = 0; i < kBinaryLength; ++i) { 296 for (int i = 0; i < kBinaryLength; ++i) {
295 test_binary[i] = i; 297 test_binary[i] = i;
296 } 298 }
297 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 299 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
298 300
299 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 301 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
300 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 302 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
301 fragment_shader_, NULL, 303 fragment_shader_, NULL, NULL, GL_NONE,
302 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 304 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
303 base::Unretained(this))); 305 base::Unretained(this)));
304 EXPECT_EQ(1, shader_cache_count()); 306 EXPECT_EQ(1, shader_cache_count());
305 307
306 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); 308 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map();
307 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); 309 UniformMap vertex_uniform_map = vertex_shader_->uniform_map();
308 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); 310 VaryingMap vertex_varying_map = vertex_shader_->varying_map();
309 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); 311 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map();
310 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); 312 UniformMap fragment_uniform_map = fragment_shader_->uniform_map();
311 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); 313 VaryingMap fragment_varying_map = fragment_shader_->varying_map();
312 314
313 vertex_shader_->set_attrib_map(AttributeMap()); 315 vertex_shader_->set_attrib_map(AttributeMap());
314 vertex_shader_->set_uniform_map(UniformMap()); 316 vertex_shader_->set_uniform_map(UniformMap());
315 vertex_shader_->set_varying_map(VaryingMap()); 317 vertex_shader_->set_varying_map(VaryingMap());
316 fragment_shader_->set_attrib_map(AttributeMap()); 318 fragment_shader_->set_attrib_map(AttributeMap());
317 fragment_shader_->set_uniform_map(UniformMap()); 319 fragment_shader_->set_uniform_map(UniformMap());
318 fragment_shader_->set_varying_map(VaryingMap()); 320 fragment_shader_->set_varying_map(VaryingMap());
319 321
320 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); 322 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator);
321 323
322 cache_->Clear(); 324 cache_->Clear();
323 cache_->LoadProgram(shader_cache_shader()); 325 cache_->LoadProgram(shader_cache_shader());
324 326
325 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 327 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
326 kProgramId, 328 kProgramId,
327 vertex_shader_, 329 vertex_shader_,
328 fragment_shader_, 330 fragment_shader_,
329 NULL, 331 NULL,
332 NULL,
333 GL_NONE,
330 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 334 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
331 base::Unretained(this)))); 335 base::Unretained(this))));
332 336
333 // apparently the hash_map implementation on android doesn't have the 337 // apparently the hash_map implementation on android doesn't have the
334 // equality operator 338 // equality operator
335 #if !defined(OS_ANDROID) 339 #if !defined(OS_ANDROID)
336 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map()); 340 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map());
337 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map()); 341 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map());
338 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map()); 342 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map());
339 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map()); 343 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map());
340 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map()); 344 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map());
341 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map()); 345 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map());
342 #endif 346 #endif
343 } 347 }
344 348
345 TEST_F(MemoryProgramCacheTest, LoadFailOnLinkFalse) { 349 TEST_F(MemoryProgramCacheTest, LoadFailOnLinkFalse) {
346 const GLenum kFormat = 1; 350 const GLenum kFormat = 1;
347 const int kProgramId = 10; 351 const int kProgramId = 10;
348 const int kBinaryLength = 20; 352 const int kBinaryLength = 20;
349 char test_binary[kBinaryLength]; 353 char test_binary[kBinaryLength];
350 for (int i = 0; i < kBinaryLength; ++i) { 354 for (int i = 0; i < kBinaryLength; ++i) {
351 test_binary[i] = i; 355 test_binary[i] = i;
352 } 356 }
353 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 357 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
354 358
355 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 359 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
356 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 360 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
357 fragment_shader_, NULL, 361 fragment_shader_, NULL, NULL, GL_NONE,
358 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 362 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
359 base::Unretained(this))); 363 base::Unretained(this)));
360 364
361 SetExpectationsForLoadLinkedProgramFailure(kProgramId, &emulator); 365 SetExpectationsForLoadLinkedProgramFailure(kProgramId, &emulator);
362 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 366 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
363 kProgramId, 367 kProgramId,
364 vertex_shader_, 368 vertex_shader_,
365 fragment_shader_, 369 fragment_shader_,
366 NULL, 370 NULL,
371 NULL,
372 GL_NONE,
367 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 373 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
368 base::Unretained(this)))); 374 base::Unretained(this))));
369 } 375 }
370 376
371 TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentSource) { 377 TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentSource) {
372 const GLenum kFormat = 1; 378 const GLenum kFormat = 1;
373 const int kProgramId = 10; 379 const int kProgramId = 10;
374 const int kBinaryLength = 20; 380 const int kBinaryLength = 20;
375 char test_binary[kBinaryLength]; 381 char test_binary[kBinaryLength];
376 for (int i = 0; i < kBinaryLength; ++i) { 382 for (int i = 0; i < kBinaryLength; ++i) {
377 test_binary[i] = i; 383 test_binary[i] = i;
378 } 384 }
379 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 385 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
380 386
381 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 387 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
382 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 388 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
383 fragment_shader_, NULL, 389 fragment_shader_, NULL, NULL, GL_NONE,
384 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 390 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
385 base::Unretained(this))); 391 base::Unretained(this)));
386 392
387 const std::string vertex_orig_source = vertex_shader_->last_compiled_source(); 393 const std::string vertex_orig_source = vertex_shader_->last_compiled_source();
388 vertex_shader_->set_source("different!"); 394 vertex_shader_->set_source("different!");
389 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true); 395 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true);
390 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 396 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
391 kProgramId, 397 kProgramId,
392 vertex_shader_, 398 vertex_shader_,
393 fragment_shader_, 399 fragment_shader_,
394 NULL, 400 NULL,
401 NULL,
402 GL_NONE,
395 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 403 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
396 base::Unretained(this)))); 404 base::Unretained(this))));
397 405
398 vertex_shader_->set_source(vertex_orig_source); 406 vertex_shader_->set_source(vertex_orig_source);
399 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true); 407 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true);
400 fragment_shader_->set_source("different!"); 408 fragment_shader_->set_source("different!");
401 TestHelper::SetShaderStates(gl_.get(), fragment_shader_, true); 409 TestHelper::SetShaderStates(gl_.get(), fragment_shader_, true);
402 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 410 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
403 kProgramId, 411 kProgramId,
404 vertex_shader_, 412 vertex_shader_,
405 fragment_shader_, 413 fragment_shader_,
406 NULL, 414 NULL,
415 NULL,
416 GL_NONE,
407 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 417 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
408 base::Unretained(this)))); 418 base::Unretained(this))));
409 } 419 }
410 420
411 TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentMap) { 421 TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentMap) {
412 const GLenum kFormat = 1; 422 const GLenum kFormat = 1;
413 const int kProgramId = 10; 423 const int kProgramId = 10;
414 const int kBinaryLength = 20; 424 const int kBinaryLength = 20;
415 char test_binary[kBinaryLength]; 425 char test_binary[kBinaryLength];
416 for (int i = 0; i < kBinaryLength; ++i) { 426 for (int i = 0; i < kBinaryLength; ++i) {
417 test_binary[i] = i; 427 test_binary[i] = i;
418 } 428 }
419 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 429 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
420 430
421 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 431 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
422 ProgramCache::LocationMap binding_map; 432 ProgramCache::LocationMap binding_map;
423 binding_map["test"] = 512; 433 binding_map["test"] = 512;
424 cache_->SaveLinkedProgram(kProgramId, 434 cache_->SaveLinkedProgram(kProgramId,
425 vertex_shader_, 435 vertex_shader_,
426 fragment_shader_, 436 fragment_shader_,
427 &binding_map, 437 &binding_map,
438 NULL,
439 GL_NONE,
428 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 440 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
429 base::Unretained(this))); 441 base::Unretained(this)));
430 442
431 binding_map["different!"] = 59; 443 binding_map["different!"] = 59;
432 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 444 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
433 kProgramId, 445 kProgramId,
434 vertex_shader_, 446 vertex_shader_,
435 fragment_shader_, 447 fragment_shader_,
436 &binding_map, 448 &binding_map,
449 NULL,
450 GL_NONE,
437 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 451 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
438 base::Unretained(this)))); 452 base::Unretained(this))));
439 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 453 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
440 kProgramId, 454 kProgramId,
441 vertex_shader_, 455 vertex_shader_,
442 fragment_shader_, 456 fragment_shader_,
443 NULL, 457 NULL,
458 NULL,
459 GL_NONE,
444 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 460 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
445 base::Unretained(this)))); 461 base::Unretained(this))));
446 } 462 }
463
464 TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentTransformFeedbackVaryings) {
465 const GLenum kFormat = 1;
466 const int kProgramId = 10;
467 const int kBinaryLength = 20;
468 char test_binary[kBinaryLength];
469 for (int i = 0; i < kBinaryLength; ++i) {
470 test_binary[i] = i;
471 }
472 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
473
474 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
475 std::vector<std::string> varyings;
476 varyings.push_back("test");
477 cache_->SaveLinkedProgram(kProgramId,
478 vertex_shader_,
479 fragment_shader_,
480 NULL,
481 &varyings,
482 GL_INTERLEAVED_ATTRIBS,
483 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
484 base::Unretained(this)));
485
486 varyings.push_back("different!");
487 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
488 kProgramId,
489 vertex_shader_,
490 fragment_shader_,
491 NULL,
492 &varyings,
493 GL_INTERLEAVED_ATTRIBS,
494 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
495 base::Unretained(this))));
496 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
497 kProgramId,
498 vertex_shader_,
499 fragment_shader_,
500 NULL,
501 NULL,
502 GL_INTERLEAVED_ATTRIBS,
503 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
504 base::Unretained(this))));
505 }
447 506
448 TEST_F(MemoryProgramCacheTest, MemoryProgramCacheEviction) { 507 TEST_F(MemoryProgramCacheTest, MemoryProgramCacheEviction) {
449 const GLenum kFormat = 1; 508 const GLenum kFormat = 1;
450 const int kProgramId = 10; 509 const int kProgramId = 10;
451 const int kBinaryLength = 20; 510 const int kBinaryLength = 20;
452 char test_binary[kBinaryLength]; 511 char test_binary[kBinaryLength];
453 for (int i = 0; i < kBinaryLength; ++i) { 512 for (int i = 0; i < kBinaryLength; ++i) {
454 test_binary[i] = i; 513 test_binary[i] = i;
455 } 514 }
456 ProgramBinaryEmulator emulator1(kBinaryLength, kFormat, test_binary); 515 ProgramBinaryEmulator emulator1(kBinaryLength, kFormat, test_binary);
457 516
458 517
459 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator1); 518 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator1);
460 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 519 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
461 fragment_shader_, NULL, 520 fragment_shader_, NULL, NULL, GL_NONE,
462 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 521 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
463 base::Unretained(this))); 522 base::Unretained(this)));
464 523
465 const int kEvictingProgramId = 11; 524 const int kEvictingProgramId = 11;
466 const GLuint kEvictingBinaryLength = kCacheSizeBytes - kBinaryLength + 1; 525 const GLuint kEvictingBinaryLength = kCacheSizeBytes - kBinaryLength + 1;
467 526
468 // save old source and modify for new program 527 // save old source and modify for new program
469 const std::string& old_sig = fragment_shader_->last_compiled_signature(); 528 const std::string& old_sig = fragment_shader_->last_compiled_signature();
470 fragment_shader_->set_source("al sdfkjdk"); 529 fragment_shader_->set_source("al sdfkjdk");
471 TestHelper::SetShaderStates(gl_.get(), fragment_shader_, true); 530 TestHelper::SetShaderStates(gl_.get(), fragment_shader_, true);
472 531
473 scoped_ptr<char[]> bigTestBinary = 532 scoped_ptr<char[]> bigTestBinary =
474 scoped_ptr<char[]>(new char[kEvictingBinaryLength]); 533 scoped_ptr<char[]>(new char[kEvictingBinaryLength]);
475 for (size_t i = 0; i < kEvictingBinaryLength; ++i) { 534 for (size_t i = 0; i < kEvictingBinaryLength; ++i) {
476 bigTestBinary[i] = i % 250; 535 bigTestBinary[i] = i % 250;
477 } 536 }
478 ProgramBinaryEmulator emulator2(kEvictingBinaryLength, 537 ProgramBinaryEmulator emulator2(kEvictingBinaryLength,
479 kFormat, 538 kFormat,
480 bigTestBinary.get()); 539 bigTestBinary.get());
481 540
482 SetExpectationsForSaveLinkedProgram(kEvictingProgramId, &emulator2); 541 SetExpectationsForSaveLinkedProgram(kEvictingProgramId, &emulator2);
483 cache_->SaveLinkedProgram(kEvictingProgramId, 542 cache_->SaveLinkedProgram(kEvictingProgramId,
484 vertex_shader_, 543 vertex_shader_,
485 fragment_shader_, 544 fragment_shader_,
486 NULL, 545 NULL,
546 NULL,
547 GL_NONE,
487 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 548 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
488 base::Unretained(this))); 549 base::Unretained(this)));
489 550
490 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 551 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
491 vertex_shader_->last_compiled_signature(), 552 vertex_shader_->last_compiled_signature(),
492 fragment_shader_->last_compiled_signature(), 553 fragment_shader_->last_compiled_signature(),
493 NULL)); 554 NULL, NULL, GL_NONE));
494 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, cache_->GetLinkedProgramStatus( 555 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, cache_->GetLinkedProgramStatus(
495 old_sig, 556 old_sig,
496 fragment_shader_->last_compiled_signature(), 557 fragment_shader_->last_compiled_signature(),
497 NULL)); 558 NULL, NULL, GL_NONE));
498 } 559 }
499 560
500 TEST_F(MemoryProgramCacheTest, SaveCorrectProgram) { 561 TEST_F(MemoryProgramCacheTest, SaveCorrectProgram) {
501 const GLenum kFormat = 1; 562 const GLenum kFormat = 1;
502 const int kProgramId = 10; 563 const int kProgramId = 10;
503 const int kBinaryLength = 20; 564 const int kBinaryLength = 20;
504 char test_binary[kBinaryLength]; 565 char test_binary[kBinaryLength];
505 for (int i = 0; i < kBinaryLength; ++i) { 566 for (int i = 0; i < kBinaryLength; ++i) {
506 test_binary[i] = i; 567 test_binary[i] = i;
507 } 568 }
508 ProgramBinaryEmulator emulator1(kBinaryLength, kFormat, test_binary); 569 ProgramBinaryEmulator emulator1(kBinaryLength, kFormat, test_binary);
509 570
510 vertex_shader_->set_source("different!"); 571 vertex_shader_->set_source("different!");
511 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator1); 572 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator1);
512 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 573 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
513 fragment_shader_, NULL, 574 fragment_shader_, NULL, NULL, GL_NONE,
514 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 575 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
515 base::Unretained(this))); 576 base::Unretained(this)));
516 577
517 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 578 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
518 vertex_shader_->last_compiled_signature(), 579 vertex_shader_->last_compiled_signature(),
519 fragment_shader_->last_compiled_signature(), 580 fragment_shader_->last_compiled_signature(),
520 NULL)); 581 NULL, NULL, GL_NONE));
521 } 582 }
522 583
523 TEST_F(MemoryProgramCacheTest, LoadCorrectProgram) { 584 TEST_F(MemoryProgramCacheTest, LoadCorrectProgram) {
524 const GLenum kFormat = 1; 585 const GLenum kFormat = 1;
525 const int kProgramId = 10; 586 const int kProgramId = 10;
526 const int kBinaryLength = 20; 587 const int kBinaryLength = 20;
527 char test_binary[kBinaryLength]; 588 char test_binary[kBinaryLength];
528 for (int i = 0; i < kBinaryLength; ++i) { 589 for (int i = 0; i < kBinaryLength; ++i) {
529 test_binary[i] = i; 590 test_binary[i] = i;
530 } 591 }
531 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 592 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
532 593
533 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 594 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
534 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 595 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
535 fragment_shader_, NULL, 596 fragment_shader_, NULL, NULL, GL_NONE,
536 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 597 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
537 base::Unretained(this))); 598 base::Unretained(this)));
538 599
539 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 600 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
540 vertex_shader_->last_compiled_signature(), 601 vertex_shader_->last_compiled_signature(),
541 fragment_shader_->last_compiled_signature(), 602 fragment_shader_->last_compiled_signature(),
542 NULL)); 603 NULL, NULL, GL_NONE));
543 604
544 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); 605 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator);
545 606
546 fragment_shader_->set_source("different!"); 607 fragment_shader_->set_source("different!");
547 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 608 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
548 kProgramId, 609 kProgramId,
549 vertex_shader_, 610 vertex_shader_,
550 fragment_shader_, 611 fragment_shader_,
551 NULL, 612 NULL,
613 NULL,
614 GL_NONE,
552 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 615 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
553 base::Unretained(this)))); 616 base::Unretained(this))));
554 } 617 }
555 618
556 TEST_F(MemoryProgramCacheTest, OverwriteOnNewSave) { 619 TEST_F(MemoryProgramCacheTest, OverwriteOnNewSave) {
557 const GLenum kFormat = 1; 620 const GLenum kFormat = 1;
558 const int kProgramId = 10; 621 const int kProgramId = 10;
559 const int kBinaryLength = 20; 622 const int kBinaryLength = 20;
560 char test_binary[kBinaryLength]; 623 char test_binary[kBinaryLength];
561 for (int i = 0; i < kBinaryLength; ++i) { 624 for (int i = 0; i < kBinaryLength; ++i) {
562 test_binary[i] = i; 625 test_binary[i] = i;
563 } 626 }
564 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 627 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
565 628
566 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 629 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
567 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 630 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
568 fragment_shader_, NULL, 631 fragment_shader_, NULL, NULL, GL_NONE,
569 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 632 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
570 base::Unretained(this))); 633 base::Unretained(this)));
571 634
572 635
573 char test_binary2[kBinaryLength]; 636 char test_binary2[kBinaryLength];
574 for (int i = 0; i < kBinaryLength; ++i) { 637 for (int i = 0; i < kBinaryLength; ++i) {
575 test_binary2[i] = (i*2) % 250; 638 test_binary2[i] = (i*2) % 250;
576 } 639 }
577 ProgramBinaryEmulator emulator2(kBinaryLength, kFormat, test_binary2); 640 ProgramBinaryEmulator emulator2(kBinaryLength, kFormat, test_binary2);
578 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator2); 641 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator2);
579 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 642 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
580 fragment_shader_, NULL, 643 fragment_shader_, NULL, NULL, GL_NONE,
581 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 644 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
582 base::Unretained(this))); 645 base::Unretained(this)));
583 646
584 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator2); 647 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator2);
585 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 648 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
586 kProgramId, 649 kProgramId,
587 vertex_shader_, 650 vertex_shader_,
588 fragment_shader_, 651 fragment_shader_,
589 NULL, 652 NULL,
653 NULL,
654 GL_NONE,
590 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 655 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
591 base::Unretained(this)))); 656 base::Unretained(this))));
592 } 657 }
593 658
594 } // namespace gles2 659 } // namespace gles2
595 } // namespace gpu 660 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698