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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 const GLint TextureManagerTest::kMaxExternalTextureSize; | 130 const GLint TextureManagerTest::kMaxExternalTextureSize; |
131 const GLint TextureManagerTest::kMax2dLevels; | 131 const GLint TextureManagerTest::kMax2dLevels; |
132 const GLint TextureManagerTest::kMaxCubeMapLevels; | 132 const GLint TextureManagerTest::kMaxCubeMapLevels; |
133 const GLint TextureManagerTest::kMaxExternalLevels; | 133 const GLint TextureManagerTest::kMaxExternalLevels; |
134 #endif | 134 #endif |
135 | 135 |
136 TEST_F(TextureManagerTest, Basic) { | 136 TEST_F(TextureManagerTest, Basic) { |
137 const GLuint kClient1Id = 1; | 137 const GLuint kClient1Id = 1; |
138 const GLuint kService1Id = 11; | 138 const GLuint kService1Id = 11; |
139 const GLuint kClient2Id = 2; | 139 const GLuint kClient2Id = 2; |
140 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
141 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 140 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
142 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 141 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
143 // Check we can create texture. | 142 // Check we can create texture. |
144 manager_->CreateTexture(kClient1Id, kService1Id); | 143 manager_->CreateTexture(kClient1Id, kService1Id); |
145 // Check texture got created. | 144 // Check texture got created. |
146 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id); | 145 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id); |
147 ASSERT_TRUE(texture.get() != NULL); | 146 ASSERT_TRUE(texture.get() != NULL); |
148 EXPECT_EQ(kService1Id, texture->service_id()); | 147 EXPECT_EQ(kService1Id, texture->service_id()); |
149 EXPECT_EQ(kClient1Id, texture->client_id()); | 148 EXPECT_EQ(kClient1Id, texture->client_id()); |
150 EXPECT_EQ(texture->texture(), manager_->GetTextureForServiceId( | 149 EXPECT_EQ(texture->texture(), manager_->GetTextureForServiceId( |
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 567 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
569 EXPECT_EQ(0, texture->num_uncleared_mips()); | 568 EXPECT_EQ(0, texture->num_uncleared_mips()); |
570 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 569 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
571 EXPECT_TRUE(texture->SafeToRenderFrom()); | 570 EXPECT_TRUE(texture->SafeToRenderFrom()); |
572 EXPECT_FALSE(texture->IsImmutable()); | 571 EXPECT_FALSE(texture->IsImmutable()); |
573 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), | 572 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), |
574 texture->min_filter()); | 573 texture->min_filter()); |
575 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter()); | 574 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter()); |
576 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s()); | 575 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s()); |
577 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t()); | 576 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t()); |
578 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
579 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 577 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
580 EXPECT_EQ(0u, texture->estimated_size()); | 578 EXPECT_EQ(0u, texture->estimated_size()); |
581 } | 579 } |
582 | 580 |
583 TEST_F(TextureTest, SetTargetTexture2D) { | 581 TEST_F(TextureTest, SetTargetTexture2D) { |
584 Texture* texture = texture_ref_->texture(); | 582 Texture* texture = texture_ref_->texture(); |
585 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 583 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
586 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 584 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
587 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 585 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
588 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 586 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 641 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
644 Texture* texture = texture_ref_->texture(); | 642 Texture* texture = texture_ref_->texture(); |
645 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 643 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
646 // Check Setting level 0 to POT | 644 // Check Setting level 0 to POT |
647 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, | 645 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
648 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 646 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
649 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 647 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
650 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 648 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
651 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 649 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
652 EXPECT_TRUE(texture->SafeToRenderFrom()); | 650 EXPECT_TRUE(texture->SafeToRenderFrom()); |
653 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
654 // Set filters to something that will work with a single mip. | 651 // Set filters to something that will work with a single mip. |
655 SetParameter( | 652 SetParameter( |
656 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 653 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
657 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 654 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
658 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
659 // Set them back. | 655 // Set them back. |
660 SetParameter(texture_ref_.get(), | 656 SetParameter(texture_ref_.get(), |
661 GL_TEXTURE_MIN_FILTER, | 657 GL_TEXTURE_MIN_FILTER, |
662 GL_LINEAR_MIPMAP_LINEAR, | 658 GL_LINEAR_MIPMAP_LINEAR, |
663 GL_NO_ERROR); | 659 GL_NO_ERROR); |
664 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
665 | 660 |
666 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 661 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
667 // Make mips. | 662 // Make mips. |
668 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 663 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
669 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 664 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
670 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 665 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
671 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
672 // Change a mip. | 666 // Change a mip. |
673 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, | 667 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, |
674 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 668 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
675 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 669 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
676 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 670 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
677 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 671 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
678 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 672 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
679 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
680 // Set a level past the number of mips that would get generated. | 673 // Set a level past the number of mips that would get generated. |
681 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, | 674 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, |
682 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 675 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
683 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 676 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
684 // Make mips. | 677 // Make mips. |
685 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 678 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
686 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 679 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
687 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 680 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
688 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
689 } | 681 } |
690 | 682 |
691 TEST_F(TextureTest, BaseLevel) { | 683 TEST_F(TextureTest, BaseLevel) { |
692 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 684 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
693 Texture* texture = texture_ref_->texture(); | 685 Texture* texture = texture_ref_->texture(); |
694 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 686 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
695 // Check Setting level 1 to POT | 687 // Check Setting level 1 to POT |
696 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, | 688 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, |
697 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 689 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
698 SetParameter( | 690 SetParameter( |
699 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 691 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
700 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 692 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
701 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
702 SetParameter( | 693 SetParameter( |
703 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 1, GL_NO_ERROR); | 694 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 1, GL_NO_ERROR); |
704 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 695 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
705 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
706 } | 696 } |
707 | 697 |
708 TEST_F(TextureTest, BaseLevelMaxLevel) { | 698 TEST_F(TextureTest, BaseLevelMaxLevel) { |
709 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 699 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
710 Texture* texture = texture_ref_->texture(); | 700 Texture* texture = texture_ref_->texture(); |
711 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 701 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
712 // Set up level 2, 3, 4. | 702 // Set up level 2, 3, 4. |
713 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2, GL_RGBA, 8, 8, 1, | 703 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2, GL_RGBA, 8, 8, 1, |
714 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 8)); | 704 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(8, 8)); |
715 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, | 705 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, |
716 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 706 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
717 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 4, GL_RGBA, 2, 2, 1, | 707 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 4, GL_RGBA, 2, 2, 1, |
718 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); | 708 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
719 SetParameter( | 709 SetParameter( |
720 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR, | 710 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR, |
721 GL_NO_ERROR); | 711 GL_NO_ERROR); |
722 SetParameter( | 712 SetParameter( |
723 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); | 713 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); |
724 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 714 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
725 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
726 SetParameter( | 715 SetParameter( |
727 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 2, GL_NO_ERROR); | 716 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 2, GL_NO_ERROR); |
728 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 717 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
729 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
730 SetParameter( | 718 SetParameter( |
731 texture_ref_.get(), GL_TEXTURE_MAX_LEVEL, 4, GL_NO_ERROR); | 719 texture_ref_.get(), GL_TEXTURE_MAX_LEVEL, 4, GL_NO_ERROR); |
732 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 720 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
733 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
734 SetParameter( | 721 SetParameter( |
735 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 0, GL_NO_ERROR); | 722 texture_ref_.get(), GL_TEXTURE_BASE_LEVEL, 0, GL_NO_ERROR); |
736 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 723 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
737 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
738 } | 724 } |
739 | 725 |
740 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { | 726 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { |
741 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 727 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
742 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64); | 728 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64); |
743 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, | 729 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
744 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 730 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
745 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0); | 731 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0); |
746 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84); | 732 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84); |
747 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 733 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
748 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0); | 734 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0); |
749 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0); | 735 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0); |
750 } | 736 } |
751 | 737 |
752 TEST_F(TextureTest, UnusedMips) { | 738 TEST_F(TextureTest, UnusedMips) { |
753 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 739 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
754 Texture* texture = texture_ref_->texture(); | 740 Texture* texture = texture_ref_->texture(); |
755 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 741 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
756 // Set level zero to large size. | 742 // Set level zero to large size. |
757 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, | 743 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
758 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 744 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
759 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 745 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
760 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 746 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
761 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 747 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
762 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 748 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
763 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
764 // Set level zero to large smaller (levels unused mips) | 749 // Set level zero to large smaller (levels unused mips) |
765 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, | 750 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, |
766 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); | 751 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
767 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 752 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
768 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 753 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
769 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 754 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
770 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 755 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
771 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
772 // Set an unused level to some size | 756 // Set an unused level to some size |
773 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, | 757 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, |
774 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(16, 16)); | 758 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(16, 16)); |
775 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 759 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
776 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 760 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
777 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 761 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
778 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
779 } | 762 } |
780 | 763 |
781 TEST_F(TextureTest, NPOT2D) { | 764 TEST_F(TextureTest, NPOT2D) { |
782 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 765 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
783 Texture* texture = texture_ref_->texture(); | 766 Texture* texture = texture_ref_->texture(); |
784 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 767 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
785 // Check Setting level 0 to NPOT | 768 // Check Setting level 0 to NPOT |
786 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, | 769 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, |
787 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); | 770 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
788 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 771 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
789 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 772 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
790 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 773 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
791 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 774 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
792 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
793 SetParameter( | 775 SetParameter( |
794 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 776 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
795 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 777 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
796 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
797 SetParameter( | 778 SetParameter( |
798 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 779 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
799 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 780 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
800 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
801 SetParameter( | 781 SetParameter( |
802 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 782 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
803 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 783 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
804 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
805 // Change it to POT. | 784 // Change it to POT. |
806 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, | 785 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, |
807 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); | 786 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4)); |
808 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 787 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
809 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 788 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
810 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 789 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
811 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
812 } | 790 } |
813 | 791 |
814 TEST_F(TextureTest, NPOT2DNPOTOK) { | 792 TEST_F(TextureTest, NPOT2DNPOTOK) { |
815 TestHelper::SetupFeatureInfoInitExpectations( | 793 TestHelper::SetupFeatureInfoInitExpectations( |
816 gl_.get(), "GL_OES_texture_npot"); | 794 gl_.get(), "GL_OES_texture_npot"); |
817 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 795 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
818 feature_info->InitializeForTesting(); | 796 feature_info->InitializeForTesting(); |
819 TextureManager manager(NULL, | 797 TextureManager manager(NULL, |
820 feature_info.get(), | 798 feature_info.get(), |
821 kMaxTextureSize, | 799 kMaxTextureSize, |
822 kMaxCubeMapTextureSize, | 800 kMaxCubeMapTextureSize, |
823 kMaxRectangleTextureSize, | 801 kMaxRectangleTextureSize, |
824 kMax3DTextureSize, | 802 kMax3DTextureSize, |
825 kUseDefaultTextures); | 803 kUseDefaultTextures); |
826 manager.CreateTexture(kClient1Id, kService1Id); | 804 manager.CreateTexture(kClient1Id, kService1Id); |
827 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 805 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
828 ASSERT_TRUE(texture_ref != NULL); | 806 ASSERT_TRUE(texture_ref != NULL); |
829 Texture* texture = texture_ref->texture(); | 807 Texture* texture = texture_ref->texture(); |
830 | 808 |
831 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 809 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
832 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 810 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
833 // Check Setting level 0 to NPOT | 811 // Check Setting level 0 to NPOT |
834 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, | 812 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, |
835 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); | 813 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
836 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 814 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
837 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 815 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
838 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); | 816 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); |
839 EXPECT_FALSE(manager.CanRender(texture_ref)); | 817 EXPECT_FALSE(manager.CanRender(texture_ref)); |
840 EXPECT_TRUE(manager.HaveUnrenderableTextures()); | |
841 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref)); | 818 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref)); |
842 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 819 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
843 EXPECT_TRUE(manager.CanRender(texture_ref)); | 820 EXPECT_TRUE(manager.CanRender(texture_ref)); |
844 EXPECT_FALSE(manager.HaveUnrenderableTextures()); | |
845 manager.Destroy(false); | 821 manager.Destroy(false); |
846 } | 822 } |
847 | 823 |
848 TEST_F(TextureTest, POTCubeMap) { | 824 TEST_F(TextureTest, POTCubeMap) { |
849 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); | 825 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); |
850 Texture* texture = texture_ref_->texture(); | 826 Texture* texture = texture_ref_->texture(); |
851 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 827 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
852 // Check Setting level 0 each face to POT | 828 // Check Setting level 0 each face to POT |
853 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, | 829 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, |
854 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 830 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
855 gfx::Rect(4, 4)); | 831 gfx::Rect(4, 4)); |
856 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 832 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
857 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 833 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
858 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 834 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
859 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 835 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
860 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 836 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
861 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
862 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, | 837 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, |
863 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 838 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
864 gfx::Rect(4, 4)); | 839 gfx::Rect(4, 4)); |
865 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 840 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
866 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 841 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
867 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 842 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
868 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 843 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
869 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 844 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
870 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
871 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, | 845 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, |
872 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 846 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
873 gfx::Rect(4, 4)); | 847 gfx::Rect(4, 4)); |
874 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 848 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
875 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 849 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
876 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 850 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
877 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 851 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
878 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 852 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
879 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
880 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, | 853 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, |
881 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 854 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
882 gfx::Rect(4, 4)); | 855 gfx::Rect(4, 4)); |
883 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 856 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
884 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 857 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
885 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 858 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
886 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 859 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
887 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 860 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
888 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
889 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, | 861 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, |
890 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 862 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
891 gfx::Rect(4, 4)); | 863 gfx::Rect(4, 4)); |
892 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 864 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
893 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 865 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
894 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 866 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
895 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 867 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
896 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 868 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
897 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
898 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, | 869 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, |
899 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 870 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
900 gfx::Rect(4, 4)); | 871 gfx::Rect(4, 4)); |
901 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 872 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
902 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 873 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
903 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 874 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
904 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 875 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
905 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 876 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
906 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
907 | 877 |
908 // Make mips. | 878 // Make mips. |
909 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); | 879 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
910 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 880 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
911 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 881 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
912 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 882 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
913 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
914 | 883 |
915 // Change a mip. | 884 // Change a mip. |
916 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 1, | 885 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 1, |
917 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 886 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
918 gfx::Rect(4, 4)); | 887 gfx::Rect(4, 4)); |
919 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 888 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
920 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 889 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
921 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 890 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
922 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 891 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
923 // Set a level past the number of mips that would get generated. | 892 // Set a level past the number of mips that would get generated. |
(...skipping 22 matching lines...) Expand all Loading... |
946 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 915 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
947 // Check Setting level 0 each face to POT | 916 // Check Setting level 0 each face to POT |
948 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, | 917 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, |
949 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 918 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
950 gfx::Rect(4, 4)); | 919 gfx::Rect(4, 4)); |
951 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 920 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
952 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 921 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
953 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 922 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
954 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 923 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
955 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 924 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
956 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
957 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, | 925 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, |
958 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 926 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
959 gfx::Rect(4, 4)); | 927 gfx::Rect(4, 4)); |
960 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 928 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
961 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 929 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
962 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 930 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
963 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 931 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
964 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 932 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
965 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
966 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, | 933 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, |
967 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 934 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
968 gfx::Rect(4, 4)); | 935 gfx::Rect(4, 4)); |
969 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 936 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
970 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 937 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
971 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 938 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
972 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 939 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
973 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 940 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
974 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
975 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, | 941 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, |
976 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 942 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
977 gfx::Rect(4, 4)); | 943 gfx::Rect(4, 4)); |
978 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 944 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
979 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 945 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
980 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 946 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
981 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 947 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
982 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 948 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
983 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
984 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, | 949 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, |
985 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 950 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
986 gfx::Rect(4, 4)); | 951 gfx::Rect(4, 4)); |
987 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 952 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
988 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 953 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
989 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 954 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
990 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 955 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
991 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); | 956 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
992 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
993 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, | 957 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, |
994 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 958 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
995 gfx::Rect(4, 4)); | 959 gfx::Rect(4, 4)); |
996 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 960 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
997 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 961 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
998 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 962 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
999 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 963 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
1000 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); | 964 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
1001 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
1002 } | 965 } |
1003 | 966 |
1004 TEST_F(TextureTest, GetLevelSize) { | 967 TEST_F(TextureTest, GetLevelSize) { |
1005 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_3D); | 968 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_3D); |
1006 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_3D, 1, GL_RGBA, 4, 5, 6, | 969 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_3D, 1, GL_RGBA, 4, 5, 6, |
1007 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); | 970 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
1008 GLsizei width = -1; | 971 GLsizei width = -1; |
1009 GLsizei height = -1; | 972 GLsizei height = -1; |
1010 GLsizei depth = -1; | 973 GLsizei depth = -1; |
1011 Texture* texture = texture_ref_->texture(); | 974 Texture* texture = texture_ref_->texture(); |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1406 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1369 EXPECT_EQ(0, texture->num_uncleared_mips()); |
1407 } | 1370 } |
1408 | 1371 |
1409 TEST_F(TextureTest, UseDeletedTexture) { | 1372 TEST_F(TextureTest, UseDeletedTexture) { |
1410 static const GLuint kClient2Id = 2; | 1373 static const GLuint kClient2Id = 2; |
1411 static const GLuint kService2Id = 12; | 1374 static const GLuint kService2Id = 12; |
1412 // Make the default texture renderable | 1375 // Make the default texture renderable |
1413 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1376 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1414 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, | 1377 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, |
1415 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); | 1378 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
1416 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
1417 // Make a new texture | 1379 // Make a new texture |
1418 manager_->CreateTexture(kClient2Id, kService2Id); | 1380 manager_->CreateTexture(kClient2Id, kService2Id); |
1419 scoped_refptr<TextureRef> texture_ref( | 1381 scoped_refptr<TextureRef> texture_ref( |
1420 manager_->GetTexture(kClient2Id)); | 1382 manager_->GetTexture(kClient2Id)); |
1421 manager_->SetTarget(texture_ref.get(), GL_TEXTURE_2D); | 1383 manager_->SetTarget(texture_ref.get(), GL_TEXTURE_2D); |
1422 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); | 1384 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
1423 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
1424 // Remove it. | 1385 // Remove it. |
1425 manager_->RemoveTexture(kClient2Id); | 1386 manager_->RemoveTexture(kClient2Id); |
1426 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); | 1387 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
1427 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | |
1428 // Check that we can still manipulate it and it effects the manager. | 1388 // Check that we can still manipulate it and it effects the manager. |
1429 manager_->SetLevelInfo(texture_ref.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, | 1389 manager_->SetLevelInfo(texture_ref.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, |
1430 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); | 1390 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
1431 EXPECT_TRUE(manager_->CanRender(texture_ref.get())); | 1391 EXPECT_TRUE(manager_->CanRender(texture_ref.get())); |
1432 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | |
1433 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1392 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
1434 .Times(1) | 1393 .Times(1) |
1435 .RetiresOnSaturation(); | 1394 .RetiresOnSaturation(); |
1436 texture_ref = NULL; | 1395 texture_ref = NULL; |
1437 } | 1396 } |
1438 | 1397 |
1439 TEST_F(TextureTest, GetLevelImage) { | 1398 TEST_F(TextureTest, GetLevelImage) { |
1440 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); | 1399 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
1441 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, | 1400 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, |
1442 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); | 1401 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1935 | 1894 |
1936 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 1895 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
1937 .Times(1) | 1896 .Times(1) |
1938 .RetiresOnSaturation(); | 1897 .RetiresOnSaturation(); |
1939 ref2 = NULL; | 1898 ref2 = NULL; |
1940 texture_manager2_->RemoveTexture(20); | 1899 texture_manager2_->RemoveTexture(20); |
1941 testing::Mock::VerifyAndClearExpectations(gl_.get()); | 1900 testing::Mock::VerifyAndClearExpectations(gl_.get()); |
1942 } | 1901 } |
1943 | 1902 |
1944 TEST_F(SharedTextureTest, TextureSafetyAccounting) { | 1903 TEST_F(SharedTextureTest, TextureSafetyAccounting) { |
1945 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); | |
1946 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 1904 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1947 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 1905 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
1948 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); | |
1949 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 1906 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1950 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 1907 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1951 | 1908 |
1952 // Newly created texture is renderable. | 1909 // Newly created texture is renderable. |
1953 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 1910 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
1954 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); | |
1955 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 1911 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1956 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 1912 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
1957 | 1913 |
1958 // Associate new texture ref to other texture manager, should account for it | 1914 // Associate new texture ref to other texture manager, should account for it |
1959 // too. | 1915 // too. |
1960 scoped_refptr<TextureRef> ref2 = | 1916 scoped_refptr<TextureRef> ref2 = |
1961 texture_manager2_->Consume(20, ref1->texture()); | 1917 texture_manager2_->Consume(20, ref1->texture()); |
1962 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); | |
1963 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 1918 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1964 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 1919 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1965 | 1920 |
1966 // Make texture renderable but uncleared on one texture manager, should affect | 1921 // Make texture renderable but uncleared on one texture manager, should affect |
1967 // other one. | 1922 // other one. |
1968 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); | 1923 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
1969 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures()); | |
1970 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 1924 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1971 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 1925 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
1972 EXPECT_TRUE(texture_manager2_->HaveUnrenderableTextures()); | |
1973 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 1926 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1974 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 1927 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1975 | 1928 |
1976 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, | 1929 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, |
1977 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); | 1930 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); |
1978 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); | |
1979 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); | 1931 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); |
1980 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); | 1932 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); |
1981 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); | |
1982 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); | 1933 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); |
1983 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); | 1934 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); |
1984 | 1935 |
1985 // Make texture cleared on one texture manager, should affect other one. | 1936 // Make texture cleared on one texture manager, should affect other one. |
1986 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, true); | 1937 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, true); |
1987 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 1938 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
1988 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 1939 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
1989 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 1940 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
1990 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 1941 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
1991 | 1942 |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2382 ExpectValid(GL_DEPTH_COMPONENT, GL_FLOAT, GL_DEPTH_COMPONENT32F); | 2333 ExpectValid(GL_DEPTH_COMPONENT, GL_FLOAT, GL_DEPTH_COMPONENT32F); |
2383 ExpectValid(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); | 2334 ExpectValid(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); |
2384 ExpectValid(GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, | 2335 ExpectValid(GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, |
2385 GL_DEPTH32F_STENCIL8); | 2336 GL_DEPTH32F_STENCIL8); |
2386 | 2337 |
2387 ExpectInvalid(GL_RGB_INTEGER, GL_INT, GL_RGBA8); | 2338 ExpectInvalid(GL_RGB_INTEGER, GL_INT, GL_RGBA8); |
2388 } | 2339 } |
2389 | 2340 |
2390 } // namespace gles2 | 2341 } // namespace gles2 |
2391 } // namespace gpu | 2342 } // namespace gpu |
OLD | NEW |