diff options
Diffstat (limited to 'gpu/command_buffer/service/texture_manager_unittest.cc')
-rw-r--r-- | gpu/command_buffer/service/texture_manager_unittest.cc | 198 |
1 files changed, 197 insertions, 1 deletions
diff --git a/gpu/command_buffer/service/texture_manager_unittest.cc b/gpu/command_buffer/service/texture_manager_unittest.cc index a4212cd..8bf2814 100644 --- a/gpu/command_buffer/service/texture_manager_unittest.cc +++ b/gpu/command_buffer/service/texture_manager_unittest.cc @@ -12,6 +12,8 @@ class TextureManagerTest : public testing::Test { public: static const GLint kMaxTextureSize = 16; static const GLint kMaxCubeMapTextureSize = 8; + static const GLint kMax2dLevels = 5; + static const GLint kMaxCubeMapLevels = 4; TextureManagerTest() : manager_(kMaxTextureSize, kMaxCubeMapTextureSize) { @@ -45,7 +47,201 @@ TEST_F(TextureManagerTest, Basic) { EXPECT_TRUE(manager_.GetTextureInfo(kTexture1Id) == NULL); } -// TODO(gman): Test TextureInfo setting. +TEST_F(TextureManagerTest, MaxValues) { + // Check we get the right values for the max sizes. + EXPECT_EQ(kMax2dLevels, manager_.MaxLevelsForTarget(GL_TEXTURE_2D)); + EXPECT_EQ(kMaxCubeMapLevels, + manager_.MaxLevelsForTarget(GL_TEXTURE_CUBE_MAP)); + EXPECT_EQ(kMaxTextureSize, manager_.MaxSizeForTarget(GL_TEXTURE_2D)); + EXPECT_EQ(kMaxCubeMapTextureSize, + manager_.MaxSizeForTarget(GL_TEXTURE_CUBE_MAP)); +} + +TEST_F(TextureManagerTest, ValidForTexture) { + // check 2d + EXPECT_TRUE(manager_.ValidForTarget( + GL_TEXTURE_2D, 0, + kMaxTextureSize, kMaxTextureSize, 1)); + EXPECT_TRUE(manager_.ValidForTarget( + GL_TEXTURE_2D, kMax2dLevels - 1, + kMaxTextureSize, kMaxTextureSize, 1)); + EXPECT_TRUE(manager_.ValidForTarget( + GL_TEXTURE_2D, kMax2dLevels - 1, + 1, kMaxTextureSize, 1)); + EXPECT_TRUE(manager_.ValidForTarget( + GL_TEXTURE_2D, kMax2dLevels - 1, + kMaxTextureSize, 1, 1)); + // check level out of range. + EXPECT_FALSE(manager_.ValidForTarget( + GL_TEXTURE_2D, kMax2dLevels, + kMaxTextureSize, 1, 1)); + // check has depth. + EXPECT_FALSE(manager_.ValidForTarget( + GL_TEXTURE_2D, kMax2dLevels, + kMaxTextureSize, 1, 2)); + + // check cube + EXPECT_TRUE(manager_.ValidForTarget( + GL_TEXTURE_CUBE_MAP, 0, + kMaxCubeMapTextureSize, kMaxCubeMapTextureSize, 1)); + EXPECT_TRUE(manager_.ValidForTarget( + GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels - 1, + kMaxCubeMapTextureSize, kMaxCubeMapTextureSize, 1)); + // check level out of range. + EXPECT_FALSE(manager_.ValidForTarget( + GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels, + kMaxCubeMapTextureSize, 1, 1)); + // check not square. + EXPECT_FALSE(manager_.ValidForTarget( + GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels, + kMaxCubeMapTextureSize, 1, 1)); + // check has depth. + EXPECT_FALSE(manager_.ValidForTarget( + GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels, + kMaxCubeMapTextureSize, 1, 2)); +} + +class TextureInfoTest : public testing::Test { + public: + static const GLint kMaxTextureSize = 16; + static const GLint kMaxCubeMapTextureSize = 8; + static const GLint kMax2dLevels = 5; + static const GLint kMaxCubeMapLevels = 4; + static const GLuint kTexture1Id = 1; + + TextureInfoTest() + : manager_(kMaxTextureSize, kMaxCubeMapTextureSize) { + } + + protected: + virtual void SetUp() { + manager_.CreateTextureInfo(kTexture1Id); + info_ = manager_.GetTextureInfo(kTexture1Id); + ASSERT_TRUE(info_ != NULL); + } + + virtual void TearDown() { + } + + TextureManager manager_; + TextureManager::TextureInfo* info_; +}; + +TEST_F(TextureInfoTest, POT2D) { + manager_.SetInfoTarget(info_, GL_TEXTURE_2D); + EXPECT_EQ(GL_TEXTURE_2D, info_->target()); + // Check Setting level 0 to POT + info_->SetLevelInfo( + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_TRUE(info_->CanGenerateMipmaps()); + // Make mips. + info_->MarkMipmapsGenerated(); + EXPECT_TRUE(info_->texture_complete()); + // Change a mip. + info_->SetLevelInfo( + GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_TRUE(info_->CanGenerateMipmaps()); + // Set a level past the number of mips that would get generated. + info_->SetLevelInfo( + GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_TRUE(info_->CanGenerateMipmaps()); + // Make mips. + info_->MarkMipmapsGenerated(); + EXPECT_FALSE(info_->texture_complete()); +} + +TEST_F(TextureInfoTest, NPOT2D) { + manager_.SetInfoTarget(info_, GL_TEXTURE_2D); + EXPECT_EQ(GL_TEXTURE_2D, info_->target()); + // Check Setting level 0 to NPOT + info_->SetLevelInfo( + GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_TRUE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_FALSE(info_->CanGenerateMipmaps()); + // Change it to POT. + info_->SetLevelInfo( + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_TRUE(info_->CanGenerateMipmaps()); +} + +TEST_F(TextureInfoTest, POTCubeMap) { + manager_.SetInfoTarget(info_, GL_TEXTURE_CUBE_MAP); + EXPECT_EQ(GL_TEXTURE_CUBE_MAP, info_->target()); + // Check Setting level 0 each face to POT + info_->SetLevelInfo( + GL_TEXTURE_CUBE_MAP_POSITIVE_X, + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_FALSE(info_->cube_complete()); + EXPECT_FALSE(info_->CanGenerateMipmaps()); + info_->SetLevelInfo( + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_FALSE(info_->cube_complete()); + EXPECT_FALSE(info_->CanGenerateMipmaps()); + info_->SetLevelInfo( + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_FALSE(info_->cube_complete()); + EXPECT_FALSE(info_->CanGenerateMipmaps()); + info_->SetLevelInfo( + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_FALSE(info_->cube_complete()); + EXPECT_FALSE(info_->CanGenerateMipmaps()); + info_->SetLevelInfo( + GL_TEXTURE_CUBE_MAP_POSITIVE_Z, + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_FALSE(info_->cube_complete()); + EXPECT_FALSE(info_->CanGenerateMipmaps()); + info_->SetLevelInfo( + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_TRUE(info_->cube_complete()); + EXPECT_TRUE(info_->CanGenerateMipmaps()); + + // Make mips. + info_->MarkMipmapsGenerated(); + EXPECT_TRUE(info_->texture_complete()); + EXPECT_TRUE(info_->cube_complete()); + + // Change a mip. + info_->SetLevelInfo( + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, + 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_FALSE(info_->npot()); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_TRUE(info_->cube_complete()); + EXPECT_TRUE(info_->CanGenerateMipmaps()); + // Set a level past the number of mips that would get generated. + info_->SetLevelInfo( + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, + 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); + EXPECT_TRUE(info_->CanGenerateMipmaps()); + // Make mips. + info_->MarkMipmapsGenerated(); + EXPECT_FALSE(info_->texture_complete()); + EXPECT_TRUE(info_->cube_complete()); +} + } // namespace gles2 } // namespace gpu |