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/error_state_mock.h" | 8 #include "gpu/command_buffer/service/error_state_mock.h" |
9 #include "gpu/command_buffer/service/feature_info.h" | 9 #include "gpu/command_buffer/service/feature_info.h" |
10 #include "gpu/command_buffer/service/framebuffer_manager.h" | 10 #include "gpu/command_buffer/service/framebuffer_manager.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 }; | 40 }; |
41 | 41 |
42 class TextureManagerTest : public testing::Test { | 42 class TextureManagerTest : public testing::Test { |
43 public: | 43 public: |
44 static const GLint kMaxTextureSize = 16; | 44 static const GLint kMaxTextureSize = 16; |
45 static const GLint kMaxCubeMapTextureSize = 8; | 45 static const GLint kMaxCubeMapTextureSize = 8; |
46 static const GLint kMaxExternalTextureSize = 16; | 46 static const GLint kMaxExternalTextureSize = 16; |
47 static const GLint kMax2dLevels = 5; | 47 static const GLint kMax2dLevels = 5; |
48 static const GLint kMaxCubeMapLevels = 4; | 48 static const GLint kMaxCubeMapLevels = 4; |
49 static const GLint kMaxExternalLevels = 1; | 49 static const GLint kMaxExternalLevels = 1; |
| 50 static const bool kUseDefaultTextures = false; |
50 | 51 |
51 TextureManagerTest() | 52 TextureManagerTest() : feature_info_(new FeatureInfo()) {} |
52 : feature_info_(new FeatureInfo()) { | |
53 } | |
54 | 53 |
55 virtual ~TextureManagerTest() { | 54 virtual ~TextureManagerTest() { |
56 } | 55 } |
57 | 56 |
58 protected: | 57 protected: |
59 virtual void SetUp() { | 58 virtual void SetUp() { |
60 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); | 59 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); |
61 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); | 60 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); |
62 | 61 |
63 manager_.reset(new TextureManager( | 62 manager_.reset(new TextureManager(NULL, |
64 NULL, feature_info_.get(), | 63 feature_info_.get(), |
65 kMaxTextureSize, kMaxCubeMapTextureSize)); | 64 kMaxTextureSize, |
66 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 65 kMaxCubeMapTextureSize, |
| 66 kUseDefaultTextures)); |
| 67 TestHelper::SetupTextureManagerInitExpectations( |
| 68 gl_.get(), "", kUseDefaultTextures); |
67 manager_->Initialize(); | 69 manager_->Initialize(); |
68 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 70 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
69 } | 71 } |
70 | 72 |
71 virtual void TearDown() { | 73 virtual void TearDown() { |
72 manager_->Destroy(false); | 74 manager_->Destroy(false); |
73 manager_.reset(); | 75 manager_.reset(); |
74 ::gfx::MockGLInterface::SetGLInterface(NULL); | 76 ::gfx::MockGLInterface::SetGLInterface(NULL); |
75 gl_.reset(); | 77 gl_.reset(); |
76 } | 78 } |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 SetParameter( | 157 SetParameter( |
156 texture_ref, GL_TEXTURE_MAG_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM); | 158 texture_ref, GL_TEXTURE_MAG_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM); |
157 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter()); | 159 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter()); |
158 SetParameter(texture_ref, GL_TEXTURE_WRAP_S, GL_NEAREST, GL_INVALID_ENUM); | 160 SetParameter(texture_ref, GL_TEXTURE_WRAP_S, GL_NEAREST, GL_INVALID_ENUM); |
159 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_s()); | 161 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_s()); |
160 SetParameter(texture_ref, GL_TEXTURE_WRAP_T, GL_NEAREST, GL_INVALID_ENUM); | 162 SetParameter(texture_ref, GL_TEXTURE_WRAP_T, GL_NEAREST, GL_INVALID_ENUM); |
161 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t()); | 163 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t()); |
162 SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE); | 164 SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE); |
163 } | 165 } |
164 | 166 |
| 167 TEST_F(TextureManagerTest, UseDefaultTexturesTrue) { |
| 168 bool use_default_textures = true; |
| 169 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 170 |
| 171 TestHelper::SetupTextureManagerInitExpectations( |
| 172 gl_.get(), "GL_ANGLE_texture_usage", use_default_textures); |
| 173 TextureManager manager(NULL, |
| 174 feature_info_.get(), |
| 175 kMaxTextureSize, |
| 176 kMaxCubeMapTextureSize, |
| 177 use_default_textures); |
| 178 manager.Initialize(); |
| 179 |
| 180 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); |
| 181 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); |
| 182 |
| 183 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
| 184 |
| 185 manager.Destroy(false); |
| 186 } |
| 187 |
| 188 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { |
| 189 bool use_default_textures = false; |
| 190 TestHelper::SetupTextureManagerInitExpectations( |
| 191 gl_.get(), "GL_ANGLE_texture_usage", use_default_textures); |
| 192 TextureManager manager(NULL, |
| 193 feature_info_.get(), |
| 194 kMaxTextureSize, |
| 195 kMaxCubeMapTextureSize, |
| 196 use_default_textures); |
| 197 manager.Initialize(); |
| 198 |
| 199 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); |
| 200 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); |
| 201 |
| 202 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
| 203 |
| 204 manager.Destroy(false); |
| 205 } |
| 206 |
165 TEST_F(TextureManagerTest, TextureUsageExt) { | 207 TEST_F(TextureManagerTest, TextureUsageExt) { |
166 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 208 TestHelper::SetupTextureManagerInitExpectations( |
167 "GL_ANGLE_texture_usage"); | 209 gl_.get(), "GL_ANGLE_texture_usage", kUseDefaultTextures); |
168 TextureManager manager( | 210 TextureManager manager(NULL, |
169 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 211 feature_info_.get(), |
| 212 kMaxTextureSize, |
| 213 kMaxCubeMapTextureSize, |
| 214 kUseDefaultTextures); |
170 manager.Initialize(); | 215 manager.Initialize(); |
171 const GLuint kClient1Id = 1; | 216 const GLuint kClient1Id = 1; |
172 const GLuint kService1Id = 11; | 217 const GLuint kService1Id = 11; |
173 // Check we can create texture. | 218 // Check we can create texture. |
174 manager.CreateTexture(kClient1Id, kService1Id); | 219 manager.CreateTexture(kClient1Id, kService1Id); |
175 // Check texture got created. | 220 // Check texture got created. |
176 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 221 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
177 ASSERT_TRUE(texture_ref != NULL); | 222 ASSERT_TRUE(texture_ref != NULL); |
178 TestHelper::SetTexParameteriWithExpectations( | 223 TestHelper::SetTexParameteriWithExpectations( |
179 gl_.get(), error_state_.get(), &manager, texture_ref, | 224 gl_.get(), error_state_.get(), &manager, texture_ref, |
180 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE,GL_NO_ERROR); | 225 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE,GL_NO_ERROR); |
181 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), | 226 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), |
182 texture_ref->texture()->usage()); | 227 texture_ref->texture()->usage()); |
183 manager.Destroy(false); | 228 manager.Destroy(false); |
184 } | 229 } |
185 | 230 |
186 TEST_F(TextureManagerTest, Destroy) { | 231 TEST_F(TextureManagerTest, Destroy) { |
187 const GLuint kClient1Id = 1; | 232 const GLuint kClient1Id = 1; |
188 const GLuint kService1Id = 11; | 233 const GLuint kService1Id = 11; |
189 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 234 TestHelper::SetupTextureManagerInitExpectations( |
190 TextureManager manager( | 235 gl_.get(), "", kUseDefaultTextures); |
191 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 236 TextureManager manager(NULL, |
| 237 feature_info_.get(), |
| 238 kMaxTextureSize, |
| 239 kMaxCubeMapTextureSize, |
| 240 kUseDefaultTextures); |
192 manager.Initialize(); | 241 manager.Initialize(); |
193 // Check we can create texture. | 242 // Check we can create texture. |
194 manager.CreateTexture(kClient1Id, kService1Id); | 243 manager.CreateTexture(kClient1Id, kService1Id); |
195 // Check texture got created. | 244 // Check texture got created. |
196 TextureRef* texture = manager.GetTexture(kClient1Id); | 245 TextureRef* texture = manager.GetTexture(kClient1Id); |
197 ASSERT_TRUE(texture != NULL); | 246 ASSERT_TRUE(texture != NULL); |
198 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 247 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
199 .Times(1) | 248 .Times(1) |
200 .RetiresOnSaturation(); | 249 .RetiresOnSaturation(); |
201 TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), ""); | 250 TestHelper::SetupTextureManagerDestructionExpectations( |
| 251 gl_.get(), "", kUseDefaultTextures); |
202 manager.Destroy(true); | 252 manager.Destroy(true); |
203 // Check that resources got freed. | 253 // Check that resources got freed. |
204 texture = manager.GetTexture(kClient1Id); | 254 texture = manager.GetTexture(kClient1Id); |
205 ASSERT_TRUE(texture == NULL); | 255 ASSERT_TRUE(texture == NULL); |
206 } | 256 } |
207 | 257 |
208 TEST_F(TextureManagerTest, MaxValues) { | 258 TEST_F(TextureManagerTest, MaxValues) { |
209 // Check we get the right values for the max sizes. | 259 // Check we get the right values for the max sizes. |
210 EXPECT_EQ(kMax2dLevels, manager_->MaxLevelsForTarget(GL_TEXTURE_2D)); | 260 EXPECT_EQ(kMax2dLevels, manager_->MaxLevelsForTarget(GL_TEXTURE_2D)); |
211 EXPECT_EQ(kMaxCubeMapLevels, | 261 EXPECT_EQ(kMaxCubeMapLevels, |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 (kMaxCubeMapTextureSize >> level) * 2, | 362 (kMaxCubeMapTextureSize >> level) * 2, |
313 1)); | 363 1)); |
314 } | 364 } |
315 } | 365 } |
316 | 366 |
317 TEST_F(TextureManagerTest, ValidForTargetNPOT) { | 367 TEST_F(TextureManagerTest, ValidForTargetNPOT) { |
318 TestHelper::SetupFeatureInfoInitExpectations( | 368 TestHelper::SetupFeatureInfoInitExpectations( |
319 gl_.get(), "GL_OES_texture_npot"); | 369 gl_.get(), "GL_OES_texture_npot"); |
320 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 370 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
321 feature_info->Initialize(); | 371 feature_info->Initialize(); |
322 TextureManager manager( | 372 TextureManager manager(NULL, |
323 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 373 feature_info.get(), |
| 374 kMaxTextureSize, |
| 375 kMaxCubeMapTextureSize, |
| 376 kUseDefaultTextures); |
324 // Check NPOT width on level 0 | 377 // Check NPOT width on level 0 |
325 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); | 378 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); |
326 // Check NPOT height on level 0 | 379 // Check NPOT height on level 0 |
327 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); | 380 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); |
328 // Check NPOT width on level 1 | 381 // Check NPOT width on level 1 |
329 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); | 382 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); |
330 // Check NPOT height on level 1 | 383 // Check NPOT height on level 1 |
331 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); | 384 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); |
332 manager.Destroy(false); | 385 manager.Destroy(false); |
333 } | 386 } |
334 | 387 |
335 class TextureTestBase : public testing::Test { | 388 class TextureTestBase : public testing::Test { |
336 public: | 389 public: |
337 static const GLint kMaxTextureSize = 16; | 390 static const GLint kMaxTextureSize = 16; |
338 static const GLint kMaxCubeMapTextureSize = 8; | 391 static const GLint kMaxCubeMapTextureSize = 8; |
339 static const GLint kMax2dLevels = 5; | 392 static const GLint kMax2dLevels = 5; |
340 static const GLint kMaxCubeMapLevels = 4; | 393 static const GLint kMaxCubeMapLevels = 4; |
341 static const GLuint kClient1Id = 1; | 394 static const GLuint kClient1Id = 1; |
342 static const GLuint kService1Id = 11; | 395 static const GLuint kService1Id = 11; |
| 396 static const bool kUseDefaultTextures = false; |
343 | 397 |
344 TextureTestBase() | 398 TextureTestBase() |
345 : feature_info_(new FeatureInfo()) { | 399 : feature_info_(new FeatureInfo()) { |
346 } | 400 } |
347 virtual ~TextureTestBase() { | 401 virtual ~TextureTestBase() { |
348 texture_ref_ = NULL; | 402 texture_ref_ = NULL; |
349 } | 403 } |
350 | 404 |
351 protected: | 405 protected: |
352 void SetUpBase(MemoryTracker* memory_tracker, std::string extensions) { | 406 void SetUpBase(MemoryTracker* memory_tracker, std::string extensions) { |
353 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); | 407 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); |
354 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); | 408 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); |
355 | 409 |
356 if (!extensions.empty()) { | 410 if (!extensions.empty()) { |
357 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), | 411 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), |
358 extensions.c_str()); | 412 extensions.c_str()); |
359 feature_info_->Initialize(); | 413 feature_info_->Initialize(); |
360 } | 414 } |
361 | 415 |
362 manager_.reset(new TextureManager( | 416 manager_.reset(new TextureManager(memory_tracker, |
363 memory_tracker, feature_info_.get(), | 417 feature_info_.get(), |
364 kMaxTextureSize, kMaxCubeMapTextureSize)); | 418 kMaxTextureSize, |
| 419 kMaxCubeMapTextureSize, |
| 420 kUseDefaultTextures)); |
365 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); | 421 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); |
366 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 422 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
367 manager_->CreateTexture(kClient1Id, kService1Id); | 423 manager_->CreateTexture(kClient1Id, kService1Id); |
368 texture_ref_ = manager_->GetTexture(kClient1Id); | 424 texture_ref_ = manager_->GetTexture(kClient1Id); |
369 ASSERT_TRUE(texture_ref_.get() != NULL); | 425 ASSERT_TRUE(texture_ref_.get() != NULL); |
370 } | 426 } |
371 | 427 |
372 virtual void TearDown() { | 428 virtual void TearDown() { |
373 if (texture_ref_.get()) { | 429 if (texture_ref_.get()) { |
374 // If it's not in the manager then setting texture_ref_ to NULL will | 430 // If it's not in the manager then setting texture_ref_ to NULL will |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
788 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 844 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
789 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 845 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
790 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 846 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
791 } | 847 } |
792 | 848 |
793 TEST_F(TextureTest, NPOT2DNPOTOK) { | 849 TEST_F(TextureTest, NPOT2DNPOTOK) { |
794 TestHelper::SetupFeatureInfoInitExpectations( | 850 TestHelper::SetupFeatureInfoInitExpectations( |
795 gl_.get(), "GL_OES_texture_npot"); | 851 gl_.get(), "GL_OES_texture_npot"); |
796 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 852 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
797 feature_info->Initialize(); | 853 feature_info->Initialize(); |
798 TextureManager manager( | 854 TextureManager manager(NULL, |
799 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 855 feature_info.get(), |
| 856 kMaxTextureSize, |
| 857 kMaxCubeMapTextureSize, |
| 858 kUseDefaultTextures); |
800 manager.CreateTexture(kClient1Id, kService1Id); | 859 manager.CreateTexture(kClient1Id, kService1Id); |
801 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 860 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
802 ASSERT_TRUE(texture_ref != NULL); | 861 ASSERT_TRUE(texture_ref != NULL); |
803 Texture* texture = texture_ref->texture(); | 862 Texture* texture = texture_ref->texture(); |
804 | 863 |
805 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 864 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
806 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 865 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
807 // Check Setting level 0 to NPOT | 866 // Check Setting level 0 to NPOT |
808 manager.SetLevelInfo(texture_ref, | 867 manager.SetLevelInfo(texture_ref, |
809 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 868 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1076 manager_->RemoveTexture(kClient1Id); | 1135 manager_->RemoveTexture(kClient1Id); |
1077 EXPECT_TRUE(texture->ValidForTexture( | 1136 EXPECT_TRUE(texture->ValidForTexture( |
1078 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_UNSIGNED_BYTE)); | 1137 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_UNSIGNED_BYTE)); |
1079 } | 1138 } |
1080 | 1139 |
1081 TEST_F(TextureTest, FloatNotLinear) { | 1140 TEST_F(TextureTest, FloatNotLinear) { |
1082 TestHelper::SetupFeatureInfoInitExpectations( | 1141 TestHelper::SetupFeatureInfoInitExpectations( |
1083 gl_.get(), "GL_OES_texture_float"); | 1142 gl_.get(), "GL_OES_texture_float"); |
1084 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1143 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1085 feature_info->Initialize(); | 1144 feature_info->Initialize(); |
1086 TextureManager manager( | 1145 TextureManager manager(NULL, |
1087 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 1146 feature_info.get(), |
| 1147 kMaxTextureSize, |
| 1148 kMaxCubeMapTextureSize, |
| 1149 kUseDefaultTextures); |
1088 manager.CreateTexture(kClient1Id, kService1Id); | 1150 manager.CreateTexture(kClient1Id, kService1Id); |
1089 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1151 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1090 ASSERT_TRUE(texture_ref != NULL); | 1152 ASSERT_TRUE(texture_ref != NULL); |
1091 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1153 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1092 Texture* texture = texture_ref->texture(); | 1154 Texture* texture = texture_ref->texture(); |
1093 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1155 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1094 manager.SetLevelInfo(texture_ref, | 1156 manager.SetLevelInfo(texture_ref, |
1095 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 1157 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); |
1096 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1158 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1097 TestHelper::SetTexParameteriWithExpectations( | 1159 TestHelper::SetTexParameteriWithExpectations( |
1098 gl_.get(), error_state_.get(), &manager, | 1160 gl_.get(), error_state_.get(), &manager, |
1099 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1161 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1100 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1162 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1101 TestHelper::SetTexParameteriWithExpectations( | 1163 TestHelper::SetTexParameteriWithExpectations( |
1102 gl_.get(), error_state_.get(), &manager, texture_ref, | 1164 gl_.get(), error_state_.get(), &manager, texture_ref, |
1103 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1165 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1104 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1166 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1105 manager.Destroy(false); | 1167 manager.Destroy(false); |
1106 } | 1168 } |
1107 | 1169 |
1108 TEST_F(TextureTest, FloatLinear) { | 1170 TEST_F(TextureTest, FloatLinear) { |
1109 TestHelper::SetupFeatureInfoInitExpectations( | 1171 TestHelper::SetupFeatureInfoInitExpectations( |
1110 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); | 1172 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); |
1111 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1173 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1112 feature_info->Initialize(); | 1174 feature_info->Initialize(); |
1113 TextureManager manager( | 1175 TextureManager manager(NULL, |
1114 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 1176 feature_info.get(), |
| 1177 kMaxTextureSize, |
| 1178 kMaxCubeMapTextureSize, |
| 1179 kUseDefaultTextures); |
1115 manager.CreateTexture(kClient1Id, kService1Id); | 1180 manager.CreateTexture(kClient1Id, kService1Id); |
1116 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1181 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1117 ASSERT_TRUE(texture_ref != NULL); | 1182 ASSERT_TRUE(texture_ref != NULL); |
1118 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1183 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1119 Texture* texture = texture_ref->texture(); | 1184 Texture* texture = texture_ref->texture(); |
1120 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1185 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1121 manager.SetLevelInfo(texture_ref, | 1186 manager.SetLevelInfo(texture_ref, |
1122 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 1187 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); |
1123 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1188 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1124 manager.Destroy(false); | 1189 manager.Destroy(false); |
1125 } | 1190 } |
1126 | 1191 |
1127 TEST_F(TextureTest, HalfFloatNotLinear) { | 1192 TEST_F(TextureTest, HalfFloatNotLinear) { |
1128 TestHelper::SetupFeatureInfoInitExpectations( | 1193 TestHelper::SetupFeatureInfoInitExpectations( |
1129 gl_.get(), "GL_OES_texture_half_float"); | 1194 gl_.get(), "GL_OES_texture_half_float"); |
1130 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1195 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1131 feature_info->Initialize(); | 1196 feature_info->Initialize(); |
1132 TextureManager manager( | 1197 TextureManager manager(NULL, |
1133 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 1198 feature_info.get(), |
| 1199 kMaxTextureSize, |
| 1200 kMaxCubeMapTextureSize, |
| 1201 kUseDefaultTextures); |
1134 manager.CreateTexture(kClient1Id, kService1Id); | 1202 manager.CreateTexture(kClient1Id, kService1Id); |
1135 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1203 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1136 ASSERT_TRUE(texture_ref != NULL); | 1204 ASSERT_TRUE(texture_ref != NULL); |
1137 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1205 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1138 Texture* texture = texture_ref->texture(); | 1206 Texture* texture = texture_ref->texture(); |
1139 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1207 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1140 manager.SetLevelInfo(texture_ref, | 1208 manager.SetLevelInfo(texture_ref, |
1141 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 1209 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); |
1142 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1210 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1143 TestHelper::SetTexParameteriWithExpectations( | 1211 TestHelper::SetTexParameteriWithExpectations( |
1144 gl_.get(), error_state_.get(), &manager, | 1212 gl_.get(), error_state_.get(), &manager, |
1145 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1213 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1146 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1214 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1147 TestHelper::SetTexParameteriWithExpectations( | 1215 TestHelper::SetTexParameteriWithExpectations( |
1148 gl_.get(), error_state_.get(), &manager, texture_ref, | 1216 gl_.get(), error_state_.get(), &manager, texture_ref, |
1149 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1217 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1150 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1218 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1151 manager.Destroy(false); | 1219 manager.Destroy(false); |
1152 } | 1220 } |
1153 | 1221 |
1154 TEST_F(TextureTest, HalfFloatLinear) { | 1222 TEST_F(TextureTest, HalfFloatLinear) { |
1155 TestHelper::SetupFeatureInfoInitExpectations( | 1223 TestHelper::SetupFeatureInfoInitExpectations( |
1156 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); | 1224 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); |
1157 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1225 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1158 feature_info->Initialize(); | 1226 feature_info->Initialize(); |
1159 TextureManager manager( | 1227 TextureManager manager(NULL, |
1160 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 1228 feature_info.get(), |
| 1229 kMaxTextureSize, |
| 1230 kMaxCubeMapTextureSize, |
| 1231 kUseDefaultTextures); |
1161 manager.CreateTexture(kClient1Id, kService1Id); | 1232 manager.CreateTexture(kClient1Id, kService1Id); |
1162 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1233 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1163 ASSERT_TRUE(texture_ref != NULL); | 1234 ASSERT_TRUE(texture_ref != NULL); |
1164 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1235 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1165 Texture* texture = texture_ref->texture(); | 1236 Texture* texture = texture_ref->texture(); |
1166 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1237 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1167 manager.SetLevelInfo(texture_ref, | 1238 manager.SetLevelInfo(texture_ref, |
1168 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 1239 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); |
1169 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1240 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1170 manager.Destroy(false); | 1241 manager.Destroy(false); |
1171 } | 1242 } |
1172 | 1243 |
1173 TEST_F(TextureTest, EGLImageExternal) { | 1244 TEST_F(TextureTest, EGLImageExternal) { |
1174 TestHelper::SetupFeatureInfoInitExpectations( | 1245 TestHelper::SetupFeatureInfoInitExpectations( |
1175 gl_.get(), "GL_OES_EGL_image_external"); | 1246 gl_.get(), "GL_OES_EGL_image_external"); |
1176 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1247 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1177 feature_info->Initialize(); | 1248 feature_info->Initialize(); |
1178 TextureManager manager( | 1249 TextureManager manager(NULL, |
1179 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 1250 feature_info.get(), |
| 1251 kMaxTextureSize, |
| 1252 kMaxCubeMapTextureSize, |
| 1253 kUseDefaultTextures); |
1180 manager.CreateTexture(kClient1Id, kService1Id); | 1254 manager.CreateTexture(kClient1Id, kService1Id); |
1181 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1255 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1182 ASSERT_TRUE(texture_ref != NULL); | 1256 ASSERT_TRUE(texture_ref != NULL); |
1183 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); | 1257 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); |
1184 Texture* texture = texture_ref->texture(); | 1258 Texture* texture = texture_ref->texture(); |
1185 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); | 1259 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
1186 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1260 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1187 manager.Destroy(false); | 1261 manager.Destroy(false); |
1188 } | 1262 } |
1189 | 1263 |
1190 TEST_F(TextureTest, DepthTexture) { | 1264 TEST_F(TextureTest, DepthTexture) { |
1191 TestHelper::SetupFeatureInfoInitExpectations( | 1265 TestHelper::SetupFeatureInfoInitExpectations( |
1192 gl_.get(), "GL_ANGLE_depth_texture"); | 1266 gl_.get(), "GL_ANGLE_depth_texture"); |
1193 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1267 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1194 feature_info->Initialize(); | 1268 feature_info->Initialize(); |
1195 TextureManager manager( | 1269 TextureManager manager(NULL, |
1196 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 1270 feature_info.get(), |
| 1271 kMaxTextureSize, |
| 1272 kMaxCubeMapTextureSize, |
| 1273 kUseDefaultTextures); |
1197 manager.CreateTexture(kClient1Id, kService1Id); | 1274 manager.CreateTexture(kClient1Id, kService1Id); |
1198 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1275 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1199 ASSERT_TRUE(texture_ref != NULL); | 1276 ASSERT_TRUE(texture_ref != NULL); |
1200 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1277 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1201 manager.SetLevelInfo( | 1278 manager.SetLevelInfo( |
1202 texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0, | 1279 texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0, |
1203 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false); | 1280 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false); |
1204 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1281 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1205 manager.Destroy(false); | 1282 manager.Destroy(false); |
1206 } | 1283 } |
(...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2119 | 2196 |
2120 private: | 2197 private: |
2121 virtual ~CountingMemoryTracker() {} | 2198 virtual ~CountingMemoryTracker() {} |
2122 | 2199 |
2123 size_t current_size_[2]; | 2200 size_t current_size_[2]; |
2124 DISALLOW_COPY_AND_ASSIGN(CountingMemoryTracker); | 2201 DISALLOW_COPY_AND_ASSIGN(CountingMemoryTracker); |
2125 }; | 2202 }; |
2126 | 2203 |
2127 class SharedTextureTest : public testing::Test { | 2204 class SharedTextureTest : public testing::Test { |
2128 public: | 2205 public: |
2129 SharedTextureTest() | 2206 static const bool kUseDefaultTextures = false; |
2130 : feature_info_(new FeatureInfo()) { | 2207 |
2131 } | 2208 SharedTextureTest() : feature_info_(new FeatureInfo()) {} |
2132 | 2209 |
2133 virtual ~SharedTextureTest() { | 2210 virtual ~SharedTextureTest() { |
2134 } | 2211 } |
2135 | 2212 |
2136 virtual void SetUp() { | 2213 virtual void SetUp() { |
2137 gl_.reset(new ::gfx::MockGLInterface()); | 2214 gl_.reset(new ::gfx::MockGLInterface()); |
2138 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); | 2215 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); |
2139 | 2216 |
2140 memory_tracker1_ = new CountingMemoryTracker; | 2217 memory_tracker1_ = new CountingMemoryTracker; |
2141 texture_manager1_.reset( | 2218 texture_manager1_.reset( |
2142 new TextureManager(memory_tracker1_.get(), | 2219 new TextureManager(memory_tracker1_.get(), |
2143 feature_info_.get(), | 2220 feature_info_.get(), |
2144 TextureManagerTest::kMaxTextureSize, | 2221 TextureManagerTest::kMaxTextureSize, |
2145 TextureManagerTest::kMaxCubeMapTextureSize)); | 2222 TextureManagerTest::kMaxCubeMapTextureSize, |
| 2223 kUseDefaultTextures)); |
2146 memory_tracker2_ = new CountingMemoryTracker; | 2224 memory_tracker2_ = new CountingMemoryTracker; |
2147 texture_manager2_.reset( | 2225 texture_manager2_.reset( |
2148 new TextureManager(memory_tracker2_.get(), | 2226 new TextureManager(memory_tracker2_.get(), |
2149 feature_info_.get(), | 2227 feature_info_.get(), |
2150 TextureManagerTest::kMaxTextureSize, | 2228 TextureManagerTest::kMaxTextureSize, |
2151 TextureManagerTest::kMaxCubeMapTextureSize)); | 2229 TextureManagerTest::kMaxCubeMapTextureSize, |
2152 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 2230 kUseDefaultTextures)); |
| 2231 TestHelper::SetupTextureManagerInitExpectations( |
| 2232 gl_.get(), "", kUseDefaultTextures); |
2153 texture_manager1_->Initialize(); | 2233 texture_manager1_->Initialize(); |
2154 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 2234 TestHelper::SetupTextureManagerInitExpectations( |
| 2235 gl_.get(), "", kUseDefaultTextures); |
2155 texture_manager2_->Initialize(); | 2236 texture_manager2_->Initialize(); |
2156 } | 2237 } |
2157 | 2238 |
2158 virtual void TearDown() { | 2239 virtual void TearDown() { |
2159 texture_manager2_->Destroy(false); | 2240 texture_manager2_->Destroy(false); |
2160 texture_manager2_.reset(); | 2241 texture_manager2_.reset(); |
2161 texture_manager1_->Destroy(false); | 2242 texture_manager1_->Destroy(false); |
2162 texture_manager1_.reset(); | 2243 texture_manager1_.reset(); |
2163 ::gfx::MockGLInterface::SetGLInterface(NULL); | 2244 ::gfx::MockGLInterface::SetGLInterface(NULL); |
2164 gl_.reset(); | 2245 gl_.reset(); |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2438 | 2519 |
2439 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 2520 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
2440 .Times(1) | 2521 .Times(1) |
2441 .RetiresOnSaturation(); | 2522 .RetiresOnSaturation(); |
2442 texture_manager1_->RemoveTexture(10); | 2523 texture_manager1_->RemoveTexture(10); |
2443 texture_manager2_->RemoveTexture(20); | 2524 texture_manager2_->RemoveTexture(20); |
2444 } | 2525 } |
2445 | 2526 |
2446 } // namespace gles2 | 2527 } // namespace gles2 |
2447 } // namespace gpu | 2528 } // namespace gpu |
OLD | NEW |