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

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: Add SetLevelImageState 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, SetLevelImageState) {
1738 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D);
1739 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1,
1740 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2));
1741 Texture* texture = texture_ref_->texture();
1742 // Set image, initially BOUND.
1743 scoped_refptr<gl::GLImage> image(new gl::GLImageStub);
1744 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 0, image.get(),
1745 Texture::BOUND);
1746 Texture::ImageState state;
1747 texture->GetLevelImage(GL_TEXTURE_2D, 0, &state);
1748 EXPECT_EQ(state, Texture::BOUND);
1749 // Change the state.
1750 texture->SetLevelImageState(GL_TEXTURE_2D, 0, Texture::COPIED);
1751 texture->GetLevelImage(GL_TEXTURE_2D, 0, &state);
1752 EXPECT_EQ(state, Texture::COPIED);
1753 }
1754
1755 TEST_F(TextureTest, SetStreamTextureImageServiceID) {
1756 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES);
1757 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0,
1758 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
1759 gfx::Rect(2, 2));
1760 Texture* texture = texture_ref_->texture();
1761
1762 GLuint owned_service_id = TextureTestHelper::owned_service_id(texture);
1763 GLuint service_id = texture->service_id();
1764 // Initially, the texture should use the same service id that it owns.
1765 EXPECT_EQ(owned_service_id, service_id);
1766
1767 // Override the service_id.
1768 GLuint stream_texture_service_id = service_id + 1;
1769 scoped_refptr<GLStreamTextureImage> image(new GLStreamTextureImageStub);
1770 manager_->SetLevelStreamTextureImage(
1771 texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, image.get(),
1772 Texture::BOUND, stream_texture_service_id);
1773
1774 // Make sure that service_id() changed but owned_service_id() didn't.
1775 EXPECT_EQ(stream_texture_service_id, texture->service_id());
1776 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture));
1777
1778 // Undo the override.
1779 manager_->SetLevelStreamTextureImage(texture_ref_.get(),
1780 GL_TEXTURE_EXTERNAL_OES, 0, image.get(),
1781 Texture::BOUND, 0);
1782
1783 // The service IDs should be back as they were.
1784 EXPECT_EQ(service_id, texture->service_id());
1785 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture));
1786
1787 // Override again, so that we can check delete behavior.
1788 manager_->SetLevelStreamTextureImage(
1789 texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, image.get(),
1790 Texture::BOUND, stream_texture_service_id);
1791
1792 // Remove the Texture. It should delete the texture id that it owns, even
1793 // though it is overridden.
1794 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(owned_service_id)))
1795 .Times(1)
1796 .RetiresOnSaturation();
1797 manager_->RemoveTexture(kClient1Id);
1798 texture_ref_ = nullptr;
1799 }
1800
1777 namespace { 1801 namespace {
1778 1802
1779 bool InSet(std::set<std::string>* string_set, const std::string& str) { 1803 bool InSet(std::set<std::string>* string_set, const std::string& str) {
1780 std::pair<std::set<std::string>::iterator, bool> result = 1804 std::pair<std::set<std::string>::iterator, bool> result =
1781 string_set->insert(str); 1805 string_set->insert(str);
1782 return !result.second; 1806 return !result.second;
1783 } 1807 }
1784 1808
1785 } // anonymous namespace 1809 } // anonymous namespace
1786 1810
(...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after
2719 ExpectValid( 2743 ExpectValid(
2720 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); 2744 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, 2745 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV,
2722 GL_DEPTH32F_STENCIL8); 2746 GL_DEPTH32F_STENCIL8);
2723 2747
2724 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); 2748 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8);
2725 } 2749 }
2726 2750
2727 } // namespace gles2 2751 } // namespace gles2
2728 } // namespace gpu 2752 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/texture_manager.cc ('k') | gpu/ipc/service/stream_texture_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698