Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(215)

Unified Diff: gpu/command_buffer/service/texture_manager_unittest.cc

Issue 8341128: Defer clearing textures and renderbuffers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix one more unit test Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/service/texture_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « gpu/command_buffer/service/texture_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698