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