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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 kMaxArrayTextureLayers, | 90 kMaxArrayTextureLayers, |
91 kUseDefaultTextures)); | 91 kUseDefaultTextures)); |
92 SetupFeatureInfo("", "OpenGL ES 2.0", false); | 92 SetupFeatureInfo("", "OpenGL ES 2.0", false); |
93 TestHelper::SetupTextureManagerInitExpectations( | 93 TestHelper::SetupTextureManagerInitExpectations( |
94 gl_.get(), false, false, false, "", kUseDefaultTextures); | 94 gl_.get(), false, false, false, "", kUseDefaultTextures); |
95 manager_->Initialize(); | 95 manager_->Initialize(); |
96 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 96 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
97 } | 97 } |
98 | 98 |
99 void TearDown() override { | 99 void TearDown() override { |
100 manager_->Destroy(false); | 100 manager_->Destroy(false, nullptr); |
101 manager_.reset(); | 101 manager_.reset(); |
102 GpuServiceTest::TearDown(); | 102 GpuServiceTest::TearDown(); |
103 } | 103 } |
104 | 104 |
105 void SetParameter( | 105 void SetParameter( |
106 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { | 106 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { |
107 TestHelper::SetTexParameteriWithExpectations( | 107 TestHelper::SetTexParameteriWithExpectations( |
108 gl_.get(), error_state_.get(), manager_.get(), | 108 gl_.get(), error_state_.get(), manager_.get(), |
109 texture_ref, pname, value, error); | 109 texture_ref, pname, value, error); |
110 } | 110 } |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 kMax3DTextureSize, | 256 kMax3DTextureSize, |
257 kMaxArrayTextureLayers, | 257 kMaxArrayTextureLayers, |
258 use_default_textures); | 258 use_default_textures); |
259 manager.Initialize(); | 259 manager.Initialize(); |
260 | 260 |
261 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); | 261 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); |
262 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); | 262 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); |
263 | 263 |
264 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. | 264 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
265 | 265 |
266 manager.Destroy(false); | 266 manager.Destroy(false, nullptr); |
267 } | 267 } |
268 | 268 |
269 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { | 269 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { |
270 bool use_default_textures = false; | 270 bool use_default_textures = false; |
271 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 271 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
272 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); | 272 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); |
273 TextureManager manager(NULL, | 273 TextureManager manager(NULL, |
274 feature_info_.get(), | 274 feature_info_.get(), |
275 kMaxTextureSize, | 275 kMaxTextureSize, |
276 kMaxCubeMapTextureSize, | 276 kMaxCubeMapTextureSize, |
277 kMaxRectangleTextureSize, | 277 kMaxRectangleTextureSize, |
278 kMax3DTextureSize, | 278 kMax3DTextureSize, |
279 kMaxArrayTextureLayers, | 279 kMaxArrayTextureLayers, |
280 use_default_textures); | 280 use_default_textures); |
281 manager.Initialize(); | 281 manager.Initialize(); |
282 | 282 |
283 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); | 283 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); |
284 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); | 284 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); |
285 | 285 |
286 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. | 286 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
287 | 287 |
288 manager.Destroy(false); | 288 manager.Destroy(false, nullptr); |
289 } | 289 } |
290 | 290 |
291 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) { | 291 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) { |
292 bool use_default_textures = true; | 292 bool use_default_textures = true; |
293 SetupFeatureInfo("", "OpenGL ES 3.0", true); | 293 SetupFeatureInfo("", "OpenGL ES 3.0", true); |
294 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 294 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
295 true, true, false, "", use_default_textures); | 295 true, true, false, "", use_default_textures); |
296 TextureManager manager(NULL, | 296 TextureManager manager(NULL, |
297 feature_info_.get(), | 297 feature_info_.get(), |
298 kMaxTextureSize, | 298 kMaxTextureSize, |
299 kMaxCubeMapTextureSize, | 299 kMaxCubeMapTextureSize, |
300 kMaxRectangleTextureSize, | 300 kMaxRectangleTextureSize, |
301 kMax3DTextureSize, | 301 kMax3DTextureSize, |
302 kMaxArrayTextureLayers, | 302 kMaxArrayTextureLayers, |
303 use_default_textures); | 303 use_default_textures); |
304 manager.Initialize(); | 304 manager.Initialize(); |
305 | 305 |
306 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL); | 306 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL); |
307 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL); | 307 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL); |
308 | 308 |
309 manager.Destroy(false); | 309 manager.Destroy(false, nullptr); |
310 } | 310 } |
311 | 311 |
312 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) { | 312 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) { |
313 bool use_default_textures = false; | 313 bool use_default_textures = false; |
314 SetupFeatureInfo("", "OpenGL ES 3.0", true); | 314 SetupFeatureInfo("", "OpenGL ES 3.0", true); |
315 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 315 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
316 true, true, false, "", use_default_textures); | 316 true, true, false, "", use_default_textures); |
317 TextureManager manager(NULL, | 317 TextureManager manager(NULL, |
318 feature_info_.get(), | 318 feature_info_.get(), |
319 kMaxTextureSize, | 319 kMaxTextureSize, |
320 kMaxCubeMapTextureSize, | 320 kMaxCubeMapTextureSize, |
321 kMaxRectangleTextureSize, | 321 kMaxRectangleTextureSize, |
322 kMax3DTextureSize, | 322 kMax3DTextureSize, |
323 kMaxArrayTextureLayers, | 323 kMaxArrayTextureLayers, |
324 use_default_textures); | 324 use_default_textures); |
325 manager.Initialize(); | 325 manager.Initialize(); |
326 | 326 |
327 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL); | 327 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL); |
328 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL); | 328 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL); |
329 | 329 |
330 manager.Destroy(false); | 330 manager.Destroy(false, nullptr); |
331 } | 331 } |
332 | 332 |
333 TEST_F(TextureManagerTest, TextureUsageExt) { | 333 TEST_F(TextureManagerTest, TextureUsageExt) { |
334 TestHelper::SetupTextureManagerInitExpectations( | 334 TestHelper::SetupTextureManagerInitExpectations( |
335 gl_.get(), false, false, false, "GL_ANGLE_texture_usage", | 335 gl_.get(), false, false, false, "GL_ANGLE_texture_usage", |
336 kUseDefaultTextures); | 336 kUseDefaultTextures); |
337 TextureManager manager(NULL, | 337 TextureManager manager(NULL, |
338 feature_info_.get(), | 338 feature_info_.get(), |
339 kMaxTextureSize, | 339 kMaxTextureSize, |
340 kMaxCubeMapTextureSize, | 340 kMaxCubeMapTextureSize, |
341 kMaxRectangleTextureSize, | 341 kMaxRectangleTextureSize, |
342 kMax3DTextureSize, | 342 kMax3DTextureSize, |
343 kMaxArrayTextureLayers, | 343 kMaxArrayTextureLayers, |
344 kUseDefaultTextures); | 344 kUseDefaultTextures); |
345 manager.Initialize(); | 345 manager.Initialize(); |
346 const GLuint kClient1Id = 1; | 346 const GLuint kClient1Id = 1; |
347 const GLuint kService1Id = 11; | 347 const GLuint kService1Id = 11; |
348 // Check we can create texture. | 348 // Check we can create texture. |
349 manager.CreateTexture(kClient1Id, kService1Id); | 349 manager.CreateTexture(kClient1Id, kService1Id); |
350 // Check texture got created. | 350 // Check texture got created. |
351 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 351 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
352 ASSERT_TRUE(texture_ref != NULL); | 352 ASSERT_TRUE(texture_ref != NULL); |
353 TestHelper::SetTexParameteriWithExpectations( | 353 TestHelper::SetTexParameteriWithExpectations( |
354 gl_.get(), error_state_.get(), &manager, texture_ref, | 354 gl_.get(), error_state_.get(), &manager, texture_ref, |
355 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); | 355 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); |
356 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), | 356 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), |
357 texture_ref->texture()->usage()); | 357 texture_ref->texture()->usage()); |
358 manager.Destroy(false); | 358 manager.Destroy(false, nullptr); |
359 } | 359 } |
360 | 360 |
361 TEST_F(TextureManagerTest, Destroy) { | 361 TEST_F(TextureManagerTest, Destroy) { |
362 const GLuint kClient1Id = 1; | 362 const GLuint kClient1Id = 1; |
363 const GLuint kService1Id = 11; | 363 const GLuint kService1Id = 11; |
364 TestHelper::SetupTextureManagerInitExpectations( | 364 TestHelper::SetupTextureManagerInitExpectations( |
365 gl_.get(), false, false, false, "", kUseDefaultTextures); | 365 gl_.get(), false, false, false, "", kUseDefaultTextures); |
366 TextureManager manager(NULL, | 366 TextureManager manager(NULL, |
367 feature_info_.get(), | 367 feature_info_.get(), |
368 kMaxTextureSize, | 368 kMaxTextureSize, |
369 kMaxCubeMapTextureSize, | 369 kMaxCubeMapTextureSize, |
370 kMaxRectangleTextureSize, | 370 kMaxRectangleTextureSize, |
371 kMax3DTextureSize, | 371 kMax3DTextureSize, |
372 kMaxArrayTextureLayers, | 372 kMaxArrayTextureLayers, |
373 kUseDefaultTextures); | 373 kUseDefaultTextures); |
374 manager.Initialize(); | 374 manager.Initialize(); |
375 // Check we can create texture. | 375 // Check we can create texture. |
376 manager.CreateTexture(kClient1Id, kService1Id); | 376 manager.CreateTexture(kClient1Id, kService1Id); |
377 // Check texture got created. | 377 // Check texture got created. |
378 TextureRef* texture = manager.GetTexture(kClient1Id); | 378 TextureRef* texture = manager.GetTexture(kClient1Id); |
379 ASSERT_TRUE(texture != NULL); | 379 ASSERT_TRUE(texture != NULL); |
380 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 380 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
381 .Times(1) | 381 .Times(1) |
382 .RetiresOnSaturation(); | 382 .RetiresOnSaturation(); |
383 TestHelper::SetupTextureManagerDestructionExpectations( | 383 TestHelper::SetupTextureManagerDestructionExpectations( |
384 gl_.get(), false, false, "", kUseDefaultTextures); | 384 gl_.get(), false, false, "", kUseDefaultTextures); |
385 manager.Destroy(true); | 385 manager.Destroy(true, nullptr); |
386 // Check that resources got freed. | 386 // Check that resources got freed. |
387 texture = manager.GetTexture(kClient1Id); | 387 texture = manager.GetTexture(kClient1Id); |
388 ASSERT_TRUE(texture == NULL); | 388 ASSERT_TRUE(texture == NULL); |
389 } | 389 } |
390 | 390 |
391 TEST_F(TextureManagerTest, MaxValues) { | 391 TEST_F(TextureManagerTest, MaxValues) { |
392 // Check we get the right values for the max sizes. | 392 // Check we get the right values for the max sizes. |
393 EXPECT_EQ(kMax2dLevels, manager_->MaxLevelsForTarget(GL_TEXTURE_2D)); | 393 EXPECT_EQ(kMax2dLevels, manager_->MaxLevelsForTarget(GL_TEXTURE_2D)); |
394 EXPECT_EQ(kMaxCubeMapLevels, | 394 EXPECT_EQ(kMaxCubeMapLevels, |
395 manager_->MaxLevelsForTarget(GL_TEXTURE_CUBE_MAP)); | 395 manager_->MaxLevelsForTarget(GL_TEXTURE_CUBE_MAP)); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
531 kMaxArrayTextureLayers, | 531 kMaxArrayTextureLayers, |
532 kUseDefaultTextures); | 532 kUseDefaultTextures); |
533 // Check NPOT width on level 0 | 533 // Check NPOT width on level 0 |
534 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); | 534 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); |
535 // Check NPOT height on level 0 | 535 // Check NPOT height on level 0 |
536 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); | 536 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); |
537 // Check NPOT width on level 1 | 537 // Check NPOT width on level 1 |
538 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); | 538 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); |
539 // Check NPOT height on level 1 | 539 // Check NPOT height on level 1 |
540 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); | 540 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); |
541 manager.Destroy(false); | 541 manager.Destroy(false, nullptr); |
542 } | 542 } |
543 | 543 |
544 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) { | 544 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) { |
545 const GLuint kClientId = 1; | 545 const GLuint kClientId = 1; |
546 const GLuint kServiceId = 11; | 546 const GLuint kServiceId = 11; |
547 | 547 |
548 SetupFeatureInfo("", "2.1", false); | 548 SetupFeatureInfo("", "2.1", false); |
549 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, | 549 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, |
550 false, "", kUseDefaultTextures); | 550 false, "", kUseDefaultTextures); |
551 TextureManager manager(NULL, | 551 TextureManager manager(NULL, |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 // delete the texture. | 733 // delete the texture. |
734 if (!texture_ref_->client_id()) { | 734 if (!texture_ref_->client_id()) { |
735 // Check that it gets deleted when the last reference is released. | 735 // Check that it gets deleted when the last reference is released. |
736 EXPECT_CALL(*gl_, | 736 EXPECT_CALL(*gl_, |
737 DeleteTextures(1, ::testing::Pointee(texture_ref_->service_id()))) | 737 DeleteTextures(1, ::testing::Pointee(texture_ref_->service_id()))) |
738 .Times(1) | 738 .Times(1) |
739 .RetiresOnSaturation(); | 739 .RetiresOnSaturation(); |
740 } | 740 } |
741 texture_ref_ = NULL; | 741 texture_ref_ = NULL; |
742 } | 742 } |
743 manager_->Destroy(false); | 743 manager_->Destroy(false, nullptr); |
744 manager_.reset(); | 744 manager_.reset(); |
745 GpuServiceTest::TearDown(); | 745 GpuServiceTest::TearDown(); |
746 } | 746 } |
747 | 747 |
748 void SetParameter( | 748 void SetParameter( |
749 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { | 749 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { |
750 TestHelper::SetTexParameteriWithExpectations( | 750 TestHelper::SetTexParameteriWithExpectations( |
751 gl_.get(), error_state_.get(), manager_.get(), | 751 gl_.get(), error_state_.get(), manager_.get(), |
752 texture_ref, pname, value, error); | 752 texture_ref, pname, value, error); |
753 } | 753 } |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1036 // Check Setting level 0 to NPOT | 1036 // Check Setting level 0 to NPOT |
1037 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, | 1037 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, |
1038 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); | 1038 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
1039 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 1039 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
1040 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 1040 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1041 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); | 1041 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); |
1042 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1042 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1043 manager.MarkMipmapsGenerated(texture_ref); | 1043 manager.MarkMipmapsGenerated(texture_ref); |
1044 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1044 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
1045 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1045 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1046 manager.Destroy(false); | 1046 manager.Destroy(false, nullptr); |
1047 } | 1047 } |
1048 | 1048 |
1049 TEST_F(TextureTest, POTCubeMap) { | 1049 TEST_F(TextureTest, POTCubeMap) { |
1050 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); | 1050 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); |
1051 Texture* texture = texture_ref_->texture(); | 1051 Texture* texture = texture_ref_->texture(); |
1052 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 1052 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
1053 // Check Setting level 0 each face to POT | 1053 // Check Setting level 0 each face to POT |
1054 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, | 1054 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, |
1055 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1055 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
1056 gfx::Rect(4, 4)); | 1056 gfx::Rect(4, 4)); |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1338 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); | 1338 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
1339 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1339 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1340 TestHelper::SetTexParameteriWithExpectations( | 1340 TestHelper::SetTexParameteriWithExpectations( |
1341 gl_.get(), error_state_.get(), &manager, | 1341 gl_.get(), error_state_.get(), &manager, |
1342 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1342 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1343 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1343 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1344 TestHelper::SetTexParameteriWithExpectations( | 1344 TestHelper::SetTexParameteriWithExpectations( |
1345 gl_.get(), error_state_.get(), &manager, texture_ref, | 1345 gl_.get(), error_state_.get(), &manager, texture_ref, |
1346 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1346 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1347 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1347 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1348 manager.Destroy(false); | 1348 manager.Destroy(false, nullptr); |
1349 } | 1349 } |
1350 | 1350 |
1351 TEST_F(TextureTest, FloatLinear) { | 1351 TEST_F(TextureTest, FloatLinear) { |
1352 TestHelper::SetupFeatureInfoInitExpectations( | 1352 TestHelper::SetupFeatureInfoInitExpectations( |
1353 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); | 1353 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); |
1354 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1354 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1355 feature_info->InitializeForTesting(); | 1355 feature_info->InitializeForTesting(); |
1356 TextureManager manager(NULL, | 1356 TextureManager manager(NULL, |
1357 feature_info.get(), | 1357 feature_info.get(), |
1358 kMaxTextureSize, | 1358 kMaxTextureSize, |
1359 kMaxCubeMapTextureSize, | 1359 kMaxCubeMapTextureSize, |
1360 kMaxRectangleTextureSize, | 1360 kMaxRectangleTextureSize, |
1361 kMax3DTextureSize, | 1361 kMax3DTextureSize, |
1362 kMaxArrayTextureLayers, | 1362 kMaxArrayTextureLayers, |
1363 kUseDefaultTextures); | 1363 kUseDefaultTextures); |
1364 manager.CreateTexture(kClient1Id, kService1Id); | 1364 manager.CreateTexture(kClient1Id, kService1Id); |
1365 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1365 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1366 ASSERT_TRUE(texture_ref != NULL); | 1366 ASSERT_TRUE(texture_ref != NULL); |
1367 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1367 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1368 Texture* texture = texture_ref->texture(); | 1368 Texture* texture = texture_ref->texture(); |
1369 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1369 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1370 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1370 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1371 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); | 1371 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
1372 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1372 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1373 manager.Destroy(false); | 1373 manager.Destroy(false, nullptr); |
1374 } | 1374 } |
1375 | 1375 |
1376 TEST_F(TextureTest, HalfFloatNotLinear) { | 1376 TEST_F(TextureTest, HalfFloatNotLinear) { |
1377 TestHelper::SetupFeatureInfoInitExpectations( | 1377 TestHelper::SetupFeatureInfoInitExpectations( |
1378 gl_.get(), "GL_OES_texture_half_float"); | 1378 gl_.get(), "GL_OES_texture_half_float"); |
1379 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1379 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1380 feature_info->InitializeForTesting(); | 1380 feature_info->InitializeForTesting(); |
1381 TextureManager manager(NULL, | 1381 TextureManager manager(NULL, |
1382 feature_info.get(), | 1382 feature_info.get(), |
1383 kMaxTextureSize, | 1383 kMaxTextureSize, |
(...skipping 12 matching lines...) Expand all Loading... |
1396 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); | 1396 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
1397 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1397 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1398 TestHelper::SetTexParameteriWithExpectations( | 1398 TestHelper::SetTexParameteriWithExpectations( |
1399 gl_.get(), error_state_.get(), &manager, | 1399 gl_.get(), error_state_.get(), &manager, |
1400 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1400 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1401 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1401 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1402 TestHelper::SetTexParameteriWithExpectations( | 1402 TestHelper::SetTexParameteriWithExpectations( |
1403 gl_.get(), error_state_.get(), &manager, texture_ref, | 1403 gl_.get(), error_state_.get(), &manager, texture_ref, |
1404 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1404 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1405 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1405 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1406 manager.Destroy(false); | 1406 manager.Destroy(false, nullptr); |
1407 } | 1407 } |
1408 | 1408 |
1409 TEST_F(TextureTest, HalfFloatLinear) { | 1409 TEST_F(TextureTest, HalfFloatLinear) { |
1410 TestHelper::SetupFeatureInfoInitExpectations( | 1410 TestHelper::SetupFeatureInfoInitExpectations( |
1411 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); | 1411 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); |
1412 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1412 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1413 feature_info->InitializeForTesting(); | 1413 feature_info->InitializeForTesting(); |
1414 TextureManager manager(NULL, | 1414 TextureManager manager(NULL, |
1415 feature_info.get(), | 1415 feature_info.get(), |
1416 kMaxTextureSize, | 1416 kMaxTextureSize, |
1417 kMaxCubeMapTextureSize, | 1417 kMaxCubeMapTextureSize, |
1418 kMaxRectangleTextureSize, | 1418 kMaxRectangleTextureSize, |
1419 kMax3DTextureSize, | 1419 kMax3DTextureSize, |
1420 kMaxArrayTextureLayers, | 1420 kMaxArrayTextureLayers, |
1421 kUseDefaultTextures); | 1421 kUseDefaultTextures); |
1422 manager.CreateTexture(kClient1Id, kService1Id); | 1422 manager.CreateTexture(kClient1Id, kService1Id); |
1423 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1423 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1424 ASSERT_TRUE(texture_ref != NULL); | 1424 ASSERT_TRUE(texture_ref != NULL); |
1425 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1425 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1426 Texture* texture = texture_ref->texture(); | 1426 Texture* texture = texture_ref->texture(); |
1427 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1427 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1428 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1428 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1429 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); | 1429 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
1430 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1430 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1431 manager.Destroy(false); | 1431 manager.Destroy(false, nullptr); |
1432 } | 1432 } |
1433 | 1433 |
1434 TEST_F(TextureTest, EGLImageExternal) { | 1434 TEST_F(TextureTest, EGLImageExternal) { |
1435 TestHelper::SetupFeatureInfoInitExpectations( | 1435 TestHelper::SetupFeatureInfoInitExpectations( |
1436 gl_.get(), "GL_OES_EGL_image_external"); | 1436 gl_.get(), "GL_OES_EGL_image_external"); |
1437 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1437 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1438 feature_info->InitializeForTesting(); | 1438 feature_info->InitializeForTesting(); |
1439 TextureManager manager(NULL, | 1439 TextureManager manager(NULL, |
1440 feature_info.get(), | 1440 feature_info.get(), |
1441 kMaxTextureSize, | 1441 kMaxTextureSize, |
1442 kMaxCubeMapTextureSize, | 1442 kMaxCubeMapTextureSize, |
1443 kMaxRectangleTextureSize, | 1443 kMaxRectangleTextureSize, |
1444 kMax3DTextureSize, | 1444 kMax3DTextureSize, |
1445 kMaxArrayTextureLayers, | 1445 kMaxArrayTextureLayers, |
1446 kUseDefaultTextures); | 1446 kUseDefaultTextures); |
1447 manager.CreateTexture(kClient1Id, kService1Id); | 1447 manager.CreateTexture(kClient1Id, kService1Id); |
1448 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1448 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1449 ASSERT_TRUE(texture_ref != NULL); | 1449 ASSERT_TRUE(texture_ref != NULL); |
1450 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); | 1450 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); |
1451 Texture* texture = texture_ref->texture(); | 1451 Texture* texture = texture_ref->texture(); |
1452 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); | 1452 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
1453 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1453 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1454 manager.Destroy(false); | 1454 manager.Destroy(false, nullptr); |
1455 } | 1455 } |
1456 | 1456 |
1457 TEST_F(TextureTest, DepthTexture) { | 1457 TEST_F(TextureTest, DepthTexture) { |
1458 TestHelper::SetupFeatureInfoInitExpectations( | 1458 TestHelper::SetupFeatureInfoInitExpectations( |
1459 gl_.get(), "GL_ANGLE_depth_texture"); | 1459 gl_.get(), "GL_ANGLE_depth_texture"); |
1460 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1460 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1461 feature_info->InitializeForTesting(); | 1461 feature_info->InitializeForTesting(); |
1462 TextureManager manager(NULL, | 1462 TextureManager manager(NULL, |
1463 feature_info.get(), | 1463 feature_info.get(), |
1464 kMaxTextureSize, | 1464 kMaxTextureSize, |
1465 kMaxCubeMapTextureSize, | 1465 kMaxCubeMapTextureSize, |
1466 kMaxRectangleTextureSize, | 1466 kMaxRectangleTextureSize, |
1467 kMax3DTextureSize, | 1467 kMax3DTextureSize, |
1468 kMaxArrayTextureLayers, | 1468 kMaxArrayTextureLayers, |
1469 kUseDefaultTextures); | 1469 kUseDefaultTextures); |
1470 manager.CreateTexture(kClient1Id, kService1Id); | 1470 manager.CreateTexture(kClient1Id, kService1Id); |
1471 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1471 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1472 ASSERT_TRUE(texture_ref != NULL); | 1472 ASSERT_TRUE(texture_ref != NULL); |
1473 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1473 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1474 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, | 1474 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, |
1475 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect()); | 1475 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect()); |
1476 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1476 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1477 manager.Destroy(false); | 1477 manager.Destroy(false, nullptr); |
1478 } | 1478 } |
1479 | 1479 |
1480 TEST_F(TextureTest, SafeUnsafe) { | 1480 TEST_F(TextureTest, SafeUnsafe) { |
1481 static const GLuint kClient2Id = 2; | 1481 static const GLuint kClient2Id = 2; |
1482 static const GLuint kService2Id = 12; | 1482 static const GLuint kService2Id = 12; |
1483 static const GLuint kClient3Id = 3; | 1483 static const GLuint kClient3Id = 3; |
1484 static const GLuint kService3Id = 13; | 1484 static const GLuint kService3Id = 13; |
1485 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1485 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
1486 Texture* texture = texture_ref_->texture(); | 1486 Texture* texture = texture_ref_->texture(); |
1487 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1487 EXPECT_EQ(0, texture->num_uncleared_mips()); |
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2257 SetupFeatureInfo("", "OpenGL ES 2.0", false); | 2257 SetupFeatureInfo("", "OpenGL ES 2.0", false); |
2258 TestHelper::SetupTextureManagerInitExpectations( | 2258 TestHelper::SetupTextureManagerInitExpectations( |
2259 gl_.get(), false, false, false, "", kUseDefaultTextures); | 2259 gl_.get(), false, false, false, "", kUseDefaultTextures); |
2260 texture_manager1_->Initialize(); | 2260 texture_manager1_->Initialize(); |
2261 TestHelper::SetupTextureManagerInitExpectations( | 2261 TestHelper::SetupTextureManagerInitExpectations( |
2262 gl_.get(), false, false, false, "", kUseDefaultTextures); | 2262 gl_.get(), false, false, false, "", kUseDefaultTextures); |
2263 texture_manager2_->Initialize(); | 2263 texture_manager2_->Initialize(); |
2264 } | 2264 } |
2265 | 2265 |
2266 void TearDown() override { | 2266 void TearDown() override { |
2267 texture_manager2_->Destroy(false); | 2267 texture_manager2_->Destroy(false, nullptr); |
2268 texture_manager2_.reset(); | 2268 texture_manager2_.reset(); |
2269 texture_manager1_->Destroy(false); | 2269 texture_manager1_->Destroy(false, nullptr); |
2270 texture_manager1_.reset(); | 2270 texture_manager1_.reset(); |
2271 GpuServiceTest::TearDown(); | 2271 GpuServiceTest::TearDown(); |
2272 } | 2272 } |
2273 | 2273 |
2274 protected: | 2274 protected: |
2275 void SetupFeatureInfo(const char* gl_extensions, | 2275 void SetupFeatureInfo(const char* gl_extensions, |
2276 const char* gl_version, | 2276 const char* gl_version, |
2277 bool enable_es3) { | 2277 bool enable_es3) { |
2278 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion( | 2278 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion( |
2279 gl_.get(), gl_extensions, "", gl_version, | 2279 gl_.get(), gl_extensions, "", gl_version, |
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2770 ExpectValid( | 2770 ExpectValid( |
2771 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); | 2771 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); |
2772 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, | 2772 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, |
2773 GL_DEPTH32F_STENCIL8); | 2773 GL_DEPTH32F_STENCIL8); |
2774 | 2774 |
2775 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); | 2775 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); |
2776 } | 2776 } |
2777 | 2777 |
2778 } // namespace gles2 | 2778 } // namespace gles2 |
2779 } // namespace gpu | 2779 } // namespace gpu |
OLD | NEW |