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/service_discardable_manager.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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 } | 74 } |
74 | 75 |
75 ~TextureManagerTest() override {} | 76 ~TextureManagerTest() override {} |
76 | 77 |
77 protected: | 78 protected: |
78 void SetUp() override { | 79 void SetUp() override { |
79 GpuServiceTest::SetUp(); | 80 GpuServiceTest::SetUp(); |
80 manager_.reset(new TextureManager( | 81 manager_.reset(new TextureManager( |
81 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize, | 82 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize, |
82 kMaxRectangleTextureSize, kMax3DTextureSize, kMaxArrayTextureLayers, | 83 kMaxRectangleTextureSize, kMax3DTextureSize, kMaxArrayTextureLayers, |
83 kUseDefaultTextures, nullptr)); | 84 kUseDefaultTextures, nullptr, &discardable_manager_)); |
84 SetupFeatureInfo("", "OpenGL ES 2.0", CONTEXT_TYPE_OPENGLES2); | 85 SetupFeatureInfo("", "OpenGL ES 2.0", CONTEXT_TYPE_OPENGLES2); |
85 TestHelper::SetupTextureManagerInitExpectations( | 86 TestHelper::SetupTextureManagerInitExpectations( |
86 gl_.get(), false, false, false, "", kUseDefaultTextures); | 87 gl_.get(), false, false, false, "", kUseDefaultTextures); |
87 manager_->Initialize(); | 88 manager_->Initialize(); |
88 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 89 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
89 } | 90 } |
90 | 91 |
91 void TearDown() override { | 92 void TearDown() override { |
92 manager_->Destroy(false); | 93 manager_->Destroy(false); |
93 manager_.reset(); | 94 manager_.reset(); |
(...skipping 19 matching lines...) Expand all Loading... |
113 .WillOnce(SetArgPointee<1>(8)) | 114 .WillOnce(SetArgPointee<1>(8)) |
114 .RetiresOnSaturation(); | 115 .RetiresOnSaturation(); |
115 EXPECT_CALL(*gl_, GetIntegerv(GL_MAX_DRAW_BUFFERS, _)) | 116 EXPECT_CALL(*gl_, GetIntegerv(GL_MAX_DRAW_BUFFERS, _)) |
116 .WillOnce(SetArgPointee<1>(8)) | 117 .WillOnce(SetArgPointee<1>(8)) |
117 .RetiresOnSaturation(); | 118 .RetiresOnSaturation(); |
118 feature_info_->EnableES3Validators(); | 119 feature_info_->EnableES3Validators(); |
119 } | 120 } |
120 } | 121 } |
121 | 122 |
122 scoped_refptr<FeatureInfo> feature_info_; | 123 scoped_refptr<FeatureInfo> feature_info_; |
| 124 ServiceDiscardableManager discardable_manager_; |
123 std::unique_ptr<TextureManager> manager_; | 125 std::unique_ptr<TextureManager> manager_; |
124 std::unique_ptr<MockErrorState> error_state_; | 126 std::unique_ptr<MockErrorState> error_state_; |
125 }; | 127 }; |
126 | 128 |
127 // GCC requires these declarations, but MSVC requires they not be present | 129 // GCC requires these declarations, but MSVC requires they not be present |
128 #ifndef COMPILER_MSVC | 130 #ifndef COMPILER_MSVC |
129 const GLint TextureManagerTest::kMaxTextureSize; | 131 const GLint TextureManagerTest::kMaxTextureSize; |
130 const GLint TextureManagerTest::kMaxCubeMapTextureSize; | 132 const GLint TextureManagerTest::kMaxCubeMapTextureSize; |
131 const GLint TextureManagerTest::kMaxRectangleTextureSize; | 133 const GLint TextureManagerTest::kMaxRectangleTextureSize; |
132 const GLint TextureManagerTest::kMaxExternalTextureSize; | 134 const GLint TextureManagerTest::kMaxExternalTextureSize; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 SetParameter(texture_ref, GL_TEXTURE_IMMUTABLE_LEVELS, 0, GL_INVALID_ENUM); | 237 SetParameter(texture_ref, GL_TEXTURE_IMMUTABLE_LEVELS, 0, GL_INVALID_ENUM); |
236 } | 238 } |
237 | 239 |
238 TEST_F(TextureManagerTest, UseDefaultTexturesTrue) { | 240 TEST_F(TextureManagerTest, UseDefaultTexturesTrue) { |
239 bool use_default_textures = true; | 241 bool use_default_textures = true; |
240 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 242 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
241 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); | 243 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); |
242 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, | 244 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, |
243 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 245 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
244 kMax3DTextureSize, kMaxArrayTextureLayers, | 246 kMax3DTextureSize, kMaxArrayTextureLayers, |
245 use_default_textures, nullptr); | 247 use_default_textures, nullptr, &discardable_manager_); |
246 manager.Initialize(); | 248 manager.Initialize(); |
247 | 249 |
248 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); | 250 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); |
249 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); | 251 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); |
250 | 252 |
251 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. | 253 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
252 | 254 |
253 manager.Destroy(false); | 255 manager.Destroy(false); |
254 } | 256 } |
255 | 257 |
256 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { | 258 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { |
257 bool use_default_textures = false; | 259 bool use_default_textures = false; |
258 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 260 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
259 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); | 261 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); |
260 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, | 262 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, |
261 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 263 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
262 kMax3DTextureSize, kMaxArrayTextureLayers, | 264 kMax3DTextureSize, kMaxArrayTextureLayers, |
263 use_default_textures, nullptr); | 265 use_default_textures, nullptr, &discardable_manager_); |
264 manager.Initialize(); | 266 manager.Initialize(); |
265 | 267 |
266 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); | 268 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); |
267 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); | 269 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); |
268 | 270 |
269 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. | 271 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. |
270 | 272 |
271 manager.Destroy(false); | 273 manager.Destroy(false); |
272 } | 274 } |
273 | 275 |
274 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) { | 276 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) { |
275 bool use_default_textures = true; | 277 bool use_default_textures = true; |
276 SetupFeatureInfo("", "OpenGL ES 3.0", CONTEXT_TYPE_OPENGLES3); | 278 SetupFeatureInfo("", "OpenGL ES 3.0", CONTEXT_TYPE_OPENGLES3); |
277 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 279 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
278 true, true, false, "", use_default_textures); | 280 true, true, false, "", use_default_textures); |
279 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, | 281 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, |
280 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 282 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
281 kMax3DTextureSize, kMaxArrayTextureLayers, | 283 kMax3DTextureSize, kMaxArrayTextureLayers, |
282 use_default_textures, nullptr); | 284 use_default_textures, nullptr, &discardable_manager_); |
283 manager.Initialize(); | 285 manager.Initialize(); |
284 | 286 |
285 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL); | 287 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL); |
286 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL); | 288 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL); |
287 | 289 |
288 manager.Destroy(false); | 290 manager.Destroy(false); |
289 } | 291 } |
290 | 292 |
291 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) { | 293 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) { |
292 bool use_default_textures = false; | 294 bool use_default_textures = false; |
293 SetupFeatureInfo("", "OpenGL ES 3.0", CONTEXT_TYPE_OPENGLES3); | 295 SetupFeatureInfo("", "OpenGL ES 3.0", CONTEXT_TYPE_OPENGLES3); |
294 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 296 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
295 true, true, false, "", use_default_textures); | 297 true, true, false, "", use_default_textures); |
296 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, | 298 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, |
297 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 299 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
298 kMax3DTextureSize, kMaxArrayTextureLayers, | 300 kMax3DTextureSize, kMaxArrayTextureLayers, |
299 use_default_textures, nullptr); | 301 use_default_textures, nullptr, &discardable_manager_); |
300 manager.Initialize(); | 302 manager.Initialize(); |
301 | 303 |
302 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL); | 304 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL); |
303 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL); | 305 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL); |
304 | 306 |
305 manager.Destroy(false); | 307 manager.Destroy(false); |
306 } | 308 } |
307 | 309 |
308 TEST_F(TextureManagerTest, TextureUsageExt) { | 310 TEST_F(TextureManagerTest, TextureUsageExt) { |
309 TestHelper::SetupTextureManagerInitExpectations( | 311 TestHelper::SetupTextureManagerInitExpectations( |
310 gl_.get(), false, false, false, "GL_ANGLE_texture_usage", | 312 gl_.get(), false, false, false, "GL_ANGLE_texture_usage", |
311 kUseDefaultTextures); | 313 kUseDefaultTextures); |
312 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, | 314 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, |
313 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 315 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
314 kMax3DTextureSize, kMaxArrayTextureLayers, | 316 kMax3DTextureSize, kMaxArrayTextureLayers, |
315 kUseDefaultTextures, nullptr); | 317 kUseDefaultTextures, nullptr, &discardable_manager_); |
316 manager.Initialize(); | 318 manager.Initialize(); |
317 const GLuint kClient1Id = 1; | 319 const GLuint kClient1Id = 1; |
318 const GLuint kService1Id = 11; | 320 const GLuint kService1Id = 11; |
319 // Check we can create texture. | 321 // Check we can create texture. |
320 manager.CreateTexture(kClient1Id, kService1Id); | 322 manager.CreateTexture(kClient1Id, kService1Id); |
321 // Check texture got created. | 323 // Check texture got created. |
322 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 324 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
323 ASSERT_TRUE(texture_ref != NULL); | 325 ASSERT_TRUE(texture_ref != NULL); |
324 TestHelper::SetTexParameteriWithExpectations( | 326 TestHelper::SetTexParameteriWithExpectations( |
325 gl_.get(), error_state_.get(), &manager, texture_ref, | 327 gl_.get(), error_state_.get(), &manager, texture_ref, |
326 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); | 328 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); |
327 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), | 329 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), |
328 texture_ref->texture()->usage()); | 330 texture_ref->texture()->usage()); |
329 manager.Destroy(false); | 331 manager.Destroy(false); |
330 } | 332 } |
331 | 333 |
332 TEST_F(TextureManagerTest, Destroy) { | 334 TEST_F(TextureManagerTest, Destroy) { |
333 const GLuint kClient1Id = 1; | 335 const GLuint kClient1Id = 1; |
334 const GLuint kService1Id = 11; | 336 const GLuint kService1Id = 11; |
335 TestHelper::SetupTextureManagerInitExpectations( | 337 TestHelper::SetupTextureManagerInitExpectations( |
336 gl_.get(), false, false, false, "", kUseDefaultTextures); | 338 gl_.get(), false, false, false, "", kUseDefaultTextures); |
337 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, | 339 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, |
338 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 340 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
339 kMax3DTextureSize, kMaxArrayTextureLayers, | 341 kMax3DTextureSize, kMaxArrayTextureLayers, |
340 kUseDefaultTextures, nullptr); | 342 kUseDefaultTextures, nullptr, &discardable_manager_); |
341 manager.Initialize(); | 343 manager.Initialize(); |
342 // Check we can create texture. | 344 // Check we can create texture. |
343 manager.CreateTexture(kClient1Id, kService1Id); | 345 manager.CreateTexture(kClient1Id, kService1Id); |
344 // Check texture got created. | 346 // Check texture got created. |
345 TextureRef* texture = manager.GetTexture(kClient1Id); | 347 TextureRef* texture = manager.GetTexture(kClient1Id); |
346 ASSERT_TRUE(texture != NULL); | 348 ASSERT_TRUE(texture != NULL); |
347 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 349 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
348 .Times(1) | 350 .Times(1) |
349 .RetiresOnSaturation(); | 351 .RetiresOnSaturation(); |
350 TestHelper::SetupTextureManagerDestructionExpectations( | 352 TestHelper::SetupTextureManagerDestructionExpectations( |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 } | 487 } |
486 | 488 |
487 TEST_F(TextureManagerTest, ValidForTargetNPOT) { | 489 TEST_F(TextureManagerTest, ValidForTargetNPOT) { |
488 TestHelper::SetupFeatureInfoInitExpectations( | 490 TestHelper::SetupFeatureInfoInitExpectations( |
489 gl_.get(), "GL_OES_texture_npot"); | 491 gl_.get(), "GL_OES_texture_npot"); |
490 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 492 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
491 feature_info->InitializeForTesting(); | 493 feature_info->InitializeForTesting(); |
492 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, | 494 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, |
493 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 495 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
494 kMax3DTextureSize, kMaxArrayTextureLayers, | 496 kMax3DTextureSize, kMaxArrayTextureLayers, |
495 kUseDefaultTextures, nullptr); | 497 kUseDefaultTextures, nullptr, &discardable_manager_); |
496 // Check NPOT width on level 0 | 498 // Check NPOT width on level 0 |
497 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); | 499 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); |
498 // Check NPOT height on level 0 | 500 // Check NPOT height on level 0 |
499 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); | 501 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); |
500 // Check NPOT width on level 1 | 502 // Check NPOT width on level 1 |
501 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); | 503 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); |
502 // Check NPOT height on level 1 | 504 // Check NPOT height on level 1 |
503 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); | 505 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); |
504 manager.Destroy(false); | 506 manager.Destroy(false); |
505 } | 507 } |
506 | 508 |
507 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) { | 509 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) { |
508 const GLuint kClientId = 1; | 510 const GLuint kClientId = 1; |
509 const GLuint kServiceId = 11; | 511 const GLuint kServiceId = 11; |
510 | 512 |
511 SetupFeatureInfo("", "2.1", CONTEXT_TYPE_OPENGLES2); | 513 SetupFeatureInfo("", "2.1", CONTEXT_TYPE_OPENGLES2); |
512 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, | 514 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, |
513 false, "", kUseDefaultTextures); | 515 false, "", kUseDefaultTextures); |
514 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, | 516 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, |
515 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 517 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
516 kMax3DTextureSize, kMaxArrayTextureLayers, | 518 kMax3DTextureSize, kMaxArrayTextureLayers, |
517 kUseDefaultTextures, nullptr); | 519 kUseDefaultTextures, nullptr, &discardable_manager_); |
518 manager.Initialize(); | 520 manager.Initialize(); |
519 | 521 |
520 // Create a texture. | 522 // Create a texture. |
521 manager.CreateTexture(kClientId, kServiceId); | 523 manager.CreateTexture(kClientId, kServiceId); |
522 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); | 524 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); |
523 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); | 525 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); |
524 | 526 |
525 Texture* texture = texture_ref->texture(); | 527 Texture* texture = texture_ref->texture(); |
526 | 528 |
527 // GL_ALPHA emulation | 529 // GL_ALPHA emulation |
(...skipping 20 matching lines...) Expand all Loading... |
548 TEST_F(TextureManagerTest, AlphaLuminanceCoreProfileEmulation) { | 550 TEST_F(TextureManagerTest, AlphaLuminanceCoreProfileEmulation) { |
549 const GLuint kClientId = 1; | 551 const GLuint kClientId = 1; |
550 const GLuint kServiceId = 11; | 552 const GLuint kServiceId = 11; |
551 | 553 |
552 SetupFeatureInfo("", "4.2", CONTEXT_TYPE_OPENGLES3); | 554 SetupFeatureInfo("", "4.2", CONTEXT_TYPE_OPENGLES3); |
553 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), true, true, true, | 555 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), true, true, true, |
554 "", kUseDefaultTextures); | 556 "", kUseDefaultTextures); |
555 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, | 557 TextureManager manager(nullptr, feature_info_.get(), kMaxTextureSize, |
556 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 558 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
557 kMax3DTextureSize, kMaxArrayTextureLayers, | 559 kMax3DTextureSize, kMaxArrayTextureLayers, |
558 kUseDefaultTextures, nullptr); | 560 kUseDefaultTextures, nullptr, &discardable_manager_); |
559 manager.Initialize(); | 561 manager.Initialize(); |
560 | 562 |
561 // Create a texture. | 563 // Create a texture. |
562 manager.CreateTexture(kClientId, kServiceId); | 564 manager.CreateTexture(kClientId, kServiceId); |
563 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); | 565 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); |
564 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); | 566 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); |
565 | 567 |
566 Texture* texture = texture_ref->texture(); | 568 Texture* texture = texture_ref->texture(); |
567 | 569 |
568 // GL_ALPHA emulation | 570 // GL_ALPHA emulation |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 protected: | 665 protected: |
664 void SetUpBase(MemoryTracker* memory_tracker, const std::string& extensions) { | 666 void SetUpBase(MemoryTracker* memory_tracker, const std::string& extensions) { |
665 GpuServiceTest::SetUp(); | 667 GpuServiceTest::SetUp(); |
666 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), | 668 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), |
667 extensions.c_str()); | 669 extensions.c_str()); |
668 feature_info_->InitializeForTesting(); | 670 feature_info_->InitializeForTesting(); |
669 | 671 |
670 manager_.reset(new TextureManager( | 672 manager_.reset(new TextureManager( |
671 memory_tracker, feature_info_.get(), kMaxTextureSize, | 673 memory_tracker, feature_info_.get(), kMaxTextureSize, |
672 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, kMax3DTextureSize, | 674 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, kMax3DTextureSize, |
673 kMaxArrayTextureLayers, kUseDefaultTextures, nullptr)); | 675 kMaxArrayTextureLayers, kUseDefaultTextures, nullptr, |
| 676 &discardable_manager_)); |
674 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); | 677 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); |
675 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 678 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
676 manager_->CreateTexture(kClient1Id, kService1Id); | 679 manager_->CreateTexture(kClient1Id, kService1Id); |
677 texture_ref_ = manager_->GetTexture(kClient1Id); | 680 texture_ref_ = manager_->GetTexture(kClient1Id); |
678 ASSERT_TRUE(texture_ref_.get() != NULL); | 681 ASSERT_TRUE(texture_ref_.get() != NULL); |
679 } | 682 } |
680 | 683 |
681 void TearDown() override { | 684 void TearDown() override { |
682 if (texture_ref_.get()) { | 685 if (texture_ref_.get()) { |
683 // If it's not in the manager then setting texture_ref_ to NULL will | 686 // If it's not in the manager then setting texture_ref_ to NULL will |
(...skipping 15 matching lines...) Expand all Loading... |
699 void SetParameter( | 702 void SetParameter( |
700 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { | 703 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { |
701 TestHelper::SetTexParameteriWithExpectations( | 704 TestHelper::SetTexParameteriWithExpectations( |
702 gl_.get(), error_state_.get(), manager_.get(), | 705 gl_.get(), error_state_.get(), manager_.get(), |
703 texture_ref, pname, value, error); | 706 texture_ref, pname, value, error); |
704 } | 707 } |
705 | 708 |
706 std::unique_ptr<MockGLES2Decoder> decoder_; | 709 std::unique_ptr<MockGLES2Decoder> decoder_; |
707 std::unique_ptr<MockErrorState> error_state_; | 710 std::unique_ptr<MockErrorState> error_state_; |
708 scoped_refptr<FeatureInfo> feature_info_; | 711 scoped_refptr<FeatureInfo> feature_info_; |
| 712 ServiceDiscardableManager discardable_manager_; |
709 std::unique_ptr<TextureManager> manager_; | 713 std::unique_ptr<TextureManager> manager_; |
710 scoped_refptr<TextureRef> texture_ref_; | 714 scoped_refptr<TextureRef> texture_ref_; |
711 }; | 715 }; |
712 | 716 |
713 class TextureTest : public TextureTestBase { | 717 class TextureTest : public TextureTestBase { |
714 protected: | 718 protected: |
715 void SetUp() override { SetUpBase(NULL, std::string()); } | 719 void SetUp() override { SetUpBase(NULL, std::string()); } |
716 }; | 720 }; |
717 | 721 |
718 class TextureMemoryTrackerTest : public TextureTestBase { | 722 class TextureMemoryTrackerTest : public TextureTestBase { |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 } | 997 } |
994 | 998 |
995 TEST_F(TextureTest, NPOT2DNPOTOK) { | 999 TEST_F(TextureTest, NPOT2DNPOTOK) { |
996 TestHelper::SetupFeatureInfoInitExpectations( | 1000 TestHelper::SetupFeatureInfoInitExpectations( |
997 gl_.get(), "GL_OES_texture_npot"); | 1001 gl_.get(), "GL_OES_texture_npot"); |
998 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1002 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
999 feature_info->InitializeForTesting(); | 1003 feature_info->InitializeForTesting(); |
1000 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, | 1004 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, |
1001 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 1005 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1002 kMax3DTextureSize, kMaxArrayTextureLayers, | 1006 kMax3DTextureSize, kMaxArrayTextureLayers, |
1003 kUseDefaultTextures, nullptr); | 1007 kUseDefaultTextures, nullptr, &discardable_manager_); |
1004 manager.CreateTexture(kClient1Id, kService1Id); | 1008 manager.CreateTexture(kClient1Id, kService1Id); |
1005 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1009 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1006 ASSERT_TRUE(texture_ref != NULL); | 1010 ASSERT_TRUE(texture_ref != NULL); |
1007 Texture* texture = texture_ref->texture(); | 1011 Texture* texture = texture_ref->texture(); |
1008 | 1012 |
1009 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1013 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1010 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1014 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1011 // Check Setting level 0 to NPOT | 1015 // Check Setting level 0 to NPOT |
1012 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, | 1016 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, |
1013 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); | 1017 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1291 } | 1295 } |
1292 | 1296 |
1293 TEST_F(TextureTest, FloatNotLinear) { | 1297 TEST_F(TextureTest, FloatNotLinear) { |
1294 TestHelper::SetupFeatureInfoInitExpectations( | 1298 TestHelper::SetupFeatureInfoInitExpectations( |
1295 gl_.get(), "GL_OES_texture_float"); | 1299 gl_.get(), "GL_OES_texture_float"); |
1296 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1300 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1297 feature_info->InitializeForTesting(); | 1301 feature_info->InitializeForTesting(); |
1298 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, | 1302 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, |
1299 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 1303 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1300 kMax3DTextureSize, kMaxArrayTextureLayers, | 1304 kMax3DTextureSize, kMaxArrayTextureLayers, |
1301 kUseDefaultTextures, nullptr); | 1305 kUseDefaultTextures, nullptr, &discardable_manager_); |
1302 manager.CreateTexture(kClient1Id, kService1Id); | 1306 manager.CreateTexture(kClient1Id, kService1Id); |
1303 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1307 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1304 ASSERT_TRUE(texture_ref != NULL); | 1308 ASSERT_TRUE(texture_ref != NULL); |
1305 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1309 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1306 Texture* texture = texture_ref->texture(); | 1310 Texture* texture = texture_ref->texture(); |
1307 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1311 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1308 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1312 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1309 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); | 1313 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
1310 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1314 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1311 TestHelper::SetTexParameteriWithExpectations( | 1315 TestHelper::SetTexParameteriWithExpectations( |
1312 gl_.get(), error_state_.get(), &manager, | 1316 gl_.get(), error_state_.get(), &manager, |
1313 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1317 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1314 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1318 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1315 TestHelper::SetTexParameteriWithExpectations( | 1319 TestHelper::SetTexParameteriWithExpectations( |
1316 gl_.get(), error_state_.get(), &manager, texture_ref, | 1320 gl_.get(), error_state_.get(), &manager, texture_ref, |
1317 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1321 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1318 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1322 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1319 manager.Destroy(false); | 1323 manager.Destroy(false); |
1320 } | 1324 } |
1321 | 1325 |
1322 TEST_F(TextureTest, FloatLinear) { | 1326 TEST_F(TextureTest, FloatLinear) { |
1323 TestHelper::SetupFeatureInfoInitExpectations( | 1327 TestHelper::SetupFeatureInfoInitExpectations( |
1324 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); | 1328 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); |
1325 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1329 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1326 feature_info->InitializeForTesting(); | 1330 feature_info->InitializeForTesting(); |
1327 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, | 1331 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, |
1328 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 1332 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1329 kMax3DTextureSize, kMaxArrayTextureLayers, | 1333 kMax3DTextureSize, kMaxArrayTextureLayers, |
1330 kUseDefaultTextures, nullptr); | 1334 kUseDefaultTextures, nullptr, &discardable_manager_); |
1331 manager.CreateTexture(kClient1Id, kService1Id); | 1335 manager.CreateTexture(kClient1Id, kService1Id); |
1332 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1336 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1333 ASSERT_TRUE(texture_ref != NULL); | 1337 ASSERT_TRUE(texture_ref != NULL); |
1334 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1338 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1335 Texture* texture = texture_ref->texture(); | 1339 Texture* texture = texture_ref->texture(); |
1336 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1340 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, | 1341 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1338 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); | 1342 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); |
1339 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1343 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1340 manager.Destroy(false); | 1344 manager.Destroy(false); |
1341 } | 1345 } |
1342 | 1346 |
1343 TEST_F(TextureTest, HalfFloatNotLinear) { | 1347 TEST_F(TextureTest, HalfFloatNotLinear) { |
1344 TestHelper::SetupFeatureInfoInitExpectations( | 1348 TestHelper::SetupFeatureInfoInitExpectations( |
1345 gl_.get(), "GL_OES_texture_half_float"); | 1349 gl_.get(), "GL_OES_texture_half_float"); |
1346 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1350 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1347 feature_info->InitializeForTesting(); | 1351 feature_info->InitializeForTesting(); |
1348 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, | 1352 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, |
1349 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 1353 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1350 kMax3DTextureSize, kMaxArrayTextureLayers, | 1354 kMax3DTextureSize, kMaxArrayTextureLayers, |
1351 kUseDefaultTextures, nullptr); | 1355 kUseDefaultTextures, nullptr, &discardable_manager_); |
1352 manager.CreateTexture(kClient1Id, kService1Id); | 1356 manager.CreateTexture(kClient1Id, kService1Id); |
1353 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1357 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1354 ASSERT_TRUE(texture_ref != NULL); | 1358 ASSERT_TRUE(texture_ref != NULL); |
1355 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1359 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1356 Texture* texture = texture_ref->texture(); | 1360 Texture* texture = texture_ref->texture(); |
1357 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1361 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1358 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1362 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1359 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); | 1363 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
1360 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1364 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1361 TestHelper::SetTexParameteriWithExpectations( | 1365 TestHelper::SetTexParameteriWithExpectations( |
1362 gl_.get(), error_state_.get(), &manager, | 1366 gl_.get(), error_state_.get(), &manager, |
1363 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1367 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
1364 EXPECT_FALSE(manager.CanRender(texture_ref)); | 1368 EXPECT_FALSE(manager.CanRender(texture_ref)); |
1365 TestHelper::SetTexParameteriWithExpectations( | 1369 TestHelper::SetTexParameteriWithExpectations( |
1366 gl_.get(), error_state_.get(), &manager, texture_ref, | 1370 gl_.get(), error_state_.get(), &manager, texture_ref, |
1367 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 1371 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
1368 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1372 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1369 manager.Destroy(false); | 1373 manager.Destroy(false); |
1370 } | 1374 } |
1371 | 1375 |
1372 TEST_F(TextureTest, HalfFloatLinear) { | 1376 TEST_F(TextureTest, HalfFloatLinear) { |
1373 TestHelper::SetupFeatureInfoInitExpectations( | 1377 TestHelper::SetupFeatureInfoInitExpectations( |
1374 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); | 1378 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); |
1375 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1379 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1376 feature_info->InitializeForTesting(); | 1380 feature_info->InitializeForTesting(); |
1377 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, | 1381 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, |
1378 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 1382 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1379 kMax3DTextureSize, kMaxArrayTextureLayers, | 1383 kMax3DTextureSize, kMaxArrayTextureLayers, |
1380 kUseDefaultTextures, nullptr); | 1384 kUseDefaultTextures, nullptr, &discardable_manager_); |
1381 manager.CreateTexture(kClient1Id, kService1Id); | 1385 manager.CreateTexture(kClient1Id, kService1Id); |
1382 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1386 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1383 ASSERT_TRUE(texture_ref != NULL); | 1387 ASSERT_TRUE(texture_ref != NULL); |
1384 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1388 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1385 Texture* texture = texture_ref->texture(); | 1389 Texture* texture = texture_ref->texture(); |
1386 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1390 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
1387 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 1391 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, |
1388 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); | 1392 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); |
1389 EXPECT_TRUE(manager.CanRender(texture_ref)); | 1393 EXPECT_TRUE(manager.CanRender(texture_ref)); |
1390 manager.Destroy(false); | 1394 manager.Destroy(false); |
1391 } | 1395 } |
1392 | 1396 |
1393 TEST_F(TextureTest, EGLImageExternal) { | 1397 TEST_F(TextureTest, EGLImageExternal) { |
1394 TestHelper::SetupFeatureInfoInitExpectations( | 1398 TestHelper::SetupFeatureInfoInitExpectations( |
1395 gl_.get(), "GL_OES_EGL_image_external"); | 1399 gl_.get(), "GL_OES_EGL_image_external"); |
1396 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1400 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1397 feature_info->InitializeForTesting(); | 1401 feature_info->InitializeForTesting(); |
1398 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, | 1402 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, |
1399 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 1403 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1400 kMax3DTextureSize, kMaxArrayTextureLayers, | 1404 kMax3DTextureSize, kMaxArrayTextureLayers, |
1401 kUseDefaultTextures, nullptr); | 1405 kUseDefaultTextures, nullptr, &discardable_manager_); |
1402 manager.CreateTexture(kClient1Id, kService1Id); | 1406 manager.CreateTexture(kClient1Id, kService1Id); |
1403 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1407 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1404 ASSERT_TRUE(texture_ref != NULL); | 1408 ASSERT_TRUE(texture_ref != NULL); |
1405 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); | 1409 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); |
1406 Texture* texture = texture_ref->texture(); | 1410 Texture* texture = texture_ref->texture(); |
1407 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); | 1411 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
1408 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1412 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1409 manager.Destroy(false); | 1413 manager.Destroy(false); |
1410 } | 1414 } |
1411 | 1415 |
1412 TEST_F(TextureTest, DepthTexture) { | 1416 TEST_F(TextureTest, DepthTexture) { |
1413 TestHelper::SetupFeatureInfoInitExpectations( | 1417 TestHelper::SetupFeatureInfoInitExpectations( |
1414 gl_.get(), "GL_ANGLE_depth_texture"); | 1418 gl_.get(), "GL_ANGLE_depth_texture"); |
1415 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 1419 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
1416 feature_info->InitializeForTesting(); | 1420 feature_info->InitializeForTesting(); |
1417 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, | 1421 TextureManager manager(nullptr, feature_info.get(), kMaxTextureSize, |
1418 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, | 1422 kMaxCubeMapTextureSize, kMaxRectangleTextureSize, |
1419 kMax3DTextureSize, kMaxArrayTextureLayers, | 1423 kMax3DTextureSize, kMaxArrayTextureLayers, |
1420 kUseDefaultTextures, nullptr); | 1424 kUseDefaultTextures, nullptr, &discardable_manager_); |
1421 manager.CreateTexture(kClient1Id, kService1Id); | 1425 manager.CreateTexture(kClient1Id, kService1Id); |
1422 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 1426 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
1423 ASSERT_TRUE(texture_ref != NULL); | 1427 ASSERT_TRUE(texture_ref != NULL); |
1424 manager.SetTarget(texture_ref, GL_TEXTURE_2D); | 1428 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
1425 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, | 1429 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, |
1426 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect()); | 1430 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect()); |
1427 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); | 1431 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
1428 manager.Destroy(false); | 1432 manager.Destroy(false); |
1429 } | 1433 } |
1430 | 1434 |
(...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2179 public: | 2183 public: |
2180 static const bool kUseDefaultTextures = false; | 2184 static const bool kUseDefaultTextures = false; |
2181 | 2185 |
2182 SharedTextureTest() : feature_info_(new FeatureInfo()) {} | 2186 SharedTextureTest() : feature_info_(new FeatureInfo()) {} |
2183 | 2187 |
2184 ~SharedTextureTest() override {} | 2188 ~SharedTextureTest() override {} |
2185 | 2189 |
2186 void SetUp() override { | 2190 void SetUp() override { |
2187 GpuServiceTest::SetUp(); | 2191 GpuServiceTest::SetUp(); |
2188 memory_tracker1_ = new CountingMemoryTracker; | 2192 memory_tracker1_ = new CountingMemoryTracker; |
2189 texture_manager1_.reset( | 2193 texture_manager1_.reset(new TextureManager( |
2190 new TextureManager(memory_tracker1_.get(), feature_info_.get(), | 2194 memory_tracker1_.get(), feature_info_.get(), |
2191 TextureManagerTest::kMaxTextureSize, | 2195 TextureManagerTest::kMaxTextureSize, |
2192 TextureManagerTest::kMaxCubeMapTextureSize, | 2196 TextureManagerTest::kMaxCubeMapTextureSize, |
2193 TextureManagerTest::kMaxRectangleTextureSize, | 2197 TextureManagerTest::kMaxRectangleTextureSize, |
2194 TextureManagerTest::kMax3DTextureSize, | 2198 TextureManagerTest::kMax3DTextureSize, |
2195 TextureManagerTest::kMaxArrayTextureLayers, | 2199 TextureManagerTest::kMaxArrayTextureLayers, kUseDefaultTextures, |
2196 kUseDefaultTextures, nullptr)); | 2200 nullptr, &discardable_manager_)); |
2197 memory_tracker2_ = new CountingMemoryTracker; | 2201 memory_tracker2_ = new CountingMemoryTracker; |
2198 texture_manager2_.reset( | 2202 texture_manager2_.reset(new TextureManager( |
2199 new TextureManager(memory_tracker2_.get(), feature_info_.get(), | 2203 memory_tracker2_.get(), feature_info_.get(), |
2200 TextureManagerTest::kMaxTextureSize, | 2204 TextureManagerTest::kMaxTextureSize, |
2201 TextureManagerTest::kMaxCubeMapTextureSize, | 2205 TextureManagerTest::kMaxCubeMapTextureSize, |
2202 TextureManagerTest::kMaxRectangleTextureSize, | 2206 TextureManagerTest::kMaxRectangleTextureSize, |
2203 TextureManagerTest::kMax3DTextureSize, | 2207 TextureManagerTest::kMax3DTextureSize, |
2204 TextureManagerTest::kMaxArrayTextureLayers, | 2208 TextureManagerTest::kMaxArrayTextureLayers, kUseDefaultTextures, |
2205 kUseDefaultTextures, nullptr)); | 2209 nullptr, &discardable_manager_)); |
2206 SetupFeatureInfo("", "OpenGL ES 2.0", CONTEXT_TYPE_OPENGLES2); | 2210 SetupFeatureInfo("", "OpenGL ES 2.0", CONTEXT_TYPE_OPENGLES2); |
2207 TestHelper::SetupTextureManagerInitExpectations( | 2211 TestHelper::SetupTextureManagerInitExpectations( |
2208 gl_.get(), false, false, false, "", kUseDefaultTextures); | 2212 gl_.get(), false, false, false, "", kUseDefaultTextures); |
2209 texture_manager1_->Initialize(); | 2213 texture_manager1_->Initialize(); |
2210 TestHelper::SetupTextureManagerInitExpectations( | 2214 TestHelper::SetupTextureManagerInitExpectations( |
2211 gl_.get(), false, false, false, "", kUseDefaultTextures); | 2215 gl_.get(), false, false, false, "", kUseDefaultTextures); |
2212 texture_manager2_->Initialize(); | 2216 texture_manager2_->Initialize(); |
2213 } | 2217 } |
2214 | 2218 |
2215 void TearDown() override { | 2219 void TearDown() override { |
(...skipping 17 matching lines...) Expand all Loading... |
2233 .WillOnce(SetArgPointee<1>(8)) | 2237 .WillOnce(SetArgPointee<1>(8)) |
2234 .RetiresOnSaturation(); | 2238 .RetiresOnSaturation(); |
2235 EXPECT_CALL(*gl_, GetIntegerv(GL_MAX_DRAW_BUFFERS, _)) | 2239 EXPECT_CALL(*gl_, GetIntegerv(GL_MAX_DRAW_BUFFERS, _)) |
2236 .WillOnce(SetArgPointee<1>(8)) | 2240 .WillOnce(SetArgPointee<1>(8)) |
2237 .RetiresOnSaturation(); | 2241 .RetiresOnSaturation(); |
2238 feature_info_->EnableES3Validators(); | 2242 feature_info_->EnableES3Validators(); |
2239 } | 2243 } |
2240 } | 2244 } |
2241 | 2245 |
2242 scoped_refptr<FeatureInfo> feature_info_; | 2246 scoped_refptr<FeatureInfo> feature_info_; |
| 2247 ServiceDiscardableManager discardable_manager_; |
2243 scoped_refptr<CountingMemoryTracker> memory_tracker1_; | 2248 scoped_refptr<CountingMemoryTracker> memory_tracker1_; |
2244 std::unique_ptr<TextureManager> texture_manager1_; | 2249 std::unique_ptr<TextureManager> texture_manager1_; |
2245 scoped_refptr<CountingMemoryTracker> memory_tracker2_; | 2250 scoped_refptr<CountingMemoryTracker> memory_tracker2_; |
2246 std::unique_ptr<TextureManager> texture_manager2_; | 2251 std::unique_ptr<TextureManager> texture_manager2_; |
2247 }; | 2252 }; |
2248 | 2253 |
2249 TEST_F(SharedTextureTest, DeleteTextures) { | 2254 TEST_F(SharedTextureTest, DeleteTextures) { |
2250 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 2255 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
2251 scoped_refptr<TextureRef> ref2 = | 2256 scoped_refptr<TextureRef> ref2 = |
2252 texture_manager2_->Consume(20, ref1->texture()); | 2257 texture_manager2_->Consume(20, ref1->texture()); |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2718 ExpectValid( | 2723 ExpectValid( |
2719 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); | 2724 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); |
2720 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, | 2725 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, |
2721 GL_DEPTH32F_STENCIL8); | 2726 GL_DEPTH32F_STENCIL8); |
2722 | 2727 |
2723 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); | 2728 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); |
2724 } | 2729 } |
2725 | 2730 |
2726 } // namespace gles2 | 2731 } // namespace gles2 |
2727 } // namespace gpu | 2732 } // namespace gpu |
OLD | NEW |