| 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 38d1969372743ad72828424fd02578fce0dff62a..44ce8308d0803c970d93101a84369e27807829e7 100644
|
| --- a/gpu/command_buffer/service/texture_manager_unittest.cc
|
| +++ b/gpu/command_buffer/service/texture_manager_unittest.cc
|
| @@ -7,10 +7,12 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "gpu/command_buffer/common/gl_mock.h"
|
| #include "gpu/command_buffer/service/feature_info.h"
|
| +#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
|
| #include "gpu/command_buffer/service/test_helper.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| using ::testing::Pointee;
|
| +using ::testing::Return;
|
| using ::testing::_;
|
|
|
| namespace gpu {
|
| @@ -78,6 +80,8 @@ TEST_F(TextureManagerTest, Basic) {
|
| const GLuint kService1Id = 11;
|
| const GLuint kClient2Id = 2;
|
| EXPECT_FALSE(manager_.HaveUnrenderableTextures());
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| // Check we can create texture.
|
| manager_.CreateTextureInfo(&feature_info_, kClient1Id, kService1Id);
|
| // Check texture got created.
|
| @@ -99,7 +103,6 @@ TEST_F(TextureManagerTest, Basic) {
|
| TEST_F(TextureManagerTest, SetParameter) {
|
| const GLuint kClient1Id = 1;
|
| const GLuint kService1Id = 11;
|
| - EXPECT_FALSE(manager_.HaveUnrenderableTextures());
|
| // Check we can create texture.
|
| manager_.CreateTextureInfo(&feature_info_, kClient1Id, kService1Id);
|
| // Check texture got created.
|
| @@ -134,7 +137,6 @@ TEST_F(TextureManagerTest, SetParameter) {
|
| TEST_F(TextureManagerTest, Destroy) {
|
| const GLuint kClient1Id = 1;
|
| const GLuint kService1Id = 11;
|
| - EXPECT_FALSE(manager_.HaveUnrenderableTextures());
|
| // Check we can create texture.
|
| manager_.CreateTextureInfo(&feature_info_, kClient1Id, kService1Id);
|
| // Check texture got created.
|
| @@ -155,7 +157,6 @@ TEST_F(TextureManagerTest, Destroy) {
|
| TEST_F(TextureManagerTest, DestroyUnowned) {
|
| const GLuint kClient1Id = 1;
|
| const GLuint kService1Id = 11;
|
| - EXPECT_FALSE(manager_.HaveUnrenderableTextures());
|
| // Check we can create texture.
|
| TextureManager::TextureInfo* created_info =
|
| manager_.CreateTextureInfo(&feature_info_, kClient1Id, kService1Id);
|
| @@ -329,12 +330,15 @@ TEST_F(TextureInfoTest, Basic) {
|
| EXPECT_FALSE(info_->cube_complete());
|
| EXPECT_FALSE(info_->CanGenerateMipmaps(&feature_info_));
|
| EXPECT_FALSE(info_->npot());
|
| + EXPECT_EQ(0, info_->num_uncleared_mips());
|
| EXPECT_FALSE(info_->CanRender(&feature_info_));
|
| + EXPECT_TRUE(info_->SafeToRenderFrom());
|
| EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), info_->min_filter());
|
| EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), info_->mag_filter());
|
| EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), info_->wrap_s());
|
| EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), info_->wrap_t());
|
| EXPECT_TRUE(manager_.HaveUnrenderableTextures());
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| }
|
|
|
| TEST_F(TextureInfoTest, POT2D) {
|
| @@ -342,10 +346,11 @@ TEST_F(TextureInfoTest, POT2D) {
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info_->target());
|
| // Check Setting level 0 to POT
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| - GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_FALSE(info_->CanRender(&feature_info_));
|
| + EXPECT_EQ(0, info_->num_uncleared_mips());
|
| EXPECT_TRUE(manager_.HaveUnrenderableTextures());
|
| // Set filters to something that will work with a single mip.
|
| manager_.SetParameter(
|
| @@ -365,7 +370,7 @@ TEST_F(TextureInfoTest, POT2D) {
|
| EXPECT_FALSE(manager_.HaveUnrenderableTextures());
|
| // Change a mip.
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| - GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_TRUE(info_->CanGenerateMipmaps(&feature_info_));
|
| @@ -373,7 +378,7 @@ TEST_F(TextureInfoTest, POT2D) {
|
| EXPECT_TRUE(manager_.HaveUnrenderableTextures());
|
| // Set a level past the number of mips that would get generated.
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| - GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_TRUE(info_->CanGenerateMipmaps(&feature_info_));
|
| // Make mips.
|
| EXPECT_TRUE(manager_.MarkMipmapsGenerated(&feature_info_, info_));
|
| @@ -387,7 +392,7 @@ TEST_F(TextureInfoTest, UnusedMips) {
|
| 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);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_TRUE(manager_.MarkMipmapsGenerated(&feature_info_, info_));
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_TRUE(info_->texture_complete());
|
| @@ -395,7 +400,7 @@ TEST_F(TextureInfoTest, UnusedMips) {
|
| 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);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_TRUE(manager_.MarkMipmapsGenerated(&feature_info_, info_));
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_TRUE(info_->texture_complete());
|
| @@ -403,7 +408,7 @@ TEST_F(TextureInfoTest, UnusedMips) {
|
| 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);
|
| + GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_TRUE(info_->texture_complete());
|
| EXPECT_TRUE(info_->CanRender(&feature_info_));
|
| @@ -415,7 +420,7 @@ TEST_F(TextureInfoTest, NPOT2D) {
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info_->target());
|
| // Check Setting level 0 to NPOT
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| - GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_TRUE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_FALSE(info_->CanGenerateMipmaps(&feature_info_));
|
| @@ -435,7 +440,7 @@ TEST_F(TextureInfoTest, NPOT2D) {
|
| EXPECT_FALSE(manager_.HaveUnrenderableTextures());
|
| // Change it to POT.
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| - GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_TRUE(info_->CanGenerateMipmaps(&feature_info_));
|
| @@ -456,7 +461,7 @@ TEST_F(TextureInfoTest, NPOT2DNPOTOK) {
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target());
|
| // Check Setting level 0 to NPOT
|
| manager.SetLevelInfo(&feature_info, info,
|
| - GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_TRUE(info->npot());
|
| EXPECT_FALSE(info->texture_complete());
|
| EXPECT_TRUE(info->CanGenerateMipmaps(&feature_info));
|
| @@ -475,7 +480,7 @@ TEST_F(TextureInfoTest, POTCubeMap) {
|
| // Check Setting level 0 each face to POT
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| GL_TEXTURE_CUBE_MAP_POSITIVE_X,
|
| - 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_FALSE(info_->cube_complete());
|
| @@ -484,7 +489,7 @@ TEST_F(TextureInfoTest, POTCubeMap) {
|
| EXPECT_TRUE(manager_.HaveUnrenderableTextures());
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
|
| - 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_FALSE(info_->cube_complete());
|
| @@ -493,7 +498,7 @@ TEST_F(TextureInfoTest, POTCubeMap) {
|
| EXPECT_TRUE(manager_.HaveUnrenderableTextures());
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
|
| - 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_FALSE(info_->cube_complete());
|
| @@ -502,7 +507,7 @@ TEST_F(TextureInfoTest, POTCubeMap) {
|
| EXPECT_TRUE(manager_.HaveUnrenderableTextures());
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
|
| - 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_FALSE(info_->cube_complete());
|
| @@ -511,7 +516,7 @@ TEST_F(TextureInfoTest, POTCubeMap) {
|
| EXPECT_TRUE(manager_.HaveUnrenderableTextures());
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
|
| - 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_FALSE(info_->cube_complete());
|
| @@ -520,7 +525,7 @@ TEST_F(TextureInfoTest, POTCubeMap) {
|
| EXPECT_TRUE(manager_.HaveUnrenderableTextures());
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
| - 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_TRUE(info_->cube_complete());
|
| @@ -538,7 +543,7 @@ TEST_F(TextureInfoTest, POTCubeMap) {
|
| // Change a mip.
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
| - 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_FALSE(info_->npot());
|
| EXPECT_FALSE(info_->texture_complete());
|
| EXPECT_TRUE(info_->cube_complete());
|
| @@ -546,7 +551,7 @@ TEST_F(TextureInfoTest, POTCubeMap) {
|
| // Set a level past the number of mips that would get generated.
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
| - 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| EXPECT_TRUE(info_->CanGenerateMipmaps(&feature_info_));
|
| // Make mips.
|
| EXPECT_TRUE(manager_.MarkMipmapsGenerated(&feature_info_, info_));
|
| @@ -557,7 +562,7 @@ TEST_F(TextureInfoTest, POTCubeMap) {
|
| TEST_F(TextureInfoTest, GetLevelSize) {
|
| manager_.SetInfoTarget(&feature_info_, info_, GL_TEXTURE_2D);
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| - GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| GLsizei width = -1;
|
| GLsizei height = -1;
|
| EXPECT_FALSE(info_->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height));
|
| @@ -573,7 +578,7 @@ TEST_F(TextureInfoTest, GetLevelSize) {
|
| TEST_F(TextureInfoTest, GetLevelType) {
|
| manager_.SetInfoTarget(&feature_info_, info_, GL_TEXTURE_2D);
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| - GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| GLenum type = -1;
|
| GLenum format = -1;
|
| EXPECT_FALSE(info_->GetLevelType(GL_TEXTURE_2D, -1, &type, &format));
|
| @@ -589,7 +594,7 @@ TEST_F(TextureInfoTest, GetLevelType) {
|
| TEST_F(TextureInfoTest, ValidForTexture) {
|
| manager_.SetInfoTarget(&feature_info_, info_, GL_TEXTURE_2D);
|
| manager_.SetLevelInfo(&feature_info_, info_,
|
| - GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true);
|
| // Check bad face.
|
| EXPECT_FALSE(info_->ValidForTexture(
|
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
| @@ -644,7 +649,7 @@ TEST_F(TextureInfoTest, FloatNotLinear) {
|
| manager.SetInfoTarget(&feature_info_, info, GL_TEXTURE_2D);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target());
|
| manager.SetLevelInfo(&feature_info, info,
|
| - GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true);
|
| EXPECT_FALSE(info->texture_complete());
|
| manager.SetParameter(&feature_info, info, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
| EXPECT_FALSE(info->texture_complete());
|
| @@ -666,7 +671,7 @@ TEST_F(TextureInfoTest, FloatLinear) {
|
| manager.SetInfoTarget(&feature_info_, info, GL_TEXTURE_2D);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target());
|
| manager.SetLevelInfo(&feature_info, info,
|
| - GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true);
|
| EXPECT_TRUE(info->texture_complete());
|
| manager.Destroy(false);
|
| }
|
| @@ -683,7 +688,7 @@ TEST_F(TextureInfoTest, HalfFloatNotLinear) {
|
| manager.SetInfoTarget(&feature_info_, info, GL_TEXTURE_2D);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target());
|
| manager.SetLevelInfo(&feature_info, info,
|
| - GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true);
|
| EXPECT_FALSE(info->texture_complete());
|
| manager.SetParameter(&feature_info, info, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
| EXPECT_FALSE(info->texture_complete());
|
| @@ -705,7 +710,7 @@ TEST_F(TextureInfoTest, HalfFloatLinear) {
|
| manager.SetInfoTarget(&feature_info_, info, GL_TEXTURE_2D);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), info->target());
|
| manager.SetLevelInfo(&feature_info, info,
|
| - GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES);
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true);
|
| EXPECT_TRUE(info->texture_complete());
|
| manager.Destroy(false);
|
| }
|
| @@ -725,6 +730,156 @@ TEST_F(TextureInfoTest, EGLImageExternal) {
|
| manager.Destroy(false);
|
| }
|
|
|
| +TEST_F(TextureInfoTest, SafeUnsafe) {
|
| + static const GLuint kClient2Id = 2;
|
| + static const GLuint kService2Id = 12;
|
| + static const GLuint kClient3Id = 3;
|
| + static const GLuint kService3Id = 13;
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info_->num_uncleared_mips());
|
| + manager_.SetInfoTarget(&feature_info_, info_, GL_TEXTURE_2D);
|
| + manager_.SetLevelInfo(&feature_info_, info_,
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + EXPECT_FALSE(info_->SafeToRenderFrom());
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(1, info_->num_uncleared_mips());
|
| + manager_.SetLevelCleared(info_, GL_TEXTURE_2D, 0);
|
| + EXPECT_TRUE(info_->SafeToRenderFrom());
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info_->num_uncleared_mips());
|
| + manager_.SetLevelInfo(&feature_info_, info_,
|
| + GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + EXPECT_FALSE(info_->SafeToRenderFrom());
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(1, info_->num_uncleared_mips());
|
| + manager_.SetLevelCleared(info_, GL_TEXTURE_2D, 1);
|
| + EXPECT_TRUE(info_->SafeToRenderFrom());
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info_->num_uncleared_mips());
|
| + manager_.SetLevelInfo(&feature_info_, info_,
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + manager_.SetLevelInfo(&feature_info_, info_,
|
| + GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + EXPECT_FALSE(info_->SafeToRenderFrom());
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(2, info_->num_uncleared_mips());
|
| + manager_.SetLevelCleared(info_, GL_TEXTURE_2D, 0);
|
| + EXPECT_FALSE(info_->SafeToRenderFrom());
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(1, info_->num_uncleared_mips());
|
| + manager_.SetLevelCleared(info_, GL_TEXTURE_2D, 1);
|
| + EXPECT_TRUE(info_->SafeToRenderFrom());
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info_->num_uncleared_mips());
|
| + manager_.SetLevelInfo(&feature_info_, info_,
|
| + GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + EXPECT_FALSE(info_->SafeToRenderFrom());
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(1, info_->num_uncleared_mips());
|
| + manager_.MarkMipmapsGenerated(&feature_info_, info_);
|
| + EXPECT_TRUE(info_->SafeToRenderFrom());
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info_->num_uncleared_mips());
|
| +
|
| + manager_.CreateTextureInfo(&feature_info_, kClient2Id, kService2Id);
|
| + TextureManager::TextureInfo::Ref info2 = manager_.GetTextureInfo(kClient2Id);
|
| + ASSERT_TRUE(info2.get() != NULL);
|
| + manager_.SetInfoTarget(&feature_info_, info2, GL_TEXTURE_2D);
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info2->num_uncleared_mips());
|
| + manager_.SetLevelInfo(&feature_info_, info2,
|
| + 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, info2->num_uncleared_mips());
|
| + manager_.SetLevelInfo(&feature_info_, info2,
|
| + 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, info2->num_uncleared_mips());
|
| +
|
| + manager_.CreateTextureInfo(&feature_info_, kClient3Id, kService3Id);
|
| + TextureManager::TextureInfo::Ref info3 = manager_.GetTextureInfo(kClient3Id);
|
| + ASSERT_TRUE(info3.get() != NULL);
|
| + manager_.SetInfoTarget(&feature_info_, info3, GL_TEXTURE_2D);
|
| + manager_.SetLevelInfo(&feature_info_, info3,
|
| + 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, info3->num_uncleared_mips());
|
| + manager_.SetLevelCleared(info2, GL_TEXTURE_2D, 0);
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info2->num_uncleared_mips());
|
| + manager_.SetLevelCleared(info3, GL_TEXTURE_2D, 0);
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info3->num_uncleared_mips());
|
| +
|
| + manager_.SetLevelInfo(&feature_info_, info2,
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + manager_.SetLevelInfo(&feature_info_, info3,
|
| + 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, info2->num_uncleared_mips());
|
| + EXPECT_EQ(1, info3->num_uncleared_mips());
|
| + manager_.RemoveTextureInfo(&feature_info_, kClient3Id);
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + manager_.RemoveTextureInfo(&feature_info_, kClient2Id);
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| +}
|
| +
|
| +TEST_F(TextureInfoTest, ClearTexture) {
|
| + scoped_ptr<MockGLES2Decoder> decoder(new gles2::MockGLES2Decoder());
|
| + EXPECT_CALL(*decoder, ClearLevel(_, _, _, _, _, _, _, _))
|
| + .WillRepeatedly(Return(true));
|
| + manager_.SetInfoTarget(&feature_info_, info_, GL_TEXTURE_2D);
|
| + manager_.SetLevelInfo(&feature_info_, info_,
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + manager_.SetLevelInfo(&feature_info_, info_,
|
| + GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + EXPECT_FALSE(info_->SafeToRenderFrom());
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(2, info_->num_uncleared_mips());
|
| + manager_.ClearRenderableLevels(decoder.get(), info_);
|
| + EXPECT_TRUE(info_->SafeToRenderFrom());
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info_->num_uncleared_mips());
|
| + manager_.SetLevelInfo(&feature_info_, info_,
|
| + GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + manager_.SetLevelInfo(&feature_info_, info_,
|
| + GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
|
| + EXPECT_FALSE(info_->SafeToRenderFrom());
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(2, info_->num_uncleared_mips());
|
| + manager_.ClearTextureLevel(decoder.get(), info_, GL_TEXTURE_2D, 0);
|
| + EXPECT_FALSE(info_->SafeToRenderFrom());
|
| + EXPECT_TRUE(manager_.HaveUnsafeTextures());
|
| + EXPECT_TRUE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(1, info_->num_uncleared_mips());
|
| + manager_.ClearTextureLevel(decoder.get(), info_, GL_TEXTURE_2D, 1);
|
| + EXPECT_TRUE(info_->SafeToRenderFrom());
|
| + EXPECT_FALSE(manager_.HaveUnsafeTextures());
|
| + EXPECT_FALSE(manager_.HaveUnclearedMips());
|
| + EXPECT_EQ(0, info_->num_uncleared_mips());
|
| +}
|
| +
|
| } // namespace gles2
|
| } // namespace gpu
|
|
|
|
|