diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-27 17:42:50 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-27 17:42:50 +0000 |
commit | 6c36f5e4b14f45fd54d60fa9abe7fc99c749eb49 (patch) | |
tree | a29f3e1a76eab8efab08a6fe38e8a6ed4e4fd9be /gpu/command_buffer/service/texture_manager_unittest.cc | |
parent | 40f809e59fa0429f7ec788ef6b71be291bc5ad21 (diff) | |
download | chromium_src-6c36f5e4b14f45fd54d60fa9abe7fc99c749eb49.zip chromium_src-6c36f5e4b14f45fd54d60fa9abe7fc99c749eb49.tar.gz chromium_src-6c36f5e4b14f45fd54d60fa9abe7fc99c749eb49.tar.bz2 |
Fix issue with unused mips.
The bug was
1) Create a texture with N mips (4x4, 2x2, 1x1)
2) Then update the texture to use less than N mips (2x2, 1x1) etc.
The code would incorrectly look at the unused mips in determining
whether or not the texture was renderable.
TEST=unit test
BUG=97207
R=zmo@chromium.org
Review URL: http://codereview.chromium.org/8041048
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@102967 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/texture_manager_unittest.cc')
-rw-r--r-- | gpu/command_buffer/service/texture_manager_unittest.cc | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/gpu/command_buffer/service/texture_manager_unittest.cc b/gpu/command_buffer/service/texture_manager_unittest.cc index 6800481..cf33e72 100644 --- a/gpu/command_buffer/service/texture_manager_unittest.cc +++ b/gpu/command_buffer/service/texture_manager_unittest.cc @@ -377,9 +377,37 @@ TEST_F(TextureInfoTest, POT2D) { EXPECT_TRUE(info_->CanGenerateMipmaps(&feature_info_)); // Make mips. EXPECT_TRUE(manager_.MarkMipmapsGenerated(&feature_info_, info_)); - EXPECT_FALSE(info_->CanRender(&feature_info_)); - EXPECT_FALSE(info_->texture_complete()); - EXPECT_TRUE(manager_.HaveUnrenderableTextures()); + EXPECT_TRUE(info_->CanRender(&feature_info_)); + EXPECT_TRUE(info_->texture_complete()); + EXPECT_FALSE(manager_.HaveUnrenderableTextures()); +} + +TEST_F(TextureInfoTest, UnusedMips) { + manager_.SetInfoTarget(info_, GL_TEXTURE_2D); + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info_->target()); + // Set level zero to large size. + manager_.SetLevelInfo(&feature_info_, info_, + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_TRUE(manager_.MarkMipmapsGenerated(&feature_info_, info_)); + EXPECT_FALSE(info_->npot()); + EXPECT_TRUE(info_->texture_complete()); + EXPECT_TRUE(info_->CanRender(&feature_info_)); + EXPECT_FALSE(manager_.HaveUnrenderableTextures()); + // Set level zero to large smaller (levels unused mips) + manager_.SetLevelInfo(&feature_info_, info_, + GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_TRUE(manager_.MarkMipmapsGenerated(&feature_info_, info_)); + EXPECT_FALSE(info_->npot()); + EXPECT_TRUE(info_->texture_complete()); + EXPECT_TRUE(info_->CanRender(&feature_info_)); + EXPECT_FALSE(manager_.HaveUnrenderableTextures()); + // Set an unused level to some size + manager_.SetLevelInfo(&feature_info_, info_, + GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_TRUE(info_->texture_complete()); + EXPECT_TRUE(info_->CanRender(&feature_info_)); + EXPECT_FALSE(manager_.HaveUnrenderableTextures()); } TEST_F(TextureInfoTest, NPOT2D) { @@ -522,7 +550,7 @@ TEST_F(TextureInfoTest, POTCubeMap) { EXPECT_TRUE(info_->CanGenerateMipmaps(&feature_info_)); // Make mips. EXPECT_TRUE(manager_.MarkMipmapsGenerated(&feature_info_, info_)); - EXPECT_FALSE(info_->texture_complete()); + EXPECT_TRUE(info_->texture_complete()); EXPECT_TRUE(info_->cube_complete()); } |