OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/texture_manager.h" | 5 #include "gpu/command_buffer/service/texture_manager.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |