summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/texture_manager_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/command_buffer/service/texture_manager_unittest.cc')
-rw-r--r--gpu/command_buffer/service/texture_manager_unittest.cc198
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