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

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

Issue 2014313002: StreamTextureImages can now override a Texture's service id (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added another test Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/texture_manager.h" 5 #include "gpu/command_buffer/service/texture_manager.h"
6 6
7 #include <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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698