| 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 "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "gpu/command_buffer/service/feature_info.h" | 8 #include "gpu/command_buffer/service/feature_info.h" |
| 9 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" | 9 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" |
| 10 #include "gpu/command_buffer/service/memory_tracking.h" | 10 #include "gpu/command_buffer/service/memory_tracking.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 | 51 |
| 52 virtual void TearDown() { | 52 virtual void TearDown() { |
| 53 manager_->Destroy(false); | 53 manager_->Destroy(false); |
| 54 manager_.reset(); | 54 manager_.reset(); |
| 55 ::gfx::GLInterface::SetGLInterface(NULL); | 55 ::gfx::GLInterface::SetGLInterface(NULL); |
| 56 gl_.reset(); | 56 gl_.reset(); |
| 57 } | 57 } |
| 58 | 58 |
| 59 // Use StrictMock to make 100% sure we know how GL will be called. | 59 // Use StrictMock to make 100% sure we know how GL will be called. |
| 60 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; | 60 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; |
| 61 FeatureInfo::Ref feature_info_; | 61 scoped_refptr<FeatureInfo> feature_info_; |
| 62 scoped_ptr<TextureManager> manager_; | 62 scoped_ptr<TextureManager> manager_; |
| 63 }; | 63 }; |
| 64 | 64 |
| 65 // GCC requires these declarations, but MSVC requires they not be present | 65 // GCC requires these declarations, but MSVC requires they not be present |
| 66 #ifndef COMPILER_MSVC | 66 #ifndef COMPILER_MSVC |
| 67 const GLint TextureManagerTest::kMaxTextureSize; | 67 const GLint TextureManagerTest::kMaxTextureSize; |
| 68 const GLint TextureManagerTest::kMaxCubeMapTextureSize; | 68 const GLint TextureManagerTest::kMaxCubeMapTextureSize; |
| 69 const GLint TextureManagerTest::kMaxExternalTextureSize; | 69 const GLint TextureManagerTest::kMaxExternalTextureSize; |
| 70 const GLint TextureManagerTest::kMax2dLevels; | 70 const GLint TextureManagerTest::kMax2dLevels; |
| 71 const GLint TextureManagerTest::kMaxCubeMapLevels; | 71 const GLint TextureManagerTest::kMaxCubeMapLevels; |
| 72 const GLint TextureManagerTest::kMaxExternalLevels; | 72 const GLint TextureManagerTest::kMaxExternalLevels; |
| 73 #endif | 73 #endif |
| 74 | 74 |
| 75 TEST_F(TextureManagerTest, Basic) { | 75 TEST_F(TextureManagerTest, Basic) { |
| 76 const GLuint kClient1Id = 1; | 76 const GLuint kClient1Id = 1; |
| 77 const GLuint kService1Id = 11; | 77 const GLuint kService1Id = 11; |
| 78 const GLuint kClient2Id = 2; | 78 const GLuint kClient2Id = 2; |
| 79 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 79 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 80 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 80 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 81 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 81 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 82 // Check we can create texture. | 82 // Check we can create texture. |
| 83 manager_->CreateTextureInfo(kClient1Id, kService1Id); | 83 manager_->CreateTexture(kClient1Id, kService1Id); |
| 84 // Check texture got created. | 84 // Check texture got created. |
| 85 TextureManager::TextureInfo* info1 = manager_->GetTextureInfo(kClient1Id); | 85 Texture* info1 = manager_->GetTexture(kClient1Id); |
| 86 ASSERT_TRUE(info1 != NULL); | 86 ASSERT_TRUE(info1 != NULL); |
| 87 EXPECT_EQ(kService1Id, info1->service_id()); | 87 EXPECT_EQ(kService1Id, info1->service_id()); |
| 88 GLuint client_id = 0; | 88 GLuint client_id = 0; |
| 89 EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id)); | 89 EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id)); |
| 90 EXPECT_EQ(kClient1Id, client_id); | 90 EXPECT_EQ(kClient1Id, client_id); |
| 91 // Check we get nothing for a non-existent texture. | 91 // Check we get nothing for a non-existent texture. |
| 92 EXPECT_TRUE(manager_->GetTextureInfo(kClient2Id) == NULL); | 92 EXPECT_TRUE(manager_->GetTexture(kClient2Id) == NULL); |
| 93 // Check trying to a remove non-existent textures does not crash. | 93 // Check trying to a remove non-existent textures does not crash. |
| 94 manager_->RemoveTextureInfo(kClient2Id); | 94 manager_->RemoveTexture(kClient2Id); |
| 95 // Check that it gets deleted when the last reference is released. | 95 // Check that it gets deleted when the last reference is released. |
| 96 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 96 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
| 97 .Times(1) | 97 .Times(1) |
| 98 .RetiresOnSaturation(); | 98 .RetiresOnSaturation(); |
| 99 // Check we can't get the texture after we remove it. | 99 // Check we can't get the texture after we remove it. |
| 100 manager_->RemoveTextureInfo(kClient1Id); | 100 manager_->RemoveTexture(kClient1Id); |
| 101 EXPECT_TRUE(manager_->GetTextureInfo(kClient1Id) == NULL); | 101 EXPECT_TRUE(manager_->GetTexture(kClient1Id) == NULL); |
| 102 } | 102 } |
| 103 | 103 |
| 104 TEST_F(TextureManagerTest, SetParameter) { | 104 TEST_F(TextureManagerTest, SetParameter) { |
| 105 const GLuint kClient1Id = 1; | 105 const GLuint kClient1Id = 1; |
| 106 const GLuint kService1Id = 11; | 106 const GLuint kService1Id = 11; |
| 107 // Check we can create texture. | 107 // Check we can create texture. |
| 108 manager_->CreateTextureInfo(kClient1Id, kService1Id); | 108 manager_->CreateTexture(kClient1Id, kService1Id); |
| 109 // Check texture got created. | 109 // Check texture got created. |
| 110 TextureManager::TextureInfo* info = manager_->GetTextureInfo(kClient1Id); | 110 Texture* info = manager_->GetTexture(kClient1Id); |
| 111 ASSERT_TRUE(info != NULL); | 111 ASSERT_TRUE(info != NULL); |
| 112 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), manager_->SetParameter( | 112 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), manager_->SetParameter( |
| 113 info, GL_TEXTURE_MIN_FILTER, GL_NEAREST)); | 113 info, GL_TEXTURE_MIN_FILTER, GL_NEAREST)); |
| 114 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), info->min_filter()); | 114 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), info->min_filter()); |
| 115 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), manager_->SetParameter( | 115 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), manager_->SetParameter( |
| 116 info, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); | 116 info, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); |
| 117 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), info->mag_filter()); | 117 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), info->mag_filter()); |
| 118 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), manager_->SetParameter( | 118 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), manager_->SetParameter( |
| 119 info, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); | 119 info, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); |
| 120 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), info->wrap_s()); | 120 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), info->wrap_s()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 143 | 143 |
| 144 TEST_F(TextureManagerTest, TextureUsageExt) { | 144 TEST_F(TextureManagerTest, TextureUsageExt) { |
| 145 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 145 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
| 146 "GL_ANGLE_texture_usage"); | 146 "GL_ANGLE_texture_usage"); |
| 147 TextureManager manager( | 147 TextureManager manager( |
| 148 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 148 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 149 manager.Initialize(); | 149 manager.Initialize(); |
| 150 const GLuint kClient1Id = 1; | 150 const GLuint kClient1Id = 1; |
| 151 const GLuint kService1Id = 11; | 151 const GLuint kService1Id = 11; |
| 152 // Check we can create texture. | 152 // Check we can create texture. |
| 153 manager.CreateTextureInfo(kClient1Id, kService1Id); | 153 manager.CreateTexture(kClient1Id, kService1Id); |
| 154 // Check texture got created. | 154 // Check texture got created. |
| 155 TextureManager::TextureInfo* info = manager.GetTextureInfo(kClient1Id); | 155 Texture* info = manager.GetTexture(kClient1Id); |
| 156 ASSERT_TRUE(info != NULL); | 156 ASSERT_TRUE(info != NULL); |
| 157 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), manager.SetParameter( | 157 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), manager.SetParameter( |
| 158 info, GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE)); | 158 info, GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE)); |
| 159 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), | 159 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), |
| 160 info->usage()); | 160 info->usage()); |
| 161 manager.Destroy(false); | 161 manager.Destroy(false); |
| 162 } | 162 } |
| 163 | 163 |
| 164 TEST_F(TextureManagerTest, Destroy) { | 164 TEST_F(TextureManagerTest, Destroy) { |
| 165 const GLuint kClient1Id = 1; | 165 const GLuint kClient1Id = 1; |
| 166 const GLuint kService1Id = 11; | 166 const GLuint kService1Id = 11; |
| 167 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 167 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); |
| 168 TextureManager manager( | 168 TextureManager manager( |
| 169 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 169 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 170 manager.Initialize(); | 170 manager.Initialize(); |
| 171 // Check we can create texture. | 171 // Check we can create texture. |
| 172 manager.CreateTextureInfo(kClient1Id, kService1Id); | 172 manager.CreateTexture(kClient1Id, kService1Id); |
| 173 // Check texture got created. | 173 // Check texture got created. |
| 174 TextureManager::TextureInfo* info1 = manager.GetTextureInfo(kClient1Id); | 174 Texture* info1 = manager.GetTexture(kClient1Id); |
| 175 ASSERT_TRUE(info1 != NULL); | 175 ASSERT_TRUE(info1 != NULL); |
| 176 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 176 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
| 177 .Times(1) | 177 .Times(1) |
| 178 .RetiresOnSaturation(); | 178 .RetiresOnSaturation(); |
| 179 TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), ""); | 179 TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), ""); |
| 180 manager.Destroy(true); | 180 manager.Destroy(true); |
| 181 // Check that resources got freed. | 181 // Check that resources got freed. |
| 182 info1 = manager.GetTextureInfo(kClient1Id); | 182 info1 = manager.GetTexture(kClient1Id); |
| 183 ASSERT_TRUE(info1 == NULL); | 183 ASSERT_TRUE(info1 == NULL); |
| 184 } | 184 } |
| 185 | 185 |
| 186 TEST_F(TextureManagerTest, DestroyUnowned) { | 186 TEST_F(TextureManagerTest, DestroyUnowned) { |
| 187 const GLuint kClient1Id = 1; | 187 const GLuint kClient1Id = 1; |
| 188 const GLuint kService1Id = 11; | 188 const GLuint kService1Id = 11; |
| 189 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 189 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); |
| 190 TextureManager manager( | 190 TextureManager manager( |
| 191 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 191 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 192 manager.Initialize(); | 192 manager.Initialize(); |
| 193 // Check we can create texture. | 193 // Check we can create texture. |
| 194 TextureManager::TextureInfo* created_info = | 194 Texture* created_info = |
| 195 manager.CreateTextureInfo(kClient1Id, kService1Id); | 195 manager.CreateTexture(kClient1Id, kService1Id); |
| 196 created_info->SetNotOwned(); | 196 created_info->SetNotOwned(); |
| 197 | 197 |
| 198 // Check texture got created. | 198 // Check texture got created. |
| 199 TextureManager::TextureInfo* info1 = manager.GetTextureInfo(kClient1Id); | 199 Texture* info1 = manager.GetTexture(kClient1Id); |
| 200 ASSERT_TRUE(info1 != NULL); | 200 ASSERT_TRUE(info1 != NULL); |
| 201 | 201 |
| 202 // Check that it is not freed if it is not owned. | 202 // Check that it is not freed if it is not owned. |
| 203 TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), ""); | 203 TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), ""); |
| 204 manager.Destroy(true); | 204 manager.Destroy(true); |
| 205 info1 = manager.GetTextureInfo(kClient1Id); | 205 info1 = manager.GetTexture(kClient1Id); |
| 206 ASSERT_TRUE(info1 == NULL); | 206 ASSERT_TRUE(info1 == NULL); |
| 207 } | 207 } |
| 208 | 208 |
| 209 TEST_F(TextureManagerTest, MaxValues) { | 209 TEST_F(TextureManagerTest, MaxValues) { |
| 210 // Check we get the right values for the max sizes. | 210 // Check we get the right values for the max sizes. |
| 211 EXPECT_EQ(kMax2dLevels, manager_->MaxLevelsForTarget(GL_TEXTURE_2D)); | 211 EXPECT_EQ(kMax2dLevels, manager_->MaxLevelsForTarget(GL_TEXTURE_2D)); |
| 212 EXPECT_EQ(kMaxCubeMapLevels, | 212 EXPECT_EQ(kMaxCubeMapLevels, |
| 213 manager_->MaxLevelsForTarget(GL_TEXTURE_CUBE_MAP)); | 213 manager_->MaxLevelsForTarget(GL_TEXTURE_CUBE_MAP)); |
| 214 EXPECT_EQ(kMaxCubeMapLevels, | 214 EXPECT_EQ(kMaxCubeMapLevels, |
| 215 manager_->MaxLevelsForTarget(GL_TEXTURE_CUBE_MAP_POSITIVE_X)); | 215 manager_->MaxLevelsForTarget(GL_TEXTURE_CUBE_MAP_POSITIVE_X)); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 GL_TEXTURE_CUBE_MAP, level, | 311 GL_TEXTURE_CUBE_MAP, level, |
| 312 (kMaxCubeMapTextureSize >> level) * 2, | 312 (kMaxCubeMapTextureSize >> level) * 2, |
| 313 (kMaxCubeMapTextureSize >> level) * 2, | 313 (kMaxCubeMapTextureSize >> level) * 2, |
| 314 1)); | 314 1)); |
| 315 } | 315 } |
| 316 } | 316 } |
| 317 | 317 |
| 318 TEST_F(TextureManagerTest, ValidForTargetNPOT) { | 318 TEST_F(TextureManagerTest, ValidForTargetNPOT) { |
| 319 TestHelper::SetupFeatureInfoInitExpectations( | 319 TestHelper::SetupFeatureInfoInitExpectations( |
| 320 gl_.get(), "GL_OES_texture_npot"); | 320 gl_.get(), "GL_OES_texture_npot"); |
| 321 FeatureInfo::Ref feature_info(new FeatureInfo()); | 321 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 322 feature_info->Initialize(NULL); | 322 feature_info->Initialize(NULL); |
| 323 TextureManager manager( | 323 TextureManager manager( |
| 324 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 324 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 325 // Check NPOT width on level 0 | 325 // Check NPOT width on level 0 |
| 326 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); | 326 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); |
| 327 // Check NPOT height on level 0 | 327 // Check NPOT height on level 0 |
| 328 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); | 328 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); |
| 329 // Check NPOT width on level 1 | 329 // Check NPOT width on level 1 |
| 330 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); | 330 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); |
| 331 // Check NPOT height on level 1 | 331 // Check NPOT height on level 1 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 349 info_ = NULL; | 349 info_ = NULL; |
| 350 } | 350 } |
| 351 | 351 |
| 352 protected: | 352 protected: |
| 353 void SetUpBase(MemoryTracker* memory_tracker) { | 353 void SetUpBase(MemoryTracker* memory_tracker) { |
| 354 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); | 354 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); |
| 355 ::gfx::GLInterface::SetGLInterface(gl_.get()); | 355 ::gfx::GLInterface::SetGLInterface(gl_.get()); |
| 356 manager_.reset(new TextureManager( | 356 manager_.reset(new TextureManager( |
| 357 memory_tracker, feature_info_.get(), | 357 memory_tracker, feature_info_.get(), |
| 358 kMaxTextureSize, kMaxCubeMapTextureSize)); | 358 kMaxTextureSize, kMaxCubeMapTextureSize)); |
| 359 manager_->CreateTextureInfo(kClient1Id, kService1Id); | 359 manager_->CreateTexture(kClient1Id, kService1Id); |
| 360 info_ = manager_->GetTextureInfo(kClient1Id); | 360 info_ = manager_->GetTexture(kClient1Id); |
| 361 ASSERT_TRUE(info_.get() != NULL); | 361 ASSERT_TRUE(info_.get() != NULL); |
| 362 } | 362 } |
| 363 | 363 |
| 364 virtual void TearDown() { | 364 virtual void TearDown() { |
| 365 if (info_.get()) { | 365 if (info_.get()) { |
| 366 GLuint client_id = 0; | 366 GLuint client_id = 0; |
| 367 // If it's not in the manager then setting info_ to NULL will | 367 // If it's not in the manager then setting info_ to NULL will |
| 368 // delete the texture. | 368 // delete the texture. |
| 369 if (!manager_->GetClientId(info_->service_id(), &client_id)) { | 369 if (!manager_->GetClientId(info_->service_id(), &client_id)) { |
| 370 // Check that it gets deleted when the last reference is released. | 370 // Check that it gets deleted when the last reference is released. |
| 371 EXPECT_CALL(*gl_, | 371 EXPECT_CALL(*gl_, |
| 372 DeleteTextures(1, ::testing::Pointee(info_->service_id()))) | 372 DeleteTextures(1, ::testing::Pointee(info_->service_id()))) |
| 373 .Times(1) | 373 .Times(1) |
| 374 .RetiresOnSaturation(); | 374 .RetiresOnSaturation(); |
| 375 } | 375 } |
| 376 info_ = NULL; | 376 info_ = NULL; |
| 377 } | 377 } |
| 378 manager_->Destroy(false); | 378 manager_->Destroy(false); |
| 379 manager_.reset(); | 379 manager_.reset(); |
| 380 ::gfx::GLInterface::SetGLInterface(NULL); | 380 ::gfx::GLInterface::SetGLInterface(NULL); |
| 381 gl_.reset(); | 381 gl_.reset(); |
| 382 } | 382 } |
| 383 | 383 |
| 384 // Use StrictMock to make 100% sure we know how GL will be called. | 384 // Use StrictMock to make 100% sure we know how GL will be called. |
| 385 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; | 385 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; |
| 386 FeatureInfo::Ref feature_info_; | 386 scoped_refptr<FeatureInfo> feature_info_; |
| 387 scoped_ptr<TextureManager> manager_; | 387 scoped_ptr<TextureManager> manager_; |
| 388 TextureManager::TextureInfo::Ref info_; | 388 scoped_refptr<Texture> info_; |
| 389 }; | 389 }; |
| 390 | 390 |
| 391 class TextureInfoTest : public TextureInfoTestBase { | 391 class TextureInfoTest : public TextureInfoTestBase { |
| 392 protected: | 392 protected: |
| 393 virtual void SetUp() { | 393 virtual void SetUp() { |
| 394 SetUpBase(NULL); | 394 SetUpBase(NULL); |
| 395 } | 395 } |
| 396 }; | 396 }; |
| 397 | 397 |
| 398 class TextureInfoMemoryTrackerTest : public TextureInfoTestBase { | 398 class TextureInfoMemoryTrackerTest : public TextureInfoTestBase { |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 578 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 578 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 579 EXPECT_FALSE(info_->npot()); | 579 EXPECT_FALSE(info_->npot()); |
| 580 EXPECT_FALSE(info_->texture_complete()); | 580 EXPECT_FALSE(info_->texture_complete()); |
| 581 EXPECT_TRUE(manager_->CanGenerateMipmaps(info_)); | 581 EXPECT_TRUE(manager_->CanGenerateMipmaps(info_)); |
| 582 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 582 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 583 } | 583 } |
| 584 | 584 |
| 585 TEST_F(TextureInfoTest, NPOT2DNPOTOK) { | 585 TEST_F(TextureInfoTest, NPOT2DNPOTOK) { |
| 586 TestHelper::SetupFeatureInfoInitExpectations( | 586 TestHelper::SetupFeatureInfoInitExpectations( |
| 587 gl_.get(), "GL_OES_texture_npot"); | 587 gl_.get(), "GL_OES_texture_npot"); |
| 588 FeatureInfo::Ref feature_info(new FeatureInfo()); | 588 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 589 feature_info->Initialize(NULL); | 589 feature_info->Initialize(NULL); |
| 590 TextureManager manager( | 590 TextureManager manager( |
| 591 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 591 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 592 manager.CreateTextureInfo(kClient1Id, kService1Id); | 592 manager.CreateTexture(kClient1Id, kService1Id); |
| 593 TextureManager::TextureInfo* info = manager.GetTextureInfo(kClient1Id); | 593 Texture* info = manager.GetTexture(kClient1Id); |
| 594 ASSERT_TRUE(info_ != NULL); | 594 ASSERT_TRUE(info_ != NULL); |
| 595 | 595 |
| 596 manager.SetInfoTarget(info, GL_TEXTURE_2D); | 596 manager.SetInfoTarget(info, GL_TEXTURE_2D); |
| 597 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); | 597 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); |
| 598 // Check Setting level 0 to NPOT | 598 // Check Setting level 0 to NPOT |
| 599 manager.SetLevelInfo(info, | 599 manager.SetLevelInfo(info, |
| 600 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 600 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 601 EXPECT_TRUE(info->npot()); | 601 EXPECT_TRUE(info->npot()); |
| 602 EXPECT_FALSE(info->texture_complete()); | 602 EXPECT_FALSE(info->texture_complete()); |
| 603 EXPECT_TRUE(manager.CanGenerateMipmaps(info)); | 603 EXPECT_TRUE(manager.CanGenerateMipmaps(info)); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 manager_->SetLevelInfo(info_, | 700 manager_->SetLevelInfo(info_, |
| 701 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 701 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 702 GLsizei width = -1; | 702 GLsizei width = -1; |
| 703 GLsizei height = -1; | 703 GLsizei height = -1; |
| 704 EXPECT_FALSE(info_->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height)); | 704 EXPECT_FALSE(info_->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height)); |
| 705 EXPECT_FALSE(info_->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height)); | 705 EXPECT_FALSE(info_->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height)); |
| 706 EXPECT_FALSE(info_->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); | 706 EXPECT_FALSE(info_->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
| 707 EXPECT_TRUE(info_->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); | 707 EXPECT_TRUE(info_->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); |
| 708 EXPECT_EQ(4, width); | 708 EXPECT_EQ(4, width); |
| 709 EXPECT_EQ(5, height); | 709 EXPECT_EQ(5, height); |
| 710 manager_->RemoveTextureInfo(kClient1Id); | 710 manager_->RemoveTexture(kClient1Id); |
| 711 EXPECT_TRUE(info_->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); | 711 EXPECT_TRUE(info_->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); |
| 712 EXPECT_EQ(4, width); | 712 EXPECT_EQ(4, width); |
| 713 EXPECT_EQ(5, height); | 713 EXPECT_EQ(5, height); |
| 714 } | 714 } |
| 715 | 715 |
| 716 TEST_F(TextureInfoTest, GetLevelType) { | 716 TEST_F(TextureInfoTest, GetLevelType) { |
| 717 manager_->SetInfoTarget(info_, GL_TEXTURE_2D); | 717 manager_->SetInfoTarget(info_, GL_TEXTURE_2D); |
| 718 manager_->SetLevelInfo(info_, | 718 manager_->SetLevelInfo(info_, |
| 719 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 719 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 720 GLenum type = -1; | 720 GLenum type = -1; |
| 721 GLenum format = -1; | 721 GLenum format = -1; |
| 722 EXPECT_FALSE(info_->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); | 722 EXPECT_FALSE(info_->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); |
| 723 EXPECT_FALSE(info_->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); | 723 EXPECT_FALSE(info_->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); |
| 724 EXPECT_FALSE(info_->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); | 724 EXPECT_FALSE(info_->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); |
| 725 EXPECT_TRUE(info_->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 725 EXPECT_TRUE(info_->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
| 726 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 726 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
| 727 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 727 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
| 728 manager_->RemoveTextureInfo(kClient1Id); | 728 manager_->RemoveTexture(kClient1Id); |
| 729 EXPECT_TRUE(info_->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 729 EXPECT_TRUE(info_->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
| 730 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 730 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
| 731 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 731 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
| 732 } | 732 } |
| 733 | 733 |
| 734 TEST_F(TextureInfoTest, ValidForTexture) { | 734 TEST_F(TextureInfoTest, ValidForTexture) { |
| 735 manager_->SetInfoTarget(info_, GL_TEXTURE_2D); | 735 manager_->SetInfoTarget(info_, GL_TEXTURE_2D); |
| 736 manager_->SetLevelInfo(info_, | 736 manager_->SetLevelInfo(info_, |
| 737 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 737 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 738 // Check bad face. | 738 // Check bad face. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 765 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGB, GL_UNSIGNED_BYTE)); | 765 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGB, GL_UNSIGNED_BYTE)); |
| 766 // Check bad type. | 766 // Check bad type. |
| 767 EXPECT_FALSE(info_->ValidForTexture( | 767 EXPECT_FALSE(info_->ValidForTexture( |
| 768 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4)); | 768 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4)); |
| 769 // Check valid full size | 769 // Check valid full size |
| 770 EXPECT_TRUE(info_->ValidForTexture( | 770 EXPECT_TRUE(info_->ValidForTexture( |
| 771 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 771 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 772 // Check valid particial size. | 772 // Check valid particial size. |
| 773 EXPECT_TRUE(info_->ValidForTexture( | 773 EXPECT_TRUE(info_->ValidForTexture( |
| 774 GL_TEXTURE_2D, 1, 1, 1, 2, 3, GL_RGBA, GL_UNSIGNED_BYTE)); | 774 GL_TEXTURE_2D, 1, 1, 1, 2, 3, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 775 manager_->RemoveTextureInfo(kClient1Id); | 775 manager_->RemoveTexture(kClient1Id); |
| 776 EXPECT_TRUE(info_->ValidForTexture( | 776 EXPECT_TRUE(info_->ValidForTexture( |
| 777 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 777 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 778 } | 778 } |
| 779 | 779 |
| 780 TEST_F(TextureInfoTest, FloatNotLinear) { | 780 TEST_F(TextureInfoTest, FloatNotLinear) { |
| 781 TestHelper::SetupFeatureInfoInitExpectations( | 781 TestHelper::SetupFeatureInfoInitExpectations( |
| 782 gl_.get(), "GL_OES_texture_float"); | 782 gl_.get(), "GL_OES_texture_float"); |
| 783 FeatureInfo::Ref feature_info(new FeatureInfo()); | 783 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 784 feature_info->Initialize(NULL); | 784 feature_info->Initialize(NULL); |
| 785 TextureManager manager( | 785 TextureManager manager( |
| 786 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 786 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 787 manager.CreateTextureInfo(kClient1Id, kService1Id); | 787 manager.CreateTexture(kClient1Id, kService1Id); |
| 788 TextureManager::TextureInfo* info = manager.GetTextureInfo(kClient1Id); | 788 Texture* info = manager.GetTexture(kClient1Id); |
| 789 ASSERT_TRUE(info != NULL); | 789 ASSERT_TRUE(info != NULL); |
| 790 manager.SetInfoTarget(info, GL_TEXTURE_2D); | 790 manager.SetInfoTarget(info, GL_TEXTURE_2D); |
| 791 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); | 791 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); |
| 792 manager.SetLevelInfo(info, | 792 manager.SetLevelInfo(info, |
| 793 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 793 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); |
| 794 EXPECT_FALSE(info->texture_complete()); | 794 EXPECT_FALSE(info->texture_complete()); |
| 795 manager.SetParameter(info, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 795 manager.SetParameter(info, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
| 796 EXPECT_FALSE(info->texture_complete()); | 796 EXPECT_FALSE(info->texture_complete()); |
| 797 manager.SetParameter(info, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); | 797 manager.SetParameter(info, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); |
| 798 EXPECT_TRUE(info->texture_complete()); | 798 EXPECT_TRUE(info->texture_complete()); |
| 799 manager.Destroy(false); | 799 manager.Destroy(false); |
| 800 } | 800 } |
| 801 | 801 |
| 802 TEST_F(TextureInfoTest, FloatLinear) { | 802 TEST_F(TextureInfoTest, FloatLinear) { |
| 803 TestHelper::SetupFeatureInfoInitExpectations( | 803 TestHelper::SetupFeatureInfoInitExpectations( |
| 804 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); | 804 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); |
| 805 FeatureInfo::Ref feature_info(new FeatureInfo()); | 805 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 806 feature_info->Initialize(NULL); | 806 feature_info->Initialize(NULL); |
| 807 TextureManager manager( | 807 TextureManager manager( |
| 808 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 808 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 809 manager.CreateTextureInfo(kClient1Id, kService1Id); | 809 manager.CreateTexture(kClient1Id, kService1Id); |
| 810 TextureManager::TextureInfo* info = manager.GetTextureInfo(kClient1Id); | 810 Texture* info = manager.GetTexture(kClient1Id); |
| 811 ASSERT_TRUE(info != NULL); | 811 ASSERT_TRUE(info != NULL); |
| 812 manager.SetInfoTarget(info, GL_TEXTURE_2D); | 812 manager.SetInfoTarget(info, GL_TEXTURE_2D); |
| 813 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); | 813 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); |
| 814 manager.SetLevelInfo(info, | 814 manager.SetLevelInfo(info, |
| 815 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 815 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); |
| 816 EXPECT_TRUE(info->texture_complete()); | 816 EXPECT_TRUE(info->texture_complete()); |
| 817 manager.Destroy(false); | 817 manager.Destroy(false); |
| 818 } | 818 } |
| 819 | 819 |
| 820 TEST_F(TextureInfoTest, HalfFloatNotLinear) { | 820 TEST_F(TextureInfoTest, HalfFloatNotLinear) { |
| 821 TestHelper::SetupFeatureInfoInitExpectations( | 821 TestHelper::SetupFeatureInfoInitExpectations( |
| 822 gl_.get(), "GL_OES_texture_half_float"); | 822 gl_.get(), "GL_OES_texture_half_float"); |
| 823 FeatureInfo::Ref feature_info(new FeatureInfo()); | 823 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 824 feature_info->Initialize(NULL); | 824 feature_info->Initialize(NULL); |
| 825 TextureManager manager( | 825 TextureManager manager( |
| 826 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 826 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 827 manager.CreateTextureInfo(kClient1Id, kService1Id); | 827 manager.CreateTexture(kClient1Id, kService1Id); |
| 828 TextureManager::TextureInfo* info = manager.GetTextureInfo(kClient1Id); | 828 Texture* info = manager.GetTexture(kClient1Id); |
| 829 ASSERT_TRUE(info != NULL); | 829 ASSERT_TRUE(info != NULL); |
| 830 manager.SetInfoTarget(info, GL_TEXTURE_2D); | 830 manager.SetInfoTarget(info, GL_TEXTURE_2D); |
| 831 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); | 831 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); |
| 832 manager.SetLevelInfo(info, | 832 manager.SetLevelInfo(info, |
| 833 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 833 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); |
| 834 EXPECT_FALSE(info->texture_complete()); | 834 EXPECT_FALSE(info->texture_complete()); |
| 835 manager.SetParameter(info, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 835 manager.SetParameter(info, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
| 836 EXPECT_FALSE(info->texture_complete()); | 836 EXPECT_FALSE(info->texture_complete()); |
| 837 manager.SetParameter(info, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); | 837 manager.SetParameter(info, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); |
| 838 EXPECT_TRUE(info->texture_complete()); | 838 EXPECT_TRUE(info->texture_complete()); |
| 839 manager.Destroy(false); | 839 manager.Destroy(false); |
| 840 } | 840 } |
| 841 | 841 |
| 842 TEST_F(TextureInfoTest, HalfFloatLinear) { | 842 TEST_F(TextureInfoTest, HalfFloatLinear) { |
| 843 TestHelper::SetupFeatureInfoInitExpectations( | 843 TestHelper::SetupFeatureInfoInitExpectations( |
| 844 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); | 844 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); |
| 845 FeatureInfo::Ref feature_info(new FeatureInfo()); | 845 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 846 feature_info->Initialize(NULL); | 846 feature_info->Initialize(NULL); |
| 847 TextureManager manager( | 847 TextureManager manager( |
| 848 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 848 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 849 manager.CreateTextureInfo(kClient1Id, kService1Id); | 849 manager.CreateTexture(kClient1Id, kService1Id); |
| 850 TextureManager::TextureInfo* info = manager.GetTextureInfo(kClient1Id); | 850 Texture* info = manager.GetTexture(kClient1Id); |
| 851 ASSERT_TRUE(info != NULL); | 851 ASSERT_TRUE(info != NULL); |
| 852 manager.SetInfoTarget(info, GL_TEXTURE_2D); | 852 manager.SetInfoTarget(info, GL_TEXTURE_2D); |
| 853 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); | 853 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target()); |
| 854 manager.SetLevelInfo(info, | 854 manager.SetLevelInfo(info, |
| 855 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 855 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); |
| 856 EXPECT_TRUE(info->texture_complete()); | 856 EXPECT_TRUE(info->texture_complete()); |
| 857 manager.Destroy(false); | 857 manager.Destroy(false); |
| 858 } | 858 } |
| 859 | 859 |
| 860 TEST_F(TextureInfoTest, EGLImageExternal) { | 860 TEST_F(TextureInfoTest, EGLImageExternal) { |
| 861 TestHelper::SetupFeatureInfoInitExpectations( | 861 TestHelper::SetupFeatureInfoInitExpectations( |
| 862 gl_.get(), "GL_OES_EGL_image_external"); | 862 gl_.get(), "GL_OES_EGL_image_external"); |
| 863 FeatureInfo::Ref feature_info(new FeatureInfo()); | 863 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 864 feature_info->Initialize(NULL); | 864 feature_info->Initialize(NULL); |
| 865 TextureManager manager( | 865 TextureManager manager( |
| 866 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 866 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 867 manager.CreateTextureInfo(kClient1Id, kService1Id); | 867 manager.CreateTexture(kClient1Id, kService1Id); |
| 868 TextureManager::TextureInfo* info = manager.GetTextureInfo(kClient1Id); | 868 Texture* info = manager.GetTexture(kClient1Id); |
| 869 ASSERT_TRUE(info != NULL); | 869 ASSERT_TRUE(info != NULL); |
| 870 manager.SetInfoTarget(info, GL_TEXTURE_EXTERNAL_OES); | 870 manager.SetInfoTarget(info, GL_TEXTURE_EXTERNAL_OES); |
| 871 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), info->target()); | 871 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), info->target()); |
| 872 EXPECT_FALSE(manager.CanGenerateMipmaps(info)); | 872 EXPECT_FALSE(manager.CanGenerateMipmaps(info)); |
| 873 manager.Destroy(false); | 873 manager.Destroy(false); |
| 874 } | 874 } |
| 875 | 875 |
| 876 TEST_F(TextureInfoTest, DepthTexture) { | 876 TEST_F(TextureInfoTest, DepthTexture) { |
| 877 TestHelper::SetupFeatureInfoInitExpectations( | 877 TestHelper::SetupFeatureInfoInitExpectations( |
| 878 gl_.get(), "GL_ANGLE_depth_texture"); | 878 gl_.get(), "GL_ANGLE_depth_texture"); |
| 879 FeatureInfo::Ref feature_info(new FeatureInfo()); | 879 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 880 feature_info->Initialize(NULL); | 880 feature_info->Initialize(NULL); |
| 881 TextureManager manager( | 881 TextureManager manager( |
| 882 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 882 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 883 manager.CreateTextureInfo(kClient1Id, kService1Id); | 883 manager.CreateTexture(kClient1Id, kService1Id); |
| 884 TextureManager::TextureInfo* info = manager.GetTextureInfo(kClient1Id); | 884 Texture* info = manager.GetTexture(kClient1Id); |
| 885 ASSERT_TRUE(info != NULL); | 885 ASSERT_TRUE(info != NULL); |
| 886 manager.SetInfoTarget(info, GL_TEXTURE_2D); | 886 manager.SetInfoTarget(info, GL_TEXTURE_2D); |
| 887 manager.SetLevelInfo( | 887 manager.SetLevelInfo( |
| 888 info, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0, | 888 info, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0, |
| 889 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false); | 889 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false); |
| 890 EXPECT_FALSE(manager.CanGenerateMipmaps(info)); | 890 EXPECT_FALSE(manager.CanGenerateMipmaps(info)); |
| 891 manager.Destroy(false); | 891 manager.Destroy(false); |
| 892 } | 892 } |
| 893 | 893 |
| 894 TEST_F(TextureInfoTest, SafeUnsafe) { | 894 TEST_F(TextureInfoTest, SafeUnsafe) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 944 EXPECT_FALSE(info_->SafeToRenderFrom()); | 944 EXPECT_FALSE(info_->SafeToRenderFrom()); |
| 945 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 945 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 946 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 946 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 947 EXPECT_EQ(1, info_->num_uncleared_mips()); | 947 EXPECT_EQ(1, info_->num_uncleared_mips()); |
| 948 manager_->MarkMipmapsGenerated(info_); | 948 manager_->MarkMipmapsGenerated(info_); |
| 949 EXPECT_TRUE(info_->SafeToRenderFrom()); | 949 EXPECT_TRUE(info_->SafeToRenderFrom()); |
| 950 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 950 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 951 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 951 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 952 EXPECT_EQ(0, info_->num_uncleared_mips()); | 952 EXPECT_EQ(0, info_->num_uncleared_mips()); |
| 953 | 953 |
| 954 manager_->CreateTextureInfo(kClient2Id, kService2Id); | 954 manager_->CreateTexture(kClient2Id, kService2Id); |
| 955 TextureManager::TextureInfo::Ref info2 = manager_->GetTextureInfo(kClient2Id); | 955 scoped_refptr<Texture> info2( |
| 956 manager_->GetTexture(kClient2Id)); |
| 956 ASSERT_TRUE(info2.get() != NULL); | 957 ASSERT_TRUE(info2.get() != NULL); |
| 957 manager_->SetInfoTarget(info2, GL_TEXTURE_2D); | 958 manager_->SetInfoTarget(info2, GL_TEXTURE_2D); |
| 958 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 959 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 959 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 960 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 960 EXPECT_EQ(0, info2->num_uncleared_mips()); | 961 EXPECT_EQ(0, info2->num_uncleared_mips()); |
| 961 manager_->SetLevelInfo(info2, | 962 manager_->SetLevelInfo(info2, |
| 962 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 963 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 963 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 964 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 964 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 965 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 965 EXPECT_EQ(0, info2->num_uncleared_mips()); | 966 EXPECT_EQ(0, info2->num_uncleared_mips()); |
| 966 manager_->SetLevelInfo(info2, | 967 manager_->SetLevelInfo(info2, |
| 967 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 968 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 968 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 969 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 969 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 970 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 970 EXPECT_EQ(1, info2->num_uncleared_mips()); | 971 EXPECT_EQ(1, info2->num_uncleared_mips()); |
| 971 | 972 |
| 972 manager_->CreateTextureInfo(kClient3Id, kService3Id); | 973 manager_->CreateTexture(kClient3Id, kService3Id); |
| 973 TextureManager::TextureInfo::Ref info3 = manager_->GetTextureInfo(kClient3Id); | 974 scoped_refptr<Texture> info3( |
| 975 manager_->GetTexture(kClient3Id)); |
| 974 ASSERT_TRUE(info3.get() != NULL); | 976 ASSERT_TRUE(info3.get() != NULL); |
| 975 manager_->SetInfoTarget(info3, GL_TEXTURE_2D); | 977 manager_->SetInfoTarget(info3, GL_TEXTURE_2D); |
| 976 manager_->SetLevelInfo(info3, | 978 manager_->SetLevelInfo(info3, |
| 977 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 979 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 978 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 980 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 979 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 981 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 980 EXPECT_EQ(1, info3->num_uncleared_mips()); | 982 EXPECT_EQ(1, info3->num_uncleared_mips()); |
| 981 manager_->SetLevelCleared(info2, GL_TEXTURE_2D, 0, true); | 983 manager_->SetLevelCleared(info2, GL_TEXTURE_2D, 0, true); |
| 982 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 984 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 983 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 985 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 984 EXPECT_EQ(0, info2->num_uncleared_mips()); | 986 EXPECT_EQ(0, info2->num_uncleared_mips()); |
| 985 manager_->SetLevelCleared(info3, GL_TEXTURE_2D, 0, true); | 987 manager_->SetLevelCleared(info3, GL_TEXTURE_2D, 0, true); |
| 986 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 988 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 987 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 989 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 988 EXPECT_EQ(0, info3->num_uncleared_mips()); | 990 EXPECT_EQ(0, info3->num_uncleared_mips()); |
| 989 | 991 |
| 990 manager_->SetLevelInfo(info2, | 992 manager_->SetLevelInfo(info2, |
| 991 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 993 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 992 manager_->SetLevelInfo(info3, | 994 manager_->SetLevelInfo(info3, |
| 993 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 995 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 994 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 996 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 995 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 997 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 996 EXPECT_EQ(1, info2->num_uncleared_mips()); | 998 EXPECT_EQ(1, info2->num_uncleared_mips()); |
| 997 EXPECT_EQ(1, info3->num_uncleared_mips()); | 999 EXPECT_EQ(1, info3->num_uncleared_mips()); |
| 998 manager_->RemoveTextureInfo(kClient3Id); | 1000 manager_->RemoveTexture(kClient3Id); |
| 999 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1001 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1000 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1002 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1001 manager_->RemoveTextureInfo(kClient2Id); | 1003 manager_->RemoveTexture(kClient2Id); |
| 1002 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1004 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1003 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1005 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1004 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1006 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
| 1005 .Times(1) | 1007 .Times(1) |
| 1006 .RetiresOnSaturation(); | 1008 .RetiresOnSaturation(); |
| 1007 info2 = NULL; | 1009 info2 = NULL; |
| 1008 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1010 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1009 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1011 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1010 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) | 1012 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) |
| 1011 .Times(1) | 1013 .Times(1) |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1055 | 1057 |
| 1056 TEST_F(TextureInfoTest, UseDeletedTexture) { | 1058 TEST_F(TextureInfoTest, UseDeletedTexture) { |
| 1057 static const GLuint kClient2Id = 2; | 1059 static const GLuint kClient2Id = 2; |
| 1058 static const GLuint kService2Id = 12; | 1060 static const GLuint kService2Id = 12; |
| 1059 // Make the default texture renderable | 1061 // Make the default texture renderable |
| 1060 manager_->SetInfoTarget(info_, GL_TEXTURE_2D); | 1062 manager_->SetInfoTarget(info_, GL_TEXTURE_2D); |
| 1061 manager_->SetLevelInfo(info_, | 1063 manager_->SetLevelInfo(info_, |
| 1062 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1064 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1063 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1065 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 1064 // Make a new texture | 1066 // Make a new texture |
| 1065 manager_->CreateTextureInfo(kClient2Id, kService2Id); | 1067 manager_->CreateTexture(kClient2Id, kService2Id); |
| 1066 TextureManager::TextureInfo::Ref info(manager_->GetTextureInfo(kClient2Id)); | 1068 scoped_refptr<Texture> info( |
| 1069 manager_->GetTexture(kClient2Id)); |
| 1067 manager_->SetInfoTarget(info, GL_TEXTURE_2D); | 1070 manager_->SetInfoTarget(info, GL_TEXTURE_2D); |
| 1068 EXPECT_FALSE(manager_->CanRender(info)); | 1071 EXPECT_FALSE(manager_->CanRender(info)); |
| 1069 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1072 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 1070 // Remove it. | 1073 // Remove it. |
| 1071 manager_->RemoveTextureInfo(kClient2Id); | 1074 manager_->RemoveTexture(kClient2Id); |
| 1072 EXPECT_FALSE(manager_->CanRender(info)); | 1075 EXPECT_FALSE(manager_->CanRender(info)); |
| 1073 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1076 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 1074 // Check that we can still manipulate it and it effects the manager. | 1077 // Check that we can still manipulate it and it effects the manager. |
| 1075 manager_->SetLevelInfo(info, | 1078 manager_->SetLevelInfo(info, |
| 1076 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1079 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1077 EXPECT_TRUE(manager_->CanRender(info)); | 1080 EXPECT_TRUE(manager_->CanRender(info)); |
| 1078 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1081 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 1079 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1082 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
| 1080 .Times(1) | 1083 .Times(1) |
| 1081 .RetiresOnSaturation(); | 1084 .RetiresOnSaturation(); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1216 | 1219 |
| 1217 // Check the set was acutally getting different signatures. | 1220 // Check the set was acutally getting different signatures. |
| 1218 EXPECT_EQ(11u, string_set.size()); | 1221 EXPECT_EQ(11u, string_set.size()); |
| 1219 } | 1222 } |
| 1220 | 1223 |
| 1221 | 1224 |
| 1222 } // namespace gles2 | 1225 } // namespace gles2 |
| 1223 } // namespace gpu | 1226 } // namespace gpu |
| 1224 | 1227 |
| 1225 | 1228 |
| OLD | NEW |