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

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

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

Powered by Google App Engine
This is Rietveld 408576698