| 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 |