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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); | 528 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); |
529 // Check NPOT height on level 0 | 529 // Check NPOT height on level 0 |
530 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); | 530 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); |
531 // Check NPOT width on level 1 | 531 // Check NPOT width on level 1 |
532 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); | 532 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); |
533 // Check NPOT height on level 1 | 533 // Check NPOT height on level 1 |
534 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); | 534 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); |
535 manager.Destroy(false); | 535 manager.Destroy(false); |
536 } | 536 } |
537 | 537 |
538 TEST_F(TextureManagerTest, OverrideServiceID) { | |
539 // Create a texture. | |
540 const GLuint kClientId = 1; | |
541 const GLuint kServiceId = 11; | |
542 manager_->CreateTexture(kClientId, kServiceId); | |
543 scoped_refptr<TextureRef> texture_ref(manager_->GetTexture(kClientId)); | |
544 manager_->SetTarget(texture_ref.get(), GL_TEXTURE_EXTERNAL_OES); | |
545 | |
546 Texture* texture = texture_ref->texture(); | |
547 GLuint owned_service_id = TextureTestHelper::owned_service_id(texture); | |
548 GLuint service_id = texture->service_id(); | |
549 // Initially, the texture should use the same service id that it owns. | |
550 EXPECT_EQ(owned_service_id, service_id); | |
551 | |
552 // Override the service_id. | |
553 GLuint unowned_service_id = service_id + 1; | |
554 texture->SetUnownedServiceId(unowned_service_id); | |
555 | |
556 // Make sure that service_id() changed but owned_service_id() didn't. | |
557 EXPECT_EQ(unowned_service_id, texture->service_id()); | |
558 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture)); | |
559 | |
560 // Undo the override. | |
561 texture->SetUnownedServiceId(0); | |
562 | |
563 // The service IDs should be back as they were. | |
564 EXPECT_EQ(service_id, texture->service_id()); | |
565 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture)); | |
566 | |
567 // Override again, so that we can check delete behavior. | |
568 texture->SetUnownedServiceId(unowned_service_id); | |
569 EXPECT_EQ(unowned_service_id, texture->service_id()); | |
570 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture)); | |
571 | |
572 // Remove the texture. It should delete the texture id that it owns, even | |
573 // though it is overridden. | |
574 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(owned_service_id))) | |
575 .Times(1) | |
576 .RetiresOnSaturation(); | |
577 manager_->RemoveTexture(kClientId); | |
578 } | |
579 | |
580 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) { | 538 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) { |
581 const GLuint kClientId = 1; | 539 const GLuint kClientId = 1; |
582 const GLuint kServiceId = 11; | 540 const GLuint kServiceId = 11; |
583 | 541 |
584 SetupFeatureInfo("", "2.1", false); | 542 SetupFeatureInfo("", "2.1", false); |
585 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, "", | 543 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, "", |
586 kUseDefaultTextures); | 544 kUseDefaultTextures); |
587 TextureManager manager(NULL, | 545 TextureManager manager(NULL, |
588 feature_info_.get(), | 546 feature_info_.get(), |
589 kMaxTextureSize, | 547 kMaxTextureSize, |
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1744 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); | 1702 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); |
1745 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, | 1703 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, |
1746 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1704 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
1747 gfx::Rect(2, 2)); | 1705 gfx::Rect(2, 2)); |
1748 Texture* texture = texture_ref_->texture(); | 1706 Texture* texture = texture_ref_->texture(); |
1749 | 1707 |
1750 // Set image. | 1708 // Set image. |
1751 scoped_refptr<GLStreamTextureImage> image(new GLStreamTextureImageStub); | 1709 scoped_refptr<GLStreamTextureImage> image(new GLStreamTextureImageStub); |
1752 manager_->SetLevelStreamTextureImage(texture_ref_.get(), | 1710 manager_->SetLevelStreamTextureImage(texture_ref_.get(), |
1753 GL_TEXTURE_EXTERNAL_OES, 0, image.get(), | 1711 GL_TEXTURE_EXTERNAL_OES, 0, image.get(), |
1754 Texture::BOUND); | 1712 Texture::BOUND, 0); |
1755 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); | 1713 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); |
1756 EXPECT_FALSE( | 1714 EXPECT_FALSE( |
1757 texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); | 1715 texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); |
| 1716 |
1758 // Replace it as a normal image. | 1717 // Replace it as a normal image. |
| 1718 scoped_refptr<gl::GLImage> image2(new gl::GLImageStub); |
1759 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, | 1719 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, |
1760 image.get(), Texture::BOUND); | 1720 image2.get(), Texture::BOUND); |
1761 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); | 1721 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); |
1762 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0) == | 1722 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0) == |
1763 NULL); | 1723 NULL); |
1764 | 1724 |
1765 // Image should be reset when SetLevelInfo is called. | 1725 // Image should be reset when SetLevelInfo is called. |
1766 manager_->SetLevelStreamTextureImage(texture_ref_.get(), | 1726 manager_->SetLevelStreamTextureImage(texture_ref_.get(), |
1767 GL_TEXTURE_EXTERNAL_OES, 0, image.get(), | 1727 GL_TEXTURE_EXTERNAL_OES, 0, image.get(), |
1768 Texture::UNBOUND); | 1728 Texture::UNBOUND, 0); |
1769 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, | 1729 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, |
1770 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1730 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
1771 gfx::Rect(2, 2)); | 1731 gfx::Rect(2, 2)); |
1772 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); | 1732 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); |
1773 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0) == | 1733 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0) == |
1774 NULL); | 1734 NULL); |
1775 } | 1735 } |
1776 | 1736 |
| 1737 TEST_F(TextureTest, SetStreamTextureImageServiceID) { |
| 1738 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); |
| 1739 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, |
| 1740 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 1741 gfx::Rect(2, 2)); |
| 1742 Texture* texture = texture_ref_->texture(); |
| 1743 |
| 1744 GLuint owned_service_id = TextureTestHelper::owned_service_id(texture); |
| 1745 GLuint service_id = texture->service_id(); |
| 1746 // Initially, the texture should use the same service id that it owns. |
| 1747 EXPECT_EQ(owned_service_id, service_id); |
| 1748 |
| 1749 // Override the service_id. |
| 1750 GLuint stream_texture_service_id = service_id + 1; |
| 1751 scoped_refptr<GLStreamTextureImage> image(new GLStreamTextureImageStub); |
| 1752 manager_->SetLevelStreamTextureImage( |
| 1753 texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, image.get(), |
| 1754 Texture::BOUND, stream_texture_service_id); |
| 1755 |
| 1756 // Make sure that service_id() changed but owned_service_id() didn't. |
| 1757 EXPECT_EQ(stream_texture_service_id, texture->service_id()); |
| 1758 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture)); |
| 1759 |
| 1760 // Undo the override. |
| 1761 manager_->SetLevelStreamTextureImage(texture_ref_.get(), |
| 1762 GL_TEXTURE_EXTERNAL_OES, 0, image.get(), |
| 1763 Texture::BOUND, 0); |
| 1764 |
| 1765 // The service IDs should be back as they were. |
| 1766 EXPECT_EQ(service_id, texture->service_id()); |
| 1767 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture)); |
| 1768 |
| 1769 // Override again, so that we can check delete behavior. |
| 1770 manager_->SetLevelStreamTextureImage( |
| 1771 texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, image.get(), |
| 1772 Texture::BOUND, stream_texture_service_id); |
| 1773 |
| 1774 // Remove the Texture. It should delete the texture id that it owns, even |
| 1775 // though it is overridden. |
| 1776 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(owned_service_id))) |
| 1777 .Times(1) |
| 1778 .RetiresOnSaturation(); |
| 1779 manager_->RemoveTexture(kClient1Id); |
| 1780 texture_ref_ = nullptr; |
| 1781 } |
| 1782 |
| 1783 TEST_F(TextureTest, ClearStreamTextureImage) { |
| 1784 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); |
| 1785 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, |
| 1786 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 1787 gfx::Rect(2, 2)); |
| 1788 Texture* texture = texture_ref_->texture(); |
| 1789 |
| 1790 GLuint owned_service_id = TextureTestHelper::owned_service_id(texture); |
| 1791 |
| 1792 // Override the service_id. |
| 1793 GLuint stream_texture_service_id = owned_service_id + 1; |
| 1794 scoped_refptr<GLStreamTextureImage> image(new GLStreamTextureImageStub); |
| 1795 manager_->SetLevelStreamTextureImage( |
| 1796 texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, image.get(), |
| 1797 Texture::BOUND, stream_texture_service_id); |
| 1798 |
| 1799 // SetLevelImage doesn't clear the stream texture image or its service id if |
| 1800 // the existing image is being set. |
| 1801 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, |
| 1802 image.get(), Texture::BOUND); |
| 1803 EXPECT_EQ(stream_texture_service_id, texture->service_id()); |
| 1804 EXPECT_EQ(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0), image.get()); |
| 1805 EXPECT_EQ(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0), |
| 1806 image.get()); |
| 1807 |
| 1808 // SetLevelImage clears the stream texture image and its service id if |
| 1809 // a new image is set. |
| 1810 scoped_refptr<gl::GLImage> image2(new gl::GLImageStub); |
| 1811 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, |
| 1812 image2.get(), Texture::BOUND); |
| 1813 EXPECT_EQ(owned_service_id, texture->service_id()); |
| 1814 EXPECT_EQ(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0), |
| 1815 nullptr); |
| 1816 } |
| 1817 |
1777 namespace { | 1818 namespace { |
1778 | 1819 |
1779 bool InSet(std::set<std::string>* string_set, const std::string& str) { | 1820 bool InSet(std::set<std::string>* string_set, const std::string& str) { |
1780 std::pair<std::set<std::string>::iterator, bool> result = | 1821 std::pair<std::set<std::string>::iterator, bool> result = |
1781 string_set->insert(str); | 1822 string_set->insert(str); |
1782 return !result.second; | 1823 return !result.second; |
1783 } | 1824 } |
1784 | 1825 |
1785 } // anonymous namespace | 1826 } // anonymous namespace |
1786 | 1827 |
(...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2719 ExpectValid( | 2760 ExpectValid( |
2720 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); | 2761 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); |
2721 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, | 2762 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, |
2722 GL_DEPTH32F_STENCIL8); | 2763 GL_DEPTH32F_STENCIL8); |
2723 | 2764 |
2724 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); | 2765 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); |
2725 } | 2766 } |
2726 | 2767 |
2727 } // namespace gles2 | 2768 } // namespace gles2 |
2728 } // namespace gpu | 2769 } // namespace gpu |
OLD | NEW |