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

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

Issue 2208733002: Command buffer: clear rect for a specific layer/level of the uncleared texture for CopyTexSubImage3D (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Do not assign a default value 0 to layer, UpdateMipCleared for all layers for 3D texture Created 4 years, 4 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 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, 171 void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd,
172 uint64_t process_tracing_id, 172 uint64_t process_tracing_id,
173 const std::string& dump_name) override {} 173 const std::string& dump_name) override {}
174 bool EmulatingRGB() const override { return false; } 174 bool EmulatingRGB() const override { return false; }
175 void GetTextureMatrix(float matrix[16]) override {} 175 void GetTextureMatrix(float matrix[16]) override {}
176 176
177 protected: 177 protected:
178 ~GLStreamTextureImageStub() override {} 178 ~GLStreamTextureImageStub() override {}
179 }; 179 };
180 180
181 // TODO(yunchao) add test cases for 3D texture and 2D_ARRAY texture
182
181 TEST_F(TextureManagerTest, Basic) { 183 TEST_F(TextureManagerTest, Basic) {
182 const GLuint kClient1Id = 1; 184 const GLuint kClient1Id = 1;
183 const GLuint kService1Id = 11; 185 const GLuint kService1Id = 11;
184 const GLuint kClient2Id = 2; 186 const GLuint kClient2Id = 2;
185 EXPECT_FALSE(manager_->HaveUnsafeTextures()); 187 EXPECT_FALSE(manager_->HaveUnsafeTextures());
186 EXPECT_FALSE(manager_->HaveUnclearedMips()); 188 EXPECT_FALSE(manager_->HaveUnclearedMips());
187 // Check we can create texture. 189 // Check we can create texture.
188 manager_->CreateTexture(kClient1Id, kService1Id); 190 manager_->CreateTexture(kClient1Id, kService1Id);
189 // Check texture got created. 191 // Check texture got created.
190 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id); 192 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id);
(...skipping 1082 matching lines...) Expand 10 before | Expand all | Expand 10 after
1273 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); 1275 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
1274 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); 1276 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format);
1275 manager_->RemoveTexture(kClient1Id); 1277 manager_->RemoveTexture(kClient1Id);
1276 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); 1278 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format));
1277 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); 1279 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
1278 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); 1280 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format);
1279 } 1281 }
1280 1282
1281 TEST_F(TextureTest, ValidForTexture) { 1283 TEST_F(TextureTest, ValidForTexture) {
1282 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); 1284 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D);
1283 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 6, 1285 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1,
1284 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); 1286 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5));
1285 // Check bad face. 1287 // Check bad face.
1286 Texture* texture = texture_ref_->texture(); 1288 Texture* texture = texture_ref_->texture();
1287 EXPECT_FALSE(texture->ValidForTexture( 1289 EXPECT_FALSE(texture->ValidForTexture(
1288 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 1, 0, 0, 0, 4, 5, 6)); 1290 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 1, 0, 0, 0, 4, 5, 1));
1289 // Check bad level. 1291 // Check bad level.
1290 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 0, 0, 0, 0, 4, 5, 6)); 1292 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 0, 0, 0, 0, 4, 5, 1));
1291 // Check bad xoffset. 1293 // Check bad xoffset.
1292 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, -1, 0, 0, 4, 5, 6)); 1294 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, -1, 0, 0, 4, 5, 1));
1293 // Check bad xoffset + width > width. 1295 // Check bad xoffset + width > width.
1294 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 1, 0, 0, 4, 5, 6)); 1296 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 1, 0, 0, 4, 5, 1));
1295 // Check bad yoffset. 1297 // Check bad yoffset.
1296 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, -1, 0, 4, 5, 6)); 1298 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, -1, 0, 4, 5, 1));
1297 // Check bad yoffset + height > height. 1299 // Check bad yoffset + height > height.
1298 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 1, 0, 4, 5, 6)); 1300 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 1, 0, 4, 5, 1));
1299 // Check bad zoffset. 1301 // Check bad zoffset.
1300 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, -1, 4, 5, 6)); 1302 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, -1, 4, 5, 1));
1301 // Check bad zoffset + depth > depth. 1303 // Check bad zoffset + depth > depth.
1302 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 1, 4, 5, 6)); 1304 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 1, 4, 5, 1));
1303 // Check bad width. 1305 // Check bad width.
1304 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 5, 5, 6)); 1306 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 5, 5, 1));
1305 // Check bad height. 1307 // Check bad height.
1306 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 6, 6)); 1308 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 6, 1));
1307 // Check bad depth. 1309 // Check bad depth.
1308 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 5, 7)); 1310 EXPECT_FALSE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 5, 2));
1309 // Check valid full size 1311 // Check valid full size
1310 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 5, 6)); 1312 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 5, 1));
1311 // Check valid particial size. 1313 // Check valid particial size.
1312 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 1, 1, 1, 2, 3, 4)); 1314 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 1, 1, 0, 2, 3, 1));
1313 manager_->RemoveTexture(kClient1Id); 1315 manager_->RemoveTexture(kClient1Id);
1314 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 5, 6)); 1316 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 5, 1));
1315 } 1317 }
1316 1318
1317 TEST_F(TextureTest, FloatNotLinear) { 1319 TEST_F(TextureTest, FloatNotLinear) {
1318 TestHelper::SetupFeatureInfoInitExpectations( 1320 TestHelper::SetupFeatureInfoInitExpectations(
1319 gl_.get(), "GL_OES_texture_float"); 1321 gl_.get(), "GL_OES_texture_float");
1320 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1322 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1321 feature_info->InitializeForTesting(); 1323 feature_info->InitializeForTesting();
1322 TextureManager manager(NULL, 1324 TextureManager manager(NULL,
1323 feature_info.get(), 1325 feature_info.get(),
1324 kMaxTextureSize, 1326 kMaxTextureSize,
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1484 EXPECT_FALSE(manager_->HaveUnclearedMips()); 1486 EXPECT_FALSE(manager_->HaveUnclearedMips());
1485 Texture* texture = texture_ref_->texture(); 1487 Texture* texture = texture_ref_->texture();
1486 EXPECT_EQ(0, texture->num_uncleared_mips()); 1488 EXPECT_EQ(0, texture->num_uncleared_mips());
1487 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); 1489 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D);
1488 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 1490 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1,
1489 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 1491 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1490 EXPECT_FALSE(texture->SafeToRenderFrom()); 1492 EXPECT_FALSE(texture->SafeToRenderFrom());
1491 EXPECT_TRUE(manager_->HaveUnsafeTextures()); 1493 EXPECT_TRUE(manager_->HaveUnsafeTextures());
1492 EXPECT_TRUE(manager_->HaveUnclearedMips()); 1494 EXPECT_TRUE(manager_->HaveUnclearedMips());
1493 EXPECT_EQ(1, texture->num_uncleared_mips()); 1495 EXPECT_EQ(1, texture->num_uncleared_mips());
1494 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); 1496 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, 0, true);
1495 EXPECT_TRUE(texture->SafeToRenderFrom()); 1497 EXPECT_TRUE(texture->SafeToRenderFrom());
1496 EXPECT_FALSE(manager_->HaveUnsafeTextures()); 1498 EXPECT_FALSE(manager_->HaveUnsafeTextures());
1497 EXPECT_FALSE(manager_->HaveUnclearedMips()); 1499 EXPECT_FALSE(manager_->HaveUnclearedMips());
1498 EXPECT_EQ(0, texture->num_uncleared_mips()); 1500 EXPECT_EQ(0, texture->num_uncleared_mips());
1499 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 1501 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1,
1500 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 1502 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1501 EXPECT_FALSE(texture->SafeToRenderFrom()); 1503 EXPECT_FALSE(texture->SafeToRenderFrom());
1502 EXPECT_TRUE(manager_->HaveUnsafeTextures()); 1504 EXPECT_TRUE(manager_->HaveUnsafeTextures());
1503 EXPECT_TRUE(manager_->HaveUnclearedMips()); 1505 EXPECT_TRUE(manager_->HaveUnclearedMips());
1504 EXPECT_EQ(1, texture->num_uncleared_mips()); 1506 EXPECT_EQ(1, texture->num_uncleared_mips());
1505 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); 1507 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, 0, true);
1506 EXPECT_TRUE(texture->SafeToRenderFrom()); 1508 EXPECT_TRUE(texture->SafeToRenderFrom());
1507 EXPECT_FALSE(manager_->HaveUnsafeTextures()); 1509 EXPECT_FALSE(manager_->HaveUnsafeTextures());
1508 EXPECT_FALSE(manager_->HaveUnclearedMips()); 1510 EXPECT_FALSE(manager_->HaveUnclearedMips());
1509 EXPECT_EQ(0, texture->num_uncleared_mips()); 1511 EXPECT_EQ(0, texture->num_uncleared_mips());
1510 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 1512 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1,
1511 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 1513 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1512 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 1514 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1,
1513 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 1515 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1514 EXPECT_FALSE(texture->SafeToRenderFrom()); 1516 EXPECT_FALSE(texture->SafeToRenderFrom());
1515 EXPECT_TRUE(manager_->HaveUnsafeTextures()); 1517 EXPECT_TRUE(manager_->HaveUnsafeTextures());
1516 EXPECT_TRUE(manager_->HaveUnclearedMips()); 1518 EXPECT_TRUE(manager_->HaveUnclearedMips());
1517 EXPECT_EQ(2, texture->num_uncleared_mips()); 1519 EXPECT_EQ(2, texture->num_uncleared_mips());
1518 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); 1520 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, 0, true);
1519 EXPECT_FALSE(texture->SafeToRenderFrom()); 1521 EXPECT_FALSE(texture->SafeToRenderFrom());
1520 EXPECT_TRUE(manager_->HaveUnsafeTextures()); 1522 EXPECT_TRUE(manager_->HaveUnsafeTextures());
1521 EXPECT_TRUE(manager_->HaveUnclearedMips()); 1523 EXPECT_TRUE(manager_->HaveUnclearedMips());
1522 EXPECT_EQ(1, texture->num_uncleared_mips()); 1524 EXPECT_EQ(1, texture->num_uncleared_mips());
1523 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); 1525 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, 0, true);
1524 EXPECT_TRUE(texture->SafeToRenderFrom()); 1526 EXPECT_TRUE(texture->SafeToRenderFrom());
1525 EXPECT_FALSE(manager_->HaveUnsafeTextures()); 1527 EXPECT_FALSE(manager_->HaveUnsafeTextures());
1526 EXPECT_FALSE(manager_->HaveUnclearedMips()); 1528 EXPECT_FALSE(manager_->HaveUnclearedMips());
1527 EXPECT_EQ(0, texture->num_uncleared_mips()); 1529 EXPECT_EQ(0, texture->num_uncleared_mips());
1528 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 1530 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1,
1529 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 1531 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1530 EXPECT_FALSE(texture->SafeToRenderFrom()); 1532 EXPECT_FALSE(texture->SafeToRenderFrom());
1531 EXPECT_TRUE(manager_->HaveUnsafeTextures()); 1533 EXPECT_TRUE(manager_->HaveUnsafeTextures());
1532 EXPECT_TRUE(manager_->HaveUnclearedMips()); 1534 EXPECT_TRUE(manager_->HaveUnclearedMips());
1533 EXPECT_EQ(1, texture->num_uncleared_mips()); 1535 EXPECT_EQ(1, texture->num_uncleared_mips());
(...skipping 28 matching lines...) Expand all
1562 scoped_refptr<TextureRef> texture_ref3( 1564 scoped_refptr<TextureRef> texture_ref3(
1563 manager_->GetTexture(kClient3Id)); 1565 manager_->GetTexture(kClient3Id));
1564 ASSERT_TRUE(texture_ref3.get() != NULL); 1566 ASSERT_TRUE(texture_ref3.get() != NULL);
1565 manager_->SetTarget(texture_ref3.get(), GL_TEXTURE_2D); 1567 manager_->SetTarget(texture_ref3.get(), GL_TEXTURE_2D);
1566 manager_->SetLevelInfo(texture_ref3.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 1568 manager_->SetLevelInfo(texture_ref3.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1,
1567 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); 1569 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2));
1568 EXPECT_TRUE(manager_->HaveUnsafeTextures()); 1570 EXPECT_TRUE(manager_->HaveUnsafeTextures());
1569 EXPECT_TRUE(manager_->HaveUnclearedMips()); 1571 EXPECT_TRUE(manager_->HaveUnclearedMips());
1570 Texture* texture3 = texture_ref3->texture(); 1572 Texture* texture3 = texture_ref3->texture();
1571 EXPECT_EQ(1, texture3->num_uncleared_mips()); 1573 EXPECT_EQ(1, texture3->num_uncleared_mips());
1572 manager_->SetLevelCleared(texture_ref2.get(), GL_TEXTURE_2D, 0, true); 1574 manager_->SetLevelCleared(texture_ref2.get(), GL_TEXTURE_2D, 0, 0, true);
1573 EXPECT_TRUE(manager_->HaveUnsafeTextures()); 1575 EXPECT_TRUE(manager_->HaveUnsafeTextures());
1574 EXPECT_TRUE(manager_->HaveUnclearedMips()); 1576 EXPECT_TRUE(manager_->HaveUnclearedMips());
1575 EXPECT_EQ(0, texture2->num_uncleared_mips()); 1577 EXPECT_EQ(0, texture2->num_uncleared_mips());
1576 manager_->SetLevelCleared(texture_ref3.get(), GL_TEXTURE_2D, 0, true); 1578 manager_->SetLevelCleared(texture_ref3.get(), GL_TEXTURE_2D, 0, 0, true);
1577 EXPECT_FALSE(manager_->HaveUnsafeTextures()); 1579 EXPECT_FALSE(manager_->HaveUnsafeTextures());
1578 EXPECT_FALSE(manager_->HaveUnclearedMips()); 1580 EXPECT_FALSE(manager_->HaveUnclearedMips());
1579 EXPECT_EQ(0, texture3->num_uncleared_mips()); 1581 EXPECT_EQ(0, texture3->num_uncleared_mips());
1580 1582
1581 manager_->SetLevelInfo(texture_ref2.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 1583 manager_->SetLevelInfo(texture_ref2.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1,
1582 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(1, 1, 1, 1)); 1584 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(1, 1, 1, 1));
1583 manager_->SetLevelInfo(texture_ref3.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 1585 manager_->SetLevelInfo(texture_ref3.get(), GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1,
1584 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4, 4, 4)); 1586 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 4, 4, 4));
1585 EXPECT_TRUE(manager_->HaveUnsafeTextures()); 1587 EXPECT_TRUE(manager_->HaveUnsafeTextures());
1586 EXPECT_TRUE(manager_->HaveUnclearedMips()); 1588 EXPECT_TRUE(manager_->HaveUnclearedMips());
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 .Times(1) 1676 .Times(1)
1675 .RetiresOnSaturation(); 1677 .RetiresOnSaturation();
1676 texture_ref = NULL; 1678 texture_ref = NULL;
1677 } 1679 }
1678 1680
1679 TEST_F(TextureTest, GetLevelImage) { 1681 TEST_F(TextureTest, GetLevelImage) {
1680 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); 1682 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D);
1681 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1683 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1,
1682 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); 1684 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2));
1683 Texture* texture = texture_ref_->texture(); 1685 Texture* texture = texture_ref_->texture();
1684 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); 1686 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1, 0) == NULL);
1685 // Set image. 1687 // Set image.
1686 scoped_refptr<gl::GLImage> image(new gl::GLImageStub); 1688 scoped_refptr<gl::GLImage> image(new gl::GLImageStub);
1687 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, image.get(), 1689 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, 0, image.get(),
1688 Texture::BOUND); 1690 Texture::BOUND);
1689 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); 1691 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1, 0) == NULL);
1690 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_2D, 1) == NULL); 1692 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_2D, 1, 0) == NULL);
1691 // Remove it. 1693 // Remove it.
1692 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, nullptr, 1694 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, 0, nullptr,
1693 Texture::UNBOUND); 1695 Texture::UNBOUND);
1694 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); 1696 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1, 0) == NULL);
1695 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, image.get(), 1697 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, 0, image.get(),
1696 Texture::UNBOUND); 1698 Texture::UNBOUND);
1697 // Image should be reset when SetLevelInfo is called. 1699 // Image should be reset when SetLevelInfo is called.
1698 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1700 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1,
1699 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); 1701 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2));
1700 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); 1702 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1, 0) == NULL);
1701 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_2D, 1) == NULL); 1703 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_2D, 1, 0) == NULL);
1702 } 1704 }
1703 1705
1704 TEST_F(TextureTest, GetLevelStreamTextureImage) { 1706 TEST_F(TextureTest, GetLevelStreamTextureImage) {
1705 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); 1707 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES);
1706 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, 1708 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0,
1707 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 1709 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
1708 gfx::Rect(2, 2)); 1710 gfx::Rect(2, 2));
1709 Texture* texture = texture_ref_->texture(); 1711 Texture* texture = texture_ref_->texture();
1710 1712
1711 // Set image. 1713 // Set image.
1712 scoped_refptr<GLStreamTextureImage> image(new GLStreamTextureImageStub); 1714 scoped_refptr<GLStreamTextureImage> image(new GLStreamTextureImageStub);
1713 manager_->SetLevelStreamTextureImage(texture_ref_.get(), 1715 manager_->SetLevelStreamTextureImage(texture_ref_.get(),
1714 GL_TEXTURE_EXTERNAL_OES, 0, image.get(), 1716 GL_TEXTURE_EXTERNAL_OES, 0, 0,
1715 Texture::BOUND, 0); 1717 image.get(), Texture::BOUND, 0);
1716 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); 1718 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0, 0) == NULL);
1717 EXPECT_FALSE( 1719 EXPECT_FALSE(
1718 texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); 1720 texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0, 0) ==
1721 NULL);
1719 1722
1720 // Replace it as a normal image. 1723 // Replace it as a normal image.
1721 scoped_refptr<gl::GLImage> image2(new gl::GLImageStub); 1724 scoped_refptr<gl::GLImage> image2(new gl::GLImageStub);
1722 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, 1725 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, 0,
1723 image2.get(), Texture::BOUND); 1726 image2.get(), Texture::BOUND);
1724 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); 1727 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0, 0) == NULL);
1725 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0) == 1728 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0, 0)
1726 NULL); 1729 == NULL);
1727 1730
1728 // Image should be reset when SetLevelInfo is called. 1731 // Image should be reset when SetLevelInfo is called.
1729 manager_->SetLevelStreamTextureImage(texture_ref_.get(), 1732 manager_->SetLevelStreamTextureImage(texture_ref_.get(),
1730 GL_TEXTURE_EXTERNAL_OES, 0, image.get(), 1733 GL_TEXTURE_EXTERNAL_OES, 0, 0,
1731 Texture::UNBOUND, 0); 1734 image.get(), Texture::UNBOUND, 0);
1732 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, 1735 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0,
1733 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 1736 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
1734 gfx::Rect(2, 2)); 1737 gfx::Rect(2, 2));
1735 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0) == NULL); 1738 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0, 0) == NULL);
1736 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0) == 1739 EXPECT_TRUE(texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES, 0, 0)
1737 NULL); 1740 == NULL);
1738 } 1741 }
1739 1742
1740 TEST_F(TextureTest, SetLevelImageState) { 1743 TEST_F(TextureTest, SetLevelImageState) {
1741 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); 1744 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D);
1742 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, 1745 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1,
1743 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); 1746 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2));
1744 Texture* texture = texture_ref_->texture(); 1747 Texture* texture = texture_ref_->texture();
1745 // Set image, initially BOUND. 1748 // Set image, initially BOUND.
1746 scoped_refptr<gl::GLImage> image(new gl::GLImageStub); 1749 scoped_refptr<gl::GLImage> image(new gl::GLImageStub);
1747 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 0, image.get(), 1750 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 0, 0, image.get(),
1748 Texture::BOUND); 1751 Texture::BOUND);
1749 Texture::ImageState state; 1752 Texture::ImageState state;
1750 texture->GetLevelImage(GL_TEXTURE_2D, 0, &state); 1753 texture->GetLevelImage(GL_TEXTURE_2D, 0, 0, &state);
1751 EXPECT_EQ(state, Texture::BOUND); 1754 EXPECT_EQ(state, Texture::BOUND);
1752 // Change the state. 1755 // Change the state.
1753 texture->SetLevelImageState(GL_TEXTURE_2D, 0, Texture::COPIED); 1756 texture->SetLevelImageState(GL_TEXTURE_2D, 0, 0, Texture::COPIED);
1754 texture->GetLevelImage(GL_TEXTURE_2D, 0, &state); 1757 texture->GetLevelImage(GL_TEXTURE_2D, 0, 0, &state);
1755 EXPECT_EQ(state, Texture::COPIED); 1758 EXPECT_EQ(state, Texture::COPIED);
1756 } 1759 }
1757 1760
1758 TEST_F(TextureTest, SetStreamTextureImageServiceID) { 1761 TEST_F(TextureTest, SetStreamTextureImageServiceID) {
1759 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); 1762 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES);
1760 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, 1763 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0,
1761 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 1764 GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
1762 gfx::Rect(2, 2)); 1765 gfx::Rect(2, 2));
1763 Texture* texture = texture_ref_->texture(); 1766 Texture* texture = texture_ref_->texture();
1764 1767
1765 GLuint owned_service_id = TextureTestHelper::owned_service_id(texture); 1768 GLuint owned_service_id = TextureTestHelper::owned_service_id(texture);
1766 GLuint service_id = texture->service_id(); 1769 GLuint service_id = texture->service_id();
1767 // Initially, the texture should use the same service id that it owns. 1770 // Initially, the texture should use the same service id that it owns.
1768 EXPECT_EQ(owned_service_id, service_id); 1771 EXPECT_EQ(owned_service_id, service_id);
1769 1772
1770 // Override the service_id. 1773 // Override the service_id.
1771 GLuint stream_texture_service_id = service_id + 1; 1774 GLuint stream_texture_service_id = service_id + 1;
1772 scoped_refptr<GLStreamTextureImage> image(new GLStreamTextureImageStub); 1775 scoped_refptr<GLStreamTextureImage> image(new GLStreamTextureImageStub);
1773 manager_->SetLevelStreamTextureImage( 1776 manager_->SetLevelStreamTextureImage(
1774 texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, image.get(), 1777 texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, 0, image.get(),
1775 Texture::BOUND, stream_texture_service_id); 1778 Texture::BOUND, stream_texture_service_id);
1776 1779
1777 // Make sure that service_id() changed but owned_service_id() didn't. 1780 // Make sure that service_id() changed but owned_service_id() didn't.
1778 EXPECT_EQ(stream_texture_service_id, texture->service_id()); 1781 EXPECT_EQ(stream_texture_service_id, texture->service_id());
1779 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture)); 1782 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture));
1780 1783
1781 // Undo the override. 1784 // Undo the override.
1782 manager_->SetLevelStreamTextureImage(texture_ref_.get(), 1785 manager_->SetLevelStreamTextureImage(texture_ref_.get(),
1783 GL_TEXTURE_EXTERNAL_OES, 0, image.get(), 1786 GL_TEXTURE_EXTERNAL_OES, 0, 0,
1784 Texture::BOUND, 0); 1787 image.get(), Texture::BOUND, 0);
1785 1788
1786 // The service IDs should be back as they were. 1789 // The service IDs should be back as they were.
1787 EXPECT_EQ(service_id, texture->service_id()); 1790 EXPECT_EQ(service_id, texture->service_id());
1788 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture)); 1791 EXPECT_EQ(owned_service_id, TextureTestHelper::owned_service_id(texture));
1789 1792
1790 // Override again, so that we can check delete behavior. 1793 // Override again, so that we can check delete behavior.
1791 manager_->SetLevelStreamTextureImage( 1794 manager_->SetLevelStreamTextureImage(
1792 texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, image.get(), 1795 texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES, 0, 0, image.get(),
1793 Texture::BOUND, stream_texture_service_id); 1796 Texture::BOUND, stream_texture_service_id);
1794 1797
1795 // Remove the Texture. It should delete the texture id that it owns, even 1798 // Remove the Texture. It should delete the texture id that it owns, even
1796 // though it is overridden. 1799 // though it is overridden.
1797 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(owned_service_id))) 1800 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(owned_service_id)))
1798 .Times(1) 1801 .Times(1)
1799 .RetiresOnSaturation(); 1802 .RetiresOnSaturation();
1800 manager_->RemoveTexture(kClient1Id); 1803 manager_->RemoveTexture(kClient1Id);
1801 texture_ref_ = nullptr; 1804 texture_ref_ = nullptr;
1802 } 1805 }
1803 1806
1804 namespace { 1807 namespace {
1805 1808
1806 bool InSet(std::set<std::string>* string_set, const std::string& str) { 1809 bool InSet(std::set<std::string>* string_set, const std::string& str) {
1807 std::pair<std::set<std::string>::iterator, bool> result = 1810 std::pair<std::set<std::string>::iterator, bool> result =
1808 string_set->insert(str); 1811 string_set->insert(str);
1809 return !result.second; 1812 return !result.second;
1810 } 1813 }
1811 1814
1812 } // anonymous namespace 1815 } // anonymous namespace
1813 1816
1814 TEST_F(TextureTest, AddToSignature) { 1817 TEST_F(TextureTest, AddToSignature) {
1815 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); 1818 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D);
1816 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1819 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1,
1817 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); 1820 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2));
1818 std::string signature1; 1821 std::string signature1;
1819 std::string signature2; 1822 std::string signature2;
1820 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature1); 1823 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1824 1, 0, &signature1);
1821 1825
1822 std::set<std::string> string_set; 1826 std::set<std::string> string_set;
1823 EXPECT_FALSE(InSet(&string_set, signature1)); 1827 EXPECT_FALSE(InSet(&string_set, signature1));
1824 1828
1825 // check changing 1 thing makes a different signature. 1829 // check changing 1 thing makes a different signature.
1826 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 2, 1, 1830 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 4, 2, 1,
1827 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 2)); 1831 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 2));
1828 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1832 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1833 1, 0, &signature2);
1829 EXPECT_FALSE(InSet(&string_set, signature2)); 1834 EXPECT_FALSE(InSet(&string_set, signature2));
1830 1835
1831 // check putting it back makes the same signature. 1836 // check putting it back makes the same signature.
1832 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1837 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1,
1833 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2)); 1838 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(2, 2));
1834 signature2.clear(); 1839 signature2.clear();
1835 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1840 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1841 1, 0, &signature2);
1836 EXPECT_EQ(signature1, signature2); 1842 EXPECT_EQ(signature1, signature2);
1837 1843
1838 // Check setting cleared status does not change signature. 1844 // Check setting cleared status does not change signature.
1839 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1845 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1,
1840 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 1846 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1841 signature2.clear(); 1847 signature2.clear();
1842 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1848 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1849 1, 0, &signature2);
1843 EXPECT_EQ(signature1, signature2); 1850 EXPECT_EQ(signature1, signature2);
1844 1851
1845 // Check changing other settings changes signature. 1852 // Check changing other settings changes signature.
1846 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 1, 1853 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 1,
1847 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 1854 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1848 signature2.clear(); 1855 signature2.clear();
1849 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1856 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1850 EXPECT_FALSE(InSet(&string_set, signature2)); 1857 1, 0, &signature2);
1851
1852 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 2,
1853 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1854 signature2.clear();
1855 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2);
1856 EXPECT_FALSE(InSet(&string_set, signature2)); 1858 EXPECT_FALSE(InSet(&string_set, signature2));
1857 1859
1858 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1860 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1,
1859 1, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 1861 1, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1860 signature2.clear(); 1862 signature2.clear();
1861 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1863 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1864 1, 0, &signature2);
1862 EXPECT_FALSE(InSet(&string_set, signature2)); 1865 EXPECT_FALSE(InSet(&string_set, signature2));
1863 1866
1864 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1867 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1,
1865 0, GL_RGB, GL_UNSIGNED_BYTE, gfx::Rect()); 1868 0, GL_RGB, GL_UNSIGNED_BYTE, gfx::Rect());
1866 signature2.clear(); 1869 signature2.clear();
1867 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1870 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1871 1, 0, &signature2);
1868 EXPECT_FALSE(InSet(&string_set, signature2)); 1872 EXPECT_FALSE(InSet(&string_set, signature2));
1869 1873
1870 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1874 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1,
1871 0, GL_RGBA, GL_FLOAT, gfx::Rect()); 1875 0, GL_RGBA, GL_FLOAT, gfx::Rect());
1872 signature2.clear(); 1876 signature2.clear();
1873 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1877 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1878 1, 0, &signature2);
1874 EXPECT_FALSE(InSet(&string_set, signature2)); 1879 EXPECT_FALSE(InSet(&string_set, signature2));
1875 1880
1876 // put it back 1881 // put it back
1877 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1882 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1,
1878 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 1883 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
1879 signature2.clear(); 1884 signature2.clear();
1880 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1885 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1886 1, 0, &signature2);
1881 EXPECT_EQ(signature1, signature2); 1887 EXPECT_EQ(signature1, signature2);
1882 1888
1883 // check changing parameters changes signature. 1889 // check changing parameters changes signature.
1884 SetParameter( 1890 SetParameter(
1885 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); 1891 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR);
1886 signature2.clear(); 1892 signature2.clear();
1887 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1893 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1894 1, 0, &signature2);
1888 EXPECT_FALSE(InSet(&string_set, signature2)); 1895 EXPECT_FALSE(InSet(&string_set, signature2));
1889 1896
1890 SetParameter(texture_ref_.get(), 1897 SetParameter(texture_ref_.get(),
1891 GL_TEXTURE_MIN_FILTER, 1898 GL_TEXTURE_MIN_FILTER,
1892 GL_NEAREST_MIPMAP_LINEAR, 1899 GL_NEAREST_MIPMAP_LINEAR,
1893 GL_NO_ERROR); 1900 GL_NO_ERROR);
1894 SetParameter( 1901 SetParameter(
1895 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); 1902 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
1896 signature2.clear(); 1903 signature2.clear();
1897 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1904 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1905 1, 0, &signature2);
1898 EXPECT_FALSE(InSet(&string_set, signature2)); 1906 EXPECT_FALSE(InSet(&string_set, signature2));
1899 1907
1900 SetParameter( 1908 SetParameter(
1901 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); 1909 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR);
1902 SetParameter( 1910 SetParameter(
1903 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); 1911 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
1904 signature2.clear(); 1912 signature2.clear();
1905 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1913 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1914 1, 0, &signature2);
1906 EXPECT_FALSE(InSet(&string_set, signature2)); 1915 EXPECT_FALSE(InSet(&string_set, signature2));
1907 1916
1908 SetParameter(texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR); 1917 SetParameter(texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR);
1909 SetParameter( 1918 SetParameter(
1910 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); 1919 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
1911 signature2.clear(); 1920 signature2.clear();
1912 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1921 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1922 1, 0, &signature2);
1913 EXPECT_FALSE(InSet(&string_set, signature2)); 1923 EXPECT_FALSE(InSet(&string_set, signature2));
1914 1924
1915 // Check putting it back genenerates the same signature 1925 // Check putting it back genenerates the same signature
1916 SetParameter(texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR); 1926 SetParameter(texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR);
1917 signature2.clear(); 1927 signature2.clear();
1918 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); 1928 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D,
1929 1, 0, &signature2);
1919 EXPECT_EQ(signature1, signature2); 1930 EXPECT_EQ(signature1, signature2);
1920 1931
1921 // Check the set was acutally getting different signatures. 1932 // Check the set was acutally getting different signatures.
1922 EXPECT_EQ(11u, string_set.size()); 1933 EXPECT_EQ(10u, string_set.size());
1923 } 1934 }
1924 1935
1925 class ProduceConsumeTextureTest : public TextureTest, 1936 class ProduceConsumeTextureTest : public TextureTest,
1926 public ::testing::WithParamInterface<GLenum> { 1937 public ::testing::WithParamInterface<GLenum> {
1927 public: 1938 public:
1928 void SetUp() override { 1939 void SetUp() override {
1929 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external"); 1940 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external");
1930 manager_->CreateTexture(kClient2Id, kService2Id); 1941 manager_->CreateTexture(kClient2Id, kService2Id);
1931 texture2_ = manager_->GetTexture(kClient2Id); 1942 texture2_ = manager_->GetTexture(kClient2Id);
1932 1943
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2006 static LevelInfo GetLevelInfo(const TextureRef* texture_ref, 2017 static LevelInfo GetLevelInfo(const TextureRef* texture_ref,
2007 GLint target, 2018 GLint target,
2008 GLint level) { 2019 GLint level) {
2009 const Texture* texture = texture_ref->texture(); 2020 const Texture* texture = texture_ref->texture();
2010 LevelInfo info; 2021 LevelInfo info;
2011 info.target = target; 2022 info.target = target;
2012 EXPECT_TRUE(texture->GetLevelSize(target, level, &info.width, 2023 EXPECT_TRUE(texture->GetLevelSize(target, level, &info.width,
2013 &info.height, &info.depth)); 2024 &info.height, &info.depth));
2014 EXPECT_TRUE(texture->GetLevelType(target, level, &info.type, 2025 EXPECT_TRUE(texture->GetLevelType(target, level, &info.type,
2015 &info.format)); 2026 &info.format));
2016 info.cleared_rect = texture->GetLevelClearedRect(target, level); 2027 info.cleared_rect = texture->GetLevelClearedRect(target, level, 0);
2017 return info; 2028 return info;
2018 } 2029 }
2019 2030
2020 Texture* Produce(TextureRef* texture_ref) { 2031 Texture* Produce(TextureRef* texture_ref) {
2021 Texture* texture = manager_->Produce(texture_ref); 2032 Texture* texture = manager_->Produce(texture_ref);
2022 EXPECT_TRUE(texture != NULL); 2033 EXPECT_TRUE(texture != NULL);
2023 return texture; 2034 return texture;
2024 } 2035 }
2025 2036
2026 void Consume(GLuint client_id, Texture* texture) { 2037 void Consume(GLuint client_id, Texture* texture) {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
2134 } 2145 }
2135 2146
2136 TEST_P(ProduceConsumeTextureTest, ProduceConsumeTextureWithImage) { 2147 TEST_P(ProduceConsumeTextureTest, ProduceConsumeTextureWithImage) {
2137 GLenum target = GetParam(); 2148 GLenum target = GetParam();
2138 manager_->SetTarget(texture_ref_.get(), target); 2149 manager_->SetTarget(texture_ref_.get(), target);
2139 Texture* texture = texture_ref_->texture(); 2150 Texture* texture = texture_ref_->texture();
2140 EXPECT_EQ(static_cast<GLenum>(target), texture->target()); 2151 EXPECT_EQ(static_cast<GLenum>(target), texture->target());
2141 scoped_refptr<gl::GLImage> image(new gl::GLImageStub); 2152 scoped_refptr<gl::GLImage> image(new gl::GLImageStub);
2142 manager_->SetLevelInfo(texture_ref_.get(), target, 0, GL_RGBA, 0, 0, 1, 0, 2153 manager_->SetLevelInfo(texture_ref_.get(), target, 0, GL_RGBA, 0, 0, 1, 0,
2143 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 2154 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
2144 manager_->SetLevelImage(texture_ref_.get(), target, 0, image.get(), 2155 manager_->SetLevelImage(texture_ref_.get(), target, 0, 0, image.get(),
2145 Texture::BOUND); 2156 Texture::BOUND);
2146 GLuint service_id = texture->service_id(); 2157 GLuint service_id = texture->service_id();
2147 Texture* produced_texture = Produce(texture_ref_.get()); 2158 Texture* produced_texture = Produce(texture_ref_.get());
2148 2159
2149 GLuint client_id = texture2_->client_id(); 2160 GLuint client_id = texture2_->client_id();
2150 manager_->RemoveTexture(client_id); 2161 manager_->RemoveTexture(client_id);
2151 Consume(client_id, produced_texture); 2162 Consume(client_id, produced_texture);
2152 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); 2163 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id);
2153 EXPECT_EQ(produced_texture, restored_texture->texture()); 2164 EXPECT_EQ(produced_texture, restored_texture->texture());
2154 EXPECT_EQ(service_id, restored_texture->service_id()); 2165 EXPECT_EQ(service_id, restored_texture->service_id());
2155 EXPECT_EQ(image.get(), restored_texture->texture()->GetLevelImage(target, 0)); 2166 EXPECT_EQ(image.get(),
2167 restored_texture->texture()->GetLevelImage(target, 0, 0));
2156 } 2168 }
2157 2169
2158 static const GLenum kTextureTargets[] = {GL_TEXTURE_2D, GL_TEXTURE_EXTERNAL_OES, 2170 static const GLenum kTextureTargets[] = {GL_TEXTURE_2D, GL_TEXTURE_EXTERNAL_OES,
2159 GL_TEXTURE_RECTANGLE_ARB, }; 2171 GL_TEXTURE_RECTANGLE_ARB, };
2160 2172
2161 INSTANTIATE_TEST_CASE_P(Target, 2173 INSTANTIATE_TEST_CASE_P(Target,
2162 ProduceConsumeTextureTest, 2174 ProduceConsumeTextureTest,
2163 ::testing::ValuesIn(kTextureTargets)); 2175 ::testing::ValuesIn(kTextureTargets));
2164 2176
2165 TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) { 2177 TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
2318 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); 2330 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips());
2319 2331
2320 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 2332 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 1, 1,
2321 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect()); 2333 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect());
2322 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); 2334 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures());
2323 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); 2335 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips());
2324 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); 2336 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures());
2325 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); 2337 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips());
2326 2338
2327 // Make texture cleared on one texture manager, should affect other one. 2339 // Make texture cleared on one texture manager, should affect other one.
2328 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, true); 2340 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, 0, true);
2329 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); 2341 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures());
2330 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); 2342 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips());
2331 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); 2343 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures());
2332 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); 2344 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips());
2333 2345
2334 EXPECT_CALL(*gl_, DeleteTextures(1, _)) 2346 EXPECT_CALL(*gl_, DeleteTextures(1, _))
2335 .Times(1) 2347 .Times(1)
2336 .RetiresOnSaturation(); 2348 .RetiresOnSaturation();
2337 texture_manager1_->RemoveTexture(10); 2349 texture_manager1_->RemoveTexture(10);
2338 texture_manager2_->RemoveTexture(20); 2350 texture_manager2_->RemoveTexture(20);
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
2454 2466
2455 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); 2467 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D);
2456 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 2468 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2,
2457 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 2469 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
2458 gfx::Rect(2, 2)); 2470 gfx::Rect(2, 2));
2459 EXPECT_FALSE(ref1->texture()->HasImages()); 2471 EXPECT_FALSE(ref1->texture()->HasImages());
2460 EXPECT_FALSE(ref2->texture()->HasImages()); 2472 EXPECT_FALSE(ref2->texture()->HasImages());
2461 EXPECT_FALSE(texture_manager1_->HaveImages()); 2473 EXPECT_FALSE(texture_manager1_->HaveImages());
2462 EXPECT_FALSE(texture_manager2_->HaveImages()); 2474 EXPECT_FALSE(texture_manager2_->HaveImages());
2463 scoped_refptr<gl::GLImage> image1(new gl::GLImageStub); 2475 scoped_refptr<gl::GLImage> image1(new gl::GLImageStub);
2464 texture_manager1_->SetLevelImage(ref1.get(), GL_TEXTURE_2D, 1, image1.get(), 2476 texture_manager1_->SetLevelImage(ref1.get(), GL_TEXTURE_2D, 1, 0,
2465 Texture::BOUND); 2477 image1.get(), Texture::BOUND);
2466 EXPECT_TRUE(ref1->texture()->HasImages()); 2478 EXPECT_TRUE(ref1->texture()->HasImages());
2467 EXPECT_TRUE(ref2->texture()->HasImages()); 2479 EXPECT_TRUE(ref2->texture()->HasImages());
2468 EXPECT_TRUE(texture_manager1_->HaveImages()); 2480 EXPECT_TRUE(texture_manager1_->HaveImages());
2469 EXPECT_TRUE(texture_manager2_->HaveImages()); 2481 EXPECT_TRUE(texture_manager2_->HaveImages());
2470 scoped_refptr<gl::GLImage> image2(new gl::GLImageStub); 2482 scoped_refptr<gl::GLImage> image2(new gl::GLImageStub);
2471 texture_manager1_->SetLevelImage(ref1.get(), GL_TEXTURE_2D, 1, image2.get(), 2483 texture_manager1_->SetLevelImage(ref1.get(), GL_TEXTURE_2D, 1, 0,
2472 Texture::BOUND); 2484 image2.get(), Texture::BOUND);
2473 EXPECT_TRUE(ref1->texture()->HasImages()); 2485 EXPECT_TRUE(ref1->texture()->HasImages());
2474 EXPECT_TRUE(ref2->texture()->HasImages()); 2486 EXPECT_TRUE(ref2->texture()->HasImages());
2475 EXPECT_TRUE(texture_manager1_->HaveImages()); 2487 EXPECT_TRUE(texture_manager1_->HaveImages());
2476 EXPECT_TRUE(texture_manager2_->HaveImages()); 2488 EXPECT_TRUE(texture_manager2_->HaveImages());
2477 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 2489 texture_manager1_->SetLevelInfo(ref1.get(), GL_TEXTURE_2D, 1, GL_RGBA, 2, 2,
2478 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 2490 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
2479 gfx::Rect(2, 2)); 2491 gfx::Rect(2, 2));
2480 EXPECT_FALSE(ref1->texture()->HasImages()); 2492 EXPECT_FALSE(ref1->texture()->HasImages());
2481 EXPECT_FALSE(ref2->texture()->HasImages()); 2493 EXPECT_FALSE(ref2->texture()->HasImages());
2482 EXPECT_FALSE(texture_manager1_->HaveImages()); 2494 EXPECT_FALSE(texture_manager1_->HaveImages());
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
2746 ExpectValid( 2758 ExpectValid(
2747 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); 2759 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8);
2748 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, 2760 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV,
2749 GL_DEPTH32F_STENCIL8); 2761 GL_DEPTH32F_STENCIL8);
2750 2762
2751 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); 2763 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8);
2752 } 2764 }
2753 2765
2754 } // namespace gles2 2766 } // namespace gles2
2755 } // namespace gpu 2767 } // 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