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

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

Powered by Google App Engine
This is Rietveld 408576698