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> |
11 #include <utility> | 11 #include <utility> |
12 | 12 |
13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
14 #include "base/macros.h" | 14 #include "base/macros.h" |
15 #include "gpu/command_buffer/service/error_state_mock.h" | 15 #include "gpu/command_buffer/service/error_state_mock.h" |
16 #include "gpu/command_buffer/service/feature_info.h" | 16 #include "gpu/command_buffer/service/feature_info.h" |
17 #include "gpu/command_buffer/service/framebuffer_manager.h" | 17 #include "gpu/command_buffer/service/framebuffer_manager.h" |
18 #include "gpu/command_buffer/service/gl_stream_texture_image.h" | 18 #include "gpu/command_buffer/service/gl_stream_texture_image.h" |
19 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" | 19 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" |
20 #include "gpu/command_buffer/service/gpu_service_test.h" | 20 #include "gpu/command_buffer/service/gpu_service_test.h" |
21 #include "gpu/command_buffer/service/mailbox_manager.h" | 21 #include "gpu/command_buffer/service/mailbox_manager.h" |
22 #include "gpu/command_buffer/service/memory_tracking.h" | 22 #include "gpu/command_buffer/service/memory_tracking.h" |
23 #include "gpu/command_buffer/service/mocks.h" | 23 #include "gpu/command_buffer/service/mocks.h" |
| 24 #include "gpu/command_buffer/service/progress_reporter_stub.h" |
24 #include "gpu/command_buffer/service/test_helper.h" | 25 #include "gpu/command_buffer/service/test_helper.h" |
25 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
26 #include "ui/gl/gl_image_stub.h" | 27 #include "ui/gl/gl_image_stub.h" |
27 #include "ui/gl/gl_mock.h" | 28 #include "ui/gl/gl_mock.h" |
28 #include "ui/gl/gl_switches.h" | 29 #include "ui/gl/gl_switches.h" |
29 | 30 |
30 using ::testing::AtLeast; | 31 using ::testing::AtLeast; |
31 using ::testing::Pointee; | 32 using ::testing::Pointee; |
32 using ::testing::Return; | 33 using ::testing::Return; |
33 using ::testing::SetArgPointee; | 34 using ::testing::SetArgPointee; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 command_line.AppendSwitch(switches::kEnableUnsafeES3APIs); | 75 command_line.AppendSwitch(switches::kEnableUnsafeES3APIs); |
75 GpuDriverBugWorkarounds gpu_driver_bug_workaround(&command_line); | 76 GpuDriverBugWorkarounds gpu_driver_bug_workaround(&command_line); |
76 feature_info_ = new FeatureInfo(command_line, gpu_driver_bug_workaround); | 77 feature_info_ = new FeatureInfo(command_line, gpu_driver_bug_workaround); |
77 } | 78 } |
78 | 79 |
79 ~TextureManagerTest() override {} | 80 ~TextureManagerTest() override {} |
80 | 81 |
81 protected: | 82 protected: |
82 void SetUp() override { | 83 void SetUp() override { |
83 GpuServiceTest::SetUp(); | 84 GpuServiceTest::SetUp(); |
84 manager_.reset(new TextureManager(NULL, | 85 manager_.reset(new TextureManager( |
85 feature_info_.get(), | 86 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize, |
86 kMaxTextureSize, | 87 kMaxRectangleTextureSize, kMax3DTextureSize, kMaxArrayTextureLayers, |
87 kMaxCubeMapTextureSize, | 88 kUseDefaultTextures, &progress_reporter_)); |
88 kMaxRectangleTextureSize, | |
89 kMax3DTextureSize, | |
90 kMaxArrayTextureLayers, | |
91 kUseDefaultTextures)); | |
92 SetupFeatureInfo("", "OpenGL ES 2.0", false); | 89 SetupFeatureInfo("", "OpenGL ES 2.0", false); |
93 TestHelper::SetupTextureManagerInitExpectations( | 90 TestHelper::SetupTextureManagerInitExpectations( |
94 gl_.get(), false, false, false, "", kUseDefaultTextures); | 91 gl_.get(), false, false, false, "", kUseDefaultTextures); |
95 manager_->Initialize(); | 92 manager_->Initialize(); |
96 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 93 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
97 } | 94 } |
98 | 95 |
99 void TearDown() override { | 96 void TearDown() override { |
100 manager_->Destroy(false); | 97 manager_->Destroy(false); |
101 manager_.reset(); | 98 manager_.reset(); |
(...skipping 21 matching lines...) Expand all Loading... |
123 EXPECT_CALL(*gl_, GetIntegerv(GL_MAX_DRAW_BUFFERS, _)) | 120 EXPECT_CALL(*gl_, GetIntegerv(GL_MAX_DRAW_BUFFERS, _)) |
124 .WillOnce(SetArgPointee<1>(8)) | 121 .WillOnce(SetArgPointee<1>(8)) |
125 .RetiresOnSaturation(); | 122 .RetiresOnSaturation(); |
126 feature_info_->EnableES3Validators(); | 123 feature_info_->EnableES3Validators(); |
127 } | 124 } |
128 } | 125 } |
129 | 126 |
130 scoped_refptr<FeatureInfo> feature_info_; | 127 scoped_refptr<FeatureInfo> feature_info_; |
131 std::unique_ptr<TextureManager> manager_; | 128 std::unique_ptr<TextureManager> manager_; |
132 std::unique_ptr<MockErrorState> error_state_; | 129 std::unique_ptr<MockErrorState> error_state_; |
| 130 ProgressReporterStub progress_reporter_; |
133 }; | 131 }; |
134 | 132 |
135 // GCC requires these declarations, but MSVC requires they not be present | 133 // GCC requires these declarations, but MSVC requires they not be present |
136 #ifndef COMPILER_MSVC | 134 #ifndef COMPILER_MSVC |
137 const GLint TextureManagerTest::kMaxTextureSize; | 135 const GLint TextureManagerTest::kMaxTextureSize; |
138 const GLint TextureManagerTest::kMaxCubeMapTextureSize; | 136 const GLint TextureManagerTest::kMaxCubeMapTextureSize; |
139 const GLint TextureManagerTest::kMaxRectangleTextureSize; | 137 const GLint TextureManagerTest::kMaxRectangleTextureSize; |
140 const GLint TextureManagerTest::kMaxExternalTextureSize; | 138 const GLint TextureManagerTest::kMaxExternalTextureSize; |
141 const GLint TextureManagerTest::kMax3DTextureSize; | 139 const GLint TextureManagerTest::kMax3DTextureSize; |
142 const GLint TextureManagerTest::kMaxArrayTextureLayers; | 140 const GLint TextureManagerTest::kMaxArrayTextureLayers; |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t()); | 239 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t()); |
242 SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE); | 240 SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE); |
243 SetParameter(texture_ref, GL_TEXTURE_IMMUTABLE_FORMAT, 0, GL_INVALID_ENUM); | 241 SetParameter(texture_ref, GL_TEXTURE_IMMUTABLE_FORMAT, 0, GL_INVALID_ENUM); |
244 SetParameter(texture_ref, GL_TEXTURE_IMMUTABLE_LEVELS, 0, GL_INVALID_ENUM); | 242 SetParameter(texture_ref, GL_TEXTURE_IMMUTABLE_LEVELS, 0, GL_INVALID_ENUM); |
245 } | 243 } |
246 | 244 |
247 TEST_F(TextureManagerTest, UseDefaultTexturesTrue) { | 245 TEST_F(TextureManagerTest, UseDefaultTexturesTrue) { |
248 bool use_default_textures = true; | 246 bool use_default_textures = true; |
249 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 247 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
250 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); | 248 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); |
251 TextureManager manager(NULL, | 249 TextureManager manager(NULL, feature_info_.get(), kMaxTextureSize, |
252 feature_info_.get(), | 250 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
253 kMaxTextureSize, | 251 kMax3DTextureSize, kMaxArrayTextureLayers, |
254 kMaxCubeMapTextureSize, | 252 use_default_textures, &progress_reporter_); |
255 kMaxRectangleTextureSize, | |
256 kMax3DTextureSize, | |
257 kMaxArrayTextureLayers, | |
258 use_default_textures); | |
259 manager.Initialize(); | 253 manager.Initialize(); |
260 | 254 |
261 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); | 255 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); |
262 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); | 256 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); |
263 | 257 |
264 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. | 258 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
265 | 259 |
266 manager.Destroy(false); | 260 manager.Destroy(false); |
267 } | 261 } |
268 | 262 |
269 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { | 263 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { |
270 bool use_default_textures = false; | 264 bool use_default_textures = false; |
271 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 265 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
272 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); | 266 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); |
273 TextureManager manager(NULL, | 267 TextureManager manager(NULL, feature_info_.get(), kMaxTextureSize, |
274 feature_info_.get(), | 268 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
275 kMaxTextureSize, | 269 kMax3DTextureSize, kMaxArrayTextureLayers, |
276 kMaxCubeMapTextureSize, | 270 use_default_textures, &progress_reporter_); |
277 kMaxRectangleTextureSize, | |
278 kMax3DTextureSize, | |
279 kMaxArrayTextureLayers, | |
280 use_default_textures); | |
281 manager.Initialize(); | 271 manager.Initialize(); |
282 | 272 |
283 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); | 273 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); |
284 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); | 274 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); |
285 | 275 |
286 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. | 276 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
287 | 277 |
288 manager.Destroy(false); | 278 manager.Destroy(false); |
289 } | 279 } |
290 | 280 |
291 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) { | 281 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) { |
292 bool use_default_textures = true; | 282 bool use_default_textures = true; |
293 SetupFeatureInfo("", "OpenGL ES 3.0", true); | 283 SetupFeatureInfo("", "OpenGL ES 3.0", true); |
294 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 284 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
295 true, true, false, "", use_default_textures); | 285 true, true, false, "", use_default_textures); |
296 TextureManager manager(NULL, | 286 TextureManager manager(NULL, feature_info_.get(), kMaxTextureSize, |
297 feature_info_.get(), | 287 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
298 kMaxTextureSize, | 288 kMax3DTextureSize, kMaxArrayTextureLayers, |
299 kMaxCubeMapTextureSize, | 289 use_default_textures, &progress_reporter_); |
300 kMaxRectangleTextureSize, | |
301 kMax3DTextureSize, | |
302 kMaxArrayTextureLayers, | |
303 use_default_textures); | |
304 manager.Initialize(); | 290 manager.Initialize(); |
305 | 291 |
306 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL); | 292 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL); |
307 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL); | 293 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL); |
308 | 294 |
309 manager.Destroy(false); | 295 manager.Destroy(false); |
310 } | 296 } |
311 | 297 |
312 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) { | 298 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) { |
313 bool use_default_textures = false; | 299 bool use_default_textures = false; |
314 SetupFeatureInfo("", "OpenGL ES 3.0", true); | 300 SetupFeatureInfo("", "OpenGL ES 3.0", true); |
315 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 301 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
316 true, true, false, "", use_default_textures); | 302 true, true, false, "", use_default_textures); |
317 TextureManager manager(NULL, | 303 TextureManager manager(NULL, feature_info_.get(), kMaxTextureSize, |
318 feature_info_.get(), | 304 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
319 kMaxTextureSize, | 305 kMax3DTextureSize, kMaxArrayTextureLayers, |
320 kMaxCubeMapTextureSize, | 306 use_default_textures, &progress_reporter_); |
321 kMaxRectangleTextureSize, | |
322 kMax3DTextureSize, | |
323 kMaxArrayTextureLayers, | |
324 use_default_textures); | |
325 manager.Initialize(); | 307 manager.Initialize(); |
326 | 308 |
327 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL); | 309 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL); |
328 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL); | 310 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL); |
329 | 311 |
330 manager.Destroy(false); | 312 manager.Destroy(false); |
331 } | 313 } |
332 | 314 |
333 TEST_F(TextureManagerTest, TextureUsageExt) { | 315 TEST_F(TextureManagerTest, TextureUsageExt) { |
334 TestHelper::SetupTextureManagerInitExpectations( | 316 TestHelper::SetupTextureManagerInitExpectations( |
335 gl_.get(), false, false, false, "GL_ANGLE_texture_usage", | 317 gl_.get(), false, false, false, "GL_ANGLE_texture_usage", |
336 kUseDefaultTextures); | 318 kUseDefaultTextures); |
337 TextureManager manager(NULL, | 319 TextureManager manager(NULL, feature_info_.get(), kMaxTextureSize, |
338 feature_info_.get(), | 320 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
339 kMaxTextureSize, | 321 kMax3DTextureSize, kMaxArrayTextureLayers, |
340 kMaxCubeMapTextureSize, | 322 kUseDefaultTextures, &progress_reporter_); |
341 kMaxRectangleTextureSize, | |
342 kMax3DTextureSize, | |
343 kMaxArrayTextureLayers, | |
344 kUseDefaultTextures); | |
345 manager.Initialize(); | 323 manager.Initialize(); |
346 const GLuint kClient1Id = 1; | 324 const GLuint kClient1Id = 1; |
347 const GLuint kService1Id = 11; | 325 const GLuint kService1Id = 11; |
348 // Check we can create texture. | 326 // Check we can create texture. |
349 manager.CreateTexture(kClient1Id, kService1Id); | 327 manager.CreateTexture(kClient1Id, kService1Id); |
350 // Check texture got created. | 328 // Check texture got created. |
351 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 329 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
352 ASSERT_TRUE(texture_ref != NULL); | 330 ASSERT_TRUE(texture_ref != NULL); |
353 TestHelper::SetTexParameteriWithExpectations( | 331 TestHelper::SetTexParameteriWithExpectations( |
354 gl_.get(), error_state_.get(), &manager, texture_ref, | 332 gl_.get(), error_state_.get(), &manager, texture_ref, |
355 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); | 333 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); |
356 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), | 334 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), |
357 texture_ref->texture()->usage()); | 335 texture_ref->texture()->usage()); |
358 manager.Destroy(false); | 336 manager.Destroy(false); |
359 } | 337 } |
360 | 338 |
361 TEST_F(TextureManagerTest, Destroy) { | 339 TEST_F(TextureManagerTest, Destroy) { |
362 const GLuint kClient1Id = 1; | 340 const GLuint kClient1Id = 1; |
363 const GLuint kService1Id = 11; | 341 const GLuint kService1Id = 11; |
364 TestHelper::SetupTextureManagerInitExpectations( | 342 TestHelper::SetupTextureManagerInitExpectations( |
365 gl_.get(), false, false, false, "", kUseDefaultTextures); | 343 gl_.get(), false, false, false, "", kUseDefaultTextures); |
366 TextureManager manager(NULL, | 344 TextureManager manager(NULL, feature_info_.get(), kMaxTextureSize, |
367 feature_info_.get(), | 345 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
368 kMaxTextureSize, | 346 kMax3DTextureSize, kMaxArrayTextureLayers, |
369 kMaxCubeMapTextureSize, | 347 kUseDefaultTextures, &progress_reporter_); |
370 kMaxRectangleTextureSize, | |
371 kMax3DTextureSize, | |
372 kMaxArrayTextureLayers, | |
373 kUseDefaultTextures); | |
374 manager.Initialize(); | 348 manager.Initialize(); |
375 // Check we can create texture. | 349 // Check we can create texture. |
376 manager.CreateTexture(kClient1Id, kService1Id); | 350 manager.CreateTexture(kClient1Id, kService1Id); |
377 // Check texture got created. | 351 // Check texture got created. |
378 TextureRef* texture = manager.GetTexture(kClient1Id); | 352 TextureRef* texture = manager.GetTexture(kClient1Id); |
379 ASSERT_TRUE(texture != NULL); | 353 ASSERT_TRUE(texture != NULL); |
380 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 354 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
381 .Times(1) | 355 .Times(1) |
382 .RetiresOnSaturation(); | 356 .RetiresOnSaturation(); |
383 TestHelper::SetupTextureManagerDestructionExpectations( | 357 TestHelper::SetupTextureManagerDestructionExpectations( |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 (kMaxCubeMapTextureSize >> level) * 2, | 489 (kMaxCubeMapTextureSize >> level) * 2, |
516 1)); | 490 1)); |
517 } | 491 } |
518 } | 492 } |
519 | 493 |
520 TEST_F(TextureManagerTest, ValidForTargetNPOT) { | 494 TEST_F(TextureManagerTest, ValidForTargetNPOT) { |
521 TestHelper::SetupFeatureInfoInitExpectations( | 495 TestHelper::SetupFeatureInfoInitExpectations( |
522 gl_.get(), "GL_OES_texture_npot"); | 496 gl_.get(), "GL_OES_texture_npot"); |
523 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 497 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
524 feature_info->InitializeForTesting(); | 498 feature_info->InitializeForTesting(); |
525 TextureManager manager(NULL, | 499 TextureManager manager(NULL, feature_info.get(), kMaxTextureSize, |
526 feature_info.get(), | 500 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
527 kMaxTextureSize, | 501 kMax3DTextureSize, kMaxArrayTextureLayers, |
528 kMaxCubeMapTextureSize, | 502 kUseDefaultTextures, &progress_reporter_); |
529 kMaxRectangleTextureSize, | |
530 kMax3DTextureSize, | |
531 kMaxArrayTextureLayers, | |
532 kUseDefaultTextures); | |
533 // Check NPOT width on level 0 | 503 // Check NPOT width on level 0 |
534 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); | 504 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); |
535 // Check NPOT height on level 0 | 505 // Check NPOT height on level 0 |
536 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); | 506 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); |
537 // Check NPOT width on level 1 | 507 // Check NPOT width on level 1 |
538 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); | 508 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); |
539 // Check NPOT height on level 1 | 509 // Check NPOT height on level 1 |
540 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); | 510 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); |
541 manager.Destroy(false); | 511 manager.Destroy(false); |
542 } | 512 } |
543 | 513 |
544 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) { | 514 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) { |
545 const GLuint kClientId = 1; | 515 const GLuint kClientId = 1; |
546 const GLuint kServiceId = 11; | 516 const GLuint kServiceId = 11; |
547 | 517 |
548 SetupFeatureInfo("", "2.1", false); | 518 SetupFeatureInfo("", "2.1", false); |
549 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, | 519 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, |
550 false, "", kUseDefaultTextures); | 520 false, "", kUseDefaultTextures); |
551 TextureManager manager(NULL, | 521 TextureManager manager(NULL, feature_info_.get(), kMaxTextureSize, |
552 feature_info_.get(), | 522 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
553 kMaxTextureSize, | 523 kMax3DTextureSize, kMaxArrayTextureLayers, |
554 kMaxCubeMapTextureSize, | 524 kUseDefaultTextures, &progress_reporter_); |
555 kMaxRectangleTextureSize, | |
556 kMax3DTextureSize, | |
557 kMaxArrayTextureLayers, | |
558 kUseDefaultTextures); | |
559 manager.Initialize(); | 525 manager.Initialize(); |
560 | 526 |
561 // Create a texture. | 527 // Create a texture. |
562 manager.CreateTexture(kClientId, kServiceId); | 528 manager.CreateTexture(kClientId, kServiceId); |
563 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); | 529 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); |
564 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); | 530 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); |
565 | 531 |
566 Texture* texture = texture_ref->texture(); | 532 Texture* texture = texture_ref->texture(); |
567 | 533 |
568 // GL_ALPHA emulation | 534 // GL_ALPHA emulation |
(...skipping 17 matching lines...) Expand all Loading... |
586 manager.RemoveTexture(kClientId); | 552 manager.RemoveTexture(kClientId); |
587 } | 553 } |
588 | 554 |
589 TEST_F(TextureManagerTest, AlphaLuminanceCoreProfileEmulation) { | 555 TEST_F(TextureManagerTest, AlphaLuminanceCoreProfileEmulation) { |
590 const GLuint kClientId = 1; | 556 const GLuint kClientId = 1; |
591 const GLuint kServiceId = 11; | 557 const GLuint kServiceId = 11; |
592 | 558 |
593 SetupFeatureInfo("", "4.2", true); | 559 SetupFeatureInfo("", "4.2", true); |
594 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), true, true, true, | 560 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), true, true, true, |
595 "", kUseDefaultTextures); | 561 "", kUseDefaultTextures); |
596 TextureManager manager(NULL, | 562 TextureManager manager(NULL, feature_info_.get(), kMaxTextureSize, |
597 feature_info_.get(), | 563 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
598 kMaxTextureSize, | 564 kMax3DTextureSize, kMaxArrayTextureLayers, |
599 kMaxCubeMapTextureSize, | 565 kUseDefaultTextures, &progress_reporter_); |
600 kMaxRectangleTextureSize, | |
601 kMax3DTextureSize, | |
602 kMaxArrayTextureLayers, | |
603 kUseDefaultTextures); | |
604 manager.Initialize(); | 566 manager.Initialize(); |
605 | 567 |
606 // Create a texture. | 568 // Create a texture. |
607 manager.CreateTexture(kClientId, kServiceId); | 569 manager.CreateTexture(kClientId, kServiceId); |
608 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); | 570 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); |
609 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); | 571 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); |
610 | 572 |
611 Texture* texture = texture_ref->texture(); | 573 Texture* texture = texture_ref->texture(); |
612 | 574 |
613 // GL_ALPHA emulation | 575 // GL_ALPHA emulation |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
705 } | 667 } |
706 ~TextureTestBase() override { texture_ref_ = NULL; } | 668 ~TextureTestBase() override { texture_ref_ = NULL; } |
707 | 669 |
708 protected: | 670 protected: |
709 void SetUpBase(MemoryTracker* memory_tracker, const std::string& extensions) { | 671 void SetUpBase(MemoryTracker* memory_tracker, const std::string& extensions) { |
710 GpuServiceTest::SetUp(); | 672 GpuServiceTest::SetUp(); |
711 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), | 673 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), |
712 extensions.c_str()); | 674 extensions.c_str()); |
713 feature_info_->InitializeForTesting(); | 675 feature_info_->InitializeForTesting(); |
714 | 676 |
715 manager_.reset(new TextureManager(memory_tracker, | 677 manager_.reset(new TextureManager( |
716 feature_info_.get(), | 678 memory_tracker, feature_info_.get(), kMaxTextureSize, |
717 kMaxTextureSize, | 679 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, kMax3DTextureSize, |
718 kMaxCubeMapTextureSize, | 680 kMaxArrayTextureLayers, kUseDefaultTextures, &progress_reporter_)); |
719 kMaxRectangleTextureSize, | |
720 kMax3DTextureSize, | |
721 kMaxArrayTextureLayers, | |
722 kUseDefaultTextures)); | |
723 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); | 681 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); |
724 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 682 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
725 manager_->CreateTexture(kClient1Id, kService1Id); | 683 manager_->CreateTexture(kClient1Id, kService1Id); |
726 texture_ref_ = manager_->GetTexture(kClient1Id); | 684 texture_ref_ = manager_->GetTexture(kClient1Id); |
727 ASSERT_TRUE(texture_ref_.get() != NULL); | 685 ASSERT_TRUE(texture_ref_.get() != NULL); |
728 } | 686 } |
729 | 687 |
730 void TearDown() override { | 688 void TearDown() override { |
731 if (texture_ref_.get()) { | 689 if (texture_ref_.get()) { |
732 // If it's not in the manager then setting texture_ref_ to NULL will | 690 // If it's not in the manager then setting texture_ref_ to NULL will |
(...skipping 17 matching lines...) Expand all Loading... |
750 TestHelper::SetTexParameteriWithExpectations( | 708 TestHelper::SetTexParameteriWithExpectations( |
751 gl_.get(), error_state_.get(), manager_.get(), | 709 gl_.get(), error_state_.get(), manager_.get(), |
752 texture_ref, pname, value, error); | 710 texture_ref, pname, value, error); |
753 } | 711 } |
754 | 712 |
755 std::unique_ptr<MockGLES2Decoder> decoder_; | 713 std::unique_ptr<MockGLES2Decoder> decoder_; |
756 std::unique_ptr<MockErrorState> error_state_; | 714 std::unique_ptr<MockErrorState> error_state_; |
757 scoped_refptr<FeatureInfo> feature_info_; | 715 scoped_refptr<FeatureInfo> feature_info_; |
758 std::unique_ptr<TextureManager> manager_; | 716 std::unique_ptr<TextureManager> manager_; |
759 scoped_refptr<TextureRef> texture_ref_; | 717 scoped_refptr<TextureRef> texture_ref_; |
| 718 ProgressReporterStub progress_reporter_; |
760 }; | 719 }; |
761 | 720 |
762 class TextureTest : public TextureTestBase { | 721 class TextureTest : public TextureTestBase { |
763 protected: | 722 protected: |
764 void SetUp() override { SetUpBase(NULL, std::string()); } | 723 void SetUp() override { SetUpBase(NULL, std::string()); } |
765 }; | 724 }; |
766 | 725 |
767 class TextureMemoryTrackerTest : public TextureTestBase { | 726 class TextureMemoryTrackerTest : public TextureTestBase { |
768 protected: | 727 protected: |
769 void SetUp() override { | 728 void SetUp() override { |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1011 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 970 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
1012 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 971 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
1013 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); | 972 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
1014 } | 973 } |
1015 | 974 |
1016 TEST_F(TextureTest, NPOT2DNPOTOK) { | 975 TEST_F(TextureTest, NPOT2DNPOTOK) { |
1017 TestHelper::SetupFeatureInfoInitExpectations( | 976 TestHelper::SetupFeatureInfoInitExpectations( |
1018 gl_.get(), "GL_OES_texture_npot"); | 977 gl_.get(), "GL_OES_texture_npot"); |
1019 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 978 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1020 feature_info->InitializeForTesting(); | 979 feature_info->InitializeForTesting(); |
1021 TextureManager manager(NULL, | 980 TextureManager manager(NULL, feature_info.get(), kMaxTextureSize, |
1022 feature_info.get(), | 981 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1023 kMaxTextureSize, | 982 kMax3DTextureSize, kMaxArrayTextureLayers, |
1024 kMaxCubeMapTextureSize, | 983 kUseDefaultTextures, &progress_reporter_); |
1025 kMaxRectangleTextureSize, | |
1026 kMax3DTextureSize, | |
1027 kMaxArrayTextureLayers, | |
1028 kUseDefaultTextures); | |
1029 manager.CreateTexture(kClient1Id, kService1Id); | 984 manager.CreateTexture(kClient1Id, kService1Id); |
1030 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 985 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1031 ASSERT_TRUE(texture_ref != NULL); | 986 ASSERT_TRUE(texture_ref != NULL); |
1032 Texture* texture = texture_ref->texture(); | 987 Texture* texture = texture_ref->texture(); |
1033 | 988 |
1034 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 989 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1035 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 990 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1036 // Check Setting level 0 to NPOT | 991 // Check Setting level 0 to NPOT |
1037 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, | 992 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, |
1038 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); | 993 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1313 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 1, 1, 1, 2, 3, 4)); | 1268 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 1, 1, 1, 2, 3, 4)); |
1314 manager_->RemoveTexture(kClient1Id); | 1269 manager_->RemoveTexture(kClient1Id); |
1315 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 5, 6)); | 1270 EXPECT_TRUE(texture->ValidForTexture(GL_TEXTURE_2D, 1, 0, 0, 0, 4, 5, 6)); |
1316 } | 1271 } |
1317 | 1272 |
1318 TEST_F(TextureTest, FloatNotLinear) { | 1273 TEST_F(TextureTest, FloatNotLinear) { |
1319 TestHelper::SetupFeatureInfoInitExpectations( | 1274 TestHelper::SetupFeatureInfoInitExpectations( |
1320 gl_.get(), "GL_OES_texture_float"); | 1275 gl_.get(), "GL_OES_texture_float"); |
1321 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1276 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1322 feature_info->InitializeForTesting(); | 1277 feature_info->InitializeForTesting(); |
1323 TextureManager manager(NULL, | 1278 TextureManager manager(NULL, feature_info.get(), kMaxTextureSize, |
1324 feature_info.get(), | 1279 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1325 kMaxTextureSize, | 1280 kMax3DTextureSize, kMaxArrayTextureLayers, |
1326 kMaxCubeMapTextureSize, | 1281 kUseDefaultTextures, &progress_reporter_); |
1327 kMaxRectangleTextureSize, | |
1328 kMax3DTextureSize, | |
1329 kMaxArrayTextureLayers, | |
1330 kUseDefaultTextures); | |
1331 manager.CreateTexture(kClient1Id, kService1Id); | 1282 manager.CreateTexture(kClient1Id, kService1Id); |
1332 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1283 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1333 ASSERT_TRUE(texture_ref != NULL); | 1284 ASSERT_TRUE(texture_ref != NULL); |
1334 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1285 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1335 Texture* texture = texture_ref->texture(); | 1286 Texture* texture = texture_ref->texture(); |
1336 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1287 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1337 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1288 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1338 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); | 1289 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
1339 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1290 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1340 TestHelper::SetTexParameteriWithExpectations( | 1291 TestHelper::SetTexParameteriWithExpectations( |
1341 gl_.get(), error_state_.get(), &manager, | 1292 gl_.get(), error_state_.get(), &manager, |
1342 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1293 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1343 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1294 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1344 TestHelper::SetTexParameteriWithExpectations( | 1295 TestHelper::SetTexParameteriWithExpectations( |
1345 gl_.get(), error_state_.get(), &manager, texture_ref, | 1296 gl_.get(), error_state_.get(), &manager, texture_ref, |
1346 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1297 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1347 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1298 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1348 manager.Destroy(false); | 1299 manager.Destroy(false); |
1349 } | 1300 } |
1350 | 1301 |
1351 TEST_F(TextureTest, FloatLinear) { | 1302 TEST_F(TextureTest, FloatLinear) { |
1352 TestHelper::SetupFeatureInfoInitExpectations( | 1303 TestHelper::SetupFeatureInfoInitExpectations( |
1353 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); | 1304 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); |
1354 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1305 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1355 feature_info->InitializeForTesting(); | 1306 feature_info->InitializeForTesting(); |
1356 TextureManager manager(NULL, | 1307 TextureManager manager(NULL, feature_info.get(), kMaxTextureSize, |
1357 feature_info.get(), | 1308 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1358 kMaxTextureSize, | 1309 kMax3DTextureSize, kMaxArrayTextureLayers, |
1359 kMaxCubeMapTextureSize, | 1310 kUseDefaultTextures, &progress_reporter_); |
1360 kMaxRectangleTextureSize, | |
1361 kMax3DTextureSize, | |
1362 kMaxArrayTextureLayers, | |
1363 kUseDefaultTextures); | |
1364 manager.CreateTexture(kClient1Id, kService1Id); | 1311 manager.CreateTexture(kClient1Id, kService1Id); |
1365 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1312 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1366 ASSERT_TRUE(texture_ref != NULL); | 1313 ASSERT_TRUE(texture_ref != NULL); |
1367 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1314 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1368 Texture* texture = texture_ref->texture(); | 1315 Texture* texture = texture_ref->texture(); |
1369 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1316 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, | 1317 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1371 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); | 1318 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
1372 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1319 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1373 manager.Destroy(false); | 1320 manager.Destroy(false); |
1374 } | 1321 } |
1375 | 1322 |
1376 TEST_F(TextureTest, HalfFloatNotLinear) { | 1323 TEST_F(TextureTest, HalfFloatNotLinear) { |
1377 TestHelper::SetupFeatureInfoInitExpectations( | 1324 TestHelper::SetupFeatureInfoInitExpectations( |
1378 gl_.get(), "GL_OES_texture_half_float"); | 1325 gl_.get(), "GL_OES_texture_half_float"); |
1379 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1326 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1380 feature_info->InitializeForTesting(); | 1327 feature_info->InitializeForTesting(); |
1381 TextureManager manager(NULL, | 1328 TextureManager manager(NULL, feature_info.get(), kMaxTextureSize, |
1382 feature_info.get(), | 1329 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1383 kMaxTextureSize, | 1330 kMax3DTextureSize, kMaxArrayTextureLayers, |
1384 kMaxCubeMapTextureSize, | 1331 kUseDefaultTextures, &progress_reporter_); |
1385 kMaxRectangleTextureSize, | |
1386 kMax3DTextureSize, | |
1387 kMaxArrayTextureLayers, | |
1388 kUseDefaultTextures); | |
1389 manager.CreateTexture(kClient1Id, kService1Id); | 1332 manager.CreateTexture(kClient1Id, kService1Id); |
1390 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1333 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1391 ASSERT_TRUE(texture_ref != NULL); | 1334 ASSERT_TRUE(texture_ref != NULL); |
1392 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1335 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1393 Texture* texture = texture_ref->texture(); | 1336 Texture* texture = texture_ref->texture(); |
1394 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1337 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1395 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1338 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1396 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); | 1339 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
1397 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1340 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1398 TestHelper::SetTexParameteriWithExpectations( | 1341 TestHelper::SetTexParameteriWithExpectations( |
1399 gl_.get(), error_state_.get(), &manager, | 1342 gl_.get(), error_state_.get(), &manager, |
1400 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1343 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1401 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1344 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1402 TestHelper::SetTexParameteriWithExpectations( | 1345 TestHelper::SetTexParameteriWithExpectations( |
1403 gl_.get(), error_state_.get(), &manager, texture_ref, | 1346 gl_.get(), error_state_.get(), &manager, texture_ref, |
1404 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1347 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1405 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1348 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1406 manager.Destroy(false); | 1349 manager.Destroy(false); |
1407 } | 1350 } |
1408 | 1351 |
1409 TEST_F(TextureTest, HalfFloatLinear) { | 1352 TEST_F(TextureTest, HalfFloatLinear) { |
1410 TestHelper::SetupFeatureInfoInitExpectations( | 1353 TestHelper::SetupFeatureInfoInitExpectations( |
1411 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); | 1354 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); |
1412 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1355 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1413 feature_info->InitializeForTesting(); | 1356 feature_info->InitializeForTesting(); |
1414 TextureManager manager(NULL, | 1357 TextureManager manager(NULL, feature_info.get(), kMaxTextureSize, |
1415 feature_info.get(), | 1358 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1416 kMaxTextureSize, | 1359 kMax3DTextureSize, kMaxArrayTextureLayers, |
1417 kMaxCubeMapTextureSize, | 1360 kUseDefaultTextures, &progress_reporter_); |
1418 kMaxRectangleTextureSize, | |
1419 kMax3DTextureSize, | |
1420 kMaxArrayTextureLayers, | |
1421 kUseDefaultTextures); | |
1422 manager.CreateTexture(kClient1Id, kService1Id); | 1361 manager.CreateTexture(kClient1Id, kService1Id); |
1423 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1362 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1424 ASSERT_TRUE(texture_ref != NULL); | 1363 ASSERT_TRUE(texture_ref != NULL); |
1425 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1364 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1426 Texture* texture = texture_ref->texture(); | 1365 Texture* texture = texture_ref->texture(); |
1427 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1366 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, | 1367 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)); | 1368 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
1430 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1369 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1431 manager.Destroy(false); | 1370 manager.Destroy(false); |
1432 } | 1371 } |
1433 | 1372 |
1434 TEST_F(TextureTest, EGLImageExternal) { | 1373 TEST_F(TextureTest, EGLImageExternal) { |
1435 TestHelper::SetupFeatureInfoInitExpectations( | 1374 TestHelper::SetupFeatureInfoInitExpectations( |
1436 gl_.get(), "GL_OES_EGL_image_external"); | 1375 gl_.get(), "GL_OES_EGL_image_external"); |
1437 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1376 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1438 feature_info->InitializeForTesting(); | 1377 feature_info->InitializeForTesting(); |
1439 TextureManager manager(NULL, | 1378 TextureManager manager(NULL, feature_info.get(), kMaxTextureSize, |
1440 feature_info.get(), | 1379 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1441 kMaxTextureSize, | 1380 kMax3DTextureSize, kMaxArrayTextureLayers, |
1442 kMaxCubeMapTextureSize, | 1381 kUseDefaultTextures, &progress_reporter_); |
1443 kMaxRectangleTextureSize, | |
1444 kMax3DTextureSize, | |
1445 kMaxArrayTextureLayers, | |
1446 kUseDefaultTextures); | |
1447 manager.CreateTexture(kClient1Id, kService1Id); | 1382 manager.CreateTexture(kClient1Id, kService1Id); |
1448 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1383 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1449 ASSERT_TRUE(texture_ref != NULL); | 1384 ASSERT_TRUE(texture_ref != NULL); |
1450 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); | 1385 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); |
1451 Texture* texture = texture_ref->texture(); | 1386 Texture* texture = texture_ref->texture(); |
1452 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); | 1387 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
1453 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1388 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1454 manager.Destroy(false); | 1389 manager.Destroy(false); |
1455 } | 1390 } |
1456 | 1391 |
1457 TEST_F(TextureTest, DepthTexture) { | 1392 TEST_F(TextureTest, DepthTexture) { |
1458 TestHelper::SetupFeatureInfoInitExpectations( | 1393 TestHelper::SetupFeatureInfoInitExpectations( |
1459 gl_.get(), "GL_ANGLE_depth_texture"); | 1394 gl_.get(), "GL_ANGLE_depth_texture"); |
1460 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1395 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1461 feature_info->InitializeForTesting(); | 1396 feature_info->InitializeForTesting(); |
1462 TextureManager manager(NULL, | 1397 TextureManager manager(NULL, feature_info.get(), kMaxTextureSize, |
1463 feature_info.get(), | 1398 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1464 kMaxTextureSize, | 1399 kMax3DTextureSize, kMaxArrayTextureLayers, |
1465 kMaxCubeMapTextureSize, | 1400 kUseDefaultTextures, &progress_reporter_); |
1466 kMaxRectangleTextureSize, | |
1467 kMax3DTextureSize, | |
1468 kMaxArrayTextureLayers, | |
1469 kUseDefaultTextures); | |
1470 manager.CreateTexture(kClient1Id, kService1Id); | 1401 manager.CreateTexture(kClient1Id, kService1Id); |
1471 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1402 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1472 ASSERT_TRUE(texture_ref != NULL); | 1403 ASSERT_TRUE(texture_ref != NULL); |
1473 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1404 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1474 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, | 1405 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, |
1475 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect()); | 1406 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect()); |
1476 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1407 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1477 manager.Destroy(false); | 1408 manager.Destroy(false); |
1478 } | 1409 } |
1479 | 1410 |
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2229 static const bool kUseDefaultTextures = false; | 2160 static const bool kUseDefaultTextures = false; |
2230 | 2161 |
2231 SharedTextureTest() : feature_info_(new FeatureInfo()) {} | 2162 SharedTextureTest() : feature_info_(new FeatureInfo()) {} |
2232 | 2163 |
2233 ~SharedTextureTest() override {} | 2164 ~SharedTextureTest() override {} |
2234 | 2165 |
2235 void SetUp() override { | 2166 void SetUp() override { |
2236 GpuServiceTest::SetUp(); | 2167 GpuServiceTest::SetUp(); |
2237 memory_tracker1_ = new CountingMemoryTracker; | 2168 memory_tracker1_ = new CountingMemoryTracker; |
2238 texture_manager1_.reset( | 2169 texture_manager1_.reset( |
2239 new TextureManager(memory_tracker1_.get(), | 2170 new TextureManager(memory_tracker1_.get(), feature_info_.get(), |
2240 feature_info_.get(), | |
2241 TextureManagerTest::kMaxTextureSize, | 2171 TextureManagerTest::kMaxTextureSize, |
2242 TextureManagerTest::kMaxCubeMapTextureSize, | 2172 TextureManagerTest::kMaxCubeMapTextureSize, |
2243 TextureManagerTest::kMaxRectangleTextureSize, | 2173 TextureManagerTest::kMaxRectangleTextureSize, |
2244 TextureManagerTest::kMax3DTextureSize, | 2174 TextureManagerTest::kMax3DTextureSize, |
2245 TextureManagerTest::kMaxArrayTextureLayers, | 2175 TextureManagerTest::kMaxArrayTextureLayers, |
2246 kUseDefaultTextures)); | 2176 kUseDefaultTextures, &progress_reporter_)); |
2247 memory_tracker2_ = new CountingMemoryTracker; | 2177 memory_tracker2_ = new CountingMemoryTracker; |
2248 texture_manager2_.reset( | 2178 texture_manager2_.reset( |
2249 new TextureManager(memory_tracker2_.get(), | 2179 new TextureManager(memory_tracker2_.get(), feature_info_.get(), |
2250 feature_info_.get(), | |
2251 TextureManagerTest::kMaxTextureSize, | 2180 TextureManagerTest::kMaxTextureSize, |
2252 TextureManagerTest::kMaxCubeMapTextureSize, | 2181 TextureManagerTest::kMaxCubeMapTextureSize, |
2253 TextureManagerTest::kMaxRectangleTextureSize, | 2182 TextureManagerTest::kMaxRectangleTextureSize, |
2254 TextureManagerTest::kMax3DTextureSize, | 2183 TextureManagerTest::kMax3DTextureSize, |
2255 TextureManagerTest::kMaxArrayTextureLayers, | 2184 TextureManagerTest::kMaxArrayTextureLayers, |
2256 kUseDefaultTextures)); | 2185 kUseDefaultTextures, &progress_reporter_)); |
2257 SetupFeatureInfo("", "OpenGL ES 2.0", false); | 2186 SetupFeatureInfo("", "OpenGL ES 2.0", false); |
2258 TestHelper::SetupTextureManagerInitExpectations( | 2187 TestHelper::SetupTextureManagerInitExpectations( |
2259 gl_.get(), false, false, false, "", kUseDefaultTextures); | 2188 gl_.get(), false, false, false, "", kUseDefaultTextures); |
2260 texture_manager1_->Initialize(); | 2189 texture_manager1_->Initialize(); |
2261 TestHelper::SetupTextureManagerInitExpectations( | 2190 TestHelper::SetupTextureManagerInitExpectations( |
2262 gl_.get(), false, false, false, "", kUseDefaultTextures); | 2191 gl_.get(), false, false, false, "", kUseDefaultTextures); |
2263 texture_manager2_->Initialize(); | 2192 texture_manager2_->Initialize(); |
2264 } | 2193 } |
2265 | 2194 |
2266 void TearDown() override { | 2195 void TearDown() override { |
(...skipping 21 matching lines...) Expand all Loading... |
2288 .RetiresOnSaturation(); | 2217 .RetiresOnSaturation(); |
2289 feature_info_->EnableES3Validators(); | 2218 feature_info_->EnableES3Validators(); |
2290 } | 2219 } |
2291 } | 2220 } |
2292 | 2221 |
2293 scoped_refptr<FeatureInfo> feature_info_; | 2222 scoped_refptr<FeatureInfo> feature_info_; |
2294 scoped_refptr<CountingMemoryTracker> memory_tracker1_; | 2223 scoped_refptr<CountingMemoryTracker> memory_tracker1_; |
2295 std::unique_ptr<TextureManager> texture_manager1_; | 2224 std::unique_ptr<TextureManager> texture_manager1_; |
2296 scoped_refptr<CountingMemoryTracker> memory_tracker2_; | 2225 scoped_refptr<CountingMemoryTracker> memory_tracker2_; |
2297 std::unique_ptr<TextureManager> texture_manager2_; | 2226 std::unique_ptr<TextureManager> texture_manager2_; |
| 2227 ProgressReporterStub progress_reporter_; |
2298 }; | 2228 }; |
2299 | 2229 |
2300 TEST_F(SharedTextureTest, DeleteTextures) { | 2230 TEST_F(SharedTextureTest, DeleteTextures) { |
2301 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 2231 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
2302 scoped_refptr<TextureRef> ref2 = | 2232 scoped_refptr<TextureRef> ref2 = |
2303 texture_manager2_->Consume(20, ref1->texture()); | 2233 texture_manager2_->Consume(20, ref1->texture()); |
2304 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 2234 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
2305 .Times(0); | 2235 .Times(0); |
2306 ref1 = NULL; | 2236 ref1 = NULL; |
2307 texture_manager1_->RemoveTexture(10); | 2237 texture_manager1_->RemoveTexture(10); |
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2770 ExpectValid( | 2700 ExpectValid( |
2771 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); | 2701 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, | 2702 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, |
2773 GL_DEPTH32F_STENCIL8); | 2703 GL_DEPTH32F_STENCIL8); |
2774 | 2704 |
2775 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); | 2705 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); |
2776 } | 2706 } |
2777 | 2707 |
2778 } // namespace gles2 | 2708 } // namespace gles2 |
2779 } // namespace gpu | 2709 } // namespace gpu |
OLD | NEW |