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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "gpu/command_buffer/service/error_state_mock.h" | 10 #include "gpu/command_buffer/service/error_state_mock.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 } | 40 } |
41 static bool IsCubeComplete(const Texture* texture) { | 41 static bool IsCubeComplete(const Texture* texture) { |
42 return texture->cube_complete(); | 42 return texture->cube_complete(); |
43 } | 43 } |
44 }; | 44 }; |
45 | 45 |
46 class TextureManagerTest : public GpuServiceTest { | 46 class TextureManagerTest : public GpuServiceTest { |
47 public: | 47 public: |
48 static const GLint kMaxTextureSize = 16; | 48 static const GLint kMaxTextureSize = 16; |
49 static const GLint kMaxCubeMapTextureSize = 8; | 49 static const GLint kMaxCubeMapTextureSize = 8; |
| 50 static const GLint kMaxRectangleTextureSize = 16; |
50 static const GLint kMaxExternalTextureSize = 16; | 51 static const GLint kMaxExternalTextureSize = 16; |
51 static const GLint kMax2dLevels = 5; | 52 static const GLint kMax2dLevels = 5; |
52 static const GLint kMaxCubeMapLevels = 4; | 53 static const GLint kMaxCubeMapLevels = 4; |
53 static const GLint kMaxExternalLevels = 1; | 54 static const GLint kMaxExternalLevels = 1; |
54 static const bool kUseDefaultTextures = false; | 55 static const bool kUseDefaultTextures = false; |
55 | 56 |
56 TextureManagerTest() : feature_info_(new FeatureInfo()) {} | 57 TextureManagerTest() : feature_info_(new FeatureInfo()) {} |
57 | 58 |
58 ~TextureManagerTest() override {} | 59 ~TextureManagerTest() override {} |
59 | 60 |
60 protected: | 61 protected: |
61 void SetUp() override { | 62 void SetUp() override { |
62 GpuServiceTest::SetUp(); | 63 GpuServiceTest::SetUp(); |
63 manager_.reset(new TextureManager(NULL, | 64 manager_.reset(new TextureManager(NULL, |
64 feature_info_.get(), | 65 feature_info_.get(), |
65 kMaxTextureSize, | 66 kMaxTextureSize, |
66 kMaxCubeMapTextureSize, | 67 kMaxCubeMapTextureSize, |
| 68 kMaxRectangleTextureSize, |
67 kUseDefaultTextures)); | 69 kUseDefaultTextures)); |
68 TestHelper::SetupTextureManagerInitExpectations( | 70 TestHelper::SetupTextureManagerInitExpectations( |
69 gl_.get(), "", kUseDefaultTextures); | 71 gl_.get(), "", kUseDefaultTextures); |
70 manager_->Initialize(); | 72 manager_->Initialize(); |
71 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 73 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
72 } | 74 } |
73 | 75 |
74 void TearDown() override { | 76 void TearDown() override { |
75 manager_->Destroy(false); | 77 manager_->Destroy(false); |
76 manager_.reset(); | 78 manager_.reset(); |
77 GpuServiceTest::TearDown(); | 79 GpuServiceTest::TearDown(); |
78 } | 80 } |
79 | 81 |
80 void SetParameter( | 82 void SetParameter( |
81 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { | 83 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { |
82 TestHelper::SetTexParameteriWithExpectations( | 84 TestHelper::SetTexParameteriWithExpectations( |
83 gl_.get(), error_state_.get(), manager_.get(), | 85 gl_.get(), error_state_.get(), manager_.get(), |
84 texture_ref, pname, value, error); | 86 texture_ref, pname, value, error); |
85 } | 87 } |
86 | 88 |
87 scoped_refptr<FeatureInfo> feature_info_; | 89 scoped_refptr<FeatureInfo> feature_info_; |
88 scoped_ptr<TextureManager> manager_; | 90 scoped_ptr<TextureManager> manager_; |
89 scoped_ptr<MockErrorState> error_state_; | 91 scoped_ptr<MockErrorState> error_state_; |
90 }; | 92 }; |
91 | 93 |
92 // GCC requires these declarations, but MSVC requires they not be present | 94 // GCC requires these declarations, but MSVC requires they not be present |
93 #ifndef COMPILER_MSVC | 95 #ifndef COMPILER_MSVC |
94 const GLint TextureManagerTest::kMaxTextureSize; | 96 const GLint TextureManagerTest::kMaxTextureSize; |
95 const GLint TextureManagerTest::kMaxCubeMapTextureSize; | 97 const GLint TextureManagerTest::kMaxCubeMapTextureSize; |
| 98 const GLint TextureManagerTest::kMaxRectangleTextureSize; |
96 const GLint TextureManagerTest::kMaxExternalTextureSize; | 99 const GLint TextureManagerTest::kMaxExternalTextureSize; |
97 const GLint TextureManagerTest::kMax2dLevels; | 100 const GLint TextureManagerTest::kMax2dLevels; |
98 const GLint TextureManagerTest::kMaxCubeMapLevels; | 101 const GLint TextureManagerTest::kMaxCubeMapLevels; |
99 const GLint TextureManagerTest::kMaxExternalLevels; | 102 const GLint TextureManagerTest::kMaxExternalLevels; |
100 #endif | 103 #endif |
101 | 104 |
102 TEST_F(TextureManagerTest, Basic) { | 105 TEST_F(TextureManagerTest, Basic) { |
103 const GLuint kClient1Id = 1; | 106 const GLuint kClient1Id = 1; |
104 const GLuint kService1Id = 11; | 107 const GLuint kService1Id = 11; |
105 const GLuint kClient2Id = 2; | 108 const GLuint kClient2Id = 2; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 TEST_F(TextureManagerTest, UseDefaultTexturesTrue) { | 168 TEST_F(TextureManagerTest, UseDefaultTexturesTrue) { |
166 bool use_default_textures = true; | 169 bool use_default_textures = true; |
167 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 170 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
168 | 171 |
169 TestHelper::SetupTextureManagerInitExpectations( | 172 TestHelper::SetupTextureManagerInitExpectations( |
170 gl_.get(), "GL_ANGLE_texture_usage", use_default_textures); | 173 gl_.get(), "GL_ANGLE_texture_usage", use_default_textures); |
171 TextureManager manager(NULL, | 174 TextureManager manager(NULL, |
172 feature_info_.get(), | 175 feature_info_.get(), |
173 kMaxTextureSize, | 176 kMaxTextureSize, |
174 kMaxCubeMapTextureSize, | 177 kMaxCubeMapTextureSize, |
| 178 kMaxRectangleTextureSize, |
175 use_default_textures); | 179 use_default_textures); |
176 manager.Initialize(); | 180 manager.Initialize(); |
177 | 181 |
178 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); | 182 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); |
179 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); | 183 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); |
180 | 184 |
181 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. | 185 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
182 | 186 |
183 manager.Destroy(false); | 187 manager.Destroy(false); |
184 } | 188 } |
185 | 189 |
186 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { | 190 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { |
187 bool use_default_textures = false; | 191 bool use_default_textures = false; |
188 TestHelper::SetupTextureManagerInitExpectations( | 192 TestHelper::SetupTextureManagerInitExpectations( |
189 gl_.get(), "GL_ANGLE_texture_usage", use_default_textures); | 193 gl_.get(), "GL_ANGLE_texture_usage", use_default_textures); |
190 TextureManager manager(NULL, | 194 TextureManager manager(NULL, |
191 feature_info_.get(), | 195 feature_info_.get(), |
192 kMaxTextureSize, | 196 kMaxTextureSize, |
193 kMaxCubeMapTextureSize, | 197 kMaxCubeMapTextureSize, |
| 198 kMaxRectangleTextureSize, |
194 use_default_textures); | 199 use_default_textures); |
195 manager.Initialize(); | 200 manager.Initialize(); |
196 | 201 |
197 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); | 202 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); |
198 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); | 203 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); |
199 | 204 |
200 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. | 205 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
201 | 206 |
202 manager.Destroy(false); | 207 manager.Destroy(false); |
203 } | 208 } |
204 | 209 |
205 TEST_F(TextureManagerTest, TextureUsageExt) { | 210 TEST_F(TextureManagerTest, TextureUsageExt) { |
206 TestHelper::SetupTextureManagerInitExpectations( | 211 TestHelper::SetupTextureManagerInitExpectations( |
207 gl_.get(), "GL_ANGLE_texture_usage", kUseDefaultTextures); | 212 gl_.get(), "GL_ANGLE_texture_usage", kUseDefaultTextures); |
208 TextureManager manager(NULL, | 213 TextureManager manager(NULL, |
209 feature_info_.get(), | 214 feature_info_.get(), |
210 kMaxTextureSize, | 215 kMaxTextureSize, |
211 kMaxCubeMapTextureSize, | 216 kMaxCubeMapTextureSize, |
| 217 kMaxRectangleTextureSize, |
212 kUseDefaultTextures); | 218 kUseDefaultTextures); |
213 manager.Initialize(); | 219 manager.Initialize(); |
214 const GLuint kClient1Id = 1; | 220 const GLuint kClient1Id = 1; |
215 const GLuint kService1Id = 11; | 221 const GLuint kService1Id = 11; |
216 // Check we can create texture. | 222 // Check we can create texture. |
217 manager.CreateTexture(kClient1Id, kService1Id); | 223 manager.CreateTexture(kClient1Id, kService1Id); |
218 // Check texture got created. | 224 // Check texture got created. |
219 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 225 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
220 ASSERT_TRUE(texture_ref != NULL); | 226 ASSERT_TRUE(texture_ref != NULL); |
221 TestHelper::SetTexParameteriWithExpectations( | 227 TestHelper::SetTexParameteriWithExpectations( |
222 gl_.get(), error_state_.get(), &manager, texture_ref, | 228 gl_.get(), error_state_.get(), &manager, texture_ref, |
223 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); | 229 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); |
224 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), | 230 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), |
225 texture_ref->texture()->usage()); | 231 texture_ref->texture()->usage()); |
226 manager.Destroy(false); | 232 manager.Destroy(false); |
227 } | 233 } |
228 | 234 |
229 TEST_F(TextureManagerTest, Destroy) { | 235 TEST_F(TextureManagerTest, Destroy) { |
230 const GLuint kClient1Id = 1; | 236 const GLuint kClient1Id = 1; |
231 const GLuint kService1Id = 11; | 237 const GLuint kService1Id = 11; |
232 TestHelper::SetupTextureManagerInitExpectations( | 238 TestHelper::SetupTextureManagerInitExpectations( |
233 gl_.get(), "", kUseDefaultTextures); | 239 gl_.get(), "", kUseDefaultTextures); |
234 TextureManager manager(NULL, | 240 TextureManager manager(NULL, |
235 feature_info_.get(), | 241 feature_info_.get(), |
236 kMaxTextureSize, | 242 kMaxTextureSize, |
237 kMaxCubeMapTextureSize, | 243 kMaxCubeMapTextureSize, |
| 244 kMaxRectangleTextureSize, |
238 kUseDefaultTextures); | 245 kUseDefaultTextures); |
239 manager.Initialize(); | 246 manager.Initialize(); |
240 // Check we can create texture. | 247 // Check we can create texture. |
241 manager.CreateTexture(kClient1Id, kService1Id); | 248 manager.CreateTexture(kClient1Id, kService1Id); |
242 // Check texture got created. | 249 // Check texture got created. |
243 TextureRef* texture = manager.GetTexture(kClient1Id); | 250 TextureRef* texture = manager.GetTexture(kClient1Id); |
244 ASSERT_TRUE(texture != NULL); | 251 ASSERT_TRUE(texture != NULL); |
245 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 252 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
246 .Times(1) | 253 .Times(1) |
247 .RetiresOnSaturation(); | 254 .RetiresOnSaturation(); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 EXPECT_EQ(kMaxCubeMapTextureSize, | 287 EXPECT_EQ(kMaxCubeMapTextureSize, |
281 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_NEGATIVE_X)); | 288 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_NEGATIVE_X)); |
282 EXPECT_EQ(kMaxCubeMapTextureSize, | 289 EXPECT_EQ(kMaxCubeMapTextureSize, |
283 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_POSITIVE_Y)); | 290 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_POSITIVE_Y)); |
284 EXPECT_EQ(kMaxCubeMapTextureSize, | 291 EXPECT_EQ(kMaxCubeMapTextureSize, |
285 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y)); | 292 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y)); |
286 EXPECT_EQ(kMaxCubeMapTextureSize, | 293 EXPECT_EQ(kMaxCubeMapTextureSize, |
287 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_POSITIVE_Z)); | 294 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_POSITIVE_Z)); |
288 EXPECT_EQ(kMaxCubeMapTextureSize, | 295 EXPECT_EQ(kMaxCubeMapTextureSize, |
289 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)); | 296 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)); |
| 297 EXPECT_EQ(kMaxRectangleTextureSize, |
| 298 manager_->MaxSizeForTarget(GL_TEXTURE_RECTANGLE_ARB)); |
290 EXPECT_EQ(kMaxExternalTextureSize, | 299 EXPECT_EQ(kMaxExternalTextureSize, |
291 manager_->MaxSizeForTarget(GL_TEXTURE_EXTERNAL_OES)); | 300 manager_->MaxSizeForTarget(GL_TEXTURE_EXTERNAL_OES)); |
292 } | 301 } |
293 | 302 |
294 TEST_F(TextureManagerTest, ValidForTarget) { | 303 TEST_F(TextureManagerTest, ValidForTarget) { |
295 // check 2d | 304 // check 2d |
296 EXPECT_TRUE(manager_->ValidForTarget( | 305 EXPECT_TRUE(manager_->ValidForTarget( |
297 GL_TEXTURE_2D, 0, kMaxTextureSize, kMaxTextureSize, 1)); | 306 GL_TEXTURE_2D, 0, kMaxTextureSize, kMaxTextureSize, 1)); |
298 EXPECT_TRUE(manager_->ValidForTarget( | 307 EXPECT_TRUE(manager_->ValidForTarget( |
299 GL_TEXTURE_2D, kMax2dLevels - 1, 1, 1, 1)); | 308 GL_TEXTURE_2D, kMax2dLevels - 1, 1, 1, 1)); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 | 373 |
365 TEST_F(TextureManagerTest, ValidForTargetNPOT) { | 374 TEST_F(TextureManagerTest, ValidForTargetNPOT) { |
366 TestHelper::SetupFeatureInfoInitExpectations( | 375 TestHelper::SetupFeatureInfoInitExpectations( |
367 gl_.get(), "GL_OES_texture_npot"); | 376 gl_.get(), "GL_OES_texture_npot"); |
368 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 377 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
369 feature_info->Initialize(); | 378 feature_info->Initialize(); |
370 TextureManager manager(NULL, | 379 TextureManager manager(NULL, |
371 feature_info.get(), | 380 feature_info.get(), |
372 kMaxTextureSize, | 381 kMaxTextureSize, |
373 kMaxCubeMapTextureSize, | 382 kMaxCubeMapTextureSize, |
| 383 kMaxRectangleTextureSize, |
374 kUseDefaultTextures); | 384 kUseDefaultTextures); |
375 // Check NPOT width on level 0 | 385 // Check NPOT width on level 0 |
376 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); | 386 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); |
377 // Check NPOT height on level 0 | 387 // Check NPOT height on level 0 |
378 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); | 388 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); |
379 // Check NPOT width on level 1 | 389 // Check NPOT width on level 1 |
380 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); | 390 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); |
381 // Check NPOT height on level 1 | 391 // Check NPOT height on level 1 |
382 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); | 392 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); |
383 manager.Destroy(false); | 393 manager.Destroy(false); |
384 } | 394 } |
385 | 395 |
386 class TextureTestBase : public GpuServiceTest { | 396 class TextureTestBase : public GpuServiceTest { |
387 public: | 397 public: |
388 static const GLint kMaxTextureSize = 16; | 398 static const GLint kMaxTextureSize = 16; |
389 static const GLint kMaxCubeMapTextureSize = 8; | 399 static const GLint kMaxCubeMapTextureSize = 8; |
| 400 static const GLint kMaxRectangleTextureSize = 16; |
390 static const GLint kMax2dLevels = 5; | 401 static const GLint kMax2dLevels = 5; |
391 static const GLint kMaxCubeMapLevels = 4; | 402 static const GLint kMaxCubeMapLevels = 4; |
392 static const GLuint kClient1Id = 1; | 403 static const GLuint kClient1Id = 1; |
393 static const GLuint kService1Id = 11; | 404 static const GLuint kService1Id = 11; |
394 static const bool kUseDefaultTextures = false; | 405 static const bool kUseDefaultTextures = false; |
395 | 406 |
396 TextureTestBase() | 407 TextureTestBase() |
397 : feature_info_(new FeatureInfo()) { | 408 : feature_info_(new FeatureInfo()) { |
398 } | 409 } |
399 ~TextureTestBase() override { texture_ref_ = NULL; } | 410 ~TextureTestBase() override { texture_ref_ = NULL; } |
400 | 411 |
401 protected: | 412 protected: |
402 void SetUpBase(MemoryTracker* memory_tracker, std::string extensions) { | 413 void SetUpBase(MemoryTracker* memory_tracker, std::string extensions) { |
403 GpuServiceTest::SetUp(); | 414 GpuServiceTest::SetUp(); |
404 if (!extensions.empty()) { | 415 if (!extensions.empty()) { |
405 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), | 416 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), |
406 extensions.c_str()); | 417 extensions.c_str()); |
407 feature_info_->Initialize(); | 418 feature_info_->Initialize(); |
408 } | 419 } |
409 | 420 |
410 manager_.reset(new TextureManager(memory_tracker, | 421 manager_.reset(new TextureManager(memory_tracker, |
411 feature_info_.get(), | 422 feature_info_.get(), |
412 kMaxTextureSize, | 423 kMaxTextureSize, |
413 kMaxCubeMapTextureSize, | 424 kMaxCubeMapTextureSize, |
| 425 kMaxRectangleTextureSize, |
414 kUseDefaultTextures)); | 426 kUseDefaultTextures)); |
415 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); | 427 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); |
416 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 428 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
417 manager_->CreateTexture(kClient1Id, kService1Id); | 429 manager_->CreateTexture(kClient1Id, kService1Id); |
418 texture_ref_ = manager_->GetTexture(kClient1Id); | 430 texture_ref_ = manager_->GetTexture(kClient1Id); |
419 ASSERT_TRUE(texture_ref_.get() != NULL); | 431 ASSERT_TRUE(texture_ref_.get() != NULL); |
420 } | 432 } |
421 | 433 |
422 void TearDown() override { | 434 void TearDown() override { |
423 if (texture_ref_.get()) { | 435 if (texture_ref_.get()) { |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
837 | 849 |
838 TEST_F(TextureTest, NPOT2DNPOTOK) { | 850 TEST_F(TextureTest, NPOT2DNPOTOK) { |
839 TestHelper::SetupFeatureInfoInitExpectations( | 851 TestHelper::SetupFeatureInfoInitExpectations( |
840 gl_.get(), "GL_OES_texture_npot"); | 852 gl_.get(), "GL_OES_texture_npot"); |
841 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 853 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
842 feature_info->Initialize(); | 854 feature_info->Initialize(); |
843 TextureManager manager(NULL, | 855 TextureManager manager(NULL, |
844 feature_info.get(), | 856 feature_info.get(), |
845 kMaxTextureSize, | 857 kMaxTextureSize, |
846 kMaxCubeMapTextureSize, | 858 kMaxCubeMapTextureSize, |
| 859 kMaxRectangleTextureSize, |
847 kUseDefaultTextures); | 860 kUseDefaultTextures); |
848 manager.CreateTexture(kClient1Id, kService1Id); | 861 manager.CreateTexture(kClient1Id, kService1Id); |
849 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 862 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
850 ASSERT_TRUE(texture_ref != NULL); | 863 ASSERT_TRUE(texture_ref != NULL); |
851 Texture* texture = texture_ref->texture(); | 864 Texture* texture = texture_ref->texture(); |
852 | 865 |
853 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 866 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
854 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 867 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
855 // Check Setting level 0 to NPOT | 868 // Check Setting level 0 to NPOT |
856 manager.SetLevelInfo(texture_ref, | 869 manager.SetLevelInfo(texture_ref, |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1128 | 1141 |
1129 TEST_F(TextureTest, FloatNotLinear) { | 1142 TEST_F(TextureTest, FloatNotLinear) { |
1130 TestHelper::SetupFeatureInfoInitExpectations( | 1143 TestHelper::SetupFeatureInfoInitExpectations( |
1131 gl_.get(), "GL_OES_texture_float"); | 1144 gl_.get(), "GL_OES_texture_float"); |
1132 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1145 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1133 feature_info->Initialize(); | 1146 feature_info->Initialize(); |
1134 TextureManager manager(NULL, | 1147 TextureManager manager(NULL, |
1135 feature_info.get(), | 1148 feature_info.get(), |
1136 kMaxTextureSize, | 1149 kMaxTextureSize, |
1137 kMaxCubeMapTextureSize, | 1150 kMaxCubeMapTextureSize, |
| 1151 kMaxRectangleTextureSize, |
1138 kUseDefaultTextures); | 1152 kUseDefaultTextures); |
1139 manager.CreateTexture(kClient1Id, kService1Id); | 1153 manager.CreateTexture(kClient1Id, kService1Id); |
1140 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1154 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1141 ASSERT_TRUE(texture_ref != NULL); | 1155 ASSERT_TRUE(texture_ref != NULL); |
1142 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1156 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1143 Texture* texture = texture_ref->texture(); | 1157 Texture* texture = texture_ref->texture(); |
1144 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1158 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1145 manager.SetLevelInfo(texture_ref, | 1159 manager.SetLevelInfo(texture_ref, |
1146 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 1160 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); |
1147 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1161 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
(...skipping 10 matching lines...) Expand all Loading... |
1158 | 1172 |
1159 TEST_F(TextureTest, FloatLinear) { | 1173 TEST_F(TextureTest, FloatLinear) { |
1160 TestHelper::SetupFeatureInfoInitExpectations( | 1174 TestHelper::SetupFeatureInfoInitExpectations( |
1161 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); | 1175 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); |
1162 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1176 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1163 feature_info->Initialize(); | 1177 feature_info->Initialize(); |
1164 TextureManager manager(NULL, | 1178 TextureManager manager(NULL, |
1165 feature_info.get(), | 1179 feature_info.get(), |
1166 kMaxTextureSize, | 1180 kMaxTextureSize, |
1167 kMaxCubeMapTextureSize, | 1181 kMaxCubeMapTextureSize, |
| 1182 kMaxRectangleTextureSize, |
1168 kUseDefaultTextures); | 1183 kUseDefaultTextures); |
1169 manager.CreateTexture(kClient1Id, kService1Id); | 1184 manager.CreateTexture(kClient1Id, kService1Id); |
1170 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1185 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1171 ASSERT_TRUE(texture_ref != NULL); | 1186 ASSERT_TRUE(texture_ref != NULL); |
1172 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1187 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1173 Texture* texture = texture_ref->texture(); | 1188 Texture* texture = texture_ref->texture(); |
1174 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1189 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1175 manager.SetLevelInfo(texture_ref, | 1190 manager.SetLevelInfo(texture_ref, |
1176 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 1191 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); |
1177 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1192 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1178 manager.Destroy(false); | 1193 manager.Destroy(false); |
1179 } | 1194 } |
1180 | 1195 |
1181 TEST_F(TextureTest, HalfFloatNotLinear) { | 1196 TEST_F(TextureTest, HalfFloatNotLinear) { |
1182 TestHelper::SetupFeatureInfoInitExpectations( | 1197 TestHelper::SetupFeatureInfoInitExpectations( |
1183 gl_.get(), "GL_OES_texture_half_float"); | 1198 gl_.get(), "GL_OES_texture_half_float"); |
1184 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1199 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1185 feature_info->Initialize(); | 1200 feature_info->Initialize(); |
1186 TextureManager manager(NULL, | 1201 TextureManager manager(NULL, |
1187 feature_info.get(), | 1202 feature_info.get(), |
1188 kMaxTextureSize, | 1203 kMaxTextureSize, |
1189 kMaxCubeMapTextureSize, | 1204 kMaxCubeMapTextureSize, |
| 1205 kMaxRectangleTextureSize, |
1190 kUseDefaultTextures); | 1206 kUseDefaultTextures); |
1191 manager.CreateTexture(kClient1Id, kService1Id); | 1207 manager.CreateTexture(kClient1Id, kService1Id); |
1192 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1208 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1193 ASSERT_TRUE(texture_ref != NULL); | 1209 ASSERT_TRUE(texture_ref != NULL); |
1194 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1210 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1195 Texture* texture = texture_ref->texture(); | 1211 Texture* texture = texture_ref->texture(); |
1196 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1212 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1197 manager.SetLevelInfo(texture_ref, | 1213 manager.SetLevelInfo(texture_ref, |
1198 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 1214 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); |
1199 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1215 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
(...skipping 10 matching lines...) Expand all Loading... |
1210 | 1226 |
1211 TEST_F(TextureTest, HalfFloatLinear) { | 1227 TEST_F(TextureTest, HalfFloatLinear) { |
1212 TestHelper::SetupFeatureInfoInitExpectations( | 1228 TestHelper::SetupFeatureInfoInitExpectations( |
1213 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); | 1229 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); |
1214 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1230 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1215 feature_info->Initialize(); | 1231 feature_info->Initialize(); |
1216 TextureManager manager(NULL, | 1232 TextureManager manager(NULL, |
1217 feature_info.get(), | 1233 feature_info.get(), |
1218 kMaxTextureSize, | 1234 kMaxTextureSize, |
1219 kMaxCubeMapTextureSize, | 1235 kMaxCubeMapTextureSize, |
| 1236 kMaxRectangleTextureSize, |
1220 kUseDefaultTextures); | 1237 kUseDefaultTextures); |
1221 manager.CreateTexture(kClient1Id, kService1Id); | 1238 manager.CreateTexture(kClient1Id, kService1Id); |
1222 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1239 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1223 ASSERT_TRUE(texture_ref != NULL); | 1240 ASSERT_TRUE(texture_ref != NULL); |
1224 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1241 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1225 Texture* texture = texture_ref->texture(); | 1242 Texture* texture = texture_ref->texture(); |
1226 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1243 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1227 manager.SetLevelInfo(texture_ref, | 1244 manager.SetLevelInfo(texture_ref, |
1228 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 1245 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); |
1229 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1246 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1230 manager.Destroy(false); | 1247 manager.Destroy(false); |
1231 } | 1248 } |
1232 | 1249 |
1233 TEST_F(TextureTest, EGLImageExternal) { | 1250 TEST_F(TextureTest, EGLImageExternal) { |
1234 TestHelper::SetupFeatureInfoInitExpectations( | 1251 TestHelper::SetupFeatureInfoInitExpectations( |
1235 gl_.get(), "GL_OES_EGL_image_external"); | 1252 gl_.get(), "GL_OES_EGL_image_external"); |
1236 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1253 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1237 feature_info->Initialize(); | 1254 feature_info->Initialize(); |
1238 TextureManager manager(NULL, | 1255 TextureManager manager(NULL, |
1239 feature_info.get(), | 1256 feature_info.get(), |
1240 kMaxTextureSize, | 1257 kMaxTextureSize, |
1241 kMaxCubeMapTextureSize, | 1258 kMaxCubeMapTextureSize, |
| 1259 kMaxRectangleTextureSize, |
1242 kUseDefaultTextures); | 1260 kUseDefaultTextures); |
1243 manager.CreateTexture(kClient1Id, kService1Id); | 1261 manager.CreateTexture(kClient1Id, kService1Id); |
1244 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1262 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1245 ASSERT_TRUE(texture_ref != NULL); | 1263 ASSERT_TRUE(texture_ref != NULL); |
1246 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); | 1264 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); |
1247 Texture* texture = texture_ref->texture(); | 1265 Texture* texture = texture_ref->texture(); |
1248 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); | 1266 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
1249 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1267 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1250 manager.Destroy(false); | 1268 manager.Destroy(false); |
1251 } | 1269 } |
1252 | 1270 |
1253 TEST_F(TextureTest, DepthTexture) { | 1271 TEST_F(TextureTest, DepthTexture) { |
1254 TestHelper::SetupFeatureInfoInitExpectations( | 1272 TestHelper::SetupFeatureInfoInitExpectations( |
1255 gl_.get(), "GL_ANGLE_depth_texture"); | 1273 gl_.get(), "GL_ANGLE_depth_texture"); |
1256 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1274 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1257 feature_info->Initialize(); | 1275 feature_info->Initialize(); |
1258 TextureManager manager(NULL, | 1276 TextureManager manager(NULL, |
1259 feature_info.get(), | 1277 feature_info.get(), |
1260 kMaxTextureSize, | 1278 kMaxTextureSize, |
1261 kMaxCubeMapTextureSize, | 1279 kMaxCubeMapTextureSize, |
| 1280 kMaxRectangleTextureSize, |
1262 kUseDefaultTextures); | 1281 kUseDefaultTextures); |
1263 manager.CreateTexture(kClient1Id, kService1Id); | 1282 manager.CreateTexture(kClient1Id, kService1Id); |
1264 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1283 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1265 ASSERT_TRUE(texture_ref != NULL); | 1284 ASSERT_TRUE(texture_ref != NULL); |
1266 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1285 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1267 manager.SetLevelInfo( | 1286 manager.SetLevelInfo( |
1268 texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0, | 1287 texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0, |
1269 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false); | 1288 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false); |
1270 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1289 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1271 manager.Destroy(false); | 1290 manager.Destroy(false); |
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2192 ~SharedTextureTest() override {} | 2211 ~SharedTextureTest() override {} |
2193 | 2212 |
2194 void SetUp() override { | 2213 void SetUp() override { |
2195 GpuServiceTest::SetUp(); | 2214 GpuServiceTest::SetUp(); |
2196 memory_tracker1_ = new CountingMemoryTracker; | 2215 memory_tracker1_ = new CountingMemoryTracker; |
2197 texture_manager1_.reset( | 2216 texture_manager1_.reset( |
2198 new TextureManager(memory_tracker1_.get(), | 2217 new TextureManager(memory_tracker1_.get(), |
2199 feature_info_.get(), | 2218 feature_info_.get(), |
2200 TextureManagerTest::kMaxTextureSize, | 2219 TextureManagerTest::kMaxTextureSize, |
2201 TextureManagerTest::kMaxCubeMapTextureSize, | 2220 TextureManagerTest::kMaxCubeMapTextureSize, |
| 2221 TextureManagerTest::kMaxRectangleTextureSize, |
2202 kUseDefaultTextures)); | 2222 kUseDefaultTextures)); |
2203 memory_tracker2_ = new CountingMemoryTracker; | 2223 memory_tracker2_ = new CountingMemoryTracker; |
2204 texture_manager2_.reset( | 2224 texture_manager2_.reset( |
2205 new TextureManager(memory_tracker2_.get(), | 2225 new TextureManager(memory_tracker2_.get(), |
2206 feature_info_.get(), | 2226 feature_info_.get(), |
2207 TextureManagerTest::kMaxTextureSize, | 2227 TextureManagerTest::kMaxTextureSize, |
2208 TextureManagerTest::kMaxCubeMapTextureSize, | 2228 TextureManagerTest::kMaxCubeMapTextureSize, |
| 2229 TextureManagerTest::kMaxRectangleTextureSize, |
2209 kUseDefaultTextures)); | 2230 kUseDefaultTextures)); |
2210 TestHelper::SetupTextureManagerInitExpectations( | 2231 TestHelper::SetupTextureManagerInitExpectations( |
2211 gl_.get(), "", kUseDefaultTextures); | 2232 gl_.get(), "", kUseDefaultTextures); |
2212 texture_manager1_->Initialize(); | 2233 texture_manager1_->Initialize(); |
2213 TestHelper::SetupTextureManagerInitExpectations( | 2234 TestHelper::SetupTextureManagerInitExpectations( |
2214 gl_.get(), "", kUseDefaultTextures); | 2235 gl_.get(), "", kUseDefaultTextures); |
2215 texture_manager2_->Initialize(); | 2236 texture_manager2_->Initialize(); |
2216 } | 2237 } |
2217 | 2238 |
2218 void TearDown() override { | 2239 void TearDown() override { |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2492 | 2513 |
2493 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 2514 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
2494 .Times(1) | 2515 .Times(1) |
2495 .RetiresOnSaturation(); | 2516 .RetiresOnSaturation(); |
2496 texture_manager1_->RemoveTexture(10); | 2517 texture_manager1_->RemoveTexture(10); |
2497 texture_manager2_->RemoveTexture(20); | 2518 texture_manager2_->RemoveTexture(20); |
2498 } | 2519 } |
2499 | 2520 |
2500 } // namespace gles2 | 2521 } // namespace gles2 |
2501 } // namespace gpu | 2522 } // namespace gpu |
OLD | NEW |