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