summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/texture_manager_unittest.cc
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-27 17:42:50 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-27 17:42:50 +0000
commit6c36f5e4b14f45fd54d60fa9abe7fc99c749eb49 (patch)
treea29f3e1a76eab8efab08a6fe38e8a6ed4e4fd9be /gpu/command_buffer/service/texture_manager_unittest.cc
parent40f809e59fa0429f7ec788ef6b71be291bc5ad21 (diff)
downloadchromium_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.cc36
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());
}