Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(326)

Side by Side Diff: gpu/command_buffer/service/texture_manager_unittest.cc

Issue 1154053002: gpu: Use a rectangle to keep track of the cleared area of each texture level. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: restore scissor state in GLES2DecoderImpl::ClearLevel and update GLES2DecoderManualInitTest.DrawCle… Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698