| 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 <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 541 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 542 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 542 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
| 543 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 543 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 544 EXPECT_TRUE(texture->SafeToRenderFrom()); | 544 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 545 EXPECT_TRUE(texture->IsImmutable()); | 545 EXPECT_TRUE(texture->IsImmutable()); |
| 546 } | 546 } |
| 547 | 547 |
| 548 TEST_F(TextureTest, ZeroSizeCanNotRender) { | 548 TEST_F(TextureTest, ZeroSizeCanNotRender) { |
| 549 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 549 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 550 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 550 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 551 manager_->SetLevelInfo(texture_ref_.get(), | 551 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, |
| 552 GL_TEXTURE_2D, | 552 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(1, 1)); |
| 553 0, | |
| 554 GL_RGBA, | |
| 555 1, | |
| 556 1, | |
| 557 1, | |
| 558 0, | |
| 559 GL_RGBA, | |
| 560 GL_UNSIGNED_BYTE, | |
| 561 true); | |
| 562 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 553 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 563 manager_->SetLevelInfo(texture_ref_.get(), | 554 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, |
| 564 GL_TEXTURE_2D, | 555 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 565 0, | |
| 566 GL_RGBA, | |
| 567 0, | |
| 568 0, | |
| 569 1, | |
| 570 0, | |
| 571 GL_RGBA, | |
| 572 GL_UNSIGNED_BYTE, | |
| 573 true); | |
| 574 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 556 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 575 } | 557 } |
| 576 | 558 |
| 577 TEST_F(TextureTest, EstimatedSize) { | 559 TEST_F(TextureTest, EstimatedSize) { |
| 578 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 560 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 579 manager_->SetLevelInfo(texture_ref_.get(), | 561 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, |
| 580 GL_TEXTURE_2D, | 562 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 4)); |
| 581 0, | |
| 582 GL_RGBA, | |
| 583 8, | |
| 584 4, | |
| 585 1, | |
| 586 0, | |
| 587 GL_RGBA, | |
| 588 GL_UNSIGNED_BYTE, | |
| 589 true); | |
| 590 EXPECT_EQ(8u * 4u * 4u, texture_ref_->texture()->estimated_size()); | 563 EXPECT_EQ(8u * 4u * 4u, texture_ref_->texture()->estimated_size()); |
| 591 manager_->SetLevelInfo(texture_ref_.get(), | 564 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, |
| 592 GL_TEXTURE_2D, | 565 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 4)); |
| 593 2, | |
| 594 GL_RGBA, | |
| 595 8, | |
| 596 4, | |
| 597 1, | |
| 598 0, | |
| 599 GL_RGBA, | |
| 600 GL_UNSIGNED_BYTE, | |
| 601 true); | |
| 602 EXPECT_EQ(8u * 4u * 4u * 2u, texture_ref_->texture()->estimated_size()); | 566 EXPECT_EQ(8u * 4u * 4u * 2u, texture_ref_->texture()->estimated_size()); |
| 603 } | 567 } |
| 604 | 568 |
| 605 TEST_F(TextureMemoryTrackerTest, EstimatedSize) { | 569 TEST_F(TextureMemoryTrackerTest, EstimatedSize) { |
| 606 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 570 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 607 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); | 571 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); |
| 608 manager_->SetLevelInfo(texture_ref_.get(), | 572 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, |
| 609 GL_TEXTURE_2D, | 573 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 4)); |
| 610 0, | |
| 611 GL_RGBA, | |
| 612 8, | |
| 613 4, | |
| 614 1, | |
| 615 0, | |
| 616 GL_RGBA, | |
| 617 GL_UNSIGNED_BYTE, | |
| 618 true); | |
| 619 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); | 574 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); |
| 620 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 256, MemoryTracker::kUnmanaged); | 575 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 256, MemoryTracker::kUnmanaged); |
| 621 manager_->SetLevelInfo(texture_ref_.get(), | 576 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, |
| 622 GL_TEXTURE_2D, | 577 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 4)); |
| 623 2, | |
| 624 GL_RGBA, | |
| 625 8, | |
| 626 4, | |
| 627 1, | |
| 628 0, | |
| 629 GL_RGBA, | |
| 630 GL_UNSIGNED_BYTE, | |
| 631 true); | |
| 632 // Add expectation for texture deletion. | 578 // Add expectation for texture deletion. |
| 633 EXPECT_MEMORY_ALLOCATION_CHANGE(256, 0, MemoryTracker::kUnmanaged); | 579 EXPECT_MEMORY_ALLOCATION_CHANGE(256, 0, MemoryTracker::kUnmanaged); |
| 634 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 580 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
| 635 } | 581 } |
| 636 | 582 |
| 637 TEST_F(TextureMemoryTrackerTest, SetParameterPool) { | 583 TEST_F(TextureMemoryTrackerTest, SetParameterPool) { |
| 638 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 584 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 639 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); | 585 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); |
| 640 manager_->SetLevelInfo(texture_ref_.get(), | 586 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, |
| 641 GL_TEXTURE_2D, | 587 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 4)); |
| 642 0, | |
| 643 GL_RGBA, | |
| 644 8, | |
| 645 4, | |
| 646 1, | |
| 647 0, | |
| 648 GL_RGBA, | |
| 649 GL_UNSIGNED_BYTE, | |
| 650 true); | |
| 651 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); | 588 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); |
| 652 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kManaged); | 589 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kManaged); |
| 653 SetParameter(texture_ref_.get(), | 590 SetParameter(texture_ref_.get(), |
| 654 GL_TEXTURE_POOL_CHROMIUM, | 591 GL_TEXTURE_POOL_CHROMIUM, |
| 655 GL_TEXTURE_POOL_MANAGED_CHROMIUM, | 592 GL_TEXTURE_POOL_MANAGED_CHROMIUM, |
| 656 GL_NO_ERROR); | 593 GL_NO_ERROR); |
| 657 // Add expectation for texture deletion. | 594 // Add expectation for texture deletion. |
| 658 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kManaged); | 595 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kManaged); |
| 659 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 596 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
| 660 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged); | 597 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged); |
| 661 } | 598 } |
| 662 | 599 |
| 663 TEST_F(TextureTest, POT2D) { | 600 TEST_F(TextureTest, POT2D) { |
| 664 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 601 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 665 Texture* texture = texture_ref_->texture(); | 602 Texture* texture = texture_ref_->texture(); |
| 666 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 603 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 667 // Check Setting level 0 to POT | 604 // Check Setting level 0 to POT |
| 668 manager_->SetLevelInfo(texture_ref_.get(), | 605 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
| 669 GL_TEXTURE_2D, | 606 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
| 670 0, | |
| 671 GL_RGBA, | |
| 672 4, | |
| 673 4, | |
| 674 1, | |
| 675 0, | |
| 676 GL_RGBA, | |
| 677 GL_UNSIGNED_BYTE, | |
| 678 true); | |
| 679 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 607 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 680 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 608 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 681 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 609 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 682 EXPECT_EQ(0, texture->num_uncleared_mips()); | 610 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 683 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 611 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 684 // Set filters to something that will work with a single mip. | 612 // Set filters to something that will work with a single mip. |
| 685 SetParameter( | 613 SetParameter( |
| 686 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 614 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
| 687 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 615 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 688 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 616 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 689 // Set them back. | 617 // Set them back. |
| 690 SetParameter(texture_ref_.get(), | 618 SetParameter(texture_ref_.get(), |
| 691 GL_TEXTURE_MIN_FILTER, | 619 GL_TEXTURE_MIN_FILTER, |
| 692 GL_LINEAR_MIPMAP_LINEAR, | 620 GL_LINEAR_MIPMAP_LINEAR, |
| 693 GL_NO_ERROR); | 621 GL_NO_ERROR); |
| 694 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 622 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 695 | 623 |
| 696 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 624 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 697 // Make mips. | 625 // Make mips. |
| 698 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 626 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 699 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 627 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 700 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 628 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 701 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 629 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 702 // Change a mip. | 630 // Change a mip. |
| 703 manager_->SetLevelInfo(texture_ref_.get(), | 631 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, |
| 704 GL_TEXTURE_2D, | 632 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
| 705 1, | |
| 706 GL_RGBA, | |
| 707 4, | |
| 708 4, | |
| 709 1, | |
| 710 0, | |
| 711 GL_RGBA, | |
| 712 GL_UNSIGNED_BYTE, | |
| 713 true); | |
| 714 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 633 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 715 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 634 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 716 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 635 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 717 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 636 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 718 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 637 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 719 // Set a level past the number of mips that would get generated. | 638 // Set a level past the number of mips that would get generated. |
| 720 manager_->SetLevelInfo(texture_ref_.get(), | 639 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, |
| 721 GL_TEXTURE_2D, | 640 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
| 722 3, | |
| 723 GL_RGBA, | |
| 724 4, | |
| 725 4, | |
| 726 1, | |
| 727 0, | |
| 728 GL_RGBA, | |
| 729 GL_UNSIGNED_BYTE, | |
| 730 true); | |
| 731 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 641 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 732 // Make mips. | 642 // Make mips. |
| 733 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 643 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 734 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 644 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 735 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 645 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 736 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 646 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 737 } | 647 } |
| 738 | 648 |
| 739 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { | 649 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { |
| 740 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 650 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 741 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64, MemoryTracker::kUnmanaged); | 651 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64, MemoryTracker::kUnmanaged); |
| 742 manager_->SetLevelInfo(texture_ref_.get(), | 652 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
| 743 GL_TEXTURE_2D, | 653 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
| 744 0, | |
| 745 GL_RGBA, | |
| 746 4, | |
| 747 4, | |
| 748 1, | |
| 749 0, | |
| 750 GL_RGBA, | |
| 751 GL_UNSIGNED_BYTE, | |
| 752 true); | |
| 753 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0, MemoryTracker::kUnmanaged); | 654 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0, MemoryTracker::kUnmanaged); |
| 754 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84, MemoryTracker::kUnmanaged); | 655 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84, MemoryTracker::kUnmanaged); |
| 755 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 656 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 756 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0, MemoryTracker::kUnmanaged); | 657 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0, MemoryTracker::kUnmanaged); |
| 757 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 658 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
| 758 } | 659 } |
| 759 | 660 |
| 760 TEST_F(TextureTest, UnusedMips) { | 661 TEST_F(TextureTest, UnusedMips) { |
| 761 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 662 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 762 Texture* texture = texture_ref_->texture(); | 663 Texture* texture = texture_ref_->texture(); |
| 763 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 664 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 764 // Set level zero to large size. | 665 // Set level zero to large size. |
| 765 manager_->SetLevelInfo(texture_ref_.get(), | 666 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
| 766 GL_TEXTURE_2D, | 667 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
| 767 0, | |
| 768 GL_RGBA, | |
| 769 4, | |
| 770 4, | |
| 771 1, | |
| 772 0, | |
| 773 GL_RGBA, | |
| 774 GL_UNSIGNED_BYTE, | |
| 775 true); | |
| 776 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 668 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 777 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 669 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 778 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 670 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 779 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 671 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 780 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 672 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 781 // Set level zero to large smaller (levels unused mips) | 673 // Set level zero to large smaller (levels unused mips) |
| 782 manager_->SetLevelInfo(texture_ref_.get(), | 674 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, |
| 783 GL_TEXTURE_2D, | 675 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
| 784 0, | |
| 785 GL_RGBA, | |
| 786 2, | |
| 787 2, | |
| 788 1, | |
| 789 0, | |
| 790 GL_RGBA, | |
| 791 GL_UNSIGNED_BYTE, | |
| 792 true); | |
| 793 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 676 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 794 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 677 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 795 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 678 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 796 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 679 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 797 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 680 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 798 // Set an unused level to some size | 681 // Set an unused level to some size |
| 799 manager_->SetLevelInfo(texture_ref_.get(), | 682 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, |
| 800 GL_TEXTURE_2D, | 683 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(16, 16)); |
| 801 4, | |
| 802 GL_RGBA, | |
| 803 16, | |
| 804 16, | |
| 805 1, | |
| 806 0, | |
| 807 GL_RGBA, | |
| 808 GL_UNSIGNED_BYTE, | |
| 809 true); | |
| 810 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 684 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 811 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 685 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 812 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 686 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 813 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 687 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 814 } | 688 } |
| 815 | 689 |
| 816 TEST_F(TextureTest, NPOT2D) { | 690 TEST_F(TextureTest, NPOT2D) { |
| 817 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 691 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 818 Texture* texture = texture_ref_->texture(); | 692 Texture* texture = texture_ref_->texture(); |
| 819 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 693 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 820 // Check Setting level 0 to NPOT | 694 // Check Setting level 0 to NPOT |
| 821 manager_->SetLevelInfo(texture_ref_.get(), | 695 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, |
| 822 GL_TEXTURE_2D, | 696 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
| 823 0, | |
| 824 GL_RGBA, | |
| 825 4, | |
| 826 5, | |
| 827 1, | |
| 828 0, | |
| 829 GL_RGBA, | |
| 830 GL_UNSIGNED_BYTE, | |
| 831 true); | |
| 832 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 697 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
| 833 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 698 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 834 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 699 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 835 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 700 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 836 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 701 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 837 SetParameter( | 702 SetParameter( |
| 838 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 703 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
| 839 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 704 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 840 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 705 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 841 SetParameter( | 706 SetParameter( |
| 842 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 707 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 843 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 708 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 844 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 709 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 845 SetParameter( | 710 SetParameter( |
| 846 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 711 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 847 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 712 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 848 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 713 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 849 // Change it to POT. | 714 // Change it to POT. |
| 850 manager_->SetLevelInfo(texture_ref_.get(), | 715 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
| 851 GL_TEXTURE_2D, | 716 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
| 852 0, | |
| 853 GL_RGBA, | |
| 854 4, | |
| 855 4, | |
| 856 1, | |
| 857 0, | |
| 858 GL_RGBA, | |
| 859 GL_UNSIGNED_BYTE, | |
| 860 true); | |
| 861 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 717 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 862 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 718 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 863 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 719 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 864 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 720 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 865 } | 721 } |
| 866 | 722 |
| 867 TEST_F(TextureTest, NPOT2DNPOTOK) { | 723 TEST_F(TextureTest, NPOT2DNPOTOK) { |
| 868 TestHelper::SetupFeatureInfoInitExpectations( | 724 TestHelper::SetupFeatureInfoInitExpectations( |
| 869 gl_.get(), "GL_OES_texture_npot"); | 725 gl_.get(), "GL_OES_texture_npot"); |
| 870 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 726 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 871 feature_info->Initialize(); | 727 feature_info->Initialize(); |
| 872 TextureManager manager(NULL, | 728 TextureManager manager(NULL, |
| 873 feature_info.get(), | 729 feature_info.get(), |
| 874 kMaxTextureSize, | 730 kMaxTextureSize, |
| 875 kMaxCubeMapTextureSize, | 731 kMaxCubeMapTextureSize, |
| 876 kMaxRectangleTextureSize, | 732 kMaxRectangleTextureSize, |
| 877 kMax3DTextureSize, | 733 kMax3DTextureSize, |
| 878 kUseDefaultTextures); | 734 kUseDefaultTextures); |
| 879 manager.CreateTexture(kClient1Id, kService1Id); | 735 manager.CreateTexture(kClient1Id, kService1Id); |
| 880 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 736 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 881 ASSERT_TRUE(texture_ref != NULL); | 737 ASSERT_TRUE(texture_ref != NULL); |
| 882 Texture* texture = texture_ref->texture(); | 738 Texture* texture = texture_ref->texture(); |
| 883 | 739 |
| 884 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 740 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 885 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 741 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 886 // Check Setting level 0 to NPOT | 742 // Check Setting level 0 to NPOT |
| 887 manager.SetLevelInfo(texture_ref, | 743 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, |
| 888 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 744 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
| 889 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 745 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
| 890 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 746 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 891 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); | 747 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); |
| 892 EXPECT_FALSE(manager.CanRender(texture_ref)); | 748 EXPECT_FALSE(manager.CanRender(texture_ref)); |
| 893 EXPECT_TRUE(manager.HaveUnrenderableTextures()); | 749 EXPECT_TRUE(manager.HaveUnrenderableTextures()); |
| 894 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref)); | 750 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref)); |
| 895 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 751 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 896 EXPECT_TRUE(manager.CanRender(texture_ref)); | 752 EXPECT_TRUE(manager.CanRender(texture_ref)); |
| 897 EXPECT_FALSE(manager.HaveUnrenderableTextures()); | 753 EXPECT_FALSE(manager.HaveUnrenderableTextures()); |
| 898 manager.Destroy(false); | 754 manager.Destroy(false); |
| 899 } | 755 } |
| 900 | 756 |
| 901 TEST_F(TextureTest, POTCubeMap) { | 757 TEST_F(TextureTest, POTCubeMap) { |
| 902 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); | 758 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); |
| 903 Texture* texture = texture_ref_->texture(); | 759 Texture* texture = texture_ref_->texture(); |
| 904 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 760 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
| 905 // Check Setting level 0 each face to POT | 761 // Check Setting level 0 each face to POT |
| 906 manager_->SetLevelInfo(texture_ref_.get(), | 762 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, |
| 907 GL_TEXTURE_CUBE_MAP_POSITIVE_X, | 763 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 908 0, | 764 gfx::Rect(4, 4)); |
| 909 GL_RGBA, | |
| 910 4, | |
| 911 4, | |
| 912 1, | |
| 913 0, | |
| 914 GL_RGBA, | |
| 915 GL_UNSIGNED_BYTE, | |
| 916 true); | |
| 917 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 765 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 918 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 766 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 919 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 767 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 920 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 768 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 921 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 769 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 922 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 770 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 923 manager_->SetLevelInfo(texture_ref_.get(), | 771 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, |
| 924 GL_TEXTURE_CUBE_MAP_NEGATIVE_X, | 772 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 925 0, | 773 gfx::Rect(4, 4)); |
| 926 GL_RGBA, | |
| 927 4, | |
| 928 4, | |
| 929 1, | |
| 930 0, | |
| 931 GL_RGBA, | |
| 932 GL_UNSIGNED_BYTE, | |
| 933 true); | |
| 934 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 774 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 935 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 775 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 936 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 776 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 937 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 777 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 938 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 778 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 939 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 779 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 940 manager_->SetLevelInfo(texture_ref_.get(), | 780 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, |
| 941 GL_TEXTURE_CUBE_MAP_POSITIVE_Y, | 781 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 942 0, | 782 gfx::Rect(4, 4)); |
| 943 GL_RGBA, | |
| 944 4, | |
| 945 4, | |
| 946 1, | |
| 947 0, | |
| 948 GL_RGBA, | |
| 949 GL_UNSIGNED_BYTE, | |
| 950 true); | |
| 951 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 783 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 952 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 784 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 953 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 785 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 954 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 786 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 955 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 787 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 956 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 788 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 957 manager_->SetLevelInfo(texture_ref_.get(), | 789 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, |
| 958 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, | 790 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 959 0, | 791 gfx::Rect(4, 4)); |
| 960 GL_RGBA, | |
| 961 4, | |
| 962 4, | |
| 963 1, | |
| 964 0, | |
| 965 GL_RGBA, | |
| 966 GL_UNSIGNED_BYTE, | |
| 967 true); | |
| 968 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 792 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 969 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 793 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 970 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 794 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 971 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 795 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 972 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 796 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 973 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 797 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 974 manager_->SetLevelInfo(texture_ref_.get(), | 798 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, |
| 975 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, | 799 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 976 0, | 800 gfx::Rect(4, 4)); |
| 977 GL_RGBA, | |
| 978 4, | |
| 979 4, | |
| 980 1, | |
| 981 0, | |
| 982 GL_RGBA, | |
| 983 GL_UNSIGNED_BYTE, | |
| 984 true); | |
| 985 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 801 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 986 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 802 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 987 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 803 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 988 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 804 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 989 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 805 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 990 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 806 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 991 manager_->SetLevelInfo(texture_ref_.get(), | 807 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, |
| 992 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 808 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 993 0, | 809 gfx::Rect(4, 4)); |
| 994 GL_RGBA, | |
| 995 4, | |
| 996 4, | |
| 997 1, | |
| 998 0, | |
| 999 GL_RGBA, | |
| 1000 GL_UNSIGNED_BYTE, | |
| 1001 true); | |
| 1002 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 810 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 1003 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 811 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 1004 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 812 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 1005 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 813 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 1006 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 814 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 1007 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 815 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 1008 | 816 |
| 1009 // Make mips. | 817 // Make mips. |
| 1010 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 818 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 1011 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 819 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1012 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 820 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 1013 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 821 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 1014 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 822 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 1015 | 823 |
| 1016 // Change a mip. | 824 // Change a mip. |
| 1017 manager_->SetLevelInfo(texture_ref_.get(), | 825 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 1, |
| 1018 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 826 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 1019 1, | 827 gfx::Rect(4, 4)); |
| 1020 GL_RGBA, | |
| 1021 4, | |
| 1022 4, | |
| 1023 1, | |
| 1024 0, | |
| 1025 GL_RGBA, | |
| 1026 GL_UNSIGNED_BYTE, | |
| 1027 true); | |
| 1028 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 828 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 1029 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 829 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 1030 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 830 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 1031 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 831 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 1032 // Set a level past the number of mips that would get generated. | 832 // Set a level past the number of mips that would get generated. |
| 1033 manager_->SetLevelInfo(texture_ref_.get(), | 833 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 3, |
| 1034 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 834 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 1035 3, | 835 gfx::Rect(4, 4)); |
| 1036 GL_RGBA, | |
| 1037 4, | |
| 1038 4, | |
| 1039 1, | |
| 1040 0, | |
| 1041 GL_RGBA, | |
| 1042 GL_UNSIGNED_BYTE, | |
| 1043 true); | |
| 1044 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 836 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 1045 // Make mips. | 837 // Make mips. |
| 1046 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 838 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 1047 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 839 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1048 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 840 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 1049 } | 841 } |
| 1050 | 842 |
| 1051 TEST_F(TextureTest, GetLevelSize) { | 843 TEST_F(TextureTest, GetLevelSize) { |
| 1052 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_3D); | 844 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_3D); |
| 1053 manager_->SetLevelInfo(texture_ref_.get(), | 845 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_3D, 1, GL_RGBA, 4, 5, 6, |
| 1054 GL_TEXTURE_3D, | 846 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
| 1055 1, | |
| 1056 GL_RGBA, | |
| 1057 4, | |
| 1058 5, | |
| 1059 6, | |
| 1060 0, | |
| 1061 GL_RGBA, | |
| 1062 GL_UNSIGNED_BYTE, | |
| 1063 true); | |
| 1064 GLsizei width = -1; | 847 GLsizei width = -1; |
| 1065 GLsizei height = -1; | 848 GLsizei height = -1; |
| 1066 GLsizei depth = -1; | 849 GLsizei depth = -1; |
| 1067 Texture* texture = texture_ref_->texture(); | 850 Texture* texture = texture_ref_->texture(); |
| 1068 EXPECT_FALSE( | 851 EXPECT_FALSE( |
| 1069 texture->GetLevelSize(GL_TEXTURE_3D, -1, &width, &height, &depth)); | 852 texture->GetLevelSize(GL_TEXTURE_3D, -1, &width, &height, &depth)); |
| 1070 EXPECT_FALSE( | 853 EXPECT_FALSE( |
| 1071 texture->GetLevelSize(GL_TEXTURE_3D, 1000, &width, &height, &depth)); | 854 texture->GetLevelSize(GL_TEXTURE_3D, 1000, &width, &height, &depth)); |
| 1072 EXPECT_FALSE( | 855 EXPECT_FALSE( |
| 1073 texture->GetLevelSize(GL_TEXTURE_3D, 0, &width, &height, &depth)); | 856 texture->GetLevelSize(GL_TEXTURE_3D, 0, &width, &height, &depth)); |
| 1074 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_3D, 1, &width, &height, &depth)); | 857 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_3D, 1, &width, &height, &depth)); |
| 1075 EXPECT_EQ(4, width); | 858 EXPECT_EQ(4, width); |
| 1076 EXPECT_EQ(5, height); | 859 EXPECT_EQ(5, height); |
| 1077 EXPECT_EQ(6, depth); | 860 EXPECT_EQ(6, depth); |
| 1078 manager_->RemoveTexture(kClient1Id); | 861 manager_->RemoveTexture(kClient1Id); |
| 1079 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_3D, 1, &width, &height, &depth)); | 862 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_3D, 1, &width, &height, &depth)); |
| 1080 EXPECT_EQ(4, width); | 863 EXPECT_EQ(4, width); |
| 1081 EXPECT_EQ(5, height); | 864 EXPECT_EQ(5, height); |
| 1082 EXPECT_EQ(6, depth); | 865 EXPECT_EQ(6, depth); |
| 1083 } | 866 } |
| 1084 | 867 |
| 1085 TEST_F(TextureTest, GetLevelType) { | 868 TEST_F(TextureTest, GetLevelType) { |
| 1086 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 869 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1087 manager_->SetLevelInfo(texture_ref_.get(), | 870 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, |
| 1088 GL_TEXTURE_2D, | 871 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
| 1089 1, | |
| 1090 GL_RGBA, | |
| 1091 4, | |
| 1092 5, | |
| 1093 1, | |
| 1094 0, | |
| 1095 GL_RGBA, | |
| 1096 GL_UNSIGNED_BYTE, | |
| 1097 true); | |
| 1098 GLenum type = 0; | 872 GLenum type = 0; |
| 1099 GLenum format = 0; | 873 GLenum format = 0; |
| 1100 Texture* texture = texture_ref_->texture(); | 874 Texture* texture = texture_ref_->texture(); |
| 1101 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); | 875 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); |
| 1102 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); | 876 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); |
| 1103 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); | 877 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); |
| 1104 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 878 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
| 1105 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 879 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
| 1106 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 880 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
| 1107 manager_->RemoveTexture(kClient1Id); | 881 manager_->RemoveTexture(kClient1Id); |
| 1108 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 882 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
| 1109 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 883 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
| 1110 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 884 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
| 1111 } | 885 } |
| 1112 | 886 |
| 1113 TEST_F(TextureTest, ValidForTexture) { | 887 TEST_F(TextureTest, ValidForTexture) { |
| 1114 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 888 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1115 manager_->SetLevelInfo(texture_ref_.get(), | 889 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 6, |
| 1116 GL_TEXTURE_2D, | 890 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
| 1117 1, | |
| 1118 GL_RGBA, | |
| 1119 4, | |
| 1120 5, | |
| 1121 6, | |
| 1122 0, | |
| 1123 GL_RGBA, | |
| 1124 GL_UNSIGNED_BYTE, | |
| 1125 true); | |
| 1126 // Check bad face. | 891 // Check bad face. |
| 1127 Texture* texture = texture_ref_->texture(); | 892 Texture* texture = texture_ref_->texture(); |
| 1128 EXPECT_FALSE(texture->ValidForTexture( | 893 EXPECT_FALSE(texture->ValidForTexture( |
| 1129 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 894 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 1130 1, 0, 0, 0, 4, 5, 6, GL_UNSIGNED_BYTE)); | 895 1, 0, 0, 0, 4, 5, 6, GL_UNSIGNED_BYTE)); |
| 1131 // Check bad level. | 896 // Check bad level. |
| 1132 EXPECT_FALSE(texture->ValidForTexture( | 897 EXPECT_FALSE(texture->ValidForTexture( |
| 1133 GL_TEXTURE_2D, 0, 0, 0, 0, 4, 5, 6, GL_UNSIGNED_BYTE)); | 898 GL_TEXTURE_2D, 0, 0, 0, 0, 4, 5, 6, GL_UNSIGNED_BYTE)); |
| 1134 // Check bad xoffset. | 899 // Check bad xoffset. |
| 1135 EXPECT_FALSE(texture->ValidForTexture( | 900 EXPECT_FALSE(texture->ValidForTexture( |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1183 kMaxCubeMapTextureSize, | 948 kMaxCubeMapTextureSize, |
| 1184 kMaxRectangleTextureSize, | 949 kMaxRectangleTextureSize, |
| 1185 kMax3DTextureSize, | 950 kMax3DTextureSize, |
| 1186 kUseDefaultTextures); | 951 kUseDefaultTextures); |
| 1187 manager.CreateTexture(kClient1Id, kService1Id); | 952 manager.CreateTexture(kClient1Id, kService1Id); |
| 1188 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 953 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 1189 ASSERT_TRUE(texture_ref != NULL); | 954 ASSERT_TRUE(texture_ref != NULL); |
| 1190 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 955 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 1191 Texture* texture = texture_ref->texture(); | 956 Texture* texture = texture_ref->texture(); |
| 1192 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 957 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 1193 manager.SetLevelInfo(texture_ref, | 958 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
| 1194 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 959 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
| 1195 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 960 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 1196 TestHelper::SetTexParameteriWithExpectations( | 961 TestHelper::SetTexParameteriWithExpectations( |
| 1197 gl_.get(), error_state_.get(), &manager, | 962 gl_.get(), error_state_.get(), &manager, |
| 1198 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 963 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 1199 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 964 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 1200 TestHelper::SetTexParameteriWithExpectations( | 965 TestHelper::SetTexParameteriWithExpectations( |
| 1201 gl_.get(), error_state_.get(), &manager, texture_ref, | 966 gl_.get(), error_state_.get(), &manager, texture_ref, |
| 1202 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 967 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
| 1203 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 968 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1204 manager.Destroy(false); | 969 manager.Destroy(false); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1215 kMaxCubeMapTextureSize, | 980 kMaxCubeMapTextureSize, |
| 1216 kMaxRectangleTextureSize, | 981 kMaxRectangleTextureSize, |
| 1217 kMax3DTextureSize, | 982 kMax3DTextureSize, |
| 1218 kUseDefaultTextures); | 983 kUseDefaultTextures); |
| 1219 manager.CreateTexture(kClient1Id, kService1Id); | 984 manager.CreateTexture(kClient1Id, kService1Id); |
| 1220 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 985 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 1221 ASSERT_TRUE(texture_ref != NULL); | 986 ASSERT_TRUE(texture_ref != NULL); |
| 1222 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 987 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 1223 Texture* texture = texture_ref->texture(); | 988 Texture* texture = texture_ref->texture(); |
| 1224 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 989 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 1225 manager.SetLevelInfo(texture_ref, | 990 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
| 1226 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 991 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
| 1227 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 992 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1228 manager.Destroy(false); | 993 manager.Destroy(false); |
| 1229 } | 994 } |
| 1230 | 995 |
| 1231 TEST_F(TextureTest, HalfFloatNotLinear) { | 996 TEST_F(TextureTest, HalfFloatNotLinear) { |
| 1232 TestHelper::SetupFeatureInfoInitExpectations( | 997 TestHelper::SetupFeatureInfoInitExpectations( |
| 1233 gl_.get(), "GL_OES_texture_half_float"); | 998 gl_.get(), "GL_OES_texture_half_float"); |
| 1234 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 999 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 1235 feature_info->Initialize(); | 1000 feature_info->Initialize(); |
| 1236 TextureManager manager(NULL, | 1001 TextureManager manager(NULL, |
| 1237 feature_info.get(), | 1002 feature_info.get(), |
| 1238 kMaxTextureSize, | 1003 kMaxTextureSize, |
| 1239 kMaxCubeMapTextureSize, | 1004 kMaxCubeMapTextureSize, |
| 1240 kMaxRectangleTextureSize, | 1005 kMaxRectangleTextureSize, |
| 1241 kMax3DTextureSize, | 1006 kMax3DTextureSize, |
| 1242 kUseDefaultTextures); | 1007 kUseDefaultTextures); |
| 1243 manager.CreateTexture(kClient1Id, kService1Id); | 1008 manager.CreateTexture(kClient1Id, kService1Id); |
| 1244 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1009 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 1245 ASSERT_TRUE(texture_ref != NULL); | 1010 ASSERT_TRUE(texture_ref != NULL); |
| 1246 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1011 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 1247 Texture* texture = texture_ref->texture(); | 1012 Texture* texture = texture_ref->texture(); |
| 1248 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1013 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 1249 manager.SetLevelInfo(texture_ref, | 1014 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
| 1250 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 1015 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
| 1251 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1016 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 1252 TestHelper::SetTexParameteriWithExpectations( | 1017 TestHelper::SetTexParameteriWithExpectations( |
| 1253 gl_.get(), error_state_.get(), &manager, | 1018 gl_.get(), error_state_.get(), &manager, |
| 1254 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1019 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 1255 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1020 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 1256 TestHelper::SetTexParameteriWithExpectations( | 1021 TestHelper::SetTexParameteriWithExpectations( |
| 1257 gl_.get(), error_state_.get(), &manager, texture_ref, | 1022 gl_.get(), error_state_.get(), &manager, texture_ref, |
| 1258 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1023 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
| 1259 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1024 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1260 manager.Destroy(false); | 1025 manager.Destroy(false); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1271 kMaxCubeMapTextureSize, | 1036 kMaxCubeMapTextureSize, |
| 1272 kMaxRectangleTextureSize, | 1037 kMaxRectangleTextureSize, |
| 1273 kMax3DTextureSize, | 1038 kMax3DTextureSize, |
| 1274 kUseDefaultTextures); | 1039 kUseDefaultTextures); |
| 1275 manager.CreateTexture(kClient1Id, kService1Id); | 1040 manager.CreateTexture(kClient1Id, kService1Id); |
| 1276 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1041 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 1277 ASSERT_TRUE(texture_ref != NULL); | 1042 ASSERT_TRUE(texture_ref != NULL); |
| 1278 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1043 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 1279 Texture* texture = texture_ref->texture(); | 1044 Texture* texture = texture_ref->texture(); |
| 1280 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1045 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 1281 manager.SetLevelInfo(texture_ref, | 1046 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
| 1282 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 1047 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
| 1283 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1048 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1284 manager.Destroy(false); | 1049 manager.Destroy(false); |
| 1285 } | 1050 } |
| 1286 | 1051 |
| 1287 TEST_F(TextureTest, EGLImageExternal) { | 1052 TEST_F(TextureTest, EGLImageExternal) { |
| 1288 TestHelper::SetupFeatureInfoInitExpectations( | 1053 TestHelper::SetupFeatureInfoInitExpectations( |
| 1289 gl_.get(), "GL_OES_EGL_image_external"); | 1054 gl_.get(), "GL_OES_EGL_image_external"); |
| 1290 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1055 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 1291 feature_info->Initialize(); | 1056 feature_info->Initialize(); |
| 1292 TextureManager manager(NULL, | 1057 TextureManager manager(NULL, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1315 feature_info.get(), | 1080 feature_info.get(), |
| 1316 kMaxTextureSize, | 1081 kMaxTextureSize, |
| 1317 kMaxCubeMapTextureSize, | 1082 kMaxCubeMapTextureSize, |
| 1318 kMaxRectangleTextureSize, | 1083 kMaxRectangleTextureSize, |
| 1319 kMax3DTextureSize, | 1084 kMax3DTextureSize, |
| 1320 kUseDefaultTextures); | 1085 kUseDefaultTextures); |
| 1321 manager.CreateTexture(kClient1Id, kService1Id); | 1086 manager.CreateTexture(kClient1Id, kService1Id); |
| 1322 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1087 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 1323 ASSERT_TRUE(texture_ref != NULL); | 1088 ASSERT_TRUE(texture_ref != NULL); |
| 1324 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1089 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 1325 manager.SetLevelInfo( | 1090 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, |
| 1326 texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0, | 1091 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect()); |
| 1327 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false); | |
| 1328 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1092 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
| 1329 manager.Destroy(false); | 1093 manager.Destroy(false); |
| 1330 } | 1094 } |
| 1331 | 1095 |
| 1332 TEST_F(TextureTest, SafeUnsafe) { | 1096 TEST_F(TextureTest, SafeUnsafe) { |
| 1333 static const GLuint kClient2Id = 2; | 1097 static const GLuint kClient2Id = 2; |
| 1334 static const GLuint kService2Id = 12; | 1098 static const GLuint kService2Id = 12; |
| 1335 static const GLuint kClient3Id = 3; | 1099 static const GLuint kClient3Id = 3; |
| 1336 static const GLuint kService3Id = 13; | 1100 static const GLuint kService3Id = 13; |
| 1337 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1101 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1338 Texture* texture = texture_ref_->texture(); | 1102 Texture* texture = texture_ref_->texture(); |
| 1339 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1103 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1340 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1104 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1341 manager_->SetLevelInfo(texture_ref_.get(), | 1105 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
| 1342 GL_TEXTURE_2D, | 1106 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1343 0, | |
| 1344 GL_RGBA, | |
| 1345 4, | |
| 1346 4, | |
| 1347 1, | |
| 1348 0, | |
| 1349 GL_RGBA, | |
| 1350 GL_UNSIGNED_BYTE, | |
| 1351 false); | |
| 1352 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1107 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1353 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1108 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1354 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1109 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1355 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1110 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1356 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); | 1111 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); |
| 1357 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1112 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1358 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1113 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1359 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1114 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1360 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1115 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1361 manager_->SetLevelInfo(texture_ref_.get(), | 1116 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, |
| 1362 GL_TEXTURE_2D, | 1117 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1363 1, | |
| 1364 GL_RGBA, | |
| 1365 8, | |
| 1366 8, | |
| 1367 1, | |
| 1368 0, | |
| 1369 GL_RGBA, | |
| 1370 GL_UNSIGNED_BYTE, | |
| 1371 false); | |
| 1372 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1118 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1373 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1119 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1374 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1120 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1375 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1121 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1376 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); | 1122 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); |
| 1377 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1123 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1378 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1124 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1379 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1125 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1380 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1126 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1381 manager_->SetLevelInfo(texture_ref_.get(), | 1127 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
| 1382 GL_TEXTURE_2D, | 1128 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1383 0, | 1129 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, |
| 1384 GL_RGBA, | 1130 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1385 4, | |
| 1386 4, | |
| 1387 1, | |
| 1388 0, | |
| 1389 GL_RGBA, | |
| 1390 GL_UNSIGNED_BYTE, | |
| 1391 false); | |
| 1392 manager_->SetLevelInfo(texture_ref_.get(), | |
| 1393 GL_TEXTURE_2D, | |
| 1394 1, | |
| 1395 GL_RGBA, | |
| 1396 8, | |
| 1397 8, | |
| 1398 1, | |
| 1399 0, | |
| 1400 GL_RGBA, | |
| 1401 GL_UNSIGNED_BYTE, | |
| 1402 false); | |
| 1403 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1131 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1404 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1132 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1405 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1133 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1406 EXPECT_EQ(2, texture->num_uncleared_mips()); | 1134 EXPECT_EQ(2, texture->num_uncleared_mips()); |
| 1407 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); | 1135 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); |
| 1408 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1136 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1409 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1137 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1410 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1138 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1411 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1139 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1412 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); | 1140 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); |
| 1413 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1141 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1414 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1142 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1415 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1143 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1416 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1144 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1417 manager_->SetLevelInfo(texture_ref_.get(), | 1145 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, |
| 1418 GL_TEXTURE_2D, | 1146 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1419 1, | |
| 1420 GL_RGBA, | |
| 1421 8, | |
| 1422 8, | |
| 1423 1, | |
| 1424 0, | |
| 1425 GL_RGBA, | |
| 1426 GL_UNSIGNED_BYTE, | |
| 1427 false); | |
| 1428 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1147 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1429 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1148 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1430 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1149 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1431 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1150 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1432 manager_->MarkMipmapsGenerated(texture_ref_.get()); | 1151 manager_->MarkMipmapsGenerated(texture_ref_.get()); |
| 1433 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1152 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1434 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1153 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1435 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1154 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1436 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1155 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1437 | 1156 |
| 1438 manager_->CreateTexture(kClient2Id, kService2Id); | 1157 manager_->CreateTexture(kClient2Id, kService2Id); |
| 1439 scoped_refptr<TextureRef> texture_ref2( | 1158 scoped_refptr<TextureRef> texture_ref2( |
| 1440 manager_->GetTexture(kClient2Id)); | 1159 manager_->GetTexture(kClient2Id)); |
| 1441 ASSERT_TRUE(texture_ref2.get() != NULL); | 1160 ASSERT_TRUE(texture_ref2.get() != NULL); |
| 1442 manager_->SetTarget(texture_ref2.get(), GL_TEXTURE_2D); | 1161 manager_->SetTarget(texture_ref2.get(), GL_TEXTURE_2D); |
| 1443 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1162 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1444 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1163 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1445 Texture* texture2 = texture_ref2->texture(); | 1164 Texture* texture2 = texture_ref2->texture(); |
| 1446 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1165 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
| 1447 manager_->SetLevelInfo(texture_ref2.get(), | 1166 manager_->SetLevelInfo(texture_ref2.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, |
| 1448 GL_TEXTURE_2D, | 1167 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 8)); |
| 1449 0, | |
| 1450 GL_RGBA, | |
| 1451 8, | |
| 1452 8, | |
| 1453 1, | |
| 1454 0, | |
| 1455 GL_RGBA, | |
| 1456 GL_UNSIGNED_BYTE, | |
| 1457 true); | |
| 1458 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1168 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1459 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1169 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1460 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1170 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
| 1461 manager_->SetLevelInfo(texture_ref2.get(), | 1171 manager_->SetLevelInfo(texture_ref2.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, |
| 1462 GL_TEXTURE_2D, | 1172 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(1, 1)); |
| 1463 0, | |
| 1464 GL_RGBA, | |
| 1465 8, | |
| 1466 8, | |
| 1467 1, | |
| 1468 0, | |
| 1469 GL_RGBA, | |
| 1470 GL_UNSIGNED_BYTE, | |
| 1471 false); | |
| 1472 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1173 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1473 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1174 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1474 EXPECT_EQ(1, texture2->num_uncleared_mips()); | 1175 EXPECT_EQ(1, texture2->num_uncleared_mips()); |
| 1475 | 1176 |
| 1476 manager_->CreateTexture(kClient3Id, kService3Id); | 1177 manager_->CreateTexture(kClient3Id, kService3Id); |
| 1477 scoped_refptr<TextureRef> texture_ref3( | 1178 scoped_refptr<TextureRef> texture_ref3( |
| 1478 manager_->GetTexture(kClient3Id)); | 1179 manager_->GetTexture(kClient3Id)); |
| 1479 ASSERT_TRUE(texture_ref3.get() != NULL); | 1180 ASSERT_TRUE(texture_ref3.get() != NULL); |
| 1480 manager_->SetTarget(texture_ref3.get(), GL_TEXTURE_2D); | 1181 manager_->SetTarget(texture_ref3.get(), GL_TEXTURE_2D); |
| 1481 manager_->SetLevelInfo(texture_ref3.get(), | 1182 manager_->SetLevelInfo(texture_ref3.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, |
| 1482 GL_TEXTURE_2D, | 1183 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
| 1483 0, | |
| 1484 GL_RGBA, | |
| 1485 8, | |
| 1486 8, | |
| 1487 1, | |
| 1488 0, | |
| 1489 GL_RGBA, | |
| 1490 GL_UNSIGNED_BYTE, | |
| 1491 false); | |
| 1492 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1184 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1493 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1185 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1494 Texture* texture3 = texture_ref3->texture(); | 1186 Texture* texture3 = texture_ref3->texture(); |
| 1495 EXPECT_EQ(1, texture3->num_uncleared_mips()); | 1187 EXPECT_EQ(1, texture3->num_uncleared_mips()); |
| 1496 manager_->SetLevelCleared(texture_ref2.get(), GL_TEXTURE_2D, 0, true); | 1188 manager_->SetLevelCleared(texture_ref2.get(), GL_TEXTURE_2D, 0, true); |
| 1497 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1189 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1498 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1190 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1499 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1191 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
| 1500 manager_->SetLevelCleared(texture_ref3.get(), GL_TEXTURE_2D, 0, true); | 1192 manager_->SetLevelCleared(texture_ref3.get(), GL_TEXTURE_2D, 0, true); |
| 1501 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1193 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1502 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1194 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1503 EXPECT_EQ(0, texture3->num_uncleared_mips()); | 1195 EXPECT_EQ(0, texture3->num_uncleared_mips()); |
| 1504 | 1196 |
| 1505 manager_->SetLevelInfo(texture_ref2.get(), | 1197 manager_->SetLevelInfo(texture_ref2.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, |
| 1506 GL_TEXTURE_2D, | 1198 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(1, 1, 1, 1)); |
| 1507 0, | 1199 manager_->SetLevelInfo(texture_ref3.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, |
| 1508 GL_RGBA, | 1200 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4, 4, 4)); |
| 1509 8, | |
| 1510 8, | |
| 1511 1, | |
| 1512 0, | |
| 1513 GL_RGBA, | |
| 1514 GL_UNSIGNED_BYTE, | |
| 1515 false); | |
| 1516 manager_->SetLevelInfo(texture_ref3.get(), | |
| 1517 GL_TEXTURE_2D, | |
| 1518 0, | |
| 1519 GL_RGBA, | |
| 1520 8, | |
| 1521 8, | |
| 1522 1, | |
| 1523 0, | |
| 1524 GL_RGBA, | |
| 1525 GL_UNSIGNED_BYTE, | |
| 1526 false); | |
| 1527 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1201 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1528 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1202 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1529 EXPECT_EQ(1, texture2->num_uncleared_mips()); | 1203 EXPECT_EQ(1, texture2->num_uncleared_mips()); |
| 1530 EXPECT_EQ(1, texture3->num_uncleared_mips()); | 1204 EXPECT_EQ(1, texture3->num_uncleared_mips()); |
| 1531 manager_->RemoveTexture(kClient3Id); | 1205 manager_->RemoveTexture(kClient3Id); |
| 1532 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1206 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1533 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1207 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1534 manager_->RemoveTexture(kClient2Id); | 1208 manager_->RemoveTexture(kClient2Id); |
| 1535 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1209 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1536 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1210 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1537 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1211 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
| 1538 .Times(1) | 1212 .Times(1) |
| 1539 .RetiresOnSaturation(); | 1213 .RetiresOnSaturation(); |
| 1540 texture_ref2 = NULL; | 1214 texture_ref2 = NULL; |
| 1541 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1215 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1542 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1216 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1543 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) | 1217 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) |
| 1544 .Times(1) | 1218 .Times(1) |
| 1545 .RetiresOnSaturation(); | 1219 .RetiresOnSaturation(); |
| 1546 texture_ref3 = NULL; | 1220 texture_ref3 = NULL; |
| 1547 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1221 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1548 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1222 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1549 } | 1223 } |
| 1550 | 1224 |
| 1551 TEST_F(TextureTest, ClearTexture) { | 1225 TEST_F(TextureTest, ClearTexture) { |
| 1552 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) | 1226 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) |
| 1553 .WillRepeatedly(Return(true)); | 1227 .WillRepeatedly(Return(true)); |
| 1554 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1228 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1555 manager_->SetLevelInfo(texture_ref_.get(), | 1229 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
| 1556 GL_TEXTURE_2D, | 1230 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1557 0, | 1231 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, |
| 1558 GL_RGBA, | 1232 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1559 4, | |
| 1560 4, | |
| 1561 1, | |
| 1562 0, | |
| 1563 GL_RGBA, | |
| 1564 GL_UNSIGNED_BYTE, | |
| 1565 false); | |
| 1566 manager_->SetLevelInfo(texture_ref_.get(), | |
| 1567 GL_TEXTURE_2D, | |
| 1568 1, | |
| 1569 GL_RGBA, | |
| 1570 4, | |
| 1571 4, | |
| 1572 1, | |
| 1573 0, | |
| 1574 GL_RGBA, | |
| 1575 GL_UNSIGNED_BYTE, | |
| 1576 false); | |
| 1577 Texture* texture = texture_ref_->texture(); | 1233 Texture* texture = texture_ref_->texture(); |
| 1578 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1234 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1579 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1235 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1580 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1236 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1581 EXPECT_EQ(2, texture->num_uncleared_mips()); | 1237 EXPECT_EQ(2, texture->num_uncleared_mips()); |
| 1582 manager_->ClearRenderableLevels(decoder_.get(), texture_ref_.get()); | 1238 manager_->ClearRenderableLevels(decoder_.get(), texture_ref_.get()); |
| 1583 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1239 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1584 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1240 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1585 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1241 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1586 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1242 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1587 manager_->SetLevelInfo(texture_ref_.get(), | 1243 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
| 1588 GL_TEXTURE_2D, | 1244 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
| 1589 0, | 1245 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, |
| 1590 GL_RGBA, | 1246 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 3)); |
| 1591 4, | |
| 1592 4, | |
| 1593 1, | |
| 1594 0, | |
| 1595 GL_RGBA, | |
| 1596 GL_UNSIGNED_BYTE, | |
| 1597 false); | |
| 1598 manager_->SetLevelInfo(texture_ref_.get(), | |
| 1599 GL_TEXTURE_2D, | |
| 1600 1, | |
| 1601 GL_RGBA, | |
| 1602 4, | |
| 1603 4, | |
| 1604 1, | |
| 1605 0, | |
| 1606 GL_RGBA, | |
| 1607 GL_UNSIGNED_BYTE, | |
| 1608 false); | |
| 1609 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1247 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1610 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1248 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1611 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1249 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1612 EXPECT_EQ(2, texture->num_uncleared_mips()); | 1250 EXPECT_EQ(2, texture->num_uncleared_mips()); |
| 1613 manager_->ClearTextureLevel( | 1251 manager_->ClearTextureLevel( |
| 1614 decoder_.get(), texture_ref_.get(), GL_TEXTURE_2D, 0); | 1252 decoder_.get(), texture_ref_.get(), GL_TEXTURE_2D, 0); |
| 1615 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1253 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1616 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1254 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1617 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1255 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1618 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1256 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1619 manager_->ClearTextureLevel( | 1257 manager_->ClearTextureLevel( |
| 1620 decoder_.get(), texture_ref_.get(), GL_TEXTURE_2D, 1); | 1258 decoder_.get(), texture_ref_.get(), GL_TEXTURE_2D, 1); |
| 1621 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1259 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1622 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1260 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1623 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1261 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1624 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1262 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1625 } | 1263 } |
| 1626 | 1264 |
| 1627 TEST_F(TextureTest, UseDeletedTexture) { | 1265 TEST_F(TextureTest, UseDeletedTexture) { |
| 1628 static const GLuint kClient2Id = 2; | 1266 static const GLuint kClient2Id = 2; |
| 1629 static const GLuint kService2Id = 12; | 1267 static const GLuint kService2Id = 12; |
| 1630 // Make the default texture renderable | 1268 // Make the default texture renderable |
| 1631 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1269 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1632 manager_->SetLevelInfo(texture_ref_.get(), | 1270 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, |
| 1633 GL_TEXTURE_2D, | 1271 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1634 0, | |
| 1635 GL_RGBA, | |
| 1636 1, | |
| 1637 1, | |
| 1638 1, | |
| 1639 0, | |
| 1640 GL_RGBA, | |
| 1641 GL_UNSIGNED_BYTE, | |
| 1642 false); | |
| 1643 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1272 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 1644 // Make a new texture | 1273 // Make a new texture |
| 1645 manager_->CreateTexture(kClient2Id, kService2Id); | 1274 manager_->CreateTexture(kClient2Id, kService2Id); |
| 1646 scoped_refptr<TextureRef> texture_ref( | 1275 scoped_refptr<TextureRef> texture_ref( |
| 1647 manager_->GetTexture(kClient2Id)); | 1276 manager_->GetTexture(kClient2Id)); |
| 1648 manager_->SetTarget(texture_ref.get(), GL_TEXTURE_2D); | 1277 manager_->SetTarget(texture_ref.get(), GL_TEXTURE_2D); |
| 1649 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); | 1278 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
| 1650 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1279 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 1651 // Remove it. | 1280 // Remove it. |
| 1652 manager_->RemoveTexture(kClient2Id); | 1281 manager_->RemoveTexture(kClient2Id); |
| 1653 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); | 1282 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
| 1654 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1283 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 1655 // Check that we can still manipulate it and it effects the manager. | 1284 // Check that we can still manipulate it and it effects the manager. |
| 1656 manager_->SetLevelInfo(texture_ref.get(), | 1285 manager_->SetLevelInfo(texture_ref.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, |
| 1657 GL_TEXTURE_2D, | 1286 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1658 0, | |
| 1659 GL_RGBA, | |
| 1660 1, | |
| 1661 1, | |
| 1662 1, | |
| 1663 0, | |
| 1664 GL_RGBA, | |
| 1665 GL_UNSIGNED_BYTE, | |
| 1666 false); | |
| 1667 EXPECT_TRUE(manager_->CanRender(texture_ref.get())); | 1287 EXPECT_TRUE(manager_->CanRender(texture_ref.get())); |
| 1668 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1288 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 1669 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1289 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
| 1670 .Times(1) | 1290 .Times(1) |
| 1671 .RetiresOnSaturation(); | 1291 .RetiresOnSaturation(); |
| 1672 texture_ref = NULL; | 1292 texture_ref = NULL; |
| 1673 } | 1293 } |
| 1674 | 1294 |
| 1675 TEST_F(TextureTest, GetLevelImage) { | 1295 TEST_F(TextureTest, GetLevelImage) { |
| 1676 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1296 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1677 manager_->SetLevelInfo(texture_ref_.get(), | 1297 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
| 1678 GL_TEXTURE_2D, | 1298 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
| 1679 1, | |
| 1680 GL_RGBA, | |
| 1681 2, | |
| 1682 2, | |
| 1683 1, | |
| 1684 0, | |
| 1685 GL_RGBA, | |
| 1686 GL_UNSIGNED_BYTE, | |
| 1687 true); | |
| 1688 Texture* texture = texture_ref_->texture(); | 1299 Texture* texture = texture_ref_->texture(); |
| 1689 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1300 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1690 // Set image. | 1301 // Set image. |
| 1691 scoped_refptr<gfx::GLImage> image(new gfx::GLImageStub); | 1302 scoped_refptr<gfx::GLImage> image(new gfx::GLImageStub); |
| 1692 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, image.get()); | 1303 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, image.get()); |
| 1693 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1304 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1694 // Remove it. | 1305 // Remove it. |
| 1695 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, NULL); | 1306 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, NULL); |
| 1696 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1307 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1697 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, image.get()); | 1308 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, image.get()); |
| 1698 // Image should be reset when SetLevelInfo is called. | 1309 // Image should be reset when SetLevelInfo is called. |
| 1699 manager_->SetLevelInfo(texture_ref_.get(), | 1310 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
| 1700 GL_TEXTURE_2D, | 1311 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
| 1701 1, | |
| 1702 GL_RGBA, | |
| 1703 2, | |
| 1704 2, | |
| 1705 1, | |
| 1706 0, | |
| 1707 GL_RGBA, | |
| 1708 GL_UNSIGNED_BYTE, | |
| 1709 true); | |
| 1710 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1312 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1711 } | 1313 } |
| 1712 | 1314 |
| 1713 namespace { | 1315 namespace { |
| 1714 | 1316 |
| 1715 bool InSet(std::set<std::string>* string_set, const std::string& str) { | 1317 bool InSet(std::set<std::string>* string_set, const std::string& str) { |
| 1716 std::pair<std::set<std::string>::iterator, bool> result = | 1318 std::pair<std::set<std::string>::iterator, bool> result = |
| 1717 string_set->insert(str); | 1319 string_set->insert(str); |
| 1718 return !result.second; | 1320 return !result.second; |
| 1719 } | 1321 } |
| 1720 | 1322 |
| 1721 } // anonymous namespace | 1323 } // anonymous namespace |
| 1722 | 1324 |
| 1723 TEST_F(TextureTest, AddToSignature) { | 1325 TEST_F(TextureTest, AddToSignature) { |
| 1724 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1326 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1725 manager_->SetLevelInfo(texture_ref_.get(), | 1327 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
| 1726 GL_TEXTURE_2D, | 1328 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
| 1727 1, | |
| 1728 GL_RGBA, | |
| 1729 2, | |
| 1730 2, | |
| 1731 1, | |
| 1732 0, | |
| 1733 GL_RGBA, | |
| 1734 GL_UNSIGNED_BYTE, | |
| 1735 true); | |
| 1736 std::string signature1; | 1329 std::string signature1; |
| 1737 std::string signature2; | 1330 std::string signature2; |
| 1738 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature1); | 1331 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature1); |
| 1739 | 1332 |
| 1740 std::set<std::string> string_set; | 1333 std::set<std::string> string_set; |
| 1741 EXPECT_FALSE(InSet(&string_set, signature1)); | 1334 EXPECT_FALSE(InSet(&string_set, signature1)); |
| 1742 | 1335 |
| 1743 // check changing 1 thing makes a different signature. | 1336 // check changing 1 thing makes a different signature. |
| 1744 manager_->SetLevelInfo(texture_ref_.get(), | 1337 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 2, 1, |
| 1745 GL_TEXTURE_2D, | 1338 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 2)); |
| 1746 1, | |
| 1747 GL_RGBA, | |
| 1748 4, | |
| 1749 2, | |
| 1750 1, | |
| 1751 0, | |
| 1752 GL_RGBA, | |
| 1753 GL_UNSIGNED_BYTE, | |
| 1754 true); | |
| 1755 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1339 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1756 EXPECT_FALSE(InSet(&string_set, signature2)); | 1340 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1757 | 1341 |
| 1758 // check putting it back makes the same signature. | 1342 // check putting it back makes the same signature. |
| 1759 manager_->SetLevelInfo(texture_ref_.get(), | 1343 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
| 1760 GL_TEXTURE_2D, | 1344 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
| 1761 1, | |
| 1762 GL_RGBA, | |
| 1763 2, | |
| 1764 2, | |
| 1765 1, | |
| 1766 0, | |
| 1767 GL_RGBA, | |
| 1768 GL_UNSIGNED_BYTE, | |
| 1769 true); | |
| 1770 signature2.clear(); | 1345 signature2.clear(); |
| 1771 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1346 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1772 EXPECT_EQ(signature1, signature2); | 1347 EXPECT_EQ(signature1, signature2); |
| 1773 | 1348 |
| 1774 // Check setting cleared status does not change signature. | 1349 // Check setting cleared status does not change signature. |
| 1775 manager_->SetLevelInfo(texture_ref_.get(), | 1350 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
| 1776 GL_TEXTURE_2D, | 1351 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1777 1, | |
| 1778 GL_RGBA, | |
| 1779 2, | |
| 1780 2, | |
| 1781 1, | |
| 1782 0, | |
| 1783 GL_RGBA, | |
| 1784 GL_UNSIGNED_BYTE, | |
| 1785 false); | |
| 1786 signature2.clear(); | 1352 signature2.clear(); |
| 1787 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1353 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1788 EXPECT_EQ(signature1, signature2); | 1354 EXPECT_EQ(signature1, signature2); |
| 1789 | 1355 |
| 1790 // Check changing other settings changes signature. | 1356 // Check changing other settings changes signature. |
| 1791 manager_->SetLevelInfo(texture_ref_.get(), | 1357 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 1, |
| 1792 GL_TEXTURE_2D, | 1358 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1793 1, | |
| 1794 GL_RGBA, | |
| 1795 2, | |
| 1796 4, | |
| 1797 1, | |
| 1798 0, | |
| 1799 GL_RGBA, | |
| 1800 GL_UNSIGNED_BYTE, | |
| 1801 false); | |
| 1802 signature2.clear(); | 1359 signature2.clear(); |
| 1803 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1360 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1804 EXPECT_FALSE(InSet(&string_set, signature2)); | 1361 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1805 | 1362 |
| 1806 manager_->SetLevelInfo(texture_ref_.get(), | 1363 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 2, |
| 1807 GL_TEXTURE_2D, | 1364 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1808 1, | |
| 1809 GL_RGBA, | |
| 1810 2, | |
| 1811 2, | |
| 1812 2, | |
| 1813 0, | |
| 1814 GL_RGBA, | |
| 1815 GL_UNSIGNED_BYTE, | |
| 1816 false); | |
| 1817 signature2.clear(); | 1365 signature2.clear(); |
| 1818 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1366 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1819 EXPECT_FALSE(InSet(&string_set, signature2)); | 1367 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1820 | 1368 |
| 1821 manager_->SetLevelInfo(texture_ref_.get(), | 1369 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
| 1822 GL_TEXTURE_2D, | 1370 1, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1823 1, | |
| 1824 GL_RGBA, | |
| 1825 2, | |
| 1826 2, | |
| 1827 1, | |
| 1828 1, | |
| 1829 GL_RGBA, | |
| 1830 GL_UNSIGNED_BYTE, | |
| 1831 false); | |
| 1832 signature2.clear(); | 1371 signature2.clear(); |
| 1833 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1372 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1834 EXPECT_FALSE(InSet(&string_set, signature2)); | 1373 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1835 | 1374 |
| 1836 manager_->SetLevelInfo(texture_ref_.get(), | 1375 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
| 1837 GL_TEXTURE_2D, | 1376 0, GL_RGB, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1838 1, | |
| 1839 GL_RGBA, | |
| 1840 2, | |
| 1841 2, | |
| 1842 1, | |
| 1843 0, | |
| 1844 GL_RGB, | |
| 1845 GL_UNSIGNED_BYTE, | |
| 1846 false); | |
| 1847 signature2.clear(); | 1377 signature2.clear(); |
| 1848 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1378 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1849 EXPECT_FALSE(InSet(&string_set, signature2)); | 1379 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1850 | 1380 |
| 1851 manager_->SetLevelInfo(texture_ref_.get(), | 1381 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
| 1852 GL_TEXTURE_2D, | 1382 0, GL_RGBA, GL_FLOAT, gfx::Rect()); |
| 1853 1, | |
| 1854 GL_RGBA, | |
| 1855 2, | |
| 1856 2, | |
| 1857 1, | |
| 1858 0, | |
| 1859 GL_RGBA, | |
| 1860 GL_FLOAT, | |
| 1861 false); | |
| 1862 signature2.clear(); | 1383 signature2.clear(); |
| 1863 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1384 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1864 EXPECT_FALSE(InSet(&string_set, signature2)); | 1385 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1865 | 1386 |
| 1866 // put it back | 1387 // put it back |
| 1867 manager_->SetLevelInfo(texture_ref_.get(), | 1388 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
| 1868 GL_TEXTURE_2D, | 1389 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1869 1, | |
| 1870 GL_RGBA, | |
| 1871 2, | |
| 1872 2, | |
| 1873 1, | |
| 1874 0, | |
| 1875 GL_RGBA, | |
| 1876 GL_UNSIGNED_BYTE, | |
| 1877 false); | |
| 1878 signature2.clear(); | 1390 signature2.clear(); |
| 1879 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1391 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1880 EXPECT_EQ(signature1, signature2); | 1392 EXPECT_EQ(signature1, signature2); |
| 1881 | 1393 |
| 1882 // check changing parameters changes signature. | 1394 // check changing parameters changes signature. |
| 1883 SetParameter( | 1395 SetParameter( |
| 1884 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); | 1396 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 1885 signature2.clear(); | 1397 signature2.clear(); |
| 1886 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); | 1398 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1887 EXPECT_FALSE(InSet(&string_set, signature2)); | 1399 EXPECT_FALSE(InSet(&string_set, signature2)); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1951 | 1463 |
| 1952 protected: | 1464 protected: |
| 1953 struct LevelInfo { | 1465 struct LevelInfo { |
| 1954 LevelInfo(GLenum target, | 1466 LevelInfo(GLenum target, |
| 1955 GLenum format, | 1467 GLenum format, |
| 1956 GLsizei width, | 1468 GLsizei width, |
| 1957 GLsizei height, | 1469 GLsizei height, |
| 1958 GLsizei depth, | 1470 GLsizei depth, |
| 1959 GLint border, | 1471 GLint border, |
| 1960 GLenum type, | 1472 GLenum type, |
| 1961 bool cleared) | 1473 const gfx::Rect& cleared_rect) |
| 1962 : target(target), | 1474 : target(target), |
| 1963 format(format), | 1475 format(format), |
| 1964 width(width), | 1476 width(width), |
| 1965 height(height), | 1477 height(height), |
| 1966 depth(depth), | 1478 depth(depth), |
| 1967 border(border), | 1479 border(border), |
| 1968 type(type), | 1480 type(type), |
| 1969 cleared(cleared) {} | 1481 cleared_rect(cleared_rect) {} |
| 1970 | 1482 |
| 1971 LevelInfo() | 1483 LevelInfo() |
| 1972 : target(0), | 1484 : target(0), |
| 1973 format(0), | 1485 format(0), |
| 1974 width(-1), | 1486 width(-1), |
| 1975 height(-1), | 1487 height(-1), |
| 1976 depth(1), | 1488 depth(1), |
| 1977 border(0), | 1489 border(0), |
| 1978 type(0), | 1490 type(0) {} |
| 1979 cleared(false) {} | |
| 1980 | 1491 |
| 1981 bool operator==(const LevelInfo& other) const { | 1492 bool operator==(const LevelInfo& other) const { |
| 1982 return target == other.target && format == other.format && | 1493 return target == other.target && format == other.format && |
| 1983 width == other.width && height == other.height && | 1494 width == other.width && height == other.height && |
| 1984 depth == other.depth && border == other.border && | 1495 depth == other.depth && border == other.border && |
| 1985 type == other.type && cleared == other.cleared; | 1496 type == other.type && cleared_rect == other.cleared_rect; |
| 1986 } | 1497 } |
| 1987 | 1498 |
| 1988 GLenum target; | 1499 GLenum target; |
| 1989 GLenum format; | 1500 GLenum format; |
| 1990 GLsizei width; | 1501 GLsizei width; |
| 1991 GLsizei height; | 1502 GLsizei height; |
| 1992 GLsizei depth; | 1503 GLsizei depth; |
| 1993 GLint border; | 1504 GLint border; |
| 1994 GLenum type; | 1505 GLenum type; |
| 1995 bool cleared; | 1506 gfx::Rect cleared_rect; |
| 1996 }; | 1507 }; |
| 1997 | 1508 |
| 1998 void SetLevelInfo(TextureRef* texture_ref, | 1509 void SetLevelInfo(TextureRef* texture_ref, |
| 1999 GLint level, | 1510 GLint level, |
| 2000 const LevelInfo& info) { | 1511 const LevelInfo& info) { |
| 2001 manager_->SetLevelInfo(texture_ref, | 1512 manager_->SetLevelInfo(texture_ref, info.target, level, info.format, |
| 2002 info.target, | 1513 info.width, info.height, info.depth, info.border, |
| 2003 level, | 1514 info.format, info.type, info.cleared_rect); |
| 2004 info.format, | |
| 2005 info.width, | |
| 2006 info.height, | |
| 2007 info.depth, | |
| 2008 info.border, | |
| 2009 info.format, | |
| 2010 info.type, | |
| 2011 info.cleared); | |
| 2012 } | 1515 } |
| 2013 | 1516 |
| 2014 static LevelInfo GetLevelInfo(const TextureRef* texture_ref, | 1517 static LevelInfo GetLevelInfo(const TextureRef* texture_ref, |
| 2015 GLint target, | 1518 GLint target, |
| 2016 GLint level) { | 1519 GLint level) { |
| 2017 const Texture* texture = texture_ref->texture(); | 1520 const Texture* texture = texture_ref->texture(); |
| 2018 LevelInfo info; | 1521 LevelInfo info; |
| 2019 info.target = target; | 1522 info.target = target; |
| 2020 EXPECT_TRUE(texture->GetLevelSize(target, level, &info.width, | 1523 EXPECT_TRUE(texture->GetLevelSize(target, level, &info.width, |
| 2021 &info.height, &info.depth)); | 1524 &info.height, &info.depth)); |
| 2022 EXPECT_TRUE(texture->GetLevelType(target, level, &info.type, | 1525 EXPECT_TRUE(texture->GetLevelType(target, level, &info.type, |
| 2023 &info.format)); | 1526 &info.format)); |
| 2024 info.cleared = texture->IsLevelCleared(target, level); | 1527 info.cleared_rect = texture->GetLevelClearedRect(target, level); |
| 2025 return info; | 1528 return info; |
| 2026 } | 1529 } |
| 2027 | 1530 |
| 2028 Texture* Produce(TextureRef* texture_ref) { | 1531 Texture* Produce(TextureRef* texture_ref) { |
| 2029 Texture* texture = manager_->Produce(texture_ref); | 1532 Texture* texture = manager_->Produce(texture_ref); |
| 2030 EXPECT_TRUE(texture != NULL); | 1533 EXPECT_TRUE(texture != NULL); |
| 2031 return texture; | 1534 return texture; |
| 2032 } | 1535 } |
| 2033 | 1536 |
| 2034 void Consume(GLuint client_id, Texture* texture) { | 1537 void Consume(GLuint client_id, Texture* texture) { |
| 2035 EXPECT_TRUE(manager_->Consume(client_id, texture)); | 1538 EXPECT_TRUE(manager_->Consume(client_id, texture)); |
| 2036 } | 1539 } |
| 2037 | 1540 |
| 2038 scoped_refptr<TextureRef> texture2_; | 1541 scoped_refptr<TextureRef> texture2_; |
| 2039 | 1542 |
| 2040 private: | 1543 private: |
| 2041 static const GLuint kClient2Id; | 1544 static const GLuint kClient2Id; |
| 2042 static const GLuint kService2Id; | 1545 static const GLuint kService2Id; |
| 2043 }; | 1546 }; |
| 2044 | 1547 |
| 2045 const GLuint ProduceConsumeTextureTest::kClient2Id = 2; | 1548 const GLuint ProduceConsumeTextureTest::kClient2Id = 2; |
| 2046 const GLuint ProduceConsumeTextureTest::kService2Id = 12; | 1549 const GLuint ProduceConsumeTextureTest::kService2Id = 12; |
| 2047 | 1550 |
| 2048 TEST_F(ProduceConsumeTextureTest, ProduceConsume2D) { | 1551 TEST_F(ProduceConsumeTextureTest, ProduceConsume2D) { |
| 2049 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1552 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 2050 Texture* texture = texture_ref_->texture(); | 1553 Texture* texture = texture_ref_->texture(); |
| 2051 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1554 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 2052 LevelInfo level0( | 1555 LevelInfo level0(GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, |
| 2053 GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true); | 1556 gfx::Rect(4, 4)); |
| 2054 SetLevelInfo(texture_ref_.get(), 0, level0); | 1557 SetLevelInfo(texture_ref_.get(), 0, level0); |
| 2055 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 1558 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 2056 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1559 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 2057 LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1); | 1560 LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1); |
| 2058 LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2); | 1561 LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2); |
| 2059 Texture* produced_texture = Produce(texture_ref_.get()); | 1562 Texture* produced_texture = Produce(texture_ref_.get()); |
| 2060 EXPECT_EQ(produced_texture, texture); | 1563 EXPECT_EQ(produced_texture, texture); |
| 2061 | 1564 |
| 2062 // Make this texture bigger with more levels, and make sure they get | 1565 // Make this texture bigger with more levels, and make sure they get |
| 2063 // clobbered correctly during Consume(). | 1566 // clobbered correctly during Consume(). |
| 2064 manager_->SetTarget(texture2_.get(), GL_TEXTURE_2D); | 1567 manager_->SetTarget(texture2_.get(), GL_TEXTURE_2D); |
| 2065 SetLevelInfo( | 1568 SetLevelInfo(texture2_.get(), 0, LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, |
| 2066 texture2_.get(), | 1569 0, GL_UNSIGNED_BYTE, gfx::Rect())); |
| 2067 0, | |
| 2068 LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false)); | |
| 2069 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_.get())); | 1570 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_.get())); |
| 2070 texture = texture2_->texture(); | 1571 texture = texture2_->texture(); |
| 2071 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1572 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 2072 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size()); | 1573 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size()); |
| 2073 | 1574 |
| 2074 GLuint client_id = texture2_->client_id(); | 1575 GLuint client_id = texture2_->client_id(); |
| 2075 manager_->RemoveTexture(client_id); | 1576 manager_->RemoveTexture(client_id); |
| 2076 Consume(client_id, produced_texture); | 1577 Consume(client_id, produced_texture); |
| 2077 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 1578 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
| 2078 EXPECT_EQ(produced_texture, restored_texture->texture()); | 1579 EXPECT_EQ(produced_texture, restored_texture->texture()); |
| 2079 EXPECT_EQ(level0, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 0)); | 1580 EXPECT_EQ(level0, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 0)); |
| 2080 EXPECT_EQ(level1, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 1)); | 1581 EXPECT_EQ(level1, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 1)); |
| 2081 EXPECT_EQ(level2, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 2)); | 1582 EXPECT_EQ(level2, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 2)); |
| 2082 texture = restored_texture->texture(); | 1583 texture = restored_texture->texture(); |
| 2083 EXPECT_EQ(64U + 16U + 4U, texture->estimated_size()); | 1584 EXPECT_EQ(64U + 16U + 4U, texture->estimated_size()); |
| 2084 GLint w, h; | 1585 GLint w, h; |
| 2085 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h, nullptr)); | 1586 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h, nullptr)); |
| 2086 | 1587 |
| 2087 // However the old texture ref still exists if it was referenced somewhere. | 1588 // However the old texture ref still exists if it was referenced somewhere. |
| 2088 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, | 1589 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, |
| 2089 texture2_->texture()->estimated_size()); | 1590 texture2_->texture()->estimated_size()); |
| 2090 } | 1591 } |
| 2091 | 1592 |
| 2092 TEST_F(ProduceConsumeTextureTest, ProduceConsumeClearRectangle) { | 1593 TEST_F(ProduceConsumeTextureTest, ProduceConsumeClearRectangle) { |
| 2093 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_RECTANGLE_ARB); | 1594 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_RECTANGLE_ARB); |
| 2094 Texture* texture = texture_ref_->texture(); | 1595 Texture* texture = texture_ref_->texture(); |
| 2095 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target()); | 1596 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target()); |
| 2096 LevelInfo level0( | 1597 LevelInfo level0(GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, |
| 2097 GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false); | 1598 GL_UNSIGNED_BYTE, gfx::Rect()); |
| 2098 SetLevelInfo(texture_ref_.get(), 0, level0); | 1599 SetLevelInfo(texture_ref_.get(), 0, level0); |
| 2099 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1600 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 2100 Texture* produced_texture = Produce(texture_ref_.get()); | 1601 Texture* produced_texture = Produce(texture_ref_.get()); |
| 2101 EXPECT_EQ(produced_texture, texture); | 1602 EXPECT_EQ(produced_texture, texture); |
| 2102 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), | 1603 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), |
| 2103 produced_texture->target()); | 1604 produced_texture->target()); |
| 2104 | 1605 |
| 2105 GLuint client_id = texture2_->client_id(); | 1606 GLuint client_id = texture2_->client_id(); |
| 2106 manager_->RemoveTexture(client_id); | 1607 manager_->RemoveTexture(client_id); |
| 2107 Consume(client_id, produced_texture); | 1608 Consume(client_id, produced_texture); |
| 2108 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 1609 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
| 2109 EXPECT_EQ(produced_texture, restored_texture->texture()); | 1610 EXPECT_EQ(produced_texture, restored_texture->texture()); |
| 2110 | 1611 |
| 2111 // See if we can clear the previously uncleared level now. | 1612 // See if we can clear the previously uncleared level now. |
| 2112 EXPECT_EQ(level0, | 1613 EXPECT_EQ(level0, |
| 2113 GetLevelInfo(restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); | 1614 GetLevelInfo(restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); |
| 2114 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) | 1615 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) |
| 2115 .WillRepeatedly(Return(true)); | 1616 .WillRepeatedly(Return(true)); |
| 2116 EXPECT_TRUE(manager_->ClearTextureLevel( | 1617 EXPECT_TRUE(manager_->ClearTextureLevel( |
| 2117 decoder_.get(), restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); | 1618 decoder_.get(), restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); |
| 2118 } | 1619 } |
| 2119 | 1620 |
| 2120 TEST_F(ProduceConsumeTextureTest, ProduceConsumeExternal) { | 1621 TEST_F(ProduceConsumeTextureTest, ProduceConsumeExternal) { |
| 2121 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); | 1622 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); |
| 2122 Texture* texture = texture_ref_->texture(); | 1623 Texture* texture = texture_ref_->texture(); |
| 2123 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); | 1624 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
| 2124 LevelInfo level0( | 1625 LevelInfo level0(GL_TEXTURE_EXTERNAL_OES, GL_RGBA, 1, 1, 1, 0, |
| 2125 GL_TEXTURE_EXTERNAL_OES, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false); | 1626 GL_UNSIGNED_BYTE, gfx::Rect()); |
| 2126 SetLevelInfo(texture_ref_.get(), 0, level0); | 1627 SetLevelInfo(texture_ref_.get(), 0, level0); |
| 2127 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1628 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 2128 Texture* produced_texture = Produce(texture_ref_.get()); | 1629 Texture* produced_texture = Produce(texture_ref_.get()); |
| 2129 EXPECT_EQ(produced_texture, texture); | 1630 EXPECT_EQ(produced_texture, texture); |
| 2130 | 1631 |
| 2131 GLuint client_id = texture2_->client_id(); | 1632 GLuint client_id = texture2_->client_id(); |
| 2132 manager_->RemoveTexture(client_id); | 1633 manager_->RemoveTexture(client_id); |
| 2133 Consume(client_id, produced_texture); | 1634 Consume(client_id, produced_texture); |
| 2134 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 1635 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
| 2135 EXPECT_EQ(produced_texture, restored_texture->texture()); | 1636 EXPECT_EQ(produced_texture, restored_texture->texture()); |
| 2136 EXPECT_EQ(level0, | 1637 EXPECT_EQ(level0, |
| 2137 GetLevelInfo(restored_texture.get(), GL_TEXTURE_EXTERNAL_OES, 0)); | 1638 GetLevelInfo(restored_texture.get(), GL_TEXTURE_EXTERNAL_OES, 0)); |
| 2138 } | 1639 } |
| 2139 | 1640 |
| 2140 TEST_P(ProduceConsumeTextureTest, ProduceConsumeTextureWithImage) { | 1641 TEST_P(ProduceConsumeTextureTest, ProduceConsumeTextureWithImage) { |
| 2141 GLenum target = GetParam(); | 1642 GLenum target = GetParam(); |
| 2142 manager_->SetTarget(texture_ref_.get(), target); | 1643 manager_->SetTarget(texture_ref_.get(), target); |
| 2143 Texture* texture = texture_ref_->texture(); | 1644 Texture* texture = texture_ref_->texture(); |
| 2144 EXPECT_EQ(static_cast<GLenum>(target), texture->target()); | 1645 EXPECT_EQ(static_cast<GLenum>(target), texture->target()); |
| 2145 scoped_refptr<gfx::GLImage> image(new gfx::GLImageStub); | 1646 scoped_refptr<gfx::GLImage> image(new gfx::GLImageStub); |
| 2146 manager_->SetLevelInfo(texture_ref_.get(), | 1647 manager_->SetLevelInfo(texture_ref_.get(), target, 0, GL_RGBA, 0, 0, 1, 0, |
| 2147 target, | 1648 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 2148 0, | |
| 2149 GL_RGBA, | |
| 2150 0, | |
| 2151 0, | |
| 2152 1, | |
| 2153 0, | |
| 2154 GL_RGBA, | |
| 2155 GL_UNSIGNED_BYTE, | |
| 2156 true); | |
| 2157 manager_->SetLevelImage(texture_ref_.get(), target, 0, image.get()); | 1649 manager_->SetLevelImage(texture_ref_.get(), target, 0, image.get()); |
| 2158 GLuint service_id = texture->service_id(); | 1650 GLuint service_id = texture->service_id(); |
| 2159 Texture* produced_texture = Produce(texture_ref_.get()); | 1651 Texture* produced_texture = Produce(texture_ref_.get()); |
| 2160 | 1652 |
| 2161 GLuint client_id = texture2_->client_id(); | 1653 GLuint client_id = texture2_->client_id(); |
| 2162 manager_->RemoveTexture(client_id); | 1654 manager_->RemoveTexture(client_id); |
| 2163 Consume(client_id, produced_texture); | 1655 Consume(client_id, produced_texture); |
| 2164 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 1656 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
| 2165 EXPECT_EQ(produced_texture, restored_texture->texture()); | 1657 EXPECT_EQ(produced_texture, restored_texture->texture()); |
| 2166 EXPECT_EQ(service_id, restored_texture->service_id()); | 1658 EXPECT_EQ(service_id, restored_texture->service_id()); |
| 2167 EXPECT_EQ(image.get(), restored_texture->texture()->GetLevelImage(target, 0)); | 1659 EXPECT_EQ(image.get(), restored_texture->texture()->GetLevelImage(target, 0)); |
| 2168 } | 1660 } |
| 2169 | 1661 |
| 2170 static const GLenum kTextureTargets[] = {GL_TEXTURE_2D, GL_TEXTURE_EXTERNAL_OES, | 1662 static const GLenum kTextureTargets[] = {GL_TEXTURE_2D, GL_TEXTURE_EXTERNAL_OES, |
| 2171 GL_TEXTURE_RECTANGLE_ARB, }; | 1663 GL_TEXTURE_RECTANGLE_ARB, }; |
| 2172 | 1664 |
| 2173 INSTANTIATE_TEST_CASE_P(Target, | 1665 INSTANTIATE_TEST_CASE_P(Target, |
| 2174 ProduceConsumeTextureTest, | 1666 ProduceConsumeTextureTest, |
| 2175 ::testing::ValuesIn(kTextureTargets)); | 1667 ::testing::ValuesIn(kTextureTargets)); |
| 2176 | 1668 |
| 2177 TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) { | 1669 TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) { |
| 2178 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); | 1670 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); |
| 2179 Texture* texture = texture_ref_->texture(); | 1671 Texture* texture = texture_ref_->texture(); |
| 2180 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 1672 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
| 2181 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X, | 1673 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_RGBA, 1, 1, 1, 0, |
| 2182 GL_RGBA, | 1674 GL_UNSIGNED_BYTE, gfx::Rect(1, 1)); |
| 2183 1, | 1675 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_RGBA, 3, 3, 1, 0, |
| 2184 1, | 1676 GL_UNSIGNED_BYTE, gfx::Rect(1, 1)); |
| 2185 1, | |
| 2186 0, | |
| 2187 GL_UNSIGNED_BYTE, | |
| 2188 true); | |
| 2189 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | |
| 2190 GL_RGBA, | |
| 2191 3, | |
| 2192 3, | |
| 2193 1, | |
| 2194 0, | |
| 2195 GL_UNSIGNED_BYTE, | |
| 2196 true); | |
| 2197 SetLevelInfo(texture_ref_.get(), 0, face0); | 1677 SetLevelInfo(texture_ref_.get(), 0, face0); |
| 2198 SetLevelInfo(texture_ref_.get(), 0, face5); | 1678 SetLevelInfo(texture_ref_.get(), 0, face5); |
| 2199 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1679 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 2200 Texture* produced_texture = Produce(texture_ref_.get()); | 1680 Texture* produced_texture = Produce(texture_ref_.get()); |
| 2201 EXPECT_EQ(produced_texture, texture); | 1681 EXPECT_EQ(produced_texture, texture); |
| 2202 | 1682 |
| 2203 GLuint client_id = texture2_->client_id(); | 1683 GLuint client_id = texture2_->client_id(); |
| 2204 manager_->RemoveTexture(client_id); | 1684 manager_->RemoveTexture(client_id); |
| 2205 Consume(client_id, produced_texture); | 1685 Consume(client_id, produced_texture); |
| 2206 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 1686 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2336 // Make texture renderable but uncleared on one texture manager, should affect | 1816 // Make texture renderable but uncleared on one texture manager, should affect |
| 2337 // other one. | 1817 // other one. |
| 2338 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); | 1818 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
| 2339 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures()); | 1819 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures()); |
| 2340 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 1820 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
| 2341 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 1821 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
| 2342 EXPECT_TRUE(texture_manager2_->HaveUnrenderableTextures()); | 1822 EXPECT_TRUE(texture_manager2_->HaveUnrenderableTextures()); |
| 2343 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 1823 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
| 2344 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 1824 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
| 2345 | 1825 |
| 2346 texture_manager1_->SetLevelInfo(ref1.get(), | 1826 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, |
| 2347 GL_TEXTURE_2D, | 1827 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 2348 0, | |
| 2349 GL_RGBA, | |
| 2350 1, | |
| 2351 1, | |
| 2352 1, | |
| 2353 0, | |
| 2354 GL_RGBA, | |
| 2355 GL_UNSIGNED_BYTE, | |
| 2356 false); | |
| 2357 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); | 1828 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); |
| 2358 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); | 1829 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); |
| 2359 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); | 1830 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); |
| 2360 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); | 1831 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); |
| 2361 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); | 1832 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); |
| 2362 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); | 1833 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); |
| 2363 | 1834 |
| 2364 // Make texture cleared on one texture manager, should affect other one. | 1835 // Make texture cleared on one texture manager, should affect other one. |
| 2365 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, true); | 1836 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, true); |
| 2366 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 1837 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2386 framebuffer_manager1.CreateFramebuffer(10, 10); | 1857 framebuffer_manager1.CreateFramebuffer(10, 10); |
| 2387 scoped_refptr<Framebuffer> framebuffer1 = | 1858 scoped_refptr<Framebuffer> framebuffer1 = |
| 2388 framebuffer_manager1.GetFramebuffer(10); | 1859 framebuffer_manager1.GetFramebuffer(10); |
| 2389 framebuffer1->AttachTexture( | 1860 framebuffer1->AttachTexture( |
| 2390 GL_COLOR_ATTACHMENT0, ref1.get(), GL_TEXTURE_2D, 0, 0); | 1861 GL_COLOR_ATTACHMENT0, ref1.get(), GL_TEXTURE_2D, 0, 0); |
| 2391 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1.get())); | 1862 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
| 2392 EXPECT_NE(kCompleteValue, framebuffer1->IsPossiblyComplete()); | 1863 EXPECT_NE(kCompleteValue, framebuffer1->IsPossiblyComplete()); |
| 2393 | 1864 |
| 2394 // Make FBO complete in manager 1. | 1865 // Make FBO complete in manager 1. |
| 2395 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); | 1866 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
| 2396 texture_manager1_->SetLevelInfo(ref1.get(), | 1867 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, |
| 2397 GL_TEXTURE_2D, | 1868 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 2398 0, | 1869 gfx::Rect(1, 1)); |
| 2399 GL_RGBA, | |
| 2400 1, | |
| 2401 1, | |
| 2402 1, | |
| 2403 0, | |
| 2404 GL_RGBA, | |
| 2405 GL_UNSIGNED_BYTE, | |
| 2406 true); | |
| 2407 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); | 1870 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); |
| 2408 framebuffer_manager1.MarkAsComplete(framebuffer1.get()); | 1871 framebuffer_manager1.MarkAsComplete(framebuffer1.get()); |
| 2409 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1.get())); | 1872 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
| 2410 | 1873 |
| 2411 // Share texture with manager 2. | 1874 // Share texture with manager 2. |
| 2412 scoped_refptr<TextureRef> ref2 = | 1875 scoped_refptr<TextureRef> ref2 = |
| 2413 texture_manager2_->Consume(20, ref1->texture()); | 1876 texture_manager2_->Consume(20, ref1->texture()); |
| 2414 framebuffer_manager2.CreateFramebuffer(20, 20); | 1877 framebuffer_manager2.CreateFramebuffer(20, 20); |
| 2415 scoped_refptr<Framebuffer> framebuffer2 = | 1878 scoped_refptr<Framebuffer> framebuffer2 = |
| 2416 framebuffer_manager2.GetFramebuffer(20); | 1879 framebuffer_manager2.GetFramebuffer(20); |
| 2417 framebuffer2->AttachTexture( | 1880 framebuffer2->AttachTexture( |
| 2418 GL_COLOR_ATTACHMENT0, ref2.get(), GL_TEXTURE_2D, 0, 0); | 1881 GL_COLOR_ATTACHMENT0, ref2.get(), GL_TEXTURE_2D, 0, 0); |
| 2419 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2.get())); | 1882 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
| 2420 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); | 1883 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); |
| 2421 framebuffer_manager2.MarkAsComplete(framebuffer2.get()); | 1884 framebuffer_manager2.MarkAsComplete(framebuffer2.get()); |
| 2422 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2.get())); | 1885 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
| 2423 | 1886 |
| 2424 // Change level for texture, both FBOs should be marked incomplete | 1887 // Change level for texture, both FBOs should be marked incomplete |
| 2425 texture_manager1_->SetLevelInfo(ref1.get(), | 1888 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, |
| 2426 GL_TEXTURE_2D, | 1889 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 2427 0, | 1890 gfx::Rect(1, 1)); |
| 2428 GL_RGBA, | |
| 2429 1, | |
| 2430 1, | |
| 2431 1, | |
| 2432 0, | |
| 2433 GL_RGBA, | |
| 2434 GL_UNSIGNED_BYTE, | |
| 2435 true); | |
| 2436 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1.get())); | 1891 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
| 2437 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); | 1892 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); |
| 2438 framebuffer_manager1.MarkAsComplete(framebuffer1.get()); | 1893 framebuffer_manager1.MarkAsComplete(framebuffer1.get()); |
| 2439 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1.get())); | 1894 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
| 2440 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2.get())); | 1895 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
| 2441 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); | 1896 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); |
| 2442 framebuffer_manager2.MarkAsComplete(framebuffer2.get()); | 1897 framebuffer_manager2.MarkAsComplete(framebuffer2.get()); |
| 2443 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2.get())); | 1898 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
| 2444 | 1899 |
| 2445 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)) | 1900 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)) |
| 2446 .Times(2) | 1901 .Times(2) |
| 2447 .RetiresOnSaturation(); | 1902 .RetiresOnSaturation(); |
| 2448 framebuffer_manager1.RemoveFramebuffer(10); | 1903 framebuffer_manager1.RemoveFramebuffer(10); |
| 2449 framebuffer_manager2.RemoveFramebuffer(20); | 1904 framebuffer_manager2.RemoveFramebuffer(20); |
| 2450 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 1905 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
| 2451 .Times(1) | 1906 .Times(1) |
| 2452 .RetiresOnSaturation(); | 1907 .RetiresOnSaturation(); |
| 2453 texture_manager1_->RemoveTexture(10); | 1908 texture_manager1_->RemoveTexture(10); |
| 2454 texture_manager2_->RemoveTexture(20); | 1909 texture_manager2_->RemoveTexture(20); |
| 2455 } | 1910 } |
| 2456 | 1911 |
| 2457 TEST_F(SharedTextureTest, Memory) { | 1912 TEST_F(SharedTextureTest, Memory) { |
| 2458 size_t initial_memory1 = memory_tracker1_->GetSize(MemoryTracker::kUnmanaged); | 1913 size_t initial_memory1 = memory_tracker1_->GetSize(MemoryTracker::kUnmanaged); |
| 2459 size_t initial_memory2 = memory_tracker2_->GetSize(MemoryTracker::kUnmanaged); | 1914 size_t initial_memory2 = memory_tracker2_->GetSize(MemoryTracker::kUnmanaged); |
| 2460 | 1915 |
| 2461 // Newly created texture is unrenderable. | 1916 // Newly created texture is unrenderable. |
| 2462 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 1917 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
| 2463 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); | 1918 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
| 2464 texture_manager1_->SetLevelInfo(ref1.get(), | 1919 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 10, 10, |
| 2465 GL_TEXTURE_2D, | 1920 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 2466 0, | |
| 2467 GL_RGBA, | |
| 2468 10, | |
| 2469 10, | |
| 2470 1, | |
| 2471 0, | |
| 2472 GL_RGBA, | |
| 2473 GL_UNSIGNED_BYTE, | |
| 2474 false); | |
| 2475 | 1921 |
| 2476 EXPECT_LT(0u, ref1->texture()->estimated_size()); | 1922 EXPECT_LT(0u, ref1->texture()->estimated_size()); |
| 2477 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), | 1923 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), |
| 2478 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged)); | 1924 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged)); |
| 2479 | 1925 |
| 2480 // Associate new texture ref to other texture manager, it doesn't account for | 1926 // Associate new texture ref to other texture manager, it doesn't account for |
| 2481 // the texture memory, the first memory tracker still has it. | 1927 // the texture memory, the first memory tracker still has it. |
| 2482 scoped_refptr<TextureRef> ref2 = | 1928 scoped_refptr<TextureRef> ref2 = |
| 2483 texture_manager2_->Consume(20, ref1->texture()); | 1929 texture_manager2_->Consume(20, ref1->texture()); |
| 2484 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), | 1930 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 2502 EXPECT_EQ(initial_memory2, | 1948 EXPECT_EQ(initial_memory2, |
| 2503 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged)); | 1949 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged)); |
| 2504 } | 1950 } |
| 2505 | 1951 |
| 2506 TEST_F(SharedTextureTest, Images) { | 1952 TEST_F(SharedTextureTest, Images) { |
| 2507 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 1953 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
| 2508 scoped_refptr<TextureRef> ref2 = | 1954 scoped_refptr<TextureRef> ref2 = |
| 2509 texture_manager2_->Consume(20, ref1->texture()); | 1955 texture_manager2_->Consume(20, ref1->texture()); |
| 2510 | 1956 |
| 2511 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); | 1957 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
| 2512 texture_manager1_->SetLevelInfo(ref1.get(), | 1958 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, |
| 2513 GL_TEXTURE_2D, | 1959 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 2514 1, | 1960 gfx::Rect(2, 2)); |
| 2515 GL_RGBA, | |
| 2516 2, | |
| 2517 2, | |
| 2518 1, | |
| 2519 0, | |
| 2520 GL_RGBA, | |
| 2521 GL_UNSIGNED_BYTE, | |
| 2522 true); | |
| 2523 EXPECT_FALSE(ref1->texture()->HasImages()); | 1961 EXPECT_FALSE(ref1->texture()->HasImages()); |
| 2524 EXPECT_FALSE(ref2->texture()->HasImages()); | 1962 EXPECT_FALSE(ref2->texture()->HasImages()); |
| 2525 EXPECT_FALSE(texture_manager1_->HaveImages()); | 1963 EXPECT_FALSE(texture_manager1_->HaveImages()); |
| 2526 EXPECT_FALSE(texture_manager2_->HaveImages()); | 1964 EXPECT_FALSE(texture_manager2_->HaveImages()); |
| 2527 scoped_refptr<gfx::GLImage> image1(new gfx::GLImageStub); | 1965 scoped_refptr<gfx::GLImage> image1(new gfx::GLImageStub); |
| 2528 texture_manager1_->SetLevelImage(ref1.get(), GL_TEXTURE_2D, 1, image1.get()); | 1966 texture_manager1_->SetLevelImage(ref1.get(), GL_TEXTURE_2D, 1, image1.get()); |
| 2529 EXPECT_TRUE(ref1->texture()->HasImages()); | 1967 EXPECT_TRUE(ref1->texture()->HasImages()); |
| 2530 EXPECT_TRUE(ref2->texture()->HasImages()); | 1968 EXPECT_TRUE(ref2->texture()->HasImages()); |
| 2531 EXPECT_TRUE(texture_manager1_->HaveImages()); | 1969 EXPECT_TRUE(texture_manager1_->HaveImages()); |
| 2532 EXPECT_TRUE(texture_manager2_->HaveImages()); | 1970 EXPECT_TRUE(texture_manager2_->HaveImages()); |
| 2533 scoped_refptr<gfx::GLImage> image2(new gfx::GLImageStub); | 1971 scoped_refptr<gfx::GLImage> image2(new gfx::GLImageStub); |
| 2534 texture_manager1_->SetLevelImage(ref1.get(), GL_TEXTURE_2D, 1, image2.get()); | 1972 texture_manager1_->SetLevelImage(ref1.get(), GL_TEXTURE_2D, 1, image2.get()); |
| 2535 EXPECT_TRUE(ref1->texture()->HasImages()); | 1973 EXPECT_TRUE(ref1->texture()->HasImages()); |
| 2536 EXPECT_TRUE(ref2->texture()->HasImages()); | 1974 EXPECT_TRUE(ref2->texture()->HasImages()); |
| 2537 EXPECT_TRUE(texture_manager1_->HaveImages()); | 1975 EXPECT_TRUE(texture_manager1_->HaveImages()); |
| 2538 EXPECT_TRUE(texture_manager2_->HaveImages()); | 1976 EXPECT_TRUE(texture_manager2_->HaveImages()); |
| 2539 texture_manager1_->SetLevelInfo(ref1.get(), | 1977 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, |
| 2540 GL_TEXTURE_2D, | 1978 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 2541 1, | 1979 gfx::Rect(2, 2)); |
| 2542 GL_RGBA, | |
| 2543 2, | |
| 2544 2, | |
| 2545 1, | |
| 2546 0, | |
| 2547 GL_RGBA, | |
| 2548 GL_UNSIGNED_BYTE, | |
| 2549 true); | |
| 2550 EXPECT_FALSE(ref1->texture()->HasImages()); | 1980 EXPECT_FALSE(ref1->texture()->HasImages()); |
| 2551 EXPECT_FALSE(ref2->texture()->HasImages()); | 1981 EXPECT_FALSE(ref2->texture()->HasImages()); |
| 2552 EXPECT_FALSE(texture_manager1_->HaveImages()); | 1982 EXPECT_FALSE(texture_manager1_->HaveImages()); |
| 2553 EXPECT_FALSE(texture_manager1_->HaveImages()); | 1983 EXPECT_FALSE(texture_manager1_->HaveImages()); |
| 2554 | 1984 |
| 2555 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 1985 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
| 2556 .Times(1) | 1986 .Times(1) |
| 2557 .RetiresOnSaturation(); | 1987 .RetiresOnSaturation(); |
| 2558 texture_manager1_->RemoveTexture(10); | 1988 texture_manager1_->RemoveTexture(10); |
| 2559 texture_manager2_->RemoveTexture(20); | 1989 texture_manager2_->RemoveTexture(20); |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2812 ExpectValid(GL_DEPTH_COMPONENT, GL_FLOAT, GL_DEPTH_COMPONENT32F); | 2242 ExpectValid(GL_DEPTH_COMPONENT, GL_FLOAT, GL_DEPTH_COMPONENT32F); |
| 2813 ExpectValid(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); | 2243 ExpectValid(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); |
| 2814 ExpectValid(GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, | 2244 ExpectValid(GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, |
| 2815 GL_DEPTH32F_STENCIL8); | 2245 GL_DEPTH32F_STENCIL8); |
| 2816 | 2246 |
| 2817 ExpectInvalid(GL_RGB_INTEGER, GL_INT, GL_RGBA8); | 2247 ExpectInvalid(GL_RGB_INTEGER, GL_INT, GL_RGBA8); |
| 2818 } | 2248 } |
| 2819 | 2249 |
| 2820 } // namespace gles2 | 2250 } // namespace gles2 |
| 2821 } // namespace gpu | 2251 } // namespace gpu |
| OLD | NEW |