OLD | NEW |
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/texture_manager.h" | 5 #include "gpu/command_buffer/service/texture_manager.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "gpu/command_buffer/service/error_state_mock.h" | 8 #include "gpu/command_buffer/service/error_state_mock.h" |
9 #include "gpu/command_buffer/service/feature_info.h" | 9 #include "gpu/command_buffer/service/feature_info.h" |
10 #include "gpu/command_buffer/service/framebuffer_manager.h" | 10 #include "gpu/command_buffer/service/framebuffer_manager.h" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 const GLuint kClient1Id = 1; | 103 const GLuint kClient1Id = 1; |
104 const GLuint kService1Id = 11; | 104 const GLuint kService1Id = 11; |
105 const GLuint kClient2Id = 2; | 105 const GLuint kClient2Id = 2; |
106 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 106 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
107 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 107 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
108 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 108 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
109 // Check we can create texture. | 109 // Check we can create texture. |
110 manager_->CreateTexture(kClient1Id, kService1Id); | 110 manager_->CreateTexture(kClient1Id, kService1Id); |
111 // Check texture got created. | 111 // Check texture got created. |
112 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id); | 112 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id); |
113 ASSERT_TRUE(texture != NULL); | 113 ASSERT_TRUE(texture.get() != NULL); |
114 EXPECT_EQ(kService1Id, texture->service_id()); | 114 EXPECT_EQ(kService1Id, texture->service_id()); |
115 EXPECT_EQ(kClient1Id, texture->client_id()); | 115 EXPECT_EQ(kClient1Id, texture->client_id()); |
116 EXPECT_EQ(texture->texture(), manager_->GetTextureForServiceId( | 116 EXPECT_EQ(texture->texture(), manager_->GetTextureForServiceId( |
117 texture->service_id())); | 117 texture->service_id())); |
118 // Check we get nothing for a non-existent texture. | 118 // Check we get nothing for a non-existent texture. |
119 EXPECT_TRUE(manager_->GetTexture(kClient2Id) == NULL); | 119 EXPECT_TRUE(manager_->GetTexture(kClient2Id) == NULL); |
120 // Check trying to a remove non-existent textures does not crash. | 120 // Check trying to a remove non-existent textures does not crash. |
121 manager_->RemoveTexture(kClient2Id); | 121 manager_->RemoveTexture(kClient2Id); |
122 // Check that it gets deleted when the last reference is released. | 122 // Check that it gets deleted when the last reference is released. |
123 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 123 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 class TextureMemoryTrackerTest : public TextureTestBase { | 437 class TextureMemoryTrackerTest : public TextureTestBase { |
438 protected: | 438 protected: |
439 virtual void SetUp() { | 439 virtual void SetUp() { |
440 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>(); | 440 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>(); |
441 SetUpBase(mock_memory_tracker_.get(), std::string()); | 441 SetUpBase(mock_memory_tracker_.get(), std::string()); |
442 } | 442 } |
443 | 443 |
444 scoped_refptr<MockMemoryTracker> mock_memory_tracker_; | 444 scoped_refptr<MockMemoryTracker> mock_memory_tracker_; |
445 }; | 445 }; |
446 | 446 |
447 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \ | 447 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \ |
448 EXPECT_CALL(*mock_memory_tracker_, \ | 448 EXPECT_CALL(*mock_memory_tracker_.get(), \ |
449 TrackMemoryAllocatedChange(old_size, new_size, pool)) \ | 449 TrackMemoryAllocatedChange(old_size, new_size, pool)) \ |
450 .Times(1) \ | 450 .Times(1).RetiresOnSaturation() |
451 .RetiresOnSaturation() \ | |
452 | 451 |
453 TEST_F(TextureTest, Basic) { | 452 TEST_F(TextureTest, Basic) { |
454 Texture* texture = texture_ref_->texture(); | 453 Texture* texture = texture_ref_->texture(); |
455 EXPECT_EQ(0u, texture->target()); | 454 EXPECT_EQ(0u, texture->target()); |
456 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 455 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
457 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 456 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
458 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 457 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
459 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 458 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
460 EXPECT_EQ(0, texture->num_uncleared_mips()); | 459 EXPECT_EQ(0, texture->num_uncleared_mips()); |
461 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 460 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
462 EXPECT_TRUE(texture->SafeToRenderFrom()); | 461 EXPECT_TRUE(texture->SafeToRenderFrom()); |
463 EXPECT_FALSE(texture->IsImmutable()); | 462 EXPECT_FALSE(texture->IsImmutable()); |
464 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), | 463 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), |
465 texture->min_filter()); | 464 texture->min_filter()); |
466 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter()); | 465 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter()); |
467 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s()); | 466 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s()); |
468 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t()); | 467 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t()); |
469 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 468 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
470 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 469 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
471 EXPECT_EQ(0u, texture->estimated_size()); | 470 EXPECT_EQ(0u, texture->estimated_size()); |
472 } | 471 } |
473 | 472 |
474 TEST_F(TextureTest, SetTargetTexture2D) { | 473 TEST_F(TextureTest, SetTargetTexture2D) { |
475 Texture* texture = texture_ref_->texture(); | 474 Texture* texture = texture_ref_->texture(); |
476 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 475 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
477 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 476 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
478 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 477 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
479 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 478 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
480 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 479 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
481 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 480 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
482 EXPECT_TRUE(texture->SafeToRenderFrom()); | 481 EXPECT_TRUE(texture->SafeToRenderFrom()); |
483 EXPECT_FALSE(texture->IsImmutable()); | 482 EXPECT_FALSE(texture->IsImmutable()); |
484 } | 483 } |
485 | 484 |
486 TEST_F(TextureTest, SetTargetTextureExternalOES) { | 485 TEST_F(TextureTest, SetTargetTextureExternalOES) { |
487 Texture* texture = texture_ref_->texture(); | 486 Texture* texture = texture_ref_->texture(); |
488 manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES); | 487 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); |
489 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 488 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
490 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 489 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
491 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 490 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
492 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 491 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
493 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 492 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
494 EXPECT_TRUE(texture->SafeToRenderFrom()); | 493 EXPECT_TRUE(texture->SafeToRenderFrom()); |
495 EXPECT_TRUE(texture->IsImmutable()); | 494 EXPECT_TRUE(texture->IsImmutable()); |
496 manager_->SetStreamTexture(texture_ref_, true); | 495 manager_->SetStreamTexture(texture_ref_.get(), true); |
497 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 496 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
498 } | 497 } |
499 | 498 |
500 TEST_F(TextureTest, ZeroSizeCanNotRender) { | 499 TEST_F(TextureTest, ZeroSizeCanNotRender) { |
501 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 500 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
502 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 501 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
503 manager_->SetLevelInfo(texture_ref_, | 502 manager_->SetLevelInfo(texture_ref_.get(), |
504 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 503 GL_TEXTURE_2D, |
505 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 504 0, |
506 manager_->SetLevelInfo(texture_ref_, | 505 GL_RGBA, |
507 GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 506 1, |
508 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 507 1, |
| 508 1, |
| 509 0, |
| 510 GL_RGBA, |
| 511 GL_UNSIGNED_BYTE, |
| 512 true); |
| 513 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 514 manager_->SetLevelInfo(texture_ref_.get(), |
| 515 GL_TEXTURE_2D, |
| 516 0, |
| 517 GL_RGBA, |
| 518 0, |
| 519 0, |
| 520 1, |
| 521 0, |
| 522 GL_RGBA, |
| 523 GL_UNSIGNED_BYTE, |
| 524 true); |
| 525 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
509 } | 526 } |
510 | 527 |
511 TEST_F(TextureTest, EstimatedSize) { | 528 TEST_F(TextureTest, EstimatedSize) { |
512 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 529 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
513 manager_->SetLevelInfo(texture_ref_, | 530 manager_->SetLevelInfo(texture_ref_.get(), |
514 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 531 GL_TEXTURE_2D, |
| 532 0, |
| 533 GL_RGBA, |
| 534 8, |
| 535 4, |
| 536 1, |
| 537 0, |
| 538 GL_RGBA, |
| 539 GL_UNSIGNED_BYTE, |
| 540 true); |
515 EXPECT_EQ(8u * 4u * 4u, texture_ref_->texture()->estimated_size()); | 541 EXPECT_EQ(8u * 4u * 4u, texture_ref_->texture()->estimated_size()); |
516 manager_->SetLevelInfo(texture_ref_, | 542 manager_->SetLevelInfo(texture_ref_.get(), |
517 GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 543 GL_TEXTURE_2D, |
| 544 2, |
| 545 GL_RGBA, |
| 546 8, |
| 547 4, |
| 548 1, |
| 549 0, |
| 550 GL_RGBA, |
| 551 GL_UNSIGNED_BYTE, |
| 552 true); |
518 EXPECT_EQ(8u * 4u * 4u * 2u, texture_ref_->texture()->estimated_size()); | 553 EXPECT_EQ(8u * 4u * 4u * 2u, texture_ref_->texture()->estimated_size()); |
519 } | 554 } |
520 | 555 |
521 TEST_F(TextureMemoryTrackerTest, EstimatedSize) { | 556 TEST_F(TextureMemoryTrackerTest, EstimatedSize) { |
522 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 557 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
523 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); | 558 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); |
524 manager_->SetLevelInfo(texture_ref_, | 559 manager_->SetLevelInfo(texture_ref_.get(), |
525 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 560 GL_TEXTURE_2D, |
| 561 0, |
| 562 GL_RGBA, |
| 563 8, |
| 564 4, |
| 565 1, |
| 566 0, |
| 567 GL_RGBA, |
| 568 GL_UNSIGNED_BYTE, |
| 569 true); |
526 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); | 570 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); |
527 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 256, MemoryTracker::kUnmanaged); | 571 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 256, MemoryTracker::kUnmanaged); |
528 manager_->SetLevelInfo(texture_ref_, | 572 manager_->SetLevelInfo(texture_ref_.get(), |
529 GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 573 GL_TEXTURE_2D, |
| 574 2, |
| 575 GL_RGBA, |
| 576 8, |
| 577 4, |
| 578 1, |
| 579 0, |
| 580 GL_RGBA, |
| 581 GL_UNSIGNED_BYTE, |
| 582 true); |
530 // Add expectation for texture deletion. | 583 // Add expectation for texture deletion. |
531 EXPECT_MEMORY_ALLOCATION_CHANGE(256, 0, MemoryTracker::kUnmanaged); | 584 EXPECT_MEMORY_ALLOCATION_CHANGE(256, 0, MemoryTracker::kUnmanaged); |
532 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 585 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
533 } | 586 } |
534 | 587 |
535 TEST_F(TextureMemoryTrackerTest, SetParameterPool) { | 588 TEST_F(TextureMemoryTrackerTest, SetParameterPool) { |
536 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 589 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
537 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); | 590 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); |
538 manager_->SetLevelInfo(texture_ref_, | 591 manager_->SetLevelInfo(texture_ref_.get(), |
539 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 592 GL_TEXTURE_2D, |
| 593 0, |
| 594 GL_RGBA, |
| 595 8, |
| 596 4, |
| 597 1, |
| 598 0, |
| 599 GL_RGBA, |
| 600 GL_UNSIGNED_BYTE, |
| 601 true); |
540 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); | 602 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); |
541 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kManaged); | 603 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kManaged); |
542 SetParameter( | 604 SetParameter(texture_ref_.get(), |
543 texture_ref_, GL_TEXTURE_POOL_CHROMIUM, GL_TEXTURE_POOL_MANAGED_CHROMIUM, | 605 GL_TEXTURE_POOL_CHROMIUM, |
544 GL_NO_ERROR); | 606 GL_TEXTURE_POOL_MANAGED_CHROMIUM, |
| 607 GL_NO_ERROR); |
545 // Add expectation for texture deletion. | 608 // Add expectation for texture deletion. |
546 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kManaged); | 609 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kManaged); |
547 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 610 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
548 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged); | 611 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged); |
549 } | 612 } |
550 | 613 |
551 TEST_F(TextureTest, POT2D) { | 614 TEST_F(TextureTest, POT2D) { |
552 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 615 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
553 Texture* texture = texture_ref_->texture(); | 616 Texture* texture = texture_ref_->texture(); |
554 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 617 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
555 // Check Setting level 0 to POT | 618 // Check Setting level 0 to POT |
556 manager_->SetLevelInfo(texture_ref_, | 619 manager_->SetLevelInfo(texture_ref_.get(), |
557 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 620 GL_TEXTURE_2D, |
558 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 621 0, |
559 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 622 GL_RGBA, |
560 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 623 4, |
| 624 4, |
| 625 1, |
| 626 0, |
| 627 GL_RGBA, |
| 628 GL_UNSIGNED_BYTE, |
| 629 true); |
| 630 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 631 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 632 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
561 EXPECT_EQ(0, texture->num_uncleared_mips()); | 633 EXPECT_EQ(0, texture->num_uncleared_mips()); |
562 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 634 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
563 // Set filters to something that will work with a single mip. | 635 // Set filters to something that will work with a single mip. |
564 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 636 SetParameter( |
565 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 637 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
| 638 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
566 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 639 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
567 // Set them back. | 640 // Set them back. |
568 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, | 641 SetParameter(texture_ref_.get(), |
569 GL_LINEAR_MIPMAP_LINEAR, GL_NO_ERROR); | 642 GL_TEXTURE_MIN_FILTER, |
570 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 643 GL_LINEAR_MIPMAP_LINEAR, |
571 | 644 GL_NO_ERROR); |
572 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 645 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 646 |
| 647 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
573 // Make mips. | 648 // Make mips. |
574 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 649 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
575 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 650 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
576 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 651 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
577 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 652 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
578 // Change a mip. | 653 // Change a mip. |
579 manager_->SetLevelInfo(texture_ref_, | 654 manager_->SetLevelInfo(texture_ref_.get(), |
580 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 655 GL_TEXTURE_2D, |
581 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 656 1, |
582 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 657 GL_RGBA, |
583 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 658 4, |
584 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 659 4, |
| 660 1, |
| 661 0, |
| 662 GL_RGBA, |
| 663 GL_UNSIGNED_BYTE, |
| 664 true); |
| 665 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 666 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 667 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 668 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
585 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 669 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
586 // Set a level past the number of mips that would get generated. | 670 // Set a level past the number of mips that would get generated. |
587 manager_->SetLevelInfo(texture_ref_, | 671 manager_->SetLevelInfo(texture_ref_.get(), |
588 GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 672 GL_TEXTURE_2D, |
589 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 673 3, |
| 674 GL_RGBA, |
| 675 4, |
| 676 4, |
| 677 1, |
| 678 0, |
| 679 GL_RGBA, |
| 680 GL_UNSIGNED_BYTE, |
| 681 true); |
| 682 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
590 // Make mips. | 683 // Make mips. |
591 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 684 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
592 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 685 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
593 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 686 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
594 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 687 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
595 } | 688 } |
596 | 689 |
597 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { | 690 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { |
598 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 691 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
599 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64, MemoryTracker::kUnmanaged); | 692 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64, MemoryTracker::kUnmanaged); |
600 manager_->SetLevelInfo(texture_ref_, | 693 manager_->SetLevelInfo(texture_ref_.get(), |
601 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 694 GL_TEXTURE_2D, |
| 695 0, |
| 696 GL_RGBA, |
| 697 4, |
| 698 4, |
| 699 1, |
| 700 0, |
| 701 GL_RGBA, |
| 702 GL_UNSIGNED_BYTE, |
| 703 true); |
602 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0, MemoryTracker::kUnmanaged); | 704 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0, MemoryTracker::kUnmanaged); |
603 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84, MemoryTracker::kUnmanaged); | 705 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84, MemoryTracker::kUnmanaged); |
604 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 706 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
605 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0, MemoryTracker::kUnmanaged); | 707 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0, MemoryTracker::kUnmanaged); |
606 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 708 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
607 } | 709 } |
608 | 710 |
609 TEST_F(TextureTest, UnusedMips) { | 711 TEST_F(TextureTest, UnusedMips) { |
610 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 712 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
611 Texture* texture = texture_ref_->texture(); | 713 Texture* texture = texture_ref_->texture(); |
612 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 714 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
613 // Set level zero to large size. | 715 // Set level zero to large size. |
614 manager_->SetLevelInfo(texture_ref_, | 716 manager_->SetLevelInfo(texture_ref_.get(), |
615 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 717 GL_TEXTURE_2D, |
616 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 718 0, |
617 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 719 GL_RGBA, |
618 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 720 4, |
619 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 721 4, |
| 722 1, |
| 723 0, |
| 724 GL_RGBA, |
| 725 GL_UNSIGNED_BYTE, |
| 726 true); |
| 727 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 728 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 729 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 730 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
620 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 731 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
621 // Set level zero to large smaller (levels unused mips) | 732 // Set level zero to large smaller (levels unused mips) |
622 manager_->SetLevelInfo(texture_ref_, | 733 manager_->SetLevelInfo(texture_ref_.get(), |
623 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 734 GL_TEXTURE_2D, |
624 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 735 0, |
625 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 736 GL_RGBA, |
626 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 737 2, |
627 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 738 2, |
| 739 1, |
| 740 0, |
| 741 GL_RGBA, |
| 742 GL_UNSIGNED_BYTE, |
| 743 true); |
| 744 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 745 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 746 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 747 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
628 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 748 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
629 // Set an unused level to some size | 749 // Set an unused level to some size |
630 manager_->SetLevelInfo(texture_ref_, | 750 manager_->SetLevelInfo(texture_ref_.get(), |
631 GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 751 GL_TEXTURE_2D, |
632 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 752 4, |
633 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 753 GL_RGBA, |
634 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 754 16, |
| 755 16, |
| 756 1, |
| 757 0, |
| 758 GL_RGBA, |
| 759 GL_UNSIGNED_BYTE, |
| 760 true); |
| 761 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 762 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 763 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
635 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 764 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
636 } | 765 } |
637 | 766 |
638 TEST_F(TextureTest, NPOT2D) { | 767 TEST_F(TextureTest, NPOT2D) { |
639 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 768 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
640 Texture* texture = texture_ref_->texture(); | 769 Texture* texture = texture_ref_->texture(); |
641 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 770 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
642 // Check Setting level 0 to NPOT | 771 // Check Setting level 0 to NPOT |
643 manager_->SetLevelInfo(texture_ref_, | 772 manager_->SetLevelInfo(texture_ref_.get(), |
644 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 773 GL_TEXTURE_2D, |
| 774 0, |
| 775 GL_RGBA, |
| 776 4, |
| 777 5, |
| 778 1, |
| 779 0, |
| 780 GL_RGBA, |
| 781 GL_UNSIGNED_BYTE, |
| 782 true); |
645 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 783 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
646 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 784 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
647 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 785 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
648 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 786 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
649 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 787 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
650 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 788 SetParameter( |
651 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 789 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
652 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 790 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
653 SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 791 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
654 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 792 SetParameter( |
655 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 793 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
656 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 794 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
657 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 795 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 796 SetParameter( |
| 797 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 798 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
658 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 799 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
659 // Change it to POT. | 800 // Change it to POT. |
660 manager_->SetLevelInfo(texture_ref_, | 801 manager_->SetLevelInfo(texture_ref_.get(), |
661 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 802 GL_TEXTURE_2D, |
662 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 803 0, |
663 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 804 GL_RGBA, |
664 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 805 4, |
665 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 806 4, |
666 } | 807 1, |
667 | 808 0, |
| 809 GL_RGBA, |
| 810 GL_UNSIGNED_BYTE, |
| 811 true); |
| 812 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 813 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 814 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 815 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 816 } |
| 817 |
668 TEST_F(TextureTest, NPOT2DNPOTOK) { | 818 TEST_F(TextureTest, NPOT2DNPOTOK) { |
669 TestHelper::SetupFeatureInfoInitExpectations( | 819 TestHelper::SetupFeatureInfoInitExpectations( |
670 gl_.get(), "GL_OES_texture_npot"); | 820 gl_.get(), "GL_OES_texture_npot"); |
671 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 821 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
672 feature_info->Initialize(NULL); | 822 feature_info->Initialize(NULL); |
673 TextureManager manager( | 823 TextureManager manager( |
674 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 824 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
675 manager.CreateTexture(kClient1Id, kService1Id); | 825 manager.CreateTexture(kClient1Id, kService1Id); |
676 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 826 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
677 ASSERT_TRUE(texture_ref != NULL); | 827 ASSERT_TRUE(texture_ref != NULL); |
(...skipping 10 matching lines...) Expand all Loading... |
688 EXPECT_FALSE(manager.CanRender(texture_ref)); | 838 EXPECT_FALSE(manager.CanRender(texture_ref)); |
689 EXPECT_TRUE(manager.HaveUnrenderableTextures()); | 839 EXPECT_TRUE(manager.HaveUnrenderableTextures()); |
690 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref)); | 840 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref)); |
691 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 841 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
692 EXPECT_TRUE(manager.CanRender(texture_ref)); | 842 EXPECT_TRUE(manager.CanRender(texture_ref)); |
693 EXPECT_FALSE(manager.HaveUnrenderableTextures()); | 843 EXPECT_FALSE(manager.HaveUnrenderableTextures()); |
694 manager.Destroy(false); | 844 manager.Destroy(false); |
695 } | 845 } |
696 | 846 |
697 TEST_F(TextureTest, POTCubeMap) { | 847 TEST_F(TextureTest, POTCubeMap) { |
698 manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP); | 848 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); |
699 Texture* texture = texture_ref_->texture(); | 849 Texture* texture = texture_ref_->texture(); |
700 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 850 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
701 // Check Setting level 0 each face to POT | 851 // Check Setting level 0 each face to POT |
702 manager_->SetLevelInfo(texture_ref_, | 852 manager_->SetLevelInfo(texture_ref_.get(), |
703 GL_TEXTURE_CUBE_MAP_POSITIVE_X, | 853 GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
704 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 854 0, |
| 855 GL_RGBA, |
| 856 4, |
| 857 4, |
| 858 1, |
| 859 0, |
| 860 GL_RGBA, |
| 861 GL_UNSIGNED_BYTE, |
| 862 true); |
705 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 863 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
706 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 864 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
707 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 865 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
708 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 866 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
709 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 867 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
710 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 868 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
711 manager_->SetLevelInfo(texture_ref_, | 869 manager_->SetLevelInfo(texture_ref_.get(), |
712 GL_TEXTURE_CUBE_MAP_NEGATIVE_X, | 870 GL_TEXTURE_CUBE_MAP_NEGATIVE_X, |
713 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 871 0, |
| 872 GL_RGBA, |
| 873 4, |
| 874 4, |
| 875 1, |
| 876 0, |
| 877 GL_RGBA, |
| 878 GL_UNSIGNED_BYTE, |
| 879 true); |
714 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 880 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
715 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 881 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
716 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 882 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
717 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 883 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
718 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 884 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
719 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 885 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
720 manager_->SetLevelInfo(texture_ref_, | 886 manager_->SetLevelInfo(texture_ref_.get(), |
721 GL_TEXTURE_CUBE_MAP_POSITIVE_Y, | 887 GL_TEXTURE_CUBE_MAP_POSITIVE_Y, |
722 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 888 0, |
| 889 GL_RGBA, |
| 890 4, |
| 891 4, |
| 892 1, |
| 893 0, |
| 894 GL_RGBA, |
| 895 GL_UNSIGNED_BYTE, |
| 896 true); |
723 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 897 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
724 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 898 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
725 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 899 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
726 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 900 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
727 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 901 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
728 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 902 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
729 manager_->SetLevelInfo(texture_ref_, | 903 manager_->SetLevelInfo(texture_ref_.get(), |
730 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, | 904 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
731 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 905 0, |
| 906 GL_RGBA, |
| 907 4, |
| 908 4, |
| 909 1, |
| 910 0, |
| 911 GL_RGBA, |
| 912 GL_UNSIGNED_BYTE, |
| 913 true); |
732 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 914 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
733 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 915 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
734 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 916 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
735 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 917 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
736 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 918 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
737 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 919 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
738 manager_->SetLevelInfo(texture_ref_, | 920 manager_->SetLevelInfo(texture_ref_.get(), |
739 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, | 921 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, |
740 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 922 0, |
| 923 GL_RGBA, |
| 924 4, |
| 925 4, |
| 926 1, |
| 927 0, |
| 928 GL_RGBA, |
| 929 GL_UNSIGNED_BYTE, |
| 930 true); |
741 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 931 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
742 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 932 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
743 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 933 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
744 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 934 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
745 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 935 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
746 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 936 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
747 manager_->SetLevelInfo(texture_ref_, | 937 manager_->SetLevelInfo(texture_ref_.get(), |
748 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 938 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
749 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 939 0, |
| 940 GL_RGBA, |
| 941 4, |
| 942 4, |
| 943 1, |
| 944 0, |
| 945 GL_RGBA, |
| 946 GL_UNSIGNED_BYTE, |
| 947 true); |
750 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 948 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
751 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 949 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
752 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 950 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
753 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 951 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
754 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 952 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
755 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 953 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
756 | 954 |
757 // Make mips. | 955 // Make mips. |
758 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 956 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
759 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 957 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
760 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 958 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
761 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 959 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
762 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 960 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
763 | 961 |
764 // Change a mip. | 962 // Change a mip. |
765 manager_->SetLevelInfo(texture_ref_, | 963 manager_->SetLevelInfo(texture_ref_.get(), |
766 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 964 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
767 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 965 1, |
| 966 GL_RGBA, |
| 967 4, |
| 968 4, |
| 969 1, |
| 970 0, |
| 971 GL_RGBA, |
| 972 GL_UNSIGNED_BYTE, |
| 973 true); |
768 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 974 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
769 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 975 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
770 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 976 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
771 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 977 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
772 // Set a level past the number of mips that would get generated. | 978 // Set a level past the number of mips that would get generated. |
773 manager_->SetLevelInfo(texture_ref_, | 979 manager_->SetLevelInfo(texture_ref_.get(), |
774 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 980 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
775 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 981 3, |
776 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 982 GL_RGBA, |
| 983 4, |
| 984 4, |
| 985 1, |
| 986 0, |
| 987 GL_RGBA, |
| 988 GL_UNSIGNED_BYTE, |
| 989 true); |
| 990 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
777 // Make mips. | 991 // Make mips. |
778 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 992 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
779 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 993 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
780 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 994 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
781 } | 995 } |
782 | 996 |
783 TEST_F(TextureTest, GetLevelSize) { | 997 TEST_F(TextureTest, GetLevelSize) { |
784 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 998 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
785 manager_->SetLevelInfo(texture_ref_, | 999 manager_->SetLevelInfo(texture_ref_.get(), |
786 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1000 GL_TEXTURE_2D, |
| 1001 1, |
| 1002 GL_RGBA, |
| 1003 4, |
| 1004 5, |
| 1005 1, |
| 1006 0, |
| 1007 GL_RGBA, |
| 1008 GL_UNSIGNED_BYTE, |
| 1009 true); |
787 GLsizei width = -1; | 1010 GLsizei width = -1; |
788 GLsizei height = -1; | 1011 GLsizei height = -1; |
789 Texture* texture = texture_ref_->texture(); | 1012 Texture* texture = texture_ref_->texture(); |
790 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height)); | 1013 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height)); |
791 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height)); | 1014 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height)); |
792 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); | 1015 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
793 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); | 1016 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); |
794 EXPECT_EQ(4, width); | 1017 EXPECT_EQ(4, width); |
795 EXPECT_EQ(5, height); | 1018 EXPECT_EQ(5, height); |
796 manager_->RemoveTexture(kClient1Id); | 1019 manager_->RemoveTexture(kClient1Id); |
797 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); | 1020 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); |
798 EXPECT_EQ(4, width); | 1021 EXPECT_EQ(4, width); |
799 EXPECT_EQ(5, height); | 1022 EXPECT_EQ(5, height); |
800 } | 1023 } |
801 | 1024 |
802 TEST_F(TextureTest, GetLevelType) { | 1025 TEST_F(TextureTest, GetLevelType) { |
803 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1026 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
804 manager_->SetLevelInfo(texture_ref_, | 1027 manager_->SetLevelInfo(texture_ref_.get(), |
805 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1028 GL_TEXTURE_2D, |
| 1029 1, |
| 1030 GL_RGBA, |
| 1031 4, |
| 1032 5, |
| 1033 1, |
| 1034 0, |
| 1035 GL_RGBA, |
| 1036 GL_UNSIGNED_BYTE, |
| 1037 true); |
806 GLenum type = -1; | 1038 GLenum type = -1; |
807 GLenum format = -1; | 1039 GLenum format = -1; |
808 Texture* texture = texture_ref_->texture(); | 1040 Texture* texture = texture_ref_->texture(); |
809 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); | 1041 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); |
810 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); | 1042 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); |
811 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); | 1043 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); |
812 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 1044 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
813 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 1045 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
814 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 1046 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
815 manager_->RemoveTexture(kClient1Id); | 1047 manager_->RemoveTexture(kClient1Id); |
816 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 1048 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
817 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 1049 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
818 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 1050 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
819 } | 1051 } |
820 | 1052 |
821 TEST_F(TextureTest, ValidForTexture) { | 1053 TEST_F(TextureTest, ValidForTexture) { |
822 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1054 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
823 manager_->SetLevelInfo(texture_ref_, | 1055 manager_->SetLevelInfo(texture_ref_.get(), |
824 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1056 GL_TEXTURE_2D, |
| 1057 1, |
| 1058 GL_RGBA, |
| 1059 4, |
| 1060 5, |
| 1061 1, |
| 1062 0, |
| 1063 GL_RGBA, |
| 1064 GL_UNSIGNED_BYTE, |
| 1065 true); |
825 // Check bad face. | 1066 // Check bad face. |
826 Texture* texture = texture_ref_->texture(); | 1067 Texture* texture = texture_ref_->texture(); |
827 EXPECT_FALSE(texture->ValidForTexture( | 1068 EXPECT_FALSE(texture->ValidForTexture( |
828 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 1069 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
829 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 1070 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
830 // Check bad level. | 1071 // Check bad level. |
831 EXPECT_FALSE(texture->ValidForTexture( | 1072 EXPECT_FALSE(texture->ValidForTexture( |
832 GL_TEXTURE_2D, 0, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 1073 GL_TEXTURE_2D, 0, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
833 // Check bad xoffset. | 1074 // Check bad xoffset. |
834 EXPECT_FALSE(texture->ValidForTexture( | 1075 EXPECT_FALSE(texture->ValidForTexture( |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 } | 1234 } |
994 | 1235 |
995 TEST_F(TextureTest, SafeUnsafe) { | 1236 TEST_F(TextureTest, SafeUnsafe) { |
996 static const GLuint kClient2Id = 2; | 1237 static const GLuint kClient2Id = 2; |
997 static const GLuint kService2Id = 12; | 1238 static const GLuint kService2Id = 12; |
998 static const GLuint kClient3Id = 3; | 1239 static const GLuint kClient3Id = 3; |
999 static const GLuint kService3Id = 13; | 1240 static const GLuint kService3Id = 13; |
1000 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1241 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1001 Texture* texture = texture_ref_->texture(); | 1242 Texture* texture = texture_ref_->texture(); |
1002 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1243 EXPECT_EQ(0, texture->num_uncleared_mips()); |
1003 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1244 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1004 manager_->SetLevelInfo(texture_ref_, | 1245 manager_->SetLevelInfo(texture_ref_.get(), |
1005 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1246 GL_TEXTURE_2D, |
| 1247 0, |
| 1248 GL_RGBA, |
| 1249 4, |
| 1250 4, |
| 1251 1, |
| 1252 0, |
| 1253 GL_RGBA, |
| 1254 GL_UNSIGNED_BYTE, |
| 1255 false); |
1006 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1256 EXPECT_FALSE(texture->SafeToRenderFrom()); |
1007 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1257 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1008 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1258 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1009 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1259 EXPECT_EQ(1, texture->num_uncleared_mips()); |
1010 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 0, true); | 1260 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); |
1011 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1261 EXPECT_TRUE(texture->SafeToRenderFrom()); |
1012 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1262 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1013 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1263 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1014 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1264 EXPECT_EQ(0, texture->num_uncleared_mips()); |
1015 manager_->SetLevelInfo(texture_ref_, | 1265 manager_->SetLevelInfo(texture_ref_.get(), |
1016 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1266 GL_TEXTURE_2D, |
| 1267 1, |
| 1268 GL_RGBA, |
| 1269 8, |
| 1270 8, |
| 1271 1, |
| 1272 0, |
| 1273 GL_RGBA, |
| 1274 GL_UNSIGNED_BYTE, |
| 1275 false); |
1017 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1276 EXPECT_FALSE(texture->SafeToRenderFrom()); |
1018 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1277 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1019 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1278 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1020 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1279 EXPECT_EQ(1, texture->num_uncleared_mips()); |
1021 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 1, true); | 1280 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); |
1022 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1281 EXPECT_TRUE(texture->SafeToRenderFrom()); |
1023 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1282 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1024 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1283 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1025 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1284 EXPECT_EQ(0, texture->num_uncleared_mips()); |
1026 manager_->SetLevelInfo(texture_ref_, | 1285 manager_->SetLevelInfo(texture_ref_.get(), |
1027 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1286 GL_TEXTURE_2D, |
1028 manager_->SetLevelInfo(texture_ref_, | 1287 0, |
1029 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1288 GL_RGBA, |
| 1289 4, |
| 1290 4, |
| 1291 1, |
| 1292 0, |
| 1293 GL_RGBA, |
| 1294 GL_UNSIGNED_BYTE, |
| 1295 false); |
| 1296 manager_->SetLevelInfo(texture_ref_.get(), |
| 1297 GL_TEXTURE_2D, |
| 1298 1, |
| 1299 GL_RGBA, |
| 1300 8, |
| 1301 8, |
| 1302 1, |
| 1303 0, |
| 1304 GL_RGBA, |
| 1305 GL_UNSIGNED_BYTE, |
| 1306 false); |
1030 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1307 EXPECT_FALSE(texture->SafeToRenderFrom()); |
1031 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1308 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1032 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1309 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1033 EXPECT_EQ(2, texture->num_uncleared_mips()); | 1310 EXPECT_EQ(2, texture->num_uncleared_mips()); |
1034 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 0, true); | 1311 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); |
1035 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1312 EXPECT_FALSE(texture->SafeToRenderFrom()); |
1036 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1313 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1037 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1314 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1038 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1315 EXPECT_EQ(1, texture->num_uncleared_mips()); |
1039 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 1, true); | 1316 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); |
1040 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1317 EXPECT_TRUE(texture->SafeToRenderFrom()); |
1041 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1318 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1042 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1319 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1043 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1320 EXPECT_EQ(0, texture->num_uncleared_mips()); |
1044 manager_->SetLevelInfo(texture_ref_, | 1321 manager_->SetLevelInfo(texture_ref_.get(), |
1045 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1322 GL_TEXTURE_2D, |
| 1323 1, |
| 1324 GL_RGBA, |
| 1325 8, |
| 1326 8, |
| 1327 1, |
| 1328 0, |
| 1329 GL_RGBA, |
| 1330 GL_UNSIGNED_BYTE, |
| 1331 false); |
1046 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1332 EXPECT_FALSE(texture->SafeToRenderFrom()); |
1047 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1333 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1048 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1334 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1049 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1335 EXPECT_EQ(1, texture->num_uncleared_mips()); |
1050 manager_->MarkMipmapsGenerated(texture_ref_); | 1336 manager_->MarkMipmapsGenerated(texture_ref_.get()); |
1051 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1337 EXPECT_TRUE(texture->SafeToRenderFrom()); |
1052 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1338 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1053 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1339 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1054 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1340 EXPECT_EQ(0, texture->num_uncleared_mips()); |
1055 | 1341 |
1056 manager_->CreateTexture(kClient2Id, kService2Id); | 1342 manager_->CreateTexture(kClient2Id, kService2Id); |
1057 scoped_refptr<TextureRef> texture_ref2( | 1343 scoped_refptr<TextureRef> texture_ref2( |
1058 manager_->GetTexture(kClient2Id)); | 1344 manager_->GetTexture(kClient2Id)); |
1059 ASSERT_TRUE(texture_ref2.get() != NULL); | 1345 ASSERT_TRUE(texture_ref2.get() != NULL); |
1060 manager_->SetTarget(texture_ref2, GL_TEXTURE_2D); | 1346 manager_->SetTarget(texture_ref2.get(), GL_TEXTURE_2D); |
1061 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1347 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1062 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1348 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1063 Texture* texture2 = texture_ref2->texture(); | 1349 Texture* texture2 = texture_ref2->texture(); |
1064 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1350 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
1065 manager_->SetLevelInfo(texture_ref2, | 1351 manager_->SetLevelInfo(texture_ref2.get(), |
1066 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1352 GL_TEXTURE_2D, |
| 1353 0, |
| 1354 GL_RGBA, |
| 1355 8, |
| 1356 8, |
| 1357 1, |
| 1358 0, |
| 1359 GL_RGBA, |
| 1360 GL_UNSIGNED_BYTE, |
| 1361 true); |
1067 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1362 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1068 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1363 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1069 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1364 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
1070 manager_->SetLevelInfo(texture_ref2, | 1365 manager_->SetLevelInfo(texture_ref2.get(), |
1071 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1366 GL_TEXTURE_2D, |
| 1367 0, |
| 1368 GL_RGBA, |
| 1369 8, |
| 1370 8, |
| 1371 1, |
| 1372 0, |
| 1373 GL_RGBA, |
| 1374 GL_UNSIGNED_BYTE, |
| 1375 false); |
1072 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1376 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1073 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1377 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1074 EXPECT_EQ(1, texture2->num_uncleared_mips()); | 1378 EXPECT_EQ(1, texture2->num_uncleared_mips()); |
1075 | 1379 |
1076 manager_->CreateTexture(kClient3Id, kService3Id); | 1380 manager_->CreateTexture(kClient3Id, kService3Id); |
1077 scoped_refptr<TextureRef> texture_ref3( | 1381 scoped_refptr<TextureRef> texture_ref3( |
1078 manager_->GetTexture(kClient3Id)); | 1382 manager_->GetTexture(kClient3Id)); |
1079 ASSERT_TRUE(texture_ref3.get() != NULL); | 1383 ASSERT_TRUE(texture_ref3.get() != NULL); |
1080 manager_->SetTarget(texture_ref3, GL_TEXTURE_2D); | 1384 manager_->SetTarget(texture_ref3.get(), GL_TEXTURE_2D); |
1081 manager_->SetLevelInfo(texture_ref3, | 1385 manager_->SetLevelInfo(texture_ref3.get(), |
1082 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1386 GL_TEXTURE_2D, |
| 1387 0, |
| 1388 GL_RGBA, |
| 1389 8, |
| 1390 8, |
| 1391 1, |
| 1392 0, |
| 1393 GL_RGBA, |
| 1394 GL_UNSIGNED_BYTE, |
| 1395 false); |
1083 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1396 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1084 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1397 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1085 Texture* texture3 = texture_ref3->texture(); | 1398 Texture* texture3 = texture_ref3->texture(); |
1086 EXPECT_EQ(1, texture3->num_uncleared_mips()); | 1399 EXPECT_EQ(1, texture3->num_uncleared_mips()); |
1087 manager_->SetLevelCleared(texture_ref2, GL_TEXTURE_2D, 0, true); | 1400 manager_->SetLevelCleared(texture_ref2.get(), GL_TEXTURE_2D, 0, true); |
1088 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1401 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1089 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1402 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1090 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1403 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
1091 manager_->SetLevelCleared(texture_ref3, GL_TEXTURE_2D, 0, true); | 1404 manager_->SetLevelCleared(texture_ref3.get(), GL_TEXTURE_2D, 0, true); |
1092 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1405 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1093 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1406 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1094 EXPECT_EQ(0, texture3->num_uncleared_mips()); | 1407 EXPECT_EQ(0, texture3->num_uncleared_mips()); |
1095 | 1408 |
1096 manager_->SetLevelInfo(texture_ref2, | 1409 manager_->SetLevelInfo(texture_ref2.get(), |
1097 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1410 GL_TEXTURE_2D, |
1098 manager_->SetLevelInfo(texture_ref3, | 1411 0, |
1099 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1412 GL_RGBA, |
| 1413 8, |
| 1414 8, |
| 1415 1, |
| 1416 0, |
| 1417 GL_RGBA, |
| 1418 GL_UNSIGNED_BYTE, |
| 1419 false); |
| 1420 manager_->SetLevelInfo(texture_ref3.get(), |
| 1421 GL_TEXTURE_2D, |
| 1422 0, |
| 1423 GL_RGBA, |
| 1424 8, |
| 1425 8, |
| 1426 1, |
| 1427 0, |
| 1428 GL_RGBA, |
| 1429 GL_UNSIGNED_BYTE, |
| 1430 false); |
1100 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1431 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1101 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1432 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1102 EXPECT_EQ(1, texture2->num_uncleared_mips()); | 1433 EXPECT_EQ(1, texture2->num_uncleared_mips()); |
1103 EXPECT_EQ(1, texture3->num_uncleared_mips()); | 1434 EXPECT_EQ(1, texture3->num_uncleared_mips()); |
1104 manager_->RemoveTexture(kClient3Id); | 1435 manager_->RemoveTexture(kClient3Id); |
1105 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1436 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1106 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1437 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1107 manager_->RemoveTexture(kClient2Id); | 1438 manager_->RemoveTexture(kClient2Id); |
1108 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1439 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1109 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1440 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1110 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1441 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
1111 .Times(1) | 1442 .Times(1) |
1112 .RetiresOnSaturation(); | 1443 .RetiresOnSaturation(); |
1113 texture_ref2 = NULL; | 1444 texture_ref2 = NULL; |
1114 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1445 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1115 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1446 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1116 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) | 1447 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) |
1117 .Times(1) | 1448 .Times(1) |
1118 .RetiresOnSaturation(); | 1449 .RetiresOnSaturation(); |
1119 texture_ref3 = NULL; | 1450 texture_ref3 = NULL; |
1120 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1451 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1121 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1452 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1122 } | 1453 } |
1123 | 1454 |
1124 TEST_F(TextureTest, ClearTexture) { | 1455 TEST_F(TextureTest, ClearTexture) { |
1125 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) | 1456 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) |
1126 .WillRepeatedly(Return(true)); | 1457 .WillRepeatedly(Return(true)); |
1127 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1458 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1128 manager_->SetLevelInfo(texture_ref_, | 1459 manager_->SetLevelInfo(texture_ref_.get(), |
1129 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1460 GL_TEXTURE_2D, |
1130 manager_->SetLevelInfo(texture_ref_, | 1461 0, |
1131 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1462 GL_RGBA, |
| 1463 4, |
| 1464 4, |
| 1465 1, |
| 1466 0, |
| 1467 GL_RGBA, |
| 1468 GL_UNSIGNED_BYTE, |
| 1469 false); |
| 1470 manager_->SetLevelInfo(texture_ref_.get(), |
| 1471 GL_TEXTURE_2D, |
| 1472 1, |
| 1473 GL_RGBA, |
| 1474 4, |
| 1475 4, |
| 1476 1, |
| 1477 0, |
| 1478 GL_RGBA, |
| 1479 GL_UNSIGNED_BYTE, |
| 1480 false); |
1132 Texture* texture = texture_ref_->texture(); | 1481 Texture* texture = texture_ref_->texture(); |
1133 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1482 EXPECT_FALSE(texture->SafeToRenderFrom()); |
1134 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1483 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1135 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1484 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1136 EXPECT_EQ(2, texture->num_uncleared_mips()); | 1485 EXPECT_EQ(2, texture->num_uncleared_mips()); |
1137 manager_->ClearRenderableLevels(decoder_.get(), texture_ref_); | 1486 manager_->ClearRenderableLevels(decoder_.get(), texture_ref_.get()); |
1138 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1487 EXPECT_TRUE(texture->SafeToRenderFrom()); |
1139 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1488 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1140 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1489 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1141 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1490 EXPECT_EQ(0, texture->num_uncleared_mips()); |
1142 manager_->SetLevelInfo(texture_ref_, | 1491 manager_->SetLevelInfo(texture_ref_.get(), |
1143 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1492 GL_TEXTURE_2D, |
1144 manager_->SetLevelInfo(texture_ref_, | 1493 0, |
1145 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1494 GL_RGBA, |
| 1495 4, |
| 1496 4, |
| 1497 1, |
| 1498 0, |
| 1499 GL_RGBA, |
| 1500 GL_UNSIGNED_BYTE, |
| 1501 false); |
| 1502 manager_->SetLevelInfo(texture_ref_.get(), |
| 1503 GL_TEXTURE_2D, |
| 1504 1, |
| 1505 GL_RGBA, |
| 1506 4, |
| 1507 4, |
| 1508 1, |
| 1509 0, |
| 1510 GL_RGBA, |
| 1511 GL_UNSIGNED_BYTE, |
| 1512 false); |
1146 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1513 EXPECT_FALSE(texture->SafeToRenderFrom()); |
1147 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1514 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1148 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1515 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1149 EXPECT_EQ(2, texture->num_uncleared_mips()); | 1516 EXPECT_EQ(2, texture->num_uncleared_mips()); |
1150 manager_->ClearTextureLevel(decoder_.get(), texture_ref_, GL_TEXTURE_2D, 0); | 1517 manager_->ClearTextureLevel( |
| 1518 decoder_.get(), texture_ref_.get(), GL_TEXTURE_2D, 0); |
1151 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1519 EXPECT_FALSE(texture->SafeToRenderFrom()); |
1152 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1520 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
1153 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1521 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
1154 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1522 EXPECT_EQ(1, texture->num_uncleared_mips()); |
1155 manager_->ClearTextureLevel(decoder_.get(), texture_ref_, GL_TEXTURE_2D, 1); | 1523 manager_->ClearTextureLevel( |
| 1524 decoder_.get(), texture_ref_.get(), GL_TEXTURE_2D, 1); |
1156 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1525 EXPECT_TRUE(texture->SafeToRenderFrom()); |
1157 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1526 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
1158 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1527 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1159 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1528 EXPECT_EQ(0, texture->num_uncleared_mips()); |
1160 } | 1529 } |
1161 | 1530 |
1162 TEST_F(TextureTest, UseDeletedTexture) { | 1531 TEST_F(TextureTest, UseDeletedTexture) { |
1163 static const GLuint kClient2Id = 2; | 1532 static const GLuint kClient2Id = 2; |
1164 static const GLuint kService2Id = 12; | 1533 static const GLuint kService2Id = 12; |
1165 // Make the default texture renderable | 1534 // Make the default texture renderable |
1166 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1535 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1167 manager_->SetLevelInfo(texture_ref_, | 1536 manager_->SetLevelInfo(texture_ref_.get(), |
1168 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1537 GL_TEXTURE_2D, |
| 1538 0, |
| 1539 GL_RGBA, |
| 1540 1, |
| 1541 1, |
| 1542 1, |
| 1543 0, |
| 1544 GL_RGBA, |
| 1545 GL_UNSIGNED_BYTE, |
| 1546 false); |
1169 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1547 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
1170 // Make a new texture | 1548 // Make a new texture |
1171 manager_->CreateTexture(kClient2Id, kService2Id); | 1549 manager_->CreateTexture(kClient2Id, kService2Id); |
1172 scoped_refptr<TextureRef> texture_ref( | 1550 scoped_refptr<TextureRef> texture_ref( |
1173 manager_->GetTexture(kClient2Id)); | 1551 manager_->GetTexture(kClient2Id)); |
1174 manager_->SetTarget(texture_ref, GL_TEXTURE_2D); | 1552 manager_->SetTarget(texture_ref.get(), GL_TEXTURE_2D); |
1175 EXPECT_FALSE(manager_->CanRender(texture_ref)); | 1553 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
1176 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1554 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
1177 // Remove it. | 1555 // Remove it. |
1178 manager_->RemoveTexture(kClient2Id); | 1556 manager_->RemoveTexture(kClient2Id); |
1179 EXPECT_FALSE(manager_->CanRender(texture_ref)); | 1557 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
1180 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1558 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
1181 // Check that we can still manipulate it and it effects the manager. | 1559 // Check that we can still manipulate it and it effects the manager. |
1182 manager_->SetLevelInfo(texture_ref, | 1560 manager_->SetLevelInfo(texture_ref.get(), |
1183 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1561 GL_TEXTURE_2D, |
1184 EXPECT_TRUE(manager_->CanRender(texture_ref)); | 1562 0, |
| 1563 GL_RGBA, |
| 1564 1, |
| 1565 1, |
| 1566 1, |
| 1567 0, |
| 1568 GL_RGBA, |
| 1569 GL_UNSIGNED_BYTE, |
| 1570 false); |
| 1571 EXPECT_TRUE(manager_->CanRender(texture_ref.get())); |
1185 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1572 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
1186 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1573 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
1187 .Times(1) | 1574 .Times(1) |
1188 .RetiresOnSaturation(); | 1575 .RetiresOnSaturation(); |
1189 texture_ref = NULL; | 1576 texture_ref = NULL; |
1190 } | 1577 } |
1191 | 1578 |
1192 TEST_F(TextureTest, GetLevelImage) { | 1579 TEST_F(TextureTest, GetLevelImage) { |
1193 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1580 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1194 manager_->SetLevelInfo(texture_ref_, | 1581 manager_->SetLevelInfo(texture_ref_.get(), |
1195 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1582 GL_TEXTURE_2D, |
| 1583 1, |
| 1584 GL_RGBA, |
| 1585 2, |
| 1586 2, |
| 1587 1, |
| 1588 0, |
| 1589 GL_RGBA, |
| 1590 GL_UNSIGNED_BYTE, |
| 1591 true); |
1196 Texture* texture = texture_ref_->texture(); | 1592 Texture* texture = texture_ref_->texture(); |
1197 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1593 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
1198 // Set image. | 1594 // Set image. |
1199 manager_->SetLevelImage(texture_ref_, | 1595 manager_->SetLevelImage( |
1200 GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); | 1596 texture_ref_.get(), GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); |
1201 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1597 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
1202 // Remove it. | 1598 // Remove it. |
1203 manager_->SetLevelImage(texture_ref_, GL_TEXTURE_2D, 1, NULL); | 1599 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, NULL); |
1204 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1600 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
1205 manager_->SetLevelImage(texture_ref_, | 1601 manager_->SetLevelImage( |
1206 GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); | 1602 texture_ref_.get(), GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); |
1207 // Image should be reset when SetLevelInfo is called. | 1603 // Image should be reset when SetLevelInfo is called. |
1208 manager_->SetLevelInfo(texture_ref_, | 1604 manager_->SetLevelInfo(texture_ref_.get(), |
1209 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1605 GL_TEXTURE_2D, |
| 1606 1, |
| 1607 GL_RGBA, |
| 1608 2, |
| 1609 2, |
| 1610 1, |
| 1611 0, |
| 1612 GL_RGBA, |
| 1613 GL_UNSIGNED_BYTE, |
| 1614 true); |
1210 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1615 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
1211 } | 1616 } |
1212 | 1617 |
1213 namespace { | 1618 namespace { |
1214 | 1619 |
1215 bool InSet(std::set<std::string>* string_set, const std::string& str) { | 1620 bool InSet(std::set<std::string>* string_set, const std::string& str) { |
1216 std::pair<std::set<std::string>::iterator, bool> result = | 1621 std::pair<std::set<std::string>::iterator, bool> result = |
1217 string_set->insert(str); | 1622 string_set->insert(str); |
1218 return !result.second; | 1623 return !result.second; |
1219 } | 1624 } |
1220 | 1625 |
1221 } // anonymous namespace | 1626 } // anonymous namespace |
1222 | 1627 |
1223 TEST_F(TextureTest, AddToSignature) { | 1628 TEST_F(TextureTest, AddToSignature) { |
1224 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1629 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1225 manager_->SetLevelInfo(texture_ref_, | 1630 manager_->SetLevelInfo(texture_ref_.get(), |
1226 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1631 GL_TEXTURE_2D, |
| 1632 1, |
| 1633 GL_RGBA, |
| 1634 2, |
| 1635 2, |
| 1636 1, |
| 1637 0, |
| 1638 GL_RGBA, |
| 1639 GL_UNSIGNED_BYTE, |
| 1640 true); |
1227 std::string signature1; | 1641 std::string signature1; |
1228 std::string signature2; | 1642 std::string signature2; |
1229 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature1); | 1643 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature1); |
1230 | 1644 |
1231 std::set<std::string> string_set; | 1645 std::set<std::string> string_set; |
1232 EXPECT_FALSE(InSet(&string_set, signature1)); | 1646 EXPECT_FALSE(InSet(&string_set, signature1)); |
1233 | 1647 |
1234 // check changing 1 thing makes a different signature. | 1648 // check changing 1 thing makes a different signature. |
1235 manager_->SetLevelInfo(texture_ref_, | 1649 manager_->SetLevelInfo(texture_ref_.get(), |
1236 GL_TEXTURE_2D, 1, GL_RGBA, 4, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1650 GL_TEXTURE_2D, |
1237 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1651 1, |
| 1652 GL_RGBA, |
| 1653 4, |
| 1654 2, |
| 1655 1, |
| 1656 0, |
| 1657 GL_RGBA, |
| 1658 GL_UNSIGNED_BYTE, |
| 1659 true); |
| 1660 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1238 EXPECT_FALSE(InSet(&string_set, signature2)); | 1661 EXPECT_FALSE(InSet(&string_set, signature2)); |
1239 | 1662 |
1240 // check putting it back makes the same signature. | 1663 // check putting it back makes the same signature. |
1241 manager_->SetLevelInfo(texture_ref_, | 1664 manager_->SetLevelInfo(texture_ref_.get(), |
1242 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1665 GL_TEXTURE_2D, |
1243 signature2.clear(); | 1666 1, |
1244 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1667 GL_RGBA, |
| 1668 2, |
| 1669 2, |
| 1670 1, |
| 1671 0, |
| 1672 GL_RGBA, |
| 1673 GL_UNSIGNED_BYTE, |
| 1674 true); |
| 1675 signature2.clear(); |
| 1676 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1245 EXPECT_EQ(signature1, signature2); | 1677 EXPECT_EQ(signature1, signature2); |
1246 | 1678 |
1247 // Check setting cleared status does not change signature. | 1679 // Check setting cleared status does not change signature. |
1248 manager_->SetLevelInfo(texture_ref_, | 1680 manager_->SetLevelInfo(texture_ref_.get(), |
1249 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1681 GL_TEXTURE_2D, |
1250 signature2.clear(); | 1682 1, |
1251 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1683 GL_RGBA, |
| 1684 2, |
| 1685 2, |
| 1686 1, |
| 1687 0, |
| 1688 GL_RGBA, |
| 1689 GL_UNSIGNED_BYTE, |
| 1690 false); |
| 1691 signature2.clear(); |
| 1692 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1252 EXPECT_EQ(signature1, signature2); | 1693 EXPECT_EQ(signature1, signature2); |
1253 | 1694 |
1254 // Check changing other settings changes signature. | 1695 // Check changing other settings changes signature. |
1255 manager_->SetLevelInfo(texture_ref_, | 1696 manager_->SetLevelInfo(texture_ref_.get(), |
1256 GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1697 GL_TEXTURE_2D, |
1257 signature2.clear(); | 1698 1, |
1258 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1699 GL_RGBA, |
1259 EXPECT_FALSE(InSet(&string_set, signature2)); | 1700 2, |
1260 | 1701 4, |
1261 manager_->SetLevelInfo(texture_ref_, | 1702 1, |
1262 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1703 0, |
1263 signature2.clear(); | 1704 GL_RGBA, |
1264 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1705 GL_UNSIGNED_BYTE, |
1265 EXPECT_FALSE(InSet(&string_set, signature2)); | 1706 false); |
1266 | 1707 signature2.clear(); |
1267 manager_->SetLevelInfo(texture_ref_, | 1708 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1268 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1709 EXPECT_FALSE(InSet(&string_set, signature2)); |
1269 signature2.clear(); | 1710 |
1270 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1711 manager_->SetLevelInfo(texture_ref_.get(), |
1271 EXPECT_FALSE(InSet(&string_set, signature2)); | 1712 GL_TEXTURE_2D, |
1272 | 1713 1, |
1273 manager_->SetLevelInfo(texture_ref_, | 1714 GL_RGBA, |
1274 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, false); | 1715 2, |
1275 signature2.clear(); | 1716 2, |
1276 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1717 2, |
1277 EXPECT_FALSE(InSet(&string_set, signature2)); | 1718 0, |
1278 | 1719 GL_RGBA, |
1279 manager_->SetLevelInfo(texture_ref_, | 1720 GL_UNSIGNED_BYTE, |
1280 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_FLOAT, | 1721 false); |
1281 false); | 1722 signature2.clear(); |
1282 signature2.clear(); | 1723 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1283 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1724 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1725 |
| 1726 manager_->SetLevelInfo(texture_ref_.get(), |
| 1727 GL_TEXTURE_2D, |
| 1728 1, |
| 1729 GL_RGBA, |
| 1730 2, |
| 1731 2, |
| 1732 1, |
| 1733 1, |
| 1734 GL_RGBA, |
| 1735 GL_UNSIGNED_BYTE, |
| 1736 false); |
| 1737 signature2.clear(); |
| 1738 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1739 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1740 |
| 1741 manager_->SetLevelInfo(texture_ref_.get(), |
| 1742 GL_TEXTURE_2D, |
| 1743 1, |
| 1744 GL_RGBA, |
| 1745 2, |
| 1746 2, |
| 1747 1, |
| 1748 0, |
| 1749 GL_RGB, |
| 1750 GL_UNSIGNED_BYTE, |
| 1751 false); |
| 1752 signature2.clear(); |
| 1753 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1754 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1755 |
| 1756 manager_->SetLevelInfo(texture_ref_.get(), |
| 1757 GL_TEXTURE_2D, |
| 1758 1, |
| 1759 GL_RGBA, |
| 1760 2, |
| 1761 2, |
| 1762 1, |
| 1763 0, |
| 1764 GL_RGBA, |
| 1765 GL_FLOAT, |
| 1766 false); |
| 1767 signature2.clear(); |
| 1768 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1284 EXPECT_FALSE(InSet(&string_set, signature2)); | 1769 EXPECT_FALSE(InSet(&string_set, signature2)); |
1285 | 1770 |
1286 // put it back | 1771 // put it back |
1287 manager_->SetLevelInfo(texture_ref_, | 1772 manager_->SetLevelInfo(texture_ref_.get(), |
1288 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1773 GL_TEXTURE_2D, |
1289 false); | 1774 1, |
1290 signature2.clear(); | 1775 GL_RGBA, |
1291 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1776 2, |
| 1777 2, |
| 1778 1, |
| 1779 0, |
| 1780 GL_RGBA, |
| 1781 GL_UNSIGNED_BYTE, |
| 1782 false); |
| 1783 signature2.clear(); |
| 1784 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1292 EXPECT_EQ(signature1, signature2); | 1785 EXPECT_EQ(signature1, signature2); |
1293 | 1786 |
1294 // check changing parameters changes signature. | 1787 // check changing parameters changes signature. |
1295 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); | 1788 SetParameter( |
1296 signature2.clear(); | 1789 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); |
1297 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1790 signature2.clear(); |
1298 EXPECT_FALSE(InSet(&string_set, signature2)); | 1791 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1299 | 1792 EXPECT_FALSE(InSet(&string_set, signature2)); |
1300 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, | 1793 |
1301 GL_NEAREST_MIPMAP_LINEAR, GL_NO_ERROR); | 1794 SetParameter(texture_ref_.get(), |
1302 SetParameter(texture_ref_, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1795 GL_TEXTURE_MIN_FILTER, |
1303 signature2.clear(); | 1796 GL_NEAREST_MIPMAP_LINEAR, |
1304 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1797 GL_NO_ERROR); |
1305 EXPECT_FALSE(InSet(&string_set, signature2)); | 1798 SetParameter( |
1306 | 1799 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1307 SetParameter(texture_ref_, GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); | 1800 signature2.clear(); |
1308 SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 1801 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1309 signature2.clear(); | 1802 EXPECT_FALSE(InSet(&string_set, signature2)); |
1310 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1803 |
1311 EXPECT_FALSE(InSet(&string_set, signature2)); | 1804 SetParameter( |
1312 | 1805 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); |
1313 SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR); | 1806 SetParameter( |
1314 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 1807 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
1315 signature2.clear(); | 1808 signature2.clear(); |
1316 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1809 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1810 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1811 |
| 1812 SetParameter(texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR); |
| 1813 SetParameter( |
| 1814 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 1815 signature2.clear(); |
| 1816 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1317 EXPECT_FALSE(InSet(&string_set, signature2)); | 1817 EXPECT_FALSE(InSet(&string_set, signature2)); |
1318 | 1818 |
1319 // Check putting it back genenerates the same signature | 1819 // Check putting it back genenerates the same signature |
1320 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR); | 1820 SetParameter(texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR); |
1321 signature2.clear(); | 1821 signature2.clear(); |
1322 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1822 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
1323 EXPECT_EQ(signature1, signature2); | 1823 EXPECT_EQ(signature1, signature2); |
1324 | 1824 |
1325 // Check the set was acutally getting different signatures. | 1825 // Check the set was acutally getting different signatures. |
1326 EXPECT_EQ(11u, string_set.size()); | 1826 EXPECT_EQ(11u, string_set.size()); |
1327 } | 1827 } |
1328 | 1828 |
1329 class ProduceConsumeTextureTest : public TextureTest { | 1829 class ProduceConsumeTextureTest : public TextureTest { |
1330 public: | 1830 public: |
1331 virtual void SetUp() { | 1831 virtual void SetUp() { |
1332 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external"); | 1832 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external"); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1443 | 1943 |
1444 private: | 1944 private: |
1445 static const GLuint kClient2Id; | 1945 static const GLuint kClient2Id; |
1446 static const GLuint kService2Id; | 1946 static const GLuint kService2Id; |
1447 }; | 1947 }; |
1448 | 1948 |
1449 const GLuint ProduceConsumeTextureTest::kClient2Id = 2; | 1949 const GLuint ProduceConsumeTextureTest::kClient2Id = 2; |
1450 const GLuint ProduceConsumeTextureTest::kService2Id = 12; | 1950 const GLuint ProduceConsumeTextureTest::kService2Id = 12; |
1451 | 1951 |
1452 TEST_F(ProduceConsumeTextureTest, ProduceConsume2D) { | 1952 TEST_F(ProduceConsumeTextureTest, ProduceConsume2D) { |
1453 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1953 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1454 Texture* texture = texture_ref_->texture(); | 1954 Texture* texture = texture_ref_->texture(); |
1455 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1955 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1456 LevelInfo level0( | 1956 LevelInfo level0( |
1457 GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true); | 1957 GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true); |
1458 SetLevelInfo(texture_ref_, 0, level0); | 1958 SetLevelInfo(texture_ref_.get(), 0, level0); |
1459 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 1959 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
1460 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1960 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1461 LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1); | 1961 LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1); |
1462 LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2); | 1962 LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2); |
1463 Texture* produced_texture = Produce(texture_ref_); | 1963 Texture* produced_texture = Produce(texture_ref_.get()); |
1464 EXPECT_EQ(produced_texture, texture); | 1964 EXPECT_EQ(produced_texture, texture); |
1465 | 1965 |
1466 // Make this texture bigger with more levels, and make sure they get | 1966 // Make this texture bigger with more levels, and make sure they get |
1467 // clobbered correctly during Consume(). | 1967 // clobbered correctly during Consume(). |
1468 manager_->SetTarget(texture2_, GL_TEXTURE_2D); | 1968 manager_->SetTarget(texture2_.get(), GL_TEXTURE_2D); |
1469 SetLevelInfo( | 1969 SetLevelInfo( |
1470 texture2_, | 1970 texture2_.get(), |
1471 0, | 1971 0, |
1472 LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false)); | 1972 LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false)); |
1473 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_)); | 1973 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_.get())); |
1474 texture = texture2_->texture(); | 1974 texture = texture2_->texture(); |
1475 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1975 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1476 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size()); | 1976 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size()); |
1477 | 1977 |
1478 GLuint client_id = texture2_->client_id(); | 1978 GLuint client_id = texture2_->client_id(); |
1479 manager_->RemoveTexture(client_id); | 1979 manager_->RemoveTexture(client_id); |
1480 Consume(client_id, produced_texture); | 1980 Consume(client_id, produced_texture); |
1481 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 1981 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
1482 EXPECT_EQ(produced_texture, restored_texture->texture()); | 1982 EXPECT_EQ(produced_texture, restored_texture->texture()); |
1483 EXPECT_EQ(level0, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 0)); | 1983 EXPECT_EQ(level0, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 0)); |
1484 EXPECT_EQ(level1, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 1)); | 1984 EXPECT_EQ(level1, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 1)); |
1485 EXPECT_EQ(level2, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 2)); | 1985 EXPECT_EQ(level2, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 2)); |
1486 texture = restored_texture->texture(); | 1986 texture = restored_texture->texture(); |
1487 EXPECT_EQ(64U + 16U + 4U, texture->estimated_size()); | 1987 EXPECT_EQ(64U + 16U + 4U, texture->estimated_size()); |
1488 GLint w, h; | 1988 GLint w, h; |
1489 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h)); | 1989 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h)); |
1490 | 1990 |
1491 // However the old texture ref still exists if it was referenced somewhere. | 1991 // However the old texture ref still exists if it was referenced somewhere. |
1492 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, | 1992 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, |
1493 texture2_->texture()->estimated_size()); | 1993 texture2_->texture()->estimated_size()); |
1494 } | 1994 } |
1495 | 1995 |
1496 TEST_F(ProduceConsumeTextureTest, ProduceConsumeClearRectangle) { | 1996 TEST_F(ProduceConsumeTextureTest, ProduceConsumeClearRectangle) { |
1497 manager_->SetTarget(texture_ref_, GL_TEXTURE_RECTANGLE_ARB); | 1997 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_RECTANGLE_ARB); |
1498 Texture* texture = texture_ref_->texture(); | 1998 Texture* texture = texture_ref_->texture(); |
1499 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target()); | 1999 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target()); |
1500 LevelInfo level0( | 2000 LevelInfo level0( |
1501 GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false); | 2001 GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false); |
1502 SetLevelInfo(texture_ref_, 0, level0); | 2002 SetLevelInfo(texture_ref_.get(), 0, level0); |
1503 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 2003 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1504 Texture* produced_texture = Produce(texture_ref_); | 2004 Texture* produced_texture = Produce(texture_ref_.get()); |
1505 EXPECT_EQ(produced_texture, texture); | 2005 EXPECT_EQ(produced_texture, texture); |
1506 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), | 2006 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), |
1507 produced_texture->target()); | 2007 produced_texture->target()); |
1508 | 2008 |
1509 GLuint client_id = texture2_->client_id(); | 2009 GLuint client_id = texture2_->client_id(); |
1510 manager_->RemoveTexture(client_id); | 2010 manager_->RemoveTexture(client_id); |
1511 Consume(client_id, produced_texture); | 2011 Consume(client_id, produced_texture); |
1512 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 2012 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
1513 EXPECT_EQ(produced_texture, restored_texture->texture()); | 2013 EXPECT_EQ(produced_texture, restored_texture->texture()); |
1514 | 2014 |
1515 // See if we can clear the previously uncleared level now. | 2015 // See if we can clear the previously uncleared level now. |
1516 EXPECT_EQ(level0, | 2016 EXPECT_EQ(level0, |
1517 GetLevelInfo(restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); | 2017 GetLevelInfo(restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); |
1518 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) | 2018 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) |
1519 .WillRepeatedly(Return(true)); | 2019 .WillRepeatedly(Return(true)); |
1520 EXPECT_TRUE(manager_->ClearTextureLevel( | 2020 EXPECT_TRUE(manager_->ClearTextureLevel( |
1521 decoder_.get(), restored_texture, GL_TEXTURE_RECTANGLE_ARB, 0)); | 2021 decoder_.get(), restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); |
1522 } | 2022 } |
1523 | 2023 |
1524 TEST_F(ProduceConsumeTextureTest, ProduceConsumeStreamTexture) { | 2024 TEST_F(ProduceConsumeTextureTest, ProduceConsumeStreamTexture) { |
1525 manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES); | 2025 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); |
1526 Texture* texture = texture_ref_->texture(); | 2026 Texture* texture = texture_ref_->texture(); |
1527 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); | 2027 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
1528 manager_->SetStreamTexture(texture_ref_, true); | 2028 manager_->SetStreamTexture(texture_ref_.get(), true); |
1529 GLuint service_id = texture->service_id(); | 2029 GLuint service_id = texture->service_id(); |
1530 Texture* produced_texture = Produce(texture_ref_); | 2030 Texture* produced_texture = Produce(texture_ref_.get()); |
1531 EXPECT_TRUE(texture->IsStreamTexture()); | 2031 EXPECT_TRUE(texture->IsStreamTexture()); |
1532 | 2032 |
1533 GLuint client_id = texture2_->client_id(); | 2033 GLuint client_id = texture2_->client_id(); |
1534 manager_->RemoveTexture(client_id); | 2034 manager_->RemoveTexture(client_id); |
1535 Consume(client_id, produced_texture); | 2035 Consume(client_id, produced_texture); |
1536 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 2036 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
1537 EXPECT_EQ(produced_texture, restored_texture->texture()); | 2037 EXPECT_EQ(produced_texture, restored_texture->texture()); |
1538 EXPECT_TRUE(restored_texture->texture()->IsStreamTexture()); | 2038 EXPECT_TRUE(restored_texture->texture()->IsStreamTexture()); |
1539 EXPECT_TRUE(restored_texture->texture()->IsImmutable()); | 2039 EXPECT_TRUE(restored_texture->texture()->IsImmutable()); |
1540 EXPECT_EQ(service_id, restored_texture->service_id()); | 2040 EXPECT_EQ(service_id, restored_texture->service_id()); |
1541 } | 2041 } |
1542 | 2042 |
1543 TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) { | 2043 TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) { |
1544 manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP); | 2044 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); |
1545 Texture* texture = texture_ref_->texture(); | 2045 Texture* texture = texture_ref_->texture(); |
1546 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 2046 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
1547 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X, | 2047 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
1548 GL_RGBA, | 2048 GL_RGBA, |
1549 1, | 2049 1, |
1550 1, | 2050 1, |
1551 1, | 2051 1, |
1552 0, | 2052 0, |
1553 GL_UNSIGNED_BYTE, | 2053 GL_UNSIGNED_BYTE, |
1554 true); | 2054 true); |
1555 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 2055 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
1556 GL_RGBA, | 2056 GL_RGBA, |
1557 3, | 2057 3, |
1558 3, | 2058 3, |
1559 1, | 2059 1, |
1560 0, | 2060 0, |
1561 GL_UNSIGNED_BYTE, | 2061 GL_UNSIGNED_BYTE, |
1562 true); | 2062 true); |
1563 SetLevelInfo(texture_ref_, 0, face0); | 2063 SetLevelInfo(texture_ref_.get(), 0, face0); |
1564 SetLevelInfo(texture_ref_, 0, face5); | 2064 SetLevelInfo(texture_ref_.get(), 0, face5); |
1565 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 2065 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1566 Texture* produced_texture = Produce(texture_ref_); | 2066 Texture* produced_texture = Produce(texture_ref_.get()); |
1567 EXPECT_EQ(produced_texture, texture); | 2067 EXPECT_EQ(produced_texture, texture); |
1568 | 2068 |
1569 GLuint client_id = texture2_->client_id(); | 2069 GLuint client_id = texture2_->client_id(); |
1570 manager_->RemoveTexture(client_id); | 2070 manager_->RemoveTexture(client_id); |
1571 Consume(client_id, produced_texture); | 2071 Consume(client_id, produced_texture); |
1572 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 2072 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
1573 EXPECT_EQ(produced_texture, restored_texture->texture()); | 2073 EXPECT_EQ(produced_texture, restored_texture->texture()); |
1574 EXPECT_EQ(face0, | 2074 EXPECT_EQ( |
1575 GetLevelInfo(restored_texture, GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0)); | 2075 face0, |
1576 EXPECT_EQ(face5, | 2076 GetLevelInfo(restored_texture.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0)); |
1577 GetLevelInfo(restored_texture, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0)); | 2077 EXPECT_EQ( |
| 2078 face5, |
| 2079 GetLevelInfo(restored_texture.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0)); |
1578 } | 2080 } |
1579 | 2081 |
1580 class CountingMemoryTracker : public MemoryTracker { | 2082 class CountingMemoryTracker : public MemoryTracker { |
1581 public: | 2083 public: |
1582 CountingMemoryTracker() { | 2084 CountingMemoryTracker() { |
1583 current_size_[0] = 0; | 2085 current_size_[0] = 0; |
1584 current_size_[1] = 0; | 2086 current_size_[1] = 0; |
1585 } | 2087 } |
1586 | 2088 |
1587 virtual void TrackMemoryAllocatedChange(size_t old_size, | 2089 virtual void TrackMemoryAllocatedChange(size_t old_size, |
(...skipping 26 matching lines...) Expand all Loading... |
1614 } | 2116 } |
1615 | 2117 |
1616 virtual ~SharedTextureTest() { | 2118 virtual ~SharedTextureTest() { |
1617 } | 2119 } |
1618 | 2120 |
1619 virtual void SetUp() { | 2121 virtual void SetUp() { |
1620 gl_.reset(new ::gfx::MockGLInterface()); | 2122 gl_.reset(new ::gfx::MockGLInterface()); |
1621 ::gfx::GLInterface::SetGLInterface(gl_.get()); | 2123 ::gfx::GLInterface::SetGLInterface(gl_.get()); |
1622 | 2124 |
1623 memory_tracker1_ = new CountingMemoryTracker; | 2125 memory_tracker1_ = new CountingMemoryTracker; |
1624 texture_manager1_.reset(new TextureManager( | 2126 texture_manager1_.reset( |
1625 memory_tracker1_, feature_info_.get(), | 2127 new TextureManager(memory_tracker1_.get(), |
1626 TextureManagerTest::kMaxTextureSize, | 2128 feature_info_.get(), |
1627 TextureManagerTest::kMaxCubeMapTextureSize)); | 2129 TextureManagerTest::kMaxTextureSize, |
| 2130 TextureManagerTest::kMaxCubeMapTextureSize)); |
1628 memory_tracker2_ = new CountingMemoryTracker; | 2131 memory_tracker2_ = new CountingMemoryTracker; |
1629 texture_manager2_.reset(new TextureManager( | 2132 texture_manager2_.reset( |
1630 memory_tracker2_, feature_info_.get(), | 2133 new TextureManager(memory_tracker2_.get(), |
1631 TextureManagerTest::kMaxTextureSize, | 2134 feature_info_.get(), |
1632 TextureManagerTest::kMaxCubeMapTextureSize)); | 2135 TextureManagerTest::kMaxTextureSize, |
| 2136 TextureManagerTest::kMaxCubeMapTextureSize)); |
1633 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 2137 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); |
1634 texture_manager1_->Initialize(); | 2138 texture_manager1_->Initialize(); |
1635 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 2139 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); |
1636 texture_manager2_->Initialize(); | 2140 texture_manager2_->Initialize(); |
1637 } | 2141 } |
1638 | 2142 |
1639 virtual void TearDown() { | 2143 virtual void TearDown() { |
1640 texture_manager2_->Destroy(false); | 2144 texture_manager2_->Destroy(false); |
1641 texture_manager2_.reset(); | 2145 texture_manager2_.reset(); |
1642 texture_manager1_->Destroy(false); | 2146 texture_manager1_->Destroy(false); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1689 // Associate new texture ref to other texture manager, should account for it | 2193 // Associate new texture ref to other texture manager, should account for it |
1690 // too. | 2194 // too. |
1691 scoped_refptr<TextureRef> ref2 = | 2195 scoped_refptr<TextureRef> ref2 = |
1692 texture_manager2_->Consume(20, ref1->texture()); | 2196 texture_manager2_->Consume(20, ref1->texture()); |
1693 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); | 2197 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); |
1694 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2198 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1695 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2199 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1696 | 2200 |
1697 // Make texture renderable but uncleared on one texture manager, should affect | 2201 // Make texture renderable but uncleared on one texture manager, should affect |
1698 // other one. | 2202 // other one. |
1699 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D); | 2203 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
1700 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures()); | 2204 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures()); |
1701 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 2205 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1702 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 2206 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
1703 EXPECT_TRUE(texture_manager2_->HaveUnrenderableTextures()); | 2207 EXPECT_TRUE(texture_manager2_->HaveUnrenderableTextures()); |
1704 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2208 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1705 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2209 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1706 | 2210 |
1707 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 2211 texture_manager1_->SetLevelInfo(ref1.get(), |
1708 GL_RGBA, GL_UNSIGNED_BYTE, false); | 2212 GL_TEXTURE_2D, |
| 2213 0, |
| 2214 GL_RGBA, |
| 2215 1, |
| 2216 1, |
| 2217 1, |
| 2218 0, |
| 2219 GL_RGBA, |
| 2220 GL_UNSIGNED_BYTE, |
| 2221 false); |
1709 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); | 2222 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); |
1710 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); | 2223 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); |
1711 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); | 2224 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); |
1712 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); | 2225 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); |
1713 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); | 2226 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); |
1714 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); | 2227 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); |
1715 | 2228 |
1716 // Make texture cleared on one texture manager, should affect other one. | 2229 // Make texture cleared on one texture manager, should affect other one. |
1717 texture_manager1_->SetLevelCleared(ref1, GL_TEXTURE_2D, 0, true); | 2230 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, true); |
1718 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 2231 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1719 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 2232 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
1720 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2233 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1721 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2234 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1722 | 2235 |
1723 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 2236 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
1724 .Times(1) | 2237 .Times(1) |
1725 .RetiresOnSaturation(); | 2238 .RetiresOnSaturation(); |
1726 texture_manager1_->RemoveTexture(10); | 2239 texture_manager1_->RemoveTexture(10); |
1727 texture_manager2_->RemoveTexture(20); | 2240 texture_manager2_->RemoveTexture(20); |
1728 } | 2241 } |
1729 | 2242 |
1730 TEST_F(SharedTextureTest, FBOCompletenessCheck) { | 2243 TEST_F(SharedTextureTest, FBOCompletenessCheck) { |
1731 const GLenum kCompleteValue = GL_FRAMEBUFFER_COMPLETE; | 2244 const GLenum kCompleteValue = GL_FRAMEBUFFER_COMPLETE; |
1732 FramebufferManager framebuffer_manager1(1, 1); | 2245 FramebufferManager framebuffer_manager1(1, 1); |
1733 texture_manager1_->set_framebuffer_manager(&framebuffer_manager1); | 2246 texture_manager1_->set_framebuffer_manager(&framebuffer_manager1); |
1734 FramebufferManager framebuffer_manager2(1, 1); | 2247 FramebufferManager framebuffer_manager2(1, 1); |
1735 texture_manager2_->set_framebuffer_manager(&framebuffer_manager2); | 2248 texture_manager2_->set_framebuffer_manager(&framebuffer_manager2); |
1736 | 2249 |
1737 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 2250 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
1738 framebuffer_manager1.CreateFramebuffer(10, 10); | 2251 framebuffer_manager1.CreateFramebuffer(10, 10); |
1739 scoped_refptr<Framebuffer> framebuffer1 = | 2252 scoped_refptr<Framebuffer> framebuffer1 = |
1740 framebuffer_manager1.GetFramebuffer(10); | 2253 framebuffer_manager1.GetFramebuffer(10); |
1741 framebuffer1->AttachTexture(GL_COLOR_ATTACHMENT0, ref1, GL_TEXTURE_2D, 0); | 2254 framebuffer1->AttachTexture( |
1742 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1)); | 2255 GL_COLOR_ATTACHMENT0, ref1.get(), GL_TEXTURE_2D, 0); |
| 2256 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
1743 EXPECT_NE(kCompleteValue, framebuffer1->IsPossiblyComplete()); | 2257 EXPECT_NE(kCompleteValue, framebuffer1->IsPossiblyComplete()); |
1744 | 2258 |
1745 // Make FBO complete in manager 1. | 2259 // Make FBO complete in manager 1. |
1746 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D); | 2260 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
1747 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 2261 texture_manager1_->SetLevelInfo(ref1.get(), |
1748 GL_RGBA, GL_UNSIGNED_BYTE, true); | 2262 GL_TEXTURE_2D, |
| 2263 0, |
| 2264 GL_RGBA, |
| 2265 1, |
| 2266 1, |
| 2267 1, |
| 2268 0, |
| 2269 GL_RGBA, |
| 2270 GL_UNSIGNED_BYTE, |
| 2271 true); |
1749 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); | 2272 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); |
1750 framebuffer_manager1.MarkAsComplete(framebuffer1); | 2273 framebuffer_manager1.MarkAsComplete(framebuffer1.get()); |
1751 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1)); | 2274 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
1752 | 2275 |
1753 // Share texture with manager 2. | 2276 // Share texture with manager 2. |
1754 scoped_refptr<TextureRef> ref2 = | 2277 scoped_refptr<TextureRef> ref2 = |
1755 texture_manager2_->Consume(20, ref1->texture()); | 2278 texture_manager2_->Consume(20, ref1->texture()); |
1756 framebuffer_manager2.CreateFramebuffer(20, 20); | 2279 framebuffer_manager2.CreateFramebuffer(20, 20); |
1757 scoped_refptr<Framebuffer> framebuffer2 = | 2280 scoped_refptr<Framebuffer> framebuffer2 = |
1758 framebuffer_manager2.GetFramebuffer(20); | 2281 framebuffer_manager2.GetFramebuffer(20); |
1759 framebuffer2->AttachTexture(GL_COLOR_ATTACHMENT0, ref2, GL_TEXTURE_2D, 0); | 2282 framebuffer2->AttachTexture( |
1760 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2)); | 2283 GL_COLOR_ATTACHMENT0, ref2.get(), GL_TEXTURE_2D, 0); |
| 2284 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
1761 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); | 2285 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); |
1762 framebuffer_manager2.MarkAsComplete(framebuffer2); | 2286 framebuffer_manager2.MarkAsComplete(framebuffer2.get()); |
1763 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2)); | 2287 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
1764 | 2288 |
1765 // Change level for texture, both FBOs should be marked incomplete | 2289 // Change level for texture, both FBOs should be marked incomplete |
1766 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 2290 texture_manager1_->SetLevelInfo(ref1.get(), |
1767 GL_RGBA, GL_UNSIGNED_BYTE, true); | 2291 GL_TEXTURE_2D, |
1768 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1)); | 2292 0, |
| 2293 GL_RGBA, |
| 2294 1, |
| 2295 1, |
| 2296 1, |
| 2297 0, |
| 2298 GL_RGBA, |
| 2299 GL_UNSIGNED_BYTE, |
| 2300 true); |
| 2301 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
1769 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); | 2302 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); |
1770 framebuffer_manager1.MarkAsComplete(framebuffer1); | 2303 framebuffer_manager1.MarkAsComplete(framebuffer1.get()); |
1771 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1)); | 2304 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
1772 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2)); | 2305 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
1773 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); | 2306 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); |
1774 framebuffer_manager2.MarkAsComplete(framebuffer2); | 2307 framebuffer_manager2.MarkAsComplete(framebuffer2.get()); |
1775 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2)); | 2308 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
1776 | 2309 |
1777 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)) | 2310 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)) |
1778 .Times(2) | 2311 .Times(2) |
1779 .RetiresOnSaturation(); | 2312 .RetiresOnSaturation(); |
1780 framebuffer_manager1.RemoveFramebuffer(10); | 2313 framebuffer_manager1.RemoveFramebuffer(10); |
1781 framebuffer_manager2.RemoveFramebuffer(20); | 2314 framebuffer_manager2.RemoveFramebuffer(20); |
1782 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 2315 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
1783 .Times(1) | 2316 .Times(1) |
1784 .RetiresOnSaturation(); | 2317 .RetiresOnSaturation(); |
1785 texture_manager1_->RemoveTexture(10); | 2318 texture_manager1_->RemoveTexture(10); |
1786 texture_manager2_->RemoveTexture(20); | 2319 texture_manager2_->RemoveTexture(20); |
1787 } | 2320 } |
1788 | 2321 |
1789 TEST_F(SharedTextureTest, Memory) { | 2322 TEST_F(SharedTextureTest, Memory) { |
1790 size_t initial_memory1 = memory_tracker1_->GetSize(MemoryTracker::kUnmanaged); | 2323 size_t initial_memory1 = memory_tracker1_->GetSize(MemoryTracker::kUnmanaged); |
1791 size_t initial_memory2 = memory_tracker2_->GetSize(MemoryTracker::kUnmanaged); | 2324 size_t initial_memory2 = memory_tracker2_->GetSize(MemoryTracker::kUnmanaged); |
1792 | 2325 |
1793 // Newly created texture is unrenderable. | 2326 // Newly created texture is unrenderable. |
1794 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 2327 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
1795 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D); | 2328 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
1796 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 10, 10, 1, 0, | 2329 texture_manager1_->SetLevelInfo(ref1.get(), |
1797 GL_RGBA, GL_UNSIGNED_BYTE, false); | 2330 GL_TEXTURE_2D, |
| 2331 0, |
| 2332 GL_RGBA, |
| 2333 10, |
| 2334 10, |
| 2335 1, |
| 2336 0, |
| 2337 GL_RGBA, |
| 2338 GL_UNSIGNED_BYTE, |
| 2339 false); |
1798 | 2340 |
1799 EXPECT_LT(0u, ref1->texture()->estimated_size()); | 2341 EXPECT_LT(0u, ref1->texture()->estimated_size()); |
1800 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), | 2342 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), |
1801 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged)); | 2343 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged)); |
1802 | 2344 |
1803 // Associate new texture ref to other texture manager, it doesn't account for | 2345 // Associate new texture ref to other texture manager, it doesn't account for |
1804 // the texture memory, the first memory tracker still has it. | 2346 // the texture memory, the first memory tracker still has it. |
1805 scoped_refptr<TextureRef> ref2 = | 2347 scoped_refptr<TextureRef> ref2 = |
1806 texture_manager2_->Consume(20, ref1->texture()); | 2348 texture_manager2_->Consume(20, ref1->texture()); |
1807 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), | 2349 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), |
(...skipping 13 matching lines...) Expand all Loading... |
1821 .Times(1) | 2363 .Times(1) |
1822 .RetiresOnSaturation(); | 2364 .RetiresOnSaturation(); |
1823 ref2 = NULL; | 2365 ref2 = NULL; |
1824 texture_manager2_->RemoveTexture(20); | 2366 texture_manager2_->RemoveTexture(20); |
1825 EXPECT_EQ(initial_memory2, | 2367 EXPECT_EQ(initial_memory2, |
1826 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged)); | 2368 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged)); |
1827 } | 2369 } |
1828 | 2370 |
1829 } // namespace gles2 | 2371 } // namespace gles2 |
1830 } // namespace gpu | 2372 } // namespace gpu |
OLD | NEW |