| Index: gpu/command_buffer/service/texture_manager_unittest.cc
|
| diff --git a/gpu/command_buffer/service/texture_manager_unittest.cc b/gpu/command_buffer/service/texture_manager_unittest.cc
|
| index 5cf868372d0506de8b0d55015d581f897df073d9..52668720f6bada99c78d6704bec41c6cd7b277cb 100644
|
| --- a/gpu/command_buffer/service/texture_manager_unittest.cc
|
| +++ b/gpu/command_buffer/service/texture_manager_unittest.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "gpu/command_buffer/service/error_state_mock.h"
|
| #include "gpu/command_buffer/service/feature_info.h"
|
| +#include "gpu/command_buffer/service/framebuffer_manager.h"
|
| #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
|
| #include "gpu/command_buffer/service/memory_tracking.h"
|
| #include "gpu/command_buffer/service/mocks.h"
|
| @@ -75,10 +76,10 @@ class TextureManagerTest : public testing::Test {
|
| }
|
|
|
| void SetParameter(
|
| - Texture* texture, GLenum pname, GLint value, GLenum error) {
|
| + TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) {
|
| TestHelper::SetTexParameterWithExpectations(
|
| gl_.get(), error_state_.get(), manager_.get(),
|
| - texture, pname, value, error);
|
| + texture_ref, pname, value, error);
|
| }
|
|
|
| // Use StrictMock to make 100% sure we know how GL will be called.
|
| @@ -108,7 +109,7 @@ TEST_F(TextureManagerTest, Basic) {
|
| // Check we can create texture.
|
| manager_->CreateTexture(kClient1Id, kService1Id);
|
| // Check texture got created.
|
| - Texture* texture = manager_->GetTexture(kClient1Id);
|
| + TextureRef* texture = manager_->GetTexture(kClient1Id);
|
| ASSERT_TRUE(texture != NULL);
|
| EXPECT_EQ(kService1Id, texture->service_id());
|
| GLuint client_id = 0;
|
| @@ -133,30 +134,31 @@ TEST_F(TextureManagerTest, SetParameter) {
|
| // Check we can create texture.
|
| manager_->CreateTexture(kClient1Id, kService1Id);
|
| // Check texture got created.
|
| - Texture* texture = manager_->GetTexture(kClient1Id);
|
| - manager_->SetTarget(texture, GL_TEXTURE_2D);
|
| - ASSERT_TRUE(texture != NULL);
|
| - SetParameter(texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| + TextureRef* texture_ref = manager_->GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| + Texture* texture = texture_ref->texture();
|
| + manager_->SetTarget(texture_ref, GL_TEXTURE_2D);
|
| + SetParameter(texture_ref, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter());
|
| - SetParameter(texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| + SetParameter(texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->mag_filter());
|
| - SetParameter(texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| + SetParameter(texture_ref, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_s());
|
| - SetParameter(texture, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| + SetParameter(texture_ref, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t());
|
| - SetParameter(texture, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1, GL_NO_ERROR);
|
| - SetParameter(texture, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2, GL_NO_ERROR);
|
| + SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1, GL_NO_ERROR);
|
| + SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2, GL_NO_ERROR);
|
| SetParameter(
|
| - texture, GL_TEXTURE_MIN_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM);
|
| + texture_ref, GL_TEXTURE_MIN_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM);
|
| EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter());
|
| SetParameter(
|
| - texture, GL_TEXTURE_MAG_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM);
|
| + texture_ref, GL_TEXTURE_MAG_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM);
|
| EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter());
|
| - SetParameter(texture, GL_TEXTURE_WRAP_S, GL_NEAREST, GL_INVALID_ENUM);
|
| + SetParameter(texture_ref, GL_TEXTURE_WRAP_S, GL_NEAREST, GL_INVALID_ENUM);
|
| EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_s());
|
| - SetParameter(texture, GL_TEXTURE_WRAP_T, GL_NEAREST, GL_INVALID_ENUM);
|
| + SetParameter(texture_ref, GL_TEXTURE_WRAP_T, GL_NEAREST, GL_INVALID_ENUM);
|
| EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t());
|
| - SetParameter(texture, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE);
|
| + SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE);
|
| }
|
|
|
| TEST_F(TextureManagerTest, TextureUsageExt) {
|
| @@ -170,13 +172,13 @@ TEST_F(TextureManagerTest, TextureUsageExt) {
|
| // Check we can create texture.
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| // Check texture got created.
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| - ASSERT_TRUE(texture != NULL);
|
| + TextureRef* texture_ref = manager.GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| TestHelper::SetTexParameterWithExpectations(
|
| - gl_.get(), error_state_.get(), &manager, texture,
|
| + gl_.get(), error_state_.get(), &manager, texture_ref,
|
| GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE,GL_NO_ERROR);
|
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE),
|
| - texture->usage());
|
| + texture_ref->texture()->usage());
|
| manager.Destroy(false);
|
| }
|
|
|
| @@ -190,7 +192,7 @@ TEST_F(TextureManagerTest, Destroy) {
|
| // Check we can create texture.
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| // Check texture got created.
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| + TextureRef* texture = manager.GetTexture(kClient1Id);
|
| ASSERT_TRUE(texture != NULL);
|
| EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id)))
|
| .Times(1)
|
| @@ -210,12 +212,12 @@ TEST_F(TextureManagerTest, DestroyUnowned) {
|
| NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
|
| manager.Initialize();
|
| // Check we can create texture.
|
| - Texture* created_texture =
|
| + TextureRef* created_texture =
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| - created_texture->SetNotOwned();
|
| + created_texture->texture()->SetNotOwned();
|
|
|
| // Check texture got created.
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| + TextureRef* texture = manager.GetTexture(kClient1Id);
|
| ASSERT_TRUE(texture != NULL);
|
|
|
| // Check that it is not freed if it is not owned.
|
| @@ -365,7 +367,7 @@ class TextureTestBase : public testing::Test {
|
| : feature_info_(new FeatureInfo()) {
|
| }
|
| virtual ~TextureTestBase() {
|
| - texture_ = NULL;
|
| + texture_ref_ = NULL;
|
| }
|
|
|
| protected:
|
| @@ -385,23 +387,23 @@ class TextureTestBase : public testing::Test {
|
| decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>());
|
| error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
|
| manager_->CreateTexture(kClient1Id, kService1Id);
|
| - texture_ = manager_->GetTexture(kClient1Id);
|
| - ASSERT_TRUE(texture_.get() != NULL);
|
| + texture_ref_ = manager_->GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref_.get() != NULL);
|
| }
|
|
|
| virtual void TearDown() {
|
| - if (texture_.get()) {
|
| + if (texture_ref_.get()) {
|
| GLuint client_id = 0;
|
| - // If it's not in the manager then setting texture_ to NULL will
|
| + // If it's not in the manager then setting texture_ref_ to NULL will
|
| // delete the texture.
|
| - if (!manager_->GetClientId(texture_->service_id(), &client_id)) {
|
| + if (!manager_->GetClientId(texture_ref_->service_id(), &client_id)) {
|
| // Check that it gets deleted when the last reference is released.
|
| EXPECT_CALL(*gl_,
|
| - DeleteTextures(1, ::testing::Pointee(texture_->service_id())))
|
| + DeleteTextures(1, ::testing::Pointee(texture_ref_->service_id())))
|
| .Times(1)
|
| .RetiresOnSaturation();
|
| }
|
| - texture_ = NULL;
|
| + texture_ref_ = NULL;
|
| }
|
| manager_->Destroy(false);
|
| manager_.reset();
|
| @@ -410,10 +412,10 @@ class TextureTestBase : public testing::Test {
|
| }
|
|
|
| void SetParameter(
|
| - Texture* texture, GLenum pname, GLint value, GLenum error) {
|
| + TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) {
|
| TestHelper::SetTexParameterWithExpectations(
|
| gl_.get(), error_state_.get(), manager_.get(),
|
| - texture, pname, value, error);
|
| + texture_ref, pname, value, error);
|
| }
|
|
|
| scoped_ptr<MockGLES2Decoder> decoder_;
|
| @@ -422,7 +424,7 @@ class TextureTestBase : public testing::Test {
|
| scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
|
| scoped_refptr<FeatureInfo> feature_info_;
|
| scoped_ptr<TextureManager> manager_;
|
| - scoped_refptr<Texture> texture_;
|
| + scoped_refptr<TextureRef> texture_ref_;
|
| };
|
|
|
| class TextureTest : public TextureTestBase {
|
| @@ -449,78 +451,81 @@ class TextureMemoryTrackerTest : public TextureTestBase {
|
| .RetiresOnSaturation() \
|
|
|
| TEST_F(TextureTest, Basic) {
|
| - EXPECT_EQ(0u, texture_->target());
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_EQ(0, texture_->num_uncleared_mips());
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| - EXPECT_TRUE(texture_->SafeToRenderFrom());
|
| - EXPECT_FALSE(texture_->IsImmutable());
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(0u, texture->target());
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_EQ(0, texture->num_uncleared_mips());
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| + EXPECT_FALSE(texture->IsImmutable());
|
| EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR),
|
| - texture_->min_filter());
|
| - EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture_->mag_filter());
|
| - EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture_->wrap_s());
|
| - EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture_->wrap_t());
|
| + texture->min_filter());
|
| + EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter());
|
| + EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s());
|
| + EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t());
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| - EXPECT_EQ(0u, texture_->estimated_size());
|
| + EXPECT_EQ(0u, texture->estimated_size());
|
| }
|
|
|
| TEST_F(TextureTest, SetTargetTexture2D) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| - EXPECT_TRUE(texture_->SafeToRenderFrom());
|
| - EXPECT_FALSE(texture_->IsImmutable());
|
| + Texture* texture = texture_ref_->texture();
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| + EXPECT_FALSE(texture->IsImmutable());
|
| }
|
|
|
| TEST_F(TextureTest, SetTargetTextureExternalOES) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_EXTERNAL_OES);
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| - EXPECT_TRUE(texture_->SafeToRenderFrom());
|
| - EXPECT_TRUE(texture_->IsImmutable());
|
| - manager_->SetStreamTexture(texture_, true);
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| + Texture* texture = texture_ref_->texture();
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES);
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_TRUE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| + EXPECT_TRUE(texture->IsImmutable());
|
| + manager_->SetStreamTexture(texture_ref_, true);
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| }
|
|
|
| TEST_F(TextureTest, ZeroSizeCanNotRender) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| - manager_->SetLevelInfo(texture_,
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| }
|
|
|
| TEST_F(TextureTest, EstimatedSize) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_EQ(8u * 4u * 4u, texture_->estimated_size());
|
| - manager_->SetLevelInfo(texture_,
|
| + EXPECT_EQ(8u * 4u * 4u, texture_ref_->texture()->estimated_size());
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_EQ(8u * 4u * 4u * 2u, texture_->estimated_size());
|
| + EXPECT_EQ(8u * 4u * 4u * 2u, texture_ref_->texture()->estimated_size());
|
| }
|
|
|
| TEST_F(TextureMemoryTrackerTest, EstimatedSize) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(0, 256, MemoryTracker::kUnmanaged);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| // Add expectation for texture deletion.
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(256, 0, MemoryTracker::kUnmanaged);
|
| @@ -528,14 +533,14 @@ TEST_F(TextureMemoryTrackerTest, EstimatedSize) {
|
| }
|
|
|
| TEST_F(TextureMemoryTrackerTest, SetParameterPool) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kManaged);
|
| SetParameter(
|
| - texture_, GL_TEXTURE_POOL_CHROMIUM, GL_TEXTURE_POOL_MANAGED_CHROMIUM,
|
| + texture_ref_, GL_TEXTURE_POOL_CHROMIUM, GL_TEXTURE_POOL_MANAGED_CHROMIUM,
|
| GL_NO_ERROR);
|
| // Add expectation for texture deletion.
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kManaged);
|
| @@ -544,116 +549,119 @@ TEST_F(TextureMemoryTrackerTest, SetParameterPool) {
|
| }
|
|
|
| TEST_F(TextureTest, POT2D) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture_->target());
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
|
| // Check Setting level 0 to POT
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| - EXPECT_EQ(0, texture_->num_uncleared_mips());
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| + EXPECT_EQ(0, texture->num_uncleared_mips());
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| // Set filters to something that will work with a single mip.
|
| - SetParameter(texture_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR);
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| + SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR);
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| // Set them back.
|
| - SetParameter(
|
| - texture_, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR, GL_NO_ERROR);
|
| + SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER,
|
| + GL_LINEAR_MIPMAP_LINEAR, GL_NO_ERROR);
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
|
|
| - EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_));
|
| + EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_));
|
| // Make mips.
|
| - EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| + EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_));
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| // Change a mip.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| // Set a level past the number of mips that would get generated.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_));
|
| + EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_));
|
| // Make mips.
|
| - EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_));
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| + EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_));
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| }
|
|
|
| TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64, MemoryTracker::kUnmanaged);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0, MemoryTracker::kUnmanaged);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84, MemoryTracker::kUnmanaged);
|
| - EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_));
|
| + EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_));
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0, MemoryTracker::kUnmanaged);
|
| EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged);
|
| }
|
|
|
| TEST_F(TextureTest, UnusedMips) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture_->target());
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
|
| // Set level zero to large size.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| + EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| // Set level zero to large smaller (levels unused mips)
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| + EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| // Set an unused level to some size
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| }
|
|
|
| TEST_F(TextureTest, NPOT2D) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture_->target());
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
|
| // Check Setting level 0 to NPOT
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_TRUE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + EXPECT_TRUE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| - SetParameter(texture_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR);
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR);
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| - SetParameter(texture_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| - SetParameter(texture_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| + SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| // Change it to POT.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| }
|
|
|
| @@ -665,190 +673,195 @@ TEST_F(TextureTest, NPOT2DNPOTOK) {
|
| TextureManager manager(
|
| NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| - ASSERT_TRUE(texture != NULL);
|
| + TextureRef* texture_ref = manager.GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| + Texture* texture = texture_ref->texture();
|
|
|
| - manager.SetTarget(texture, GL_TEXTURE_2D);
|
| + manager.SetTarget(texture_ref, GL_TEXTURE_2D);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
|
| // Check Setting level 0 to NPOT
|
| - manager.SetLevelInfo(texture,
|
| + manager.SetLevelInfo(texture_ref,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_TRUE(TextureTestHelper::IsNPOT(texture));
|
| EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| - EXPECT_TRUE(manager.CanGenerateMipmaps(texture));
|
| - EXPECT_FALSE(manager.CanRender(texture));
|
| + EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref));
|
| + EXPECT_FALSE(manager.CanRender(texture_ref));
|
| EXPECT_TRUE(manager.HaveUnrenderableTextures());
|
| - EXPECT_TRUE(manager.MarkMipmapsGenerated(texture));
|
| + EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref));
|
| EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| - EXPECT_TRUE(manager.CanRender(texture));
|
| + EXPECT_TRUE(manager.CanRender(texture_ref));
|
| EXPECT_FALSE(manager.HaveUnrenderableTextures());
|
| manager.Destroy(false);
|
| }
|
|
|
| TEST_F(TextureTest, POTCubeMap) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_CUBE_MAP);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture_->target());
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP);
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target());
|
| // Check Setting level 0 each face to POT
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_CUBE_MAP_POSITIVE_X,
|
| 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
|
| 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
|
| 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
|
| 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| - EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| + EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
|
| 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
| 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_));
|
| - EXPECT_FALSE(manager_->CanRender(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref_));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
|
|
| // Make mips.
|
| - EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_TRUE(manager_->CanRender(texture_));
|
| + EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_));
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref_));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
|
|
| // Change a mip.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
| 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_));
|
| - EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture_));
|
| - EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_));
|
| + EXPECT_FALSE(TextureTestHelper::IsNPOT(texture));
|
| + EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture));
|
| + EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_));
|
| // Set a level past the number of mips that would get generated.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
| 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_));
|
| + EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_));
|
| // Make mips.
|
| - EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture_));
|
| + EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_));
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture));
|
| }
|
|
|
| TEST_F(TextureTest, GetLevelSize) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| GLsizei width = -1;
|
| GLsizei height = -1;
|
| - EXPECT_FALSE(texture_->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height));
|
| - EXPECT_FALSE(texture_->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height));
|
| - EXPECT_FALSE(texture_->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
|
| - EXPECT_TRUE(texture_->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height));
|
| + EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height));
|
| + EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
|
| + EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
|
| EXPECT_EQ(4, width);
|
| EXPECT_EQ(5, height);
|
| manager_->RemoveTexture(kClient1Id);
|
| - EXPECT_TRUE(texture_->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
|
| + EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
|
| EXPECT_EQ(4, width);
|
| EXPECT_EQ(5, height);
|
| }
|
|
|
| TEST_F(TextureTest, GetLevelType) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| GLenum type = -1;
|
| GLenum format = -1;
|
| - EXPECT_FALSE(texture_->GetLevelType(GL_TEXTURE_2D, -1, &type, &format));
|
| - EXPECT_FALSE(texture_->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format));
|
| - EXPECT_FALSE(texture_->GetLevelType(GL_TEXTURE_2D, 0, &type, &format));
|
| - EXPECT_TRUE(texture_->GetLevelType(GL_TEXTURE_2D, 1, &type, &format));
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, -1, &type, &format));
|
| + EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format));
|
| + EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &format));
|
| + EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format));
|
| EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
|
| EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format);
|
| manager_->RemoveTexture(kClient1Id);
|
| - EXPECT_TRUE(texture_->GetLevelType(GL_TEXTURE_2D, 1, &type, &format));
|
| + EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format));
|
| EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
|
| EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format);
|
| }
|
|
|
| TEST_F(TextureTest, ValidForTexture) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| // Check bad face.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
| 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
|
| // Check bad level.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 0, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
|
| // Check bad xoffset.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, -1, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
|
| // Check bad xoffset + width > width.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 1, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
|
| // Check bad yoffset.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 0, -1, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
|
| // Check bad yoffset + height > height.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 0, 1, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
|
| // Check bad width.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 0, 0, 5, 5, GL_RGBA, GL_UNSIGNED_BYTE));
|
| // Check bad height.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 0, 0, 4, 6, GL_RGBA, GL_UNSIGNED_BYTE));
|
| // Check bad format.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGB, GL_UNSIGNED_BYTE));
|
| // Check bad type.
|
| - EXPECT_FALSE(texture_->ValidForTexture(
|
| + EXPECT_FALSE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4));
|
| // Check valid full size
|
| - EXPECT_TRUE(texture_->ValidForTexture(
|
| + EXPECT_TRUE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
|
| // Check valid particial size.
|
| - EXPECT_TRUE(texture_->ValidForTexture(
|
| + EXPECT_TRUE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 1, 1, 2, 3, GL_RGBA, GL_UNSIGNED_BYTE));
|
| manager_->RemoveTexture(kClient1Id);
|
| - EXPECT_TRUE(texture_->ValidForTexture(
|
| + EXPECT_TRUE(texture->ValidForTexture(
|
| GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
|
| }
|
|
|
| @@ -860,20 +873,21 @@ TEST_F(TextureTest, FloatNotLinear) {
|
| TextureManager manager(
|
| NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| - ASSERT_TRUE(texture != NULL);
|
| - manager.SetTarget(texture, GL_TEXTURE_2D);
|
| + TextureRef* texture_ref = manager.GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| + manager.SetTarget(texture_ref, GL_TEXTURE_2D);
|
| + Texture* texture = texture_ref->texture();
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
|
| - manager.SetLevelInfo(texture,
|
| + manager.SetLevelInfo(texture_ref,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true);
|
| EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| TestHelper::SetTexParameterWithExpectations(
|
| gl_.get(), error_state_.get(), &manager,
|
| - texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| + texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| TestHelper::SetTexParameterWithExpectations(
|
| - gl_.get(), error_state_.get(), &manager,
|
| - texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR);
|
| + gl_.get(), error_state_.get(), &manager, texture_ref,
|
| + GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR);
|
| EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| manager.Destroy(false);
|
| }
|
| @@ -886,11 +900,12 @@ TEST_F(TextureTest, FloatLinear) {
|
| TextureManager manager(
|
| NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| - ASSERT_TRUE(texture != NULL);
|
| - manager.SetTarget(texture, GL_TEXTURE_2D);
|
| + TextureRef* texture_ref = manager.GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| + manager.SetTarget(texture_ref, GL_TEXTURE_2D);
|
| + Texture* texture = texture_ref->texture();
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
|
| - manager.SetLevelInfo(texture,
|
| + manager.SetLevelInfo(texture_ref,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true);
|
| EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| manager.Destroy(false);
|
| @@ -904,20 +919,21 @@ TEST_F(TextureTest, HalfFloatNotLinear) {
|
| TextureManager manager(
|
| NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| - ASSERT_TRUE(texture != NULL);
|
| - manager.SetTarget(texture, GL_TEXTURE_2D);
|
| + TextureRef* texture_ref = manager.GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| + manager.SetTarget(texture_ref, GL_TEXTURE_2D);
|
| + Texture* texture = texture_ref->texture();
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
|
| - manager.SetLevelInfo(texture,
|
| + manager.SetLevelInfo(texture_ref,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true);
|
| EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| TestHelper::SetTexParameterWithExpectations(
|
| gl_.get(), error_state_.get(), &manager,
|
| - texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| + texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
|
| TestHelper::SetTexParameterWithExpectations(
|
| - gl_.get(), error_state_.get(), &manager,
|
| - texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR);
|
| + gl_.get(), error_state_.get(), &manager, texture_ref,
|
| + GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR);
|
| EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| manager.Destroy(false);
|
| }
|
| @@ -930,11 +946,12 @@ TEST_F(TextureTest, HalfFloatLinear) {
|
| TextureManager manager(
|
| NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| - ASSERT_TRUE(texture != NULL);
|
| - manager.SetTarget(texture, GL_TEXTURE_2D);
|
| + TextureRef* texture_ref = manager.GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| + manager.SetTarget(texture_ref, GL_TEXTURE_2D);
|
| + Texture* texture = texture_ref->texture();
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
|
| - manager.SetLevelInfo(texture,
|
| + manager.SetLevelInfo(texture_ref,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true);
|
| EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| manager.Destroy(false);
|
| @@ -948,11 +965,12 @@ TEST_F(TextureTest, EGLImageExternal) {
|
| TextureManager manager(
|
| NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| - ASSERT_TRUE(texture != NULL);
|
| - manager.SetTarget(texture, GL_TEXTURE_EXTERNAL_OES);
|
| + TextureRef* texture_ref = manager.GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| + manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES);
|
| + Texture* texture = texture_ref->texture();
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target());
|
| - EXPECT_FALSE(manager.CanGenerateMipmaps(texture));
|
| + EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref));
|
| manager.Destroy(false);
|
| }
|
|
|
| @@ -964,13 +982,13 @@ TEST_F(TextureTest, DepthTexture) {
|
| TextureManager manager(
|
| NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
|
| manager.CreateTexture(kClient1Id, kService1Id);
|
| - Texture* texture = manager.GetTexture(kClient1Id);
|
| - ASSERT_TRUE(texture != NULL);
|
| - manager.SetTarget(texture, GL_TEXTURE_2D);
|
| + TextureRef* texture_ref = manager.GetTexture(kClient1Id);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| + manager.SetTarget(texture_ref, GL_TEXTURE_2D);
|
| manager.SetLevelInfo(
|
| - texture, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0,
|
| + texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0,
|
| GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false);
|
| - EXPECT_FALSE(manager.CanGenerateMipmaps(texture));
|
| + EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref));
|
| manager.Destroy(false);
|
| }
|
|
|
| @@ -980,101 +998,104 @@ TEST_F(TextureTest, SafeUnsafe) {
|
| static const GLuint kClient3Id = 3;
|
| static const GLuint kService3Id = 13;
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(0, texture_->num_uncleared_mips());
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture_,
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(0, texture->num_uncleared_mips());
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - EXPECT_FALSE(texture_->SafeToRenderFrom());
|
| + EXPECT_FALSE(texture->SafeToRenderFrom());
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(1, texture_->num_uncleared_mips());
|
| - manager_->SetLevelCleared(texture_, GL_TEXTURE_2D, 0, true);
|
| - EXPECT_TRUE(texture_->SafeToRenderFrom());
|
| + EXPECT_EQ(1, texture->num_uncleared_mips());
|
| + manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 0, true);
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(0, texture_->num_uncleared_mips());
|
| - manager_->SetLevelInfo(texture_,
|
| + EXPECT_EQ(0, texture->num_uncleared_mips());
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - EXPECT_FALSE(texture_->SafeToRenderFrom());
|
| + EXPECT_FALSE(texture->SafeToRenderFrom());
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(1, texture_->num_uncleared_mips());
|
| - manager_->SetLevelCleared(texture_, GL_TEXTURE_2D, 1, true);
|
| - EXPECT_TRUE(texture_->SafeToRenderFrom());
|
| + EXPECT_EQ(1, texture->num_uncleared_mips());
|
| + manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 1, true);
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(0, texture_->num_uncleared_mips());
|
| - manager_->SetLevelInfo(texture_,
|
| + EXPECT_EQ(0, texture->num_uncleared_mips());
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - EXPECT_FALSE(texture_->SafeToRenderFrom());
|
| + EXPECT_FALSE(texture->SafeToRenderFrom());
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(2, texture_->num_uncleared_mips());
|
| - manager_->SetLevelCleared(texture_, GL_TEXTURE_2D, 0, true);
|
| - EXPECT_FALSE(texture_->SafeToRenderFrom());
|
| + EXPECT_EQ(2, texture->num_uncleared_mips());
|
| + manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 0, true);
|
| + EXPECT_FALSE(texture->SafeToRenderFrom());
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(1, texture_->num_uncleared_mips());
|
| - manager_->SetLevelCleared(texture_, GL_TEXTURE_2D, 1, true);
|
| - EXPECT_TRUE(texture_->SafeToRenderFrom());
|
| + EXPECT_EQ(1, texture->num_uncleared_mips());
|
| + manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 1, true);
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(0, texture_->num_uncleared_mips());
|
| - manager_->SetLevelInfo(texture_,
|
| + EXPECT_EQ(0, texture->num_uncleared_mips());
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - EXPECT_FALSE(texture_->SafeToRenderFrom());
|
| + EXPECT_FALSE(texture->SafeToRenderFrom());
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(1, texture_->num_uncleared_mips());
|
| - manager_->MarkMipmapsGenerated(texture_);
|
| - EXPECT_TRUE(texture_->SafeToRenderFrom());
|
| + EXPECT_EQ(1, texture->num_uncleared_mips());
|
| + manager_->MarkMipmapsGenerated(texture_ref_);
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(0, texture_->num_uncleared_mips());
|
| + EXPECT_EQ(0, texture->num_uncleared_mips());
|
|
|
| manager_->CreateTexture(kClient2Id, kService2Id);
|
| - scoped_refptr<Texture> texture2(
|
| + scoped_refptr<TextureRef> texture_ref2(
|
| manager_->GetTexture(kClient2Id));
|
| - ASSERT_TRUE(texture2.get() != NULL);
|
| - manager_->SetTarget(texture2, GL_TEXTURE_2D);
|
| + ASSERT_TRUE(texture_ref2.get() != NULL);
|
| + manager_->SetTarget(texture_ref2, GL_TEXTURE_2D);
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| + Texture* texture2 = texture_ref2->texture();
|
| EXPECT_EQ(0, texture2->num_uncleared_mips());
|
| - manager_->SetLevelInfo(texture2,
|
| + manager_->SetLevelInfo(texture_ref2,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| EXPECT_EQ(0, texture2->num_uncleared_mips());
|
| - manager_->SetLevelInfo(texture2,
|
| + manager_->SetLevelInfo(texture_ref2,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| EXPECT_EQ(1, texture2->num_uncleared_mips());
|
|
|
| manager_->CreateTexture(kClient3Id, kService3Id);
|
| - scoped_refptr<Texture> texture3(
|
| + scoped_refptr<TextureRef> texture_ref3(
|
| manager_->GetTexture(kClient3Id));
|
| - ASSERT_TRUE(texture3.get() != NULL);
|
| - manager_->SetTarget(texture3, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture3,
|
| + ASSERT_TRUE(texture_ref3.get() != NULL);
|
| + manager_->SetTarget(texture_ref3, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref3,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| + Texture* texture3 = texture_ref3->texture();
|
| EXPECT_EQ(1, texture3->num_uncleared_mips());
|
| - manager_->SetLevelCleared(texture2, GL_TEXTURE_2D, 0, true);
|
| + manager_->SetLevelCleared(texture_ref2, GL_TEXTURE_2D, 0, true);
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| EXPECT_EQ(0, texture2->num_uncleared_mips());
|
| - manager_->SetLevelCleared(texture3, GL_TEXTURE_2D, 0, true);
|
| + manager_->SetLevelCleared(texture_ref3, GL_TEXTURE_2D, 0, true);
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| EXPECT_EQ(0, texture3->num_uncleared_mips());
|
|
|
| - manager_->SetLevelInfo(texture2,
|
| + manager_->SetLevelInfo(texture_ref2,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - manager_->SetLevelInfo(texture3,
|
| + manager_->SetLevelInfo(texture_ref3,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| @@ -1089,13 +1110,13 @@ TEST_F(TextureTest, SafeUnsafe) {
|
| EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id)))
|
| .Times(1)
|
| .RetiresOnSaturation();
|
| - texture2 = NULL;
|
| + texture_ref2 = NULL;
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id)))
|
| .Times(1)
|
| .RetiresOnSaturation();
|
| - texture3 = NULL;
|
| + texture_ref3 = NULL;
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| }
|
| @@ -1103,88 +1124,90 @@ TEST_F(TextureTest, SafeUnsafe) {
|
| TEST_F(TextureTest, ClearTexture) {
|
| EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _))
|
| .WillRepeatedly(Return(true));
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - EXPECT_FALSE(texture_->SafeToRenderFrom());
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_FALSE(texture->SafeToRenderFrom());
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(2, texture_->num_uncleared_mips());
|
| - manager_->ClearRenderableLevels(decoder_.get(), texture_);
|
| - EXPECT_TRUE(texture_->SafeToRenderFrom());
|
| + EXPECT_EQ(2, texture->num_uncleared_mips());
|
| + manager_->ClearRenderableLevels(decoder_.get(), texture_ref_);
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(0, texture_->num_uncleared_mips());
|
| - manager_->SetLevelInfo(texture_,
|
| + EXPECT_EQ(0, texture->num_uncleared_mips());
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - EXPECT_FALSE(texture_->SafeToRenderFrom());
|
| + EXPECT_FALSE(texture->SafeToRenderFrom());
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(2, texture_->num_uncleared_mips());
|
| - manager_->ClearTextureLevel(decoder_.get(), texture_, GL_TEXTURE_2D, 0);
|
| - EXPECT_FALSE(texture_->SafeToRenderFrom());
|
| + EXPECT_EQ(2, texture->num_uncleared_mips());
|
| + manager_->ClearTextureLevel(decoder_.get(), texture_ref_, GL_TEXTURE_2D, 0);
|
| + EXPECT_FALSE(texture->SafeToRenderFrom());
|
| EXPECT_TRUE(manager_->HaveUnsafeTextures());
|
| EXPECT_TRUE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(1, texture_->num_uncleared_mips());
|
| - manager_->ClearTextureLevel(decoder_.get(), texture_, GL_TEXTURE_2D, 1);
|
| - EXPECT_TRUE(texture_->SafeToRenderFrom());
|
| + EXPECT_EQ(1, texture->num_uncleared_mips());
|
| + manager_->ClearTextureLevel(decoder_.get(), texture_ref_, GL_TEXTURE_2D, 1);
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| EXPECT_FALSE(manager_->HaveUnsafeTextures());
|
| EXPECT_FALSE(manager_->HaveUnclearedMips());
|
| - EXPECT_EQ(0, texture_->num_uncleared_mips());
|
| + EXPECT_EQ(0, texture->num_uncleared_mips());
|
| }
|
|
|
| TEST_F(TextureTest, UseDeletedTexture) {
|
| static const GLuint kClient2Id = 2;
|
| static const GLuint kService2Id = 12;
|
| // Make the default texture renderable
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| // Make a new texture
|
| manager_->CreateTexture(kClient2Id, kService2Id);
|
| - scoped_refptr<Texture> texture(
|
| + scoped_refptr<TextureRef> texture_ref(
|
| manager_->GetTexture(kClient2Id));
|
| - manager_->SetTarget(texture, GL_TEXTURE_2D);
|
| - EXPECT_FALSE(manager_->CanRender(texture));
|
| + manager_->SetTarget(texture_ref, GL_TEXTURE_2D);
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| // Remove it.
|
| manager_->RemoveTexture(kClient2Id);
|
| - EXPECT_FALSE(manager_->CanRender(texture));
|
| + EXPECT_FALSE(manager_->CanRender(texture_ref));
|
| EXPECT_TRUE(manager_->HaveUnrenderableTextures());
|
| // Check that we can still manipulate it and it effects the manager.
|
| - manager_->SetLevelInfo(texture,
|
| + manager_->SetLevelInfo(texture_ref,
|
| GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| - EXPECT_TRUE(manager_->CanRender(texture));
|
| + EXPECT_TRUE(manager_->CanRender(texture_ref));
|
| EXPECT_FALSE(manager_->HaveUnrenderableTextures());
|
| EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id)))
|
| .Times(1)
|
| .RetiresOnSaturation();
|
| - texture = NULL;
|
| + texture_ref = NULL;
|
| }
|
|
|
| TEST_F(TextureTest, GetLevelImage) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_TRUE(texture_->GetLevelImage(GL_TEXTURE_2D, 1) == NULL);
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL);
|
| // Set image.
|
| - manager_->SetLevelImage(texture_,
|
| + manager_->SetLevelImage(texture_ref_,
|
| GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0));
|
| - EXPECT_FALSE(texture_->GetLevelImage(GL_TEXTURE_2D, 1) == NULL);
|
| + EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL);
|
| // Remove it.
|
| - manager_->SetLevelImage(texture_, GL_TEXTURE_2D, 1, NULL);
|
| - EXPECT_TRUE(texture_->GetLevelImage(GL_TEXTURE_2D, 1) == NULL);
|
| - manager_->SetLevelImage(texture_,
|
| + manager_->SetLevelImage(texture_ref_, GL_TEXTURE_2D, 1, NULL);
|
| + EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL);
|
| + manager_->SetLevelImage(texture_ref_,
|
| GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0));
|
| // Image should be reset when SetLevelInfo is called.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - EXPECT_TRUE(texture_->GetLevelImage(GL_TEXTURE_2D, 1) == NULL);
|
| + EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL);
|
| }
|
|
|
| namespace {
|
| @@ -1198,105 +1221,105 @@ bool InSet(std::set<std::string>* string_set, const std::string& str) {
|
| } // anonymous namespace
|
|
|
| TEST_F(TextureTest, AddToSignature) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| std::string signature1;
|
| std::string signature2;
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature1);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature1);
|
|
|
| std::set<std::string> string_set;
|
| EXPECT_FALSE(InSet(&string_set, signature1));
|
|
|
| // check changing 1 thing makes a different signature.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 4, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| // check putting it back makes the same signature.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_EQ(signature1, signature2);
|
|
|
| // Check setting cleared status does not change signature.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_EQ(signature1, signature2);
|
|
|
| // Check changing other settings changes signature.
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, false);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_FLOAT,
|
| false);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| // put it back
|
| - manager_->SetLevelInfo(texture_,
|
| + manager_->SetLevelInfo(texture_ref_,
|
| GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
|
| false);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_EQ(signature1, signature2);
|
|
|
| // check changing parameters changes signature.
|
| - SetParameter(texture_, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| + SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| - SetParameter(
|
| - texture_, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR, GL_NO_ERROR);
|
| - SetParameter(texture_, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| + SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER,
|
| + GL_NEAREST_MIPMAP_LINEAR, GL_NO_ERROR);
|
| + SetParameter(texture_ref_, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| - SetParameter(texture_, GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR);
|
| - SetParameter(texture_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| + SetParameter(texture_ref_, GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR);
|
| + SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| - SetParameter(texture_, GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR);
|
| - SetParameter(texture_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| + SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR);
|
| + SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_FALSE(InSet(&string_set, signature2));
|
|
|
| // Check putting it back genenerates the same signature
|
| - SetParameter(texture_, GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR);
|
| + SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR);
|
| signature2.clear();
|
| - manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2);
|
| + manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
|
| EXPECT_EQ(signature1, signature2);
|
|
|
| // Check the set was acutally getting different signatures.
|
| @@ -1377,8 +1400,10 @@ class SaveRestoreTextureTest : public TextureTest {
|
| bool cleared;
|
| };
|
|
|
| - void SetLevelInfo(Texture* texture, GLint level, const LevelInfo& info) {
|
| - manager_->SetLevelInfo(texture,
|
| + void SetLevelInfo(TextureRef* texture_ref,
|
| + GLint level,
|
| + const LevelInfo& info) {
|
| + manager_->SetLevelInfo(texture_ref,
|
| info.target,
|
| level,
|
| info.format,
|
| @@ -1391,9 +1416,10 @@ class SaveRestoreTextureTest : public TextureTest {
|
| info.cleared);
|
| }
|
|
|
| - static LevelInfo GetLevelInfo(const Texture* texture,
|
| + static LevelInfo GetLevelInfo(const TextureRef* texture_ref,
|
| GLint target,
|
| GLint level) {
|
| + const Texture* texture = texture_ref->texture();
|
| LevelInfo info;
|
| info.target = target;
|
| EXPECT_TRUE(texture->GetLevelSize(target, level, &info.width,
|
| @@ -1404,27 +1430,27 @@ class SaveRestoreTextureTest : public TextureTest {
|
| return info;
|
| }
|
|
|
| - TextureDefinition* Save(Texture* texture) {
|
| + TextureDefinition* Save(TextureRef* texture_ref) {
|
| EXPECT_CALL(*gl_, GenTextures(_, _))
|
| .WillOnce(SetArgumentPointee<1>(kEmptyTextureServiceId));
|
| - TextureDefinition* definition = manager_->Save(texture);
|
| + TextureDefinition* definition = manager_->Save(texture_ref);
|
| EXPECT_TRUE(definition != NULL);
|
| return definition;
|
| }
|
|
|
| - void Restore(Texture* texture, TextureDefinition* definition) {
|
| - EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(texture->service_id())))
|
| + void Restore(TextureRef* texture_ref, TextureDefinition* definition) {
|
| + EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(texture_ref->service_id())))
|
| .Times(1).RetiresOnSaturation();
|
| EXPECT_CALL(*gl_,
|
| BindTexture(definition->target(), definition->service_id()))
|
| .Times(1).RetiresOnSaturation();
|
| EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(AtLeast(1));
|
|
|
| - EXPECT_TRUE(
|
| - manager_->Restore("TextureTest", decoder_.get(), texture, definition));
|
| + EXPECT_TRUE(manager_->Restore("TextureTest", decoder_.get(),
|
| + texture_ref, definition));
|
| }
|
|
|
| - scoped_refptr<Texture> texture2_;
|
| + scoped_refptr<TextureRef> texture2_;
|
|
|
| private:
|
| static const GLuint kEmptyTextureServiceId;
|
| @@ -1437,16 +1463,17 @@ const GLuint SaveRestoreTextureTest::kService2Id = 12;
|
| const GLuint SaveRestoreTextureTest::kEmptyTextureServiceId = 13;
|
|
|
| TEST_F(SaveRestoreTextureTest, SaveRestore2D) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_2D);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture_->target());
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
|
| LevelInfo level0(
|
| GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true);
|
| - SetLevelInfo(texture_, 0, level0);
|
| - EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_));
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| - LevelInfo level1 = GetLevelInfo(texture_.get(), GL_TEXTURE_2D, 1);
|
| - LevelInfo level2 = GetLevelInfo(texture_.get(), GL_TEXTURE_2D, 2);
|
| - scoped_ptr<TextureDefinition> definition(Save(texture_));
|
| + SetLevelInfo(texture_ref_, 0, level0);
|
| + EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_));
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1);
|
| + LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2);
|
| + scoped_ptr<TextureDefinition> definition(Save(texture_ref_));
|
| const TextureDefinition::LevelInfos& infos = definition->level_infos();
|
| EXPECT_EQ(1U, infos.size());
|
| EXPECT_EQ(3U, infos[0].size());
|
| @@ -1459,27 +1486,29 @@ TEST_F(SaveRestoreTextureTest, SaveRestore2D) {
|
| 0,
|
| LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false));
|
| EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_));
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture2_));
|
| - EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture2_->estimated_size());
|
| + texture = texture2_->texture();
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size());
|
| Restore(texture2_, definition.release());
|
| EXPECT_EQ(level0, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 0));
|
| EXPECT_EQ(level1, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 1));
|
| EXPECT_EQ(level2, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 2));
|
| - EXPECT_EQ(64U + 16U + 4U, texture2_->estimated_size());
|
| + EXPECT_EQ(64U + 16U + 4U, texture->estimated_size());
|
| GLint w, h;
|
| - EXPECT_TRUE(texture2_->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h));
|
| + EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h));
|
| EXPECT_EQ(0, w);
|
| EXPECT_EQ(0, h);
|
| }
|
|
|
| TEST_F(SaveRestoreTextureTest, SaveRestoreClearRectangle) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_RECTANGLE_ARB);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture_->target());
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_RECTANGLE_ARB);
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target());
|
| LevelInfo level0(
|
| GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false);
|
| - SetLevelInfo(texture_, 0, level0);
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| - scoped_ptr<TextureDefinition> definition(Save(texture_));
|
| + SetLevelInfo(texture_ref_, 0, level0);
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + scoped_ptr<TextureDefinition> definition(Save(texture_ref_));
|
| const TextureDefinition::LevelInfos& infos = definition->level_infos();
|
| EXPECT_EQ(1U, infos.size());
|
| EXPECT_EQ(1U, infos[0].size());
|
| @@ -1496,22 +1525,24 @@ TEST_F(SaveRestoreTextureTest, SaveRestoreClearRectangle) {
|
| }
|
|
|
| TEST_F(SaveRestoreTextureTest, SaveRestoreStreamTexture) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_EXTERNAL_OES);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture_->target());
|
| - manager_->SetStreamTexture(texture_, true);
|
| - GLuint service_id = texture_->service_id();
|
| - scoped_ptr<TextureDefinition> definition(Save(texture_));
|
| - EXPECT_FALSE(texture_->IsStreamTexture());
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES);
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target());
|
| + manager_->SetStreamTexture(texture_ref_, true);
|
| + GLuint service_id = texture->service_id();
|
| + scoped_ptr<TextureDefinition> definition(Save(texture_ref_));
|
| + EXPECT_FALSE(texture->IsStreamTexture());
|
| manager_->SetTarget(texture2_, GL_TEXTURE_EXTERNAL_OES);
|
| Restore(texture2_, definition.release());
|
| - EXPECT_TRUE(texture2_->IsStreamTexture());
|
| - EXPECT_TRUE(texture2_->IsImmutable());
|
| + EXPECT_TRUE(texture2_->texture()->IsStreamTexture());
|
| + EXPECT_TRUE(texture2_->texture()->IsImmutable());
|
| EXPECT_EQ(service_id, texture2_->service_id());
|
| }
|
|
|
| TEST_F(SaveRestoreTextureTest, SaveRestoreCube) {
|
| - manager_->SetTarget(texture_, GL_TEXTURE_CUBE_MAP);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture_->target());
|
| + manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP);
|
| + Texture* texture = texture_ref_->texture();
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target());
|
| LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X,
|
| GL_RGBA,
|
| 1,
|
| @@ -1528,10 +1559,10 @@ TEST_F(SaveRestoreTextureTest, SaveRestoreCube) {
|
| 0,
|
| GL_UNSIGNED_BYTE,
|
| true);
|
| - SetLevelInfo(texture_, 0, face0);
|
| - SetLevelInfo(texture_, 0, face5);
|
| - EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_));
|
| - scoped_ptr<TextureDefinition> definition(Save(texture_));
|
| + SetLevelInfo(texture_ref_, 0, face0);
|
| + SetLevelInfo(texture_ref_, 0, face5);
|
| + EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
|
| + scoped_ptr<TextureDefinition> definition(Save(texture_ref_));
|
| const TextureDefinition::LevelInfos& infos = definition->level_infos();
|
| EXPECT_EQ(6U, infos.size());
|
| EXPECT_EQ(1U, infos[0].size());
|
| @@ -1543,7 +1574,243 @@ TEST_F(SaveRestoreTextureTest, SaveRestoreCube) {
|
| GetLevelInfo(texture2_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0));
|
| }
|
|
|
| -} // namespace gles2
|
| -} // namespace gpu
|
| +class CountingMemoryTracker : public MemoryTracker {
|
| + public:
|
| + CountingMemoryTracker() {
|
| + current_size_[0] = 0;
|
| + current_size_[1] = 0;
|
| + }
|
|
|
| + virtual void TrackMemoryAllocatedChange(size_t old_size,
|
| + size_t new_size,
|
| + Pool pool) OVERRIDE {
|
| + DCHECK_LT(static_cast<size_t>(pool), arraysize(current_size_));
|
| + current_size_[pool] += new_size - old_size;
|
| + }
|
|
|
| + virtual bool EnsureGPUMemoryAvailable(size_t size_needed) OVERRIDE {
|
| + return true;
|
| + }
|
| +
|
| + size_t GetSize(Pool pool) {
|
| + DCHECK_LT(static_cast<size_t>(pool), arraysize(current_size_));
|
| + return current_size_[pool];
|
| + }
|
| +
|
| + private:
|
| + virtual ~CountingMemoryTracker() {}
|
| +
|
| + size_t current_size_[2];
|
| + DISALLOW_COPY_AND_ASSIGN(CountingMemoryTracker);
|
| +};
|
| +
|
| +class SharedTextureTest : public testing::Test {
|
| + public:
|
| + SharedTextureTest()
|
| + : feature_info_(new FeatureInfo()) {
|
| + }
|
| +
|
| + virtual ~SharedTextureTest() {
|
| + }
|
| +
|
| + virtual void SetUp() {
|
| + gl_.reset(new ::gfx::MockGLInterface());
|
| + ::gfx::GLInterface::SetGLInterface(gl_.get());
|
| +
|
| + memory_tracker1_ = new CountingMemoryTracker;
|
| + texture_manager1_.reset(new TextureManager(
|
| + memory_tracker1_, feature_info_.get(),
|
| + TextureManagerTest::kMaxTextureSize,
|
| + TextureManagerTest::kMaxCubeMapTextureSize));
|
| + memory_tracker2_ = new CountingMemoryTracker;
|
| + texture_manager2_.reset(new TextureManager(
|
| + memory_tracker2_, feature_info_.get(),
|
| + TextureManagerTest::kMaxTextureSize,
|
| + TextureManagerTest::kMaxCubeMapTextureSize));
|
| + TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
|
| + texture_manager1_->Initialize();
|
| + TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
|
| + texture_manager2_->Initialize();
|
| + }
|
| +
|
| + virtual void TearDown() {
|
| + texture_manager2_->Destroy(false);
|
| + texture_manager2_.reset();
|
| + texture_manager1_->Destroy(false);
|
| + texture_manager1_.reset();
|
| + ::gfx::GLInterface::SetGLInterface(NULL);
|
| + gl_.reset();
|
| + }
|
| +
|
| + protected:
|
| + scoped_ptr< ::gfx::MockGLInterface > gl_;
|
| + scoped_refptr<FeatureInfo> feature_info_;
|
| + scoped_refptr<CountingMemoryTracker> memory_tracker1_;
|
| + scoped_ptr<TextureManager> texture_manager1_;
|
| + scoped_refptr<CountingMemoryTracker> memory_tracker2_;
|
| + scoped_ptr<TextureManager> texture_manager2_;
|
| +};
|
| +
|
| +TEST_F(SharedTextureTest, DeleteTextures) {
|
| + scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10);
|
| + scoped_refptr<TextureRef> ref2 = new TextureRef(texture_manager2_.get(),
|
| + ref1->texture());
|
| + EXPECT_CALL(*gl_, DeleteTextures(1, _))
|
| + .Times(0);
|
| + ref1 = NULL;
|
| + texture_manager1_->RemoveTexture(10);
|
| + testing::Mock::VerifyAndClearExpectations(gl_.get());
|
| +
|
| + EXPECT_CALL(*gl_, DeleteTextures(1, _))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + ref2 = NULL;
|
| + testing::Mock::VerifyAndClearExpectations(gl_.get());
|
| +}
|
| +
|
| +TEST_F(SharedTextureTest, TextureSafetyAccounting) {
|
| + EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures());
|
| + EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures());
|
| + EXPECT_FALSE(texture_manager1_->HaveUnclearedMips());
|
| + EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures());
|
| + EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures());
|
| + EXPECT_FALSE(texture_manager2_->HaveUnclearedMips());
|
| +
|
| + // Newly created texture is unrenderable.
|
| + scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10);
|
| + EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures());
|
| + EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures());
|
| + EXPECT_FALSE(texture_manager1_->HaveUnclearedMips());
|
| +
|
| + // Associate new texture ref to other texture manager, should account for it
|
| + // too.
|
| + scoped_refptr<TextureRef> ref2 = new TextureRef(texture_manager2_.get(),
|
| + ref1->texture());
|
| + EXPECT_TRUE(texture_manager2_->HaveUnrenderableTextures());
|
| + EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures());
|
| + EXPECT_FALSE(texture_manager2_->HaveUnclearedMips());
|
| +
|
| + // Make texture renderable but uncleared on one texture manager, should affect
|
| + // other one.
|
| + texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D);
|
| + texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
|
| + GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures());
|
| + EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures());
|
| + EXPECT_TRUE(texture_manager1_->HaveUnclearedMips());
|
| + EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures());
|
| + EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures());
|
| + EXPECT_TRUE(texture_manager2_->HaveUnclearedMips());
|
| +
|
| + // Make texture cleared on one texture manager, should affect other one.
|
| + texture_manager1_->SetLevelCleared(ref1, GL_TEXTURE_2D, 0, true);
|
| + EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures());
|
| + EXPECT_FALSE(texture_manager1_->HaveUnclearedMips());
|
| + EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures());
|
| + EXPECT_FALSE(texture_manager2_->HaveUnclearedMips());
|
| +
|
| + EXPECT_CALL(*gl_, DeleteTextures(1, _))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + texture_manager1_->RemoveTexture(10);
|
| +}
|
| +
|
| +TEST_F(SharedTextureTest, FBOCompletenessCheck) {
|
| + const GLenum kCompleteValue = GL_FRAMEBUFFER_COMPLETE;
|
| + FramebufferManager framebuffer_manager1(1, 1);
|
| + texture_manager1_->set_framebuffer_manager(&framebuffer_manager1);
|
| + FramebufferManager framebuffer_manager2(1, 1);
|
| + texture_manager2_->set_framebuffer_manager(&framebuffer_manager2);
|
| +
|
| + scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10);
|
| + framebuffer_manager1.CreateFramebuffer(10, 10);
|
| + scoped_refptr<Framebuffer> framebuffer1 =
|
| + framebuffer_manager1.GetFramebuffer(10);
|
| + framebuffer1->AttachTexture(GL_COLOR_ATTACHMENT0, ref1, GL_TEXTURE_2D, 0);
|
| + EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1));
|
| + EXPECT_NE(kCompleteValue, framebuffer1->IsPossiblyComplete());
|
| +
|
| + // Make FBO complete in manager 1.
|
| + texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D);
|
| + texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
|
| + GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| + EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete());
|
| + framebuffer_manager1.MarkAsComplete(framebuffer1);
|
| + EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1));
|
| +
|
| + // Share texture with manager 2.
|
| + scoped_refptr<TextureRef> ref2 = new TextureRef(texture_manager2_.get(),
|
| + ref1->texture());
|
| + framebuffer_manager2.CreateFramebuffer(20, 20);
|
| + scoped_refptr<Framebuffer> framebuffer2 =
|
| + framebuffer_manager2.GetFramebuffer(20);
|
| + framebuffer2->AttachTexture(GL_COLOR_ATTACHMENT0, ref2, GL_TEXTURE_2D, 0);
|
| + EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2));
|
| + EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete());
|
| + framebuffer_manager2.MarkAsComplete(framebuffer2);
|
| + EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2));
|
| +
|
| + // Change level for texture, both FBOs should be marked incomplete
|
| + texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
|
| + GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| + EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1));
|
| + EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete());
|
| + framebuffer_manager1.MarkAsComplete(framebuffer1);
|
| + EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1));
|
| + EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2));
|
| + EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete());
|
| + framebuffer_manager2.MarkAsComplete(framebuffer2);
|
| + EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2));
|
| +
|
| + EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _))
|
| + .Times(2)
|
| + .RetiresOnSaturation();
|
| + framebuffer_manager1.RemoveFramebuffer(10);
|
| + framebuffer_manager2.RemoveFramebuffer(20);
|
| + EXPECT_CALL(*gl_, DeleteTextures(1, _))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + texture_manager1_->RemoveTexture(10);
|
| +}
|
| +
|
| +TEST_F(SharedTextureTest, Memory) {
|
| + size_t initial_memory1 = memory_tracker1_->GetSize(MemoryTracker::kUnmanaged);
|
| + size_t initial_memory2 = memory_tracker2_->GetSize(MemoryTracker::kUnmanaged);
|
| +
|
| + // Newly created texture is unrenderable.
|
| + scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10);
|
| + texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D);
|
| + texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 10, 10, 1, 0,
|
| + GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| +
|
| + EXPECT_LT(0u, ref1->texture()->estimated_size());
|
| + EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(),
|
| + memory_tracker1_->GetSize(MemoryTracker::kUnmanaged));
|
| +
|
| + // Associate new texture ref to other texture manager, it doesn't account for
|
| + // the texture memory, the first memory tracker still has it.
|
| + scoped_refptr<TextureRef> ref2 = new TextureRef(texture_manager2_.get(),
|
| + ref1->texture());
|
| + EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(),
|
| + memory_tracker1_->GetSize(MemoryTracker::kUnmanaged));
|
| + EXPECT_EQ(initial_memory2,
|
| + memory_tracker2_->GetSize(MemoryTracker::kUnmanaged));
|
| +
|
| + // Delete the texture, memory should go to the remaining tracker.
|
| + texture_manager1_->RemoveTexture(10);
|
| + ref1 = NULL;
|
| + EXPECT_EQ(initial_memory1,
|
| + memory_tracker1_->GetSize(MemoryTracker::kUnmanaged));
|
| + EXPECT_EQ(initial_memory2 + ref2->texture()->estimated_size(),
|
| + memory_tracker2_->GetSize(MemoryTracker::kUnmanaged));
|
| +
|
| + EXPECT_CALL(*gl_, DeleteTextures(1, _))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + ref2 = NULL;
|
| + EXPECT_EQ(initial_memory2,
|
| + memory_tracker2_->GetSize(MemoryTracker::kUnmanaged));
|
| +}
|
| +
|
| +} // namespace gles2
|
| +} // namespace gpu
|
|
|