| 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 |