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