| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/feature_info.h" | 5 #include "gpu/command_buffer/service/feature_info.h" |
| 6 #include "gpu/command_buffer/service/gpu_service_test.h" | 6 #include "gpu/command_buffer/service/gpu_service_test.h" |
| 7 #include "gpu/command_buffer/service/mailbox_manager_impl.h" | 7 #include "gpu/command_buffer/service/mailbox_manager_impl.h" |
| 8 #include "gpu/command_buffer/service/mailbox_manager_sync.h" | 8 #include "gpu/command_buffer/service/mailbox_manager_sync.h" |
| 9 #include "gpu/command_buffer/service/texture_manager.h" | 9 #include "gpu/command_buffer/service/texture_manager.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 void TearDown() override { GpuServiceTest::TearDown(); } | 40 void TearDown() override { GpuServiceTest::TearDown(); } |
| 41 | 41 |
| 42 Texture* CreateTexture() { | 42 Texture* CreateTexture() { |
| 43 return new Texture(1); | 43 return new Texture(1); |
| 44 } | 44 } |
| 45 | 45 |
| 46 void SetTarget(Texture* texture, GLenum target, GLuint max_level) { | 46 void SetTarget(Texture* texture, GLenum target, GLuint max_level) { |
| 47 texture->SetTarget(NULL, target, max_level); | 47 texture->SetTarget(NULL, target, max_level); |
| 48 } | 48 } |
| 49 | 49 |
| 50 void SetLevelInfo( | 50 void SetLevelInfo(Texture* texture, |
| 51 Texture* texture, | 51 GLenum target, |
| 52 GLenum target, | 52 GLint level, |
| 53 GLint level, | 53 GLenum internal_format, |
| 54 GLenum internal_format, | 54 GLsizei width, |
| 55 GLsizei width, | 55 GLsizei height, |
| 56 GLsizei height, | 56 GLsizei depth, |
| 57 GLsizei depth, | 57 GLint border, |
| 58 GLint border, | 58 GLenum format, |
| 59 GLenum format, | 59 GLenum type, |
| 60 GLenum type, | 60 const gfx::Rect& cleared_rect) { |
| 61 bool cleared) { | 61 texture->SetLevelInfo(NULL, target, level, internal_format, width, height, |
| 62 texture->SetLevelInfo(NULL, | 62 depth, border, format, type, cleared_rect); |
| 63 target, | |
| 64 level, | |
| 65 internal_format, | |
| 66 width, | |
| 67 height, | |
| 68 depth, | |
| 69 border, | |
| 70 format, | |
| 71 type, | |
| 72 cleared); | |
| 73 } | 63 } |
| 74 | 64 |
| 75 void SetLevelCleared(Texture* texture, | 65 void SetLevelCleared(Texture* texture, |
| 76 GLenum target, | 66 GLenum target, |
| 77 GLint level, | 67 GLint level, |
| 78 bool cleared) { | 68 bool cleared) { |
| 79 texture->SetLevelCleared(target, level, cleared); | 69 texture->SetLevelCleared(target, level, cleared); |
| 80 } | 70 } |
| 81 | 71 |
| 82 GLenum SetParameter(Texture* texture, GLenum pname, GLint param) { | 72 GLenum SetParameter(Texture* texture, GLenum pname, GLint param) { |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 context_ = new gfx::GLContextStub(); | 194 context_ = new gfx::GLContextStub(); |
| 205 surface_ = new gfx::GLSurfaceStub(); | 195 surface_ = new gfx::GLSurfaceStub(); |
| 206 context_->MakeCurrent(surface_.get()); | 196 context_->MakeCurrent(surface_.get()); |
| 207 } | 197 } |
| 208 | 198 |
| 209 Texture* DefineTexture() { | 199 Texture* DefineTexture() { |
| 210 Texture* texture = CreateTexture(); | 200 Texture* texture = CreateTexture(); |
| 211 const GLsizei levels_needed = TextureManager::ComputeMipMapCount( | 201 const GLsizei levels_needed = TextureManager::ComputeMipMapCount( |
| 212 GL_TEXTURE_2D, kMaxTextureWidth, kMaxTextureHeight, kMaxTextureDepth); | 202 GL_TEXTURE_2D, kMaxTextureWidth, kMaxTextureHeight, kMaxTextureDepth); |
| 213 SetTarget(texture, GL_TEXTURE_2D, levels_needed); | 203 SetTarget(texture, GL_TEXTURE_2D, levels_needed); |
| 214 SetLevelInfo(texture, | 204 SetLevelInfo(texture, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, |
| 215 GL_TEXTURE_2D, | 205 GL_UNSIGNED_BYTE, gfx::Rect(1, 1)); |
| 216 0, | |
| 217 GL_RGBA, | |
| 218 1, | |
| 219 1, | |
| 220 1, | |
| 221 0, | |
| 222 GL_RGBA, | |
| 223 GL_UNSIGNED_BYTE, | |
| 224 true); | |
| 225 SetParameter(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 206 SetParameter(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| 226 SetParameter(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | 207 SetParameter(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
| 227 return texture; | 208 return texture; |
| 228 } | 209 } |
| 229 | 210 |
| 230 void SetupUpdateTexParamExpectations(GLuint texture_id, | 211 void SetupUpdateTexParamExpectations(GLuint texture_id, |
| 231 GLenum min, | 212 GLenum min, |
| 232 GLenum mag, | 213 GLenum mag, |
| 233 GLenum wrap_s, | 214 GLenum wrap_s, |
| 234 GLenum wrap_t) { | 215 GLenum wrap_t) { |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 EXPECT_CALL(*gl_, GenTextures(1, _)) | 326 EXPECT_CALL(*gl_, GenTextures(1, _)) |
| 346 .WillOnce(SetArgPointee<1>(kNewTextureId)); | 327 .WillOnce(SetArgPointee<1>(kNewTextureId)); |
| 347 SetupUpdateTexParamExpectations( | 328 SetupUpdateTexParamExpectations( |
| 348 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); | 329 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); |
| 349 Texture* new_texture = manager2_->ConsumeTexture(name); | 330 Texture* new_texture = manager2_->ConsumeTexture(name); |
| 350 EXPECT_FALSE(new_texture == NULL); | 331 EXPECT_FALSE(new_texture == NULL); |
| 351 EXPECT_NE(texture, new_texture); | 332 EXPECT_NE(texture, new_texture); |
| 352 EXPECT_EQ(kNewTextureId, new_texture->service_id()); | 333 EXPECT_EQ(kNewTextureId, new_texture->service_id()); |
| 353 | 334 |
| 354 // Resize original texture | 335 // Resize original texture |
| 355 SetLevelInfo(texture, | 336 SetLevelInfo(texture, GL_TEXTURE_2D, 0, GL_RGBA, 16, 32, 1, 0, GL_RGBA, |
| 356 GL_TEXTURE_2D, | 337 GL_UNSIGNED_BYTE, gfx::Rect(16, 32)); |
| 357 0, | |
| 358 GL_RGBA, | |
| 359 16, | |
| 360 32, | |
| 361 1, | |
| 362 0, | |
| 363 GL_RGBA, | |
| 364 GL_UNSIGNED_BYTE, | |
| 365 true); | |
| 366 // Should have been orphaned | 338 // Should have been orphaned |
| 367 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); | 339 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); |
| 368 | 340 |
| 369 // Synchronize again | 341 // Synchronize again |
| 370 manager_->PushTextureUpdates(0); | 342 manager_->PushTextureUpdates(0); |
| 371 SetupUpdateTexParamExpectations( | 343 SetupUpdateTexParamExpectations( |
| 372 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); | 344 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); |
| 373 manager2_->PullTextureUpdates(0); | 345 manager2_->PullTextureUpdates(0); |
| 374 GLsizei width, height; | 346 GLsizei width, height; |
| 375 new_texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height, nullptr); | 347 new_texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height, nullptr); |
| 376 EXPECT_EQ(16, width); | 348 EXPECT_EQ(16, width); |
| 377 EXPECT_EQ(32, height); | 349 EXPECT_EQ(32, height); |
| 378 | 350 |
| 379 // Should have gotten a new attachment | 351 // Should have gotten a new attachment |
| 380 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) != NULL); | 352 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) != NULL); |
| 381 // Resize original texture again.... | 353 // Resize original texture again.... |
| 382 SetLevelInfo(texture, | 354 SetLevelInfo(texture, GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 1, 0, GL_RGBA, |
| 383 GL_TEXTURE_2D, | 355 GL_UNSIGNED_BYTE, gfx::Rect(64, 64)); |
| 384 0, | |
| 385 GL_RGBA, | |
| 386 64, | |
| 387 64, | |
| 388 1, | |
| 389 0, | |
| 390 GL_RGBA, | |
| 391 GL_UNSIGNED_BYTE, | |
| 392 true); | |
| 393 // ...and immediately delete the texture which should save the changes. | 356 // ...and immediately delete the texture which should save the changes. |
| 394 SetupUpdateTexParamExpectations( | 357 SetupUpdateTexParamExpectations( |
| 395 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); | 358 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); |
| 396 DestroyTexture(texture); | 359 DestroyTexture(texture); |
| 397 | 360 |
| 398 // Should be still around since there is a ref from manager2 | 361 // Should be still around since there is a ref from manager2 |
| 399 EXPECT_EQ(new_texture, manager2_->ConsumeTexture(name)); | 362 EXPECT_EQ(new_texture, manager2_->ConsumeTexture(name)); |
| 400 | 363 |
| 401 // The last change to the texture should be visible without a sync point (i.e. | 364 // The last change to the texture should be visible without a sync point (i.e. |
| 402 // push). | 365 // push). |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 SetupUpdateTexParamExpectations(kNewTextureId, texture->min_filter(), | 580 SetupUpdateTexParamExpectations(kNewTextureId, texture->min_filter(), |
| 618 texture->mag_filter(), texture->wrap_s(), | 581 texture->mag_filter(), texture->wrap_s(), |
| 619 texture->wrap_t()); | 582 texture->wrap_t()); |
| 620 Texture* new_texture = manager2_->ConsumeTexture(name); | 583 Texture* new_texture = manager2_->ConsumeTexture(name); |
| 621 ASSERT_TRUE(new_texture); | 584 ASSERT_TRUE(new_texture); |
| 622 EXPECT_NE(texture, new_texture); | 585 EXPECT_NE(texture, new_texture); |
| 623 EXPECT_EQ(kNewTextureId, new_texture->service_id()); | 586 EXPECT_EQ(kNewTextureId, new_texture->service_id()); |
| 624 EXPECT_FALSE(new_texture->IsDefined()); | 587 EXPECT_FALSE(new_texture->IsDefined()); |
| 625 | 588 |
| 626 // Change cleared to false. | 589 // Change cleared to false. |
| 627 SetLevelInfo(texture, | 590 SetLevelInfo(texture, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, |
| 628 GL_TEXTURE_2D, | 591 GL_UNSIGNED_BYTE, gfx::Rect(1, 1)); |
| 629 0, | |
| 630 GL_RGBA, | |
| 631 1, | |
| 632 1, | |
| 633 1, | |
| 634 0, | |
| 635 GL_RGBA, | |
| 636 GL_UNSIGNED_BYTE, | |
| 637 true); | |
| 638 SetParameter(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 592 SetParameter(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| 639 SetParameter(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | 593 SetParameter(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
| 640 EXPECT_TRUE(texture->IsDefined()); | 594 EXPECT_TRUE(texture->IsDefined()); |
| 641 | 595 |
| 642 // Synchronize | 596 // Synchronize |
| 643 manager_->PushTextureUpdates(0); | 597 manager_->PushTextureUpdates(0); |
| 644 SetupUpdateTexParamExpectations( | 598 SetupUpdateTexParamExpectations( |
| 645 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); | 599 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); |
| 646 manager2_->PullTextureUpdates(0); | 600 manager2_->PullTextureUpdates(0); |
| 647 | 601 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 730 DestroyTexture(texture2); | 684 DestroyTexture(texture2); |
| 731 DestroyTexture(new_texture); | 685 DestroyTexture(new_texture); |
| 732 } | 686 } |
| 733 | 687 |
| 734 // TODO: Texture::level_infos_[][].size() | 688 // TODO: Texture::level_infos_[][].size() |
| 735 | 689 |
| 736 // TODO: unsupported targets and formats | 690 // TODO: unsupported targets and formats |
| 737 | 691 |
| 738 } // namespace gles2 | 692 } // namespace gles2 |
| 739 } // namespace gpu | 693 } // namespace gpu |
| OLD | NEW |