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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <utility> | 10 #include <utility> |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 const GLint TextureManagerTest::kMaxExternalTextureSize; | 133 const GLint TextureManagerTest::kMaxExternalTextureSize; |
134 const GLint TextureManagerTest::kMax2dLevels; | 134 const GLint TextureManagerTest::kMax2dLevels; |
135 const GLint TextureManagerTest::kMaxCubeMapLevels; | 135 const GLint TextureManagerTest::kMaxCubeMapLevels; |
136 const GLint TextureManagerTest::kMaxExternalLevels; | 136 const GLint TextureManagerTest::kMaxExternalLevels; |
137 #endif | 137 #endif |
138 | 138 |
139 TEST_F(TextureManagerTest, Basic) { | 139 TEST_F(TextureManagerTest, Basic) { |
140 const GLuint kClient1Id = 1; | 140 const GLuint kClient1Id = 1; |
141 const GLuint kService1Id = 11; | 141 const GLuint kService1Id = 11; |
142 const GLuint kClient2Id = 2; | 142 const GLuint kClient2Id = 2; |
| 143 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
143 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 144 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
144 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 145 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
145 // Check we can create texture. | 146 // Check we can create texture. |
146 manager_->CreateTexture(kClient1Id, kService1Id); | 147 manager_->CreateTexture(kClient1Id, kService1Id); |
147 // Check texture got created. | 148 // Check texture got created. |
148 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id); | 149 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id); |
149 ASSERT_TRUE(texture.get() != NULL); | 150 ASSERT_TRUE(texture.get() != NULL); |
150 EXPECT_EQ(kService1Id, texture->service_id()); | 151 EXPECT_EQ(kService1Id, texture->service_id()); |
151 EXPECT_EQ(kClient1Id, texture->client_id()); | 152 EXPECT_EQ(kClient1Id, texture->client_id()); |
152 EXPECT_EQ(texture->texture(), manager_->GetTextureForServiceId( | 153 EXPECT_EQ(texture->texture(), manager_->GetTextureForServiceId( |
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 613 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
613 EXPECT_EQ(0, texture->num_uncleared_mips()); | 614 EXPECT_EQ(0, texture->num_uncleared_mips()); |
614 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 615 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
615 EXPECT_TRUE(texture->SafeToRenderFrom()); | 616 EXPECT_TRUE(texture->SafeToRenderFrom()); |
616 EXPECT_FALSE(texture->IsImmutable()); | 617 EXPECT_FALSE(texture->IsImmutable()); |
617 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), | 618 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), |
618 texture->min_filter()); | 619 texture->min_filter()); |
619 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter()); | 620 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter()); |
620 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s()); | 621 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s()); |
621 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t()); | 622 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t()); |
| 623 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
622 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 624 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
623 EXPECT_EQ(0u, texture->estimated_size()); | 625 EXPECT_EQ(0u, texture->estimated_size()); |
624 } | 626 } |
625 | 627 |
626 TEST_F(TextureTest, SetTargetTexture2D) { | 628 TEST_F(TextureTest, SetTargetTexture2D) { |
627 Texture* texture = texture_ref_->texture(); | 629 Texture* texture = texture_ref_->texture(); |
628 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 630 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
629 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 631 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
630 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 632 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
631 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 633 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 688 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
687 Texture* texture = texture_ref_->texture(); | 689 Texture* texture = texture_ref_->texture(); |
688 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 690 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
689 // Check Setting level 0 to POT | 691 // Check Setting level 0 to POT |
690 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, | 692 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
691 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 693 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
692 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 694 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
693 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 695 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
694 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 696 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
695 EXPECT_TRUE(texture->SafeToRenderFrom()); | 697 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 698 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
696 // Set filters to something that will work with a single mip. | 699 // Set filters to something that will work with a single mip. |
697 SetParameter( | 700 SetParameter( |
698 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 701 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
699 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 702 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 703 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
700 // Set them back. | 704 // Set them back. |
701 SetParameter(texture_ref_.get(), | 705 SetParameter(texture_ref_.get(), |
702 GL_TEXTURE_MIN_FILTER, | 706 GL_TEXTURE_MIN_FILTER, |
703 GL_LINEAR_MIPMAP_LINEAR, | 707 GL_LINEAR_MIPMAP_LINEAR, |
704 GL_NO_ERROR); | 708 GL_NO_ERROR); |
| 709 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
705 | 710 |
706 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 711 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
707 // Make mips. | 712 // Make mips. |
708 manager_->MarkMipmapsGenerated(texture_ref_.get()); | 713 manager_->MarkMipmapsGenerated(texture_ref_.get()); |
709 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 714 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
710 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 715 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 716 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
711 // Change a mip. | 717 // Change a mip. |
712 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, | 718 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, |
713 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 719 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
714 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 720 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
715 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 721 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
716 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 722 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
717 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 723 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 724 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
718 // Set a level past the number of mips that would get generated. | 725 // Set a level past the number of mips that would get generated. |
719 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, | 726 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, |
720 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 727 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
721 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 728 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
722 // Make mips. | 729 // Make mips. |
723 manager_->MarkMipmapsGenerated(texture_ref_.get()); | 730 manager_->MarkMipmapsGenerated(texture_ref_.get()); |
724 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 731 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
725 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 732 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 733 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
726 } | 734 } |
727 | 735 |
728 TEST_F(TextureTest, BaseLevel) { | 736 TEST_F(TextureTest, BaseLevel) { |
729 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 737 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
730 Texture* texture = texture_ref_->texture(); | 738 Texture* texture = texture_ref_->texture(); |
731 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 739 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
732 // Check Setting level 1 to POT | 740 // Check Setting level 1 to POT |
733 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, | 741 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, |
734 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 742 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
735 SetParameter( | 743 SetParameter( |
736 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 744 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
737 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 745 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 746 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
738 SetParameter( | 747 SetParameter( |
739 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 1, GL_NO_ERROR); | 748 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 1, GL_NO_ERROR); |
740 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 749 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 750 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
741 } | 751 } |
742 | 752 |
743 TEST_F(TextureTest, BaseLevelMaxLevel) { | 753 TEST_F(TextureTest, BaseLevelMaxLevel) { |
744 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 754 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
745 Texture* texture = texture_ref_->texture(); | 755 Texture* texture = texture_ref_->texture(); |
746 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 756 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
747 // Set up level 2, 3, 4. | 757 // Set up level 2, 3, 4. |
748 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2, GL_RGBA, 8, 8, 1, | 758 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2, GL_RGBA, 8, 8, 1, |
749 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 8)); | 759 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 8)); |
750 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, | 760 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, |
751 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 761 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
752 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 4, GL_RGBA, 2, 2, 1, | 762 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 4, GL_RGBA, 2, 2, 1, |
753 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); | 763 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
754 SetParameter( | 764 SetParameter( |
755 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR, | 765 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR, |
756 GL_NO_ERROR); | 766 GL_NO_ERROR); |
757 SetParameter( | 767 SetParameter( |
758 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); | 768 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); |
759 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 769 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 770 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
760 SetParameter( | 771 SetParameter( |
761 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 2, GL_NO_ERROR); | 772 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 2, GL_NO_ERROR); |
762 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 773 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 774 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
763 SetParameter( | 775 SetParameter( |
764 texture_ref_.get(), GL_TEXTURE_MAX_LEVEL, 4, GL_NO_ERROR); | 776 texture_ref_.get(), GL_TEXTURE_MAX_LEVEL, 4, GL_NO_ERROR); |
765 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 777 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 778 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
766 SetParameter( | 779 SetParameter( |
767 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 0, GL_NO_ERROR); | 780 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 0, GL_NO_ERROR); |
768 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 781 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 782 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
769 } | 783 } |
770 | 784 |
771 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { | 785 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { |
772 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 786 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
773 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64); | 787 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64); |
774 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, | 788 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
775 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 789 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
776 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0); | 790 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0); |
777 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84); | 791 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84); |
778 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 792 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
779 manager_->MarkMipmapsGenerated(texture_ref_.get()); | 793 manager_->MarkMipmapsGenerated(texture_ref_.get()); |
780 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0); | 794 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0); |
781 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0); | 795 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0); |
782 } | 796 } |
783 | 797 |
784 TEST_F(TextureTest, UnusedMips) { | 798 TEST_F(TextureTest, UnusedMips) { |
785 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 799 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
786 Texture* texture = texture_ref_->texture(); | 800 Texture* texture = texture_ref_->texture(); |
787 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 801 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
788 // Set level zero to large size. | 802 // Set level zero to large size. |
789 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, | 803 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
790 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 804 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
791 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 805 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
792 manager_->MarkMipmapsGenerated(texture_ref_.get()); | 806 manager_->MarkMipmapsGenerated(texture_ref_.get()); |
793 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 807 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
794 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 808 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
795 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 809 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 810 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
796 // Set level zero to large smaller (levels unused mips) | 811 // Set level zero to large smaller (levels unused mips) |
797 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, | 812 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, |
798 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); | 813 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
799 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 814 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
800 manager_->MarkMipmapsGenerated(texture_ref_.get()); | 815 manager_->MarkMipmapsGenerated(texture_ref_.get()); |
801 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 816 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
802 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 817 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
803 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 818 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 819 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
804 // Set an unused level to some size | 820 // Set an unused level to some size |
805 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, | 821 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, |
806 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(16, 16)); | 822 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(16, 16)); |
807 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 823 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
808 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 824 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
809 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 825 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 826 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
810 } | 827 } |
811 | 828 |
812 TEST_F(TextureTest, NPOT2D) { | 829 TEST_F(TextureTest, NPOT2D) { |
813 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 830 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
814 Texture* texture = texture_ref_->texture(); | 831 Texture* texture = texture_ref_->texture(); |
815 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 832 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
816 // Check Setting level 0 to NPOT | 833 // Check Setting level 0 to NPOT |
817 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, | 834 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, |
818 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); | 835 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
819 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 836 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
820 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 837 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
821 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 838 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
822 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 839 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 840 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
823 SetParameter( | 841 SetParameter( |
824 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 842 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
825 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 843 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 844 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
826 SetParameter( | 845 SetParameter( |
827 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 846 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
828 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 847 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 848 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
829 SetParameter( | 849 SetParameter( |
830 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 850 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
831 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 851 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 852 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
832 // Change it to POT. | 853 // Change it to POT. |
833 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, | 854 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
834 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 855 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
835 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 856 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
836 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 857 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
837 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 858 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 859 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
838 } | 860 } |
839 | 861 |
840 TEST_F(TextureTest, NPOT2DNPOTOK) { | 862 TEST_F(TextureTest, NPOT2DNPOTOK) { |
841 TestHelper::SetupFeatureInfoInitExpectations( | 863 TestHelper::SetupFeatureInfoInitExpectations( |
842 gl_.get(), "GL_OES_texture_npot"); | 864 gl_.get(), "GL_OES_texture_npot"); |
843 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 865 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
844 feature_info->InitializeForTesting(); | 866 feature_info->InitializeForTesting(); |
845 TextureManager manager(NULL, | 867 TextureManager manager(NULL, |
846 feature_info.get(), | 868 feature_info.get(), |
847 kMaxTextureSize, | 869 kMaxTextureSize, |
848 kMaxCubeMapTextureSize, | 870 kMaxCubeMapTextureSize, |
849 kMaxRectangleTextureSize, | 871 kMaxRectangleTextureSize, |
850 kMax3DTextureSize, | 872 kMax3DTextureSize, |
851 kUseDefaultTextures); | 873 kUseDefaultTextures); |
852 manager.CreateTexture(kClient1Id, kService1Id); | 874 manager.CreateTexture(kClient1Id, kService1Id); |
853 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 875 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
854 ASSERT_TRUE(texture_ref != NULL); | 876 ASSERT_TRUE(texture_ref != NULL); |
855 Texture* texture = texture_ref->texture(); | 877 Texture* texture = texture_ref->texture(); |
856 | 878 |
857 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 879 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
858 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 880 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
859 // Check Setting level 0 to NPOT | 881 // Check Setting level 0 to NPOT |
860 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, | 882 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, |
861 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); | 883 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
862 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 884 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
863 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 885 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
864 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); | 886 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); |
865 EXPECT_FALSE(manager.CanRender(texture_ref)); | 887 EXPECT_FALSE(manager.CanRender(texture_ref)); |
| 888 EXPECT_TRUE(manager.HaveUnrenderableTextures()); |
866 manager.MarkMipmapsGenerated(texture_ref); | 889 manager.MarkMipmapsGenerated(texture_ref); |
867 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 890 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
868 EXPECT_TRUE(manager.CanRender(texture_ref)); | 891 EXPECT_TRUE(manager.CanRender(texture_ref)); |
| 892 EXPECT_FALSE(manager.HaveUnrenderableTextures()); |
869 manager.Destroy(false); | 893 manager.Destroy(false); |
870 } | 894 } |
871 | 895 |
872 TEST_F(TextureTest, POTCubeMap) { | 896 TEST_F(TextureTest, POTCubeMap) { |
873 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); | 897 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); |
874 Texture* texture = texture_ref_->texture(); | 898 Texture* texture = texture_ref_->texture(); |
875 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 899 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
876 // Check Setting level 0 each face to POT | 900 // Check Setting level 0 each face to POT |
877 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, | 901 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, |
878 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 902 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
879 gfx::Rect(4, 4)); | 903 gfx::Rect(4, 4)); |
880 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 904 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
881 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 905 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
882 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 906 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
883 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 907 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
884 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 908 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 909 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
885 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, | 910 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, |
886 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 911 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
887 gfx::Rect(4, 4)); | 912 gfx::Rect(4, 4)); |
888 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 913 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
889 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 914 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
890 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 915 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
891 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 916 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
892 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 917 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 918 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
893 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, | 919 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, |
894 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 920 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
895 gfx::Rect(4, 4)); | 921 gfx::Rect(4, 4)); |
896 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 922 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
897 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 923 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
898 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 924 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
899 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 925 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
900 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 926 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 927 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
901 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, | 928 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, |
902 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 929 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
903 gfx::Rect(4, 4)); | 930 gfx::Rect(4, 4)); |
904 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 931 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
905 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 932 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
906 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 933 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
907 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 934 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
908 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 935 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 936 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
909 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, | 937 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, |
910 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 938 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
911 gfx::Rect(4, 4)); | 939 gfx::Rect(4, 4)); |
912 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 940 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
913 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 941 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
914 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 942 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
915 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 943 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
916 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 944 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 945 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
917 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, | 946 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, |
918 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 947 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
919 gfx::Rect(4, 4)); | 948 gfx::Rect(4, 4)); |
920 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 949 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
921 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 950 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
922 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 951 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
923 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 952 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
924 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 953 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 954 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
925 | 955 |
926 // Make mips. | 956 // Make mips. |
927 manager_->MarkMipmapsGenerated(texture_ref_.get()); | 957 manager_->MarkMipmapsGenerated(texture_ref_.get()); |
928 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 958 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
929 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 959 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
930 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 960 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 961 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
931 | 962 |
932 // Change a mip. | 963 // Change a mip. |
933 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 1, | 964 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 1, |
934 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 965 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
935 gfx::Rect(4, 4)); | 966 gfx::Rect(4, 4)); |
936 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 967 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
937 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 968 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
938 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 969 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
939 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 970 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
940 // Set a level past the number of mips that would get generated. | 971 // Set a level past the number of mips that would get generated. |
(...skipping 22 matching lines...) Expand all Loading... |
963 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 994 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
964 // Check Setting level 0 each face to POT | 995 // Check Setting level 0 each face to POT |
965 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, | 996 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, |
966 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 997 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
967 gfx::Rect(4, 4)); | 998 gfx::Rect(4, 4)); |
968 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 999 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
969 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1000 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
970 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 1001 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
971 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 1002 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
972 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 1003 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 1004 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
973 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, | 1005 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, |
974 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1006 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
975 gfx::Rect(4, 4)); | 1007 gfx::Rect(4, 4)); |
976 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 1008 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
977 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1009 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
978 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 1010 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
979 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 1011 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
980 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 1012 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 1013 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
981 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, | 1014 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, |
982 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1015 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
983 gfx::Rect(4, 4)); | 1016 gfx::Rect(4, 4)); |
984 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 1017 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
985 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1018 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
986 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 1019 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
987 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 1020 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
988 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 1021 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 1022 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
989 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, | 1023 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, |
990 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1024 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
991 gfx::Rect(4, 4)); | 1025 gfx::Rect(4, 4)); |
992 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 1026 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
993 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1027 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
994 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 1028 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
995 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 1029 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
996 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 1030 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 1031 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
997 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, | 1032 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, |
998 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1033 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
999 gfx::Rect(4, 4)); | 1034 gfx::Rect(4, 4)); |
1000 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 1035 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
1001 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1036 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1002 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 1037 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
1003 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 1038 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
1004 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 1039 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 1040 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
1005 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, | 1041 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, |
1006 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1042 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
1007 gfx::Rect(4, 4)); | 1043 gfx::Rect(4, 4)); |
1008 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 1044 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
1009 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1045 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1010 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 1046 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
1011 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 1047 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
1012 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 1048 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 1049 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
1013 } | 1050 } |
1014 | 1051 |
1015 TEST_F(TextureTest, GetLevelSize) { | 1052 TEST_F(TextureTest, GetLevelSize) { |
1016 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_3D); | 1053 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_3D); |
1017 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_3D, 1, GL_RGBA, 4, 5, 6, | 1054 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_3D, 1, GL_RGBA, 4, 5, 6, |
1018 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); | 1055 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
1019 GLsizei width = -1; | 1056 GLsizei width = -1; |
1020 GLsizei height = -1; | 1057 GLsizei height = -1; |
1021 GLsizei depth = -1; | 1058 GLsizei depth = -1; |
1022 Texture* texture = texture_ref_->texture(); | 1059 Texture* texture = texture_ref_->texture(); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1105 kMax3DTextureSize, | 1142 kMax3DTextureSize, |
1106 kUseDefaultTextures); | 1143 kUseDefaultTextures); |
1107 manager.CreateTexture(kClient1Id, kService1Id); | 1144 manager.CreateTexture(kClient1Id, kService1Id); |
1108 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1145 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1109 ASSERT_TRUE(texture_ref != NULL); | 1146 ASSERT_TRUE(texture_ref != NULL); |
1110 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1147 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1111 Texture* texture = texture_ref->texture(); | 1148 Texture* texture = texture_ref->texture(); |
1112 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1149 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1113 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1150 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1114 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); | 1151 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
1115 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1152 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1116 TestHelper::SetTexParameteriWithExpectations( | 1153 TestHelper::SetTexParameteriWithExpectations( |
1117 gl_.get(), error_state_.get(), &manager, | 1154 gl_.get(), error_state_.get(), &manager, |
1118 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1155 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1119 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1156 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1120 TestHelper::SetTexParameteriWithExpectations( | 1157 TestHelper::SetTexParameteriWithExpectations( |
1121 gl_.get(), error_state_.get(), &manager, texture_ref, | 1158 gl_.get(), error_state_.get(), &manager, texture_ref, |
1122 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1159 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1123 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1160 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1124 manager.Destroy(false); | 1161 manager.Destroy(false); |
1125 } | 1162 } |
1126 | 1163 |
1127 TEST_F(TextureTest, FloatLinear) { | 1164 TEST_F(TextureTest, FloatLinear) { |
1128 TestHelper::SetupFeatureInfoInitExpectations( | 1165 TestHelper::SetupFeatureInfoInitExpectations( |
1129 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); | 1166 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); |
1130 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1167 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1131 feature_info->InitializeForTesting(); | 1168 feature_info->InitializeForTesting(); |
1132 TextureManager manager(NULL, | 1169 TextureManager manager(NULL, |
1133 feature_info.get(), | 1170 feature_info.get(), |
1134 kMaxTextureSize, | 1171 kMaxTextureSize, |
1135 kMaxCubeMapTextureSize, | 1172 kMaxCubeMapTextureSize, |
1136 kMaxRectangleTextureSize, | 1173 kMaxRectangleTextureSize, |
1137 kMax3DTextureSize, | 1174 kMax3DTextureSize, |
1138 kUseDefaultTextures); | 1175 kUseDefaultTextures); |
1139 manager.CreateTexture(kClient1Id, kService1Id); | 1176 manager.CreateTexture(kClient1Id, kService1Id); |
1140 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1177 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1141 ASSERT_TRUE(texture_ref != NULL); | 1178 ASSERT_TRUE(texture_ref != NULL); |
1142 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1179 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1143 Texture* texture = texture_ref->texture(); | 1180 Texture* texture = texture_ref->texture(); |
1144 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1181 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1145 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1182 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1146 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); | 1183 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
1147 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1184 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1148 manager.Destroy(false); | 1185 manager.Destroy(false); |
1149 } | 1186 } |
1150 | 1187 |
1151 TEST_F(TextureTest, HalfFloatNotLinear) { | 1188 TEST_F(TextureTest, HalfFloatNotLinear) { |
1152 TestHelper::SetupFeatureInfoInitExpectations( | 1189 TestHelper::SetupFeatureInfoInitExpectations( |
1153 gl_.get(), "GL_OES_texture_half_float"); | 1190 gl_.get(), "GL_OES_texture_half_float"); |
1154 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1191 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1155 feature_info->InitializeForTesting(); | 1192 feature_info->InitializeForTesting(); |
1156 TextureManager manager(NULL, | 1193 TextureManager manager(NULL, |
1157 feature_info.get(), | 1194 feature_info.get(), |
1158 kMaxTextureSize, | 1195 kMaxTextureSize, |
1159 kMaxCubeMapTextureSize, | 1196 kMaxCubeMapTextureSize, |
1160 kMaxRectangleTextureSize, | 1197 kMaxRectangleTextureSize, |
1161 kMax3DTextureSize, | 1198 kMax3DTextureSize, |
1162 kUseDefaultTextures); | 1199 kUseDefaultTextures); |
1163 manager.CreateTexture(kClient1Id, kService1Id); | 1200 manager.CreateTexture(kClient1Id, kService1Id); |
1164 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1201 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1165 ASSERT_TRUE(texture_ref != NULL); | 1202 ASSERT_TRUE(texture_ref != NULL); |
1166 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1203 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1167 Texture* texture = texture_ref->texture(); | 1204 Texture* texture = texture_ref->texture(); |
1168 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1205 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1169 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1206 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1170 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); | 1207 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
1171 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1208 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1172 TestHelper::SetTexParameteriWithExpectations( | 1209 TestHelper::SetTexParameteriWithExpectations( |
1173 gl_.get(), error_state_.get(), &manager, | 1210 gl_.get(), error_state_.get(), &manager, |
1174 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1211 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1175 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1212 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1176 TestHelper::SetTexParameteriWithExpectations( | 1213 TestHelper::SetTexParameteriWithExpectations( |
1177 gl_.get(), error_state_.get(), &manager, texture_ref, | 1214 gl_.get(), error_state_.get(), &manager, texture_ref, |
1178 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1215 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1179 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1216 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1180 manager.Destroy(false); | 1217 manager.Destroy(false); |
1181 } | 1218 } |
1182 | 1219 |
1183 TEST_F(TextureTest, HalfFloatLinear) { | 1220 TEST_F(TextureTest, HalfFloatLinear) { |
1184 TestHelper::SetupFeatureInfoInitExpectations( | 1221 TestHelper::SetupFeatureInfoInitExpectations( |
1185 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); | 1222 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); |
1186 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1223 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1187 feature_info->InitializeForTesting(); | 1224 feature_info->InitializeForTesting(); |
1188 TextureManager manager(NULL, | 1225 TextureManager manager(NULL, |
1189 feature_info.get(), | 1226 feature_info.get(), |
1190 kMaxTextureSize, | 1227 kMaxTextureSize, |
1191 kMaxCubeMapTextureSize, | 1228 kMaxCubeMapTextureSize, |
1192 kMaxRectangleTextureSize, | 1229 kMaxRectangleTextureSize, |
1193 kMax3DTextureSize, | 1230 kMax3DTextureSize, |
1194 kUseDefaultTextures); | 1231 kUseDefaultTextures); |
1195 manager.CreateTexture(kClient1Id, kService1Id); | 1232 manager.CreateTexture(kClient1Id, kService1Id); |
1196 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1233 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1197 ASSERT_TRUE(texture_ref != NULL); | 1234 ASSERT_TRUE(texture_ref != NULL); |
1198 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1235 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1199 Texture* texture = texture_ref->texture(); | 1236 Texture* texture = texture_ref->texture(); |
1200 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1237 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1201 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1238 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1202 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); | 1239 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
1203 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1240 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1204 manager.Destroy(false); | 1241 manager.Destroy(false); |
1205 } | 1242 } |
1206 | 1243 |
1207 TEST_F(TextureTest, EGLImageExternal) { | 1244 TEST_F(TextureTest, EGLImageExternal) { |
1208 TestHelper::SetupFeatureInfoInitExpectations( | 1245 TestHelper::SetupFeatureInfoInitExpectations( |
1209 gl_.get(), "GL_OES_EGL_image_external"); | 1246 gl_.get(), "GL_OES_EGL_image_external"); |
1210 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1247 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1211 feature_info->InitializeForTesting(); | 1248 feature_info->InitializeForTesting(); |
1212 TextureManager manager(NULL, | 1249 TextureManager manager(NULL, |
1213 feature_info.get(), | 1250 feature_info.get(), |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1418 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1455 EXPECT_EQ(0, texture->num_uncleared_mips()); |
1419 } | 1456 } |
1420 | 1457 |
1421 TEST_F(TextureTest, UseDeletedTexture) { | 1458 TEST_F(TextureTest, UseDeletedTexture) { |
1422 static const GLuint kClient2Id = 2; | 1459 static const GLuint kClient2Id = 2; |
1423 static const GLuint kService2Id = 12; | 1460 static const GLuint kService2Id = 12; |
1424 // Make the default texture renderable | 1461 // Make the default texture renderable |
1425 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1462 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1426 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, | 1463 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, |
1427 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); | 1464 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 1465 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
1428 // Make a new texture | 1466 // Make a new texture |
1429 manager_->CreateTexture(kClient2Id, kService2Id); | 1467 manager_->CreateTexture(kClient2Id, kService2Id); |
1430 scoped_refptr<TextureRef> texture_ref( | 1468 scoped_refptr<TextureRef> texture_ref( |
1431 manager_->GetTexture(kClient2Id)); | 1469 manager_->GetTexture(kClient2Id)); |
1432 manager_->SetTarget(texture_ref.get(), GL_TEXTURE_2D); | 1470 manager_->SetTarget(texture_ref.get(), GL_TEXTURE_2D); |
1433 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); | 1471 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
| 1472 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
1434 // Remove it. | 1473 // Remove it. |
1435 manager_->RemoveTexture(kClient2Id); | 1474 manager_->RemoveTexture(kClient2Id); |
1436 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); | 1475 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
| 1476 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
1437 // Check that we can still manipulate it and it effects the manager. | 1477 // Check that we can still manipulate it and it effects the manager. |
1438 manager_->SetLevelInfo(texture_ref.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, | 1478 manager_->SetLevelInfo(texture_ref.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, |
1439 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); | 1479 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
1440 EXPECT_TRUE(manager_->CanRender(texture_ref.get())); | 1480 EXPECT_TRUE(manager_->CanRender(texture_ref.get())); |
| 1481 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
1441 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1482 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
1442 .Times(1) | 1483 .Times(1) |
1443 .RetiresOnSaturation(); | 1484 .RetiresOnSaturation(); |
1444 texture_ref = NULL; | 1485 texture_ref = NULL; |
1445 } | 1486 } |
1446 | 1487 |
1447 TEST_F(TextureTest, GetLevelImage) { | 1488 TEST_F(TextureTest, GetLevelImage) { |
1448 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1489 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1449 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, | 1490 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
1450 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); | 1491 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1945 | 1986 |
1946 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 1987 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
1947 .Times(1) | 1988 .Times(1) |
1948 .RetiresOnSaturation(); | 1989 .RetiresOnSaturation(); |
1949 ref2 = NULL; | 1990 ref2 = NULL; |
1950 texture_manager2_->RemoveTexture(20); | 1991 texture_manager2_->RemoveTexture(20); |
1951 testing::Mock::VerifyAndClearExpectations(gl_.get()); | 1992 testing::Mock::VerifyAndClearExpectations(gl_.get()); |
1952 } | 1993 } |
1953 | 1994 |
1954 TEST_F(SharedTextureTest, TextureSafetyAccounting) { | 1995 TEST_F(SharedTextureTest, TextureSafetyAccounting) { |
| 1996 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); |
1955 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 1997 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1956 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 1998 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
| 1999 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); |
1957 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2000 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1958 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2001 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1959 | 2002 |
1960 // Newly created texture is renderable. | 2003 // Newly created texture is renderable. |
1961 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 2004 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
| 2005 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); |
1962 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 2006 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1963 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 2007 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
1964 | 2008 |
1965 // Associate new texture ref to other texture manager, should account for it | 2009 // Associate new texture ref to other texture manager, should account for it |
1966 // too. | 2010 // too. |
1967 scoped_refptr<TextureRef> ref2 = | 2011 scoped_refptr<TextureRef> ref2 = |
1968 texture_manager2_->Consume(20, ref1->texture()); | 2012 texture_manager2_->Consume(20, ref1->texture()); |
| 2013 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); |
1969 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2014 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1970 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2015 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1971 | 2016 |
1972 // Make texture renderable but uncleared on one texture manager, should affect | 2017 // Make texture renderable but uncleared on one texture manager, should affect |
1973 // other one. | 2018 // other one. |
1974 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); | 2019 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
| 2020 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures()); |
1975 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 2021 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1976 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 2022 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
| 2023 EXPECT_TRUE(texture_manager2_->HaveUnrenderableTextures()); |
1977 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2024 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1978 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2025 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1979 | 2026 |
1980 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, | 2027 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, |
1981 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); | 2028 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
| 2029 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); |
1982 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); | 2030 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); |
1983 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); | 2031 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); |
| 2032 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); |
1984 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); | 2033 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); |
1985 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); | 2034 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); |
1986 | 2035 |
1987 // Make texture cleared on one texture manager, should affect other one. | 2036 // Make texture cleared on one texture manager, should affect other one. |
1988 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, true); | 2037 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, true); |
1989 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 2038 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1990 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 2039 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
1991 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2040 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1992 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2041 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1993 | 2042 |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2384 ExpectValid(GL_DEPTH_COMPONENT, GL_FLOAT, GL_DEPTH_COMPONENT32F); | 2433 ExpectValid(GL_DEPTH_COMPONENT, GL_FLOAT, GL_DEPTH_COMPONENT32F); |
2385 ExpectValid(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); | 2434 ExpectValid(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); |
2386 ExpectValid(GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, | 2435 ExpectValid(GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, |
2387 GL_DEPTH32F_STENCIL8); | 2436 GL_DEPTH32F_STENCIL8); |
2388 | 2437 |
2389 ExpectInvalid(GL_RGB_INTEGER, GL_INT, GL_RGBA8); | 2438 ExpectInvalid(GL_RGB_INTEGER, GL_INT, GL_RGBA8); |
2390 } | 2439 } |
2391 | 2440 |
2392 } // namespace gles2 | 2441 } // namespace gles2 |
2393 } // namespace gpu | 2442 } // namespace gpu |
OLD | NEW |