summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-08 19:22:53 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-08 19:22:53 +0000
commitdb73c53b1db4ee076dec9c43d977f24ea8e4bb6d (patch)
tree2c8663d1975369b9b7e6e9275832b86c62f7d0da /gpu
parent0f34d9082e0b16e83d3e4c8fbf296a09509e4702 (diff)
downloadchromium_src-db73c53b1db4ee076dec9c43d977f24ea8e4bb6d.zip
chromium_src-db73c53b1db4ee076dec9c43d977f24ea8e4bb6d.tar.gz
chromium_src-db73c53b1db4ee076dec9c43d977f24ea8e4bb6d.tar.bz2
Make texture manager more strict.
BUG=144886 Review URL: https://chromiumcodereview.appspot.com/11074008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@160678 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/service/texture_manager.cc2
-rw-r--r--gpu/command_buffer/service/texture_manager_unittest.cc39
2 files changed, 33 insertions, 8 deletions
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
index aa78668..7c378d4 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -730,7 +730,7 @@ TextureManager::TextureInfo::Ref TextureManager::CreateDefaultAndBlackTextures(
bool TextureManager::ValidForTarget(
GLenum target, GLint level, GLsizei width, GLsizei height, GLsizei depth) {
- GLsizei max_size = MaxSizeForTarget(target);
+ GLsizei max_size = MaxSizeForTarget(target) >> level;
return level >= 0 &&
width >= 0 &&
height >= 0 &&
diff --git a/gpu/command_buffer/service/texture_manager_unittest.cc b/gpu/command_buffer/service/texture_manager_unittest.cc
index 5207450..dad2cf1 100644
--- a/gpu/command_buffer/service/texture_manager_unittest.cc
+++ b/gpu/command_buffer/service/texture_manager_unittest.cc
@@ -232,11 +232,11 @@ TEST_F(TextureManagerTest, ValidForTarget) {
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));
+ GL_TEXTURE_2D, kMax2dLevels - 1, 1, 1, 1));
+ EXPECT_FALSE(manager_.ValidForTarget(
+ GL_TEXTURE_2D, kMax2dLevels - 1, 1, 2, 1));
+ EXPECT_FALSE(manager_.ValidForTarget(
+ GL_TEXTURE_2D, kMax2dLevels - 1, 2, 1, 1));
// check level out of range.
EXPECT_FALSE(manager_.ValidForTarget(
GL_TEXTURE_2D, kMax2dLevels, kMaxTextureSize, 1, 1));
@@ -257,8 +257,9 @@ TEST_F(TextureManagerTest, ValidForTarget) {
GL_TEXTURE_CUBE_MAP, 0,
kMaxCubeMapTextureSize, kMaxCubeMapTextureSize, 1));
EXPECT_TRUE(manager_.ValidForTarget(
- GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels - 1,
- kMaxCubeMapTextureSize, kMaxCubeMapTextureSize, 1));
+ GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels - 1, 1, 1, 1));
+ EXPECT_FALSE(manager_.ValidForTarget(
+ GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels - 1, 2, 2, 1));
// check level out of range.
EXPECT_FALSE(manager_.ValidForTarget(
GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels,
@@ -271,6 +272,30 @@ TEST_F(TextureManagerTest, ValidForTarget) {
EXPECT_FALSE(manager_.ValidForTarget(
GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels,
kMaxCubeMapTextureSize, 1, 2));
+
+ for (GLint level = 0; level < kMax2dLevels; ++level) {
+ EXPECT_TRUE(manager_.ValidForTarget(
+ GL_TEXTURE_2D, level, kMaxTextureSize >> level, 1, 1));
+ EXPECT_TRUE(manager_.ValidForTarget(
+ GL_TEXTURE_2D, level, 1, kMaxTextureSize >> level, 1));
+ EXPECT_FALSE(manager_.ValidForTarget(
+ GL_TEXTURE_2D, level, (kMaxTextureSize >> level) + 1, 1, 1));
+ EXPECT_FALSE(manager_.ValidForTarget(
+ GL_TEXTURE_2D, level, 1, (kMaxTextureSize >> level) + 1, 1));
+ }
+
+ for (GLint level = 0; level < kMaxCubeMapLevels; ++level) {
+ EXPECT_TRUE(manager_.ValidForTarget(
+ GL_TEXTURE_CUBE_MAP, level,
+ kMaxCubeMapTextureSize >> level,
+ kMaxCubeMapTextureSize >> level,
+ 1));
+ EXPECT_FALSE(manager_.ValidForTarget(
+ GL_TEXTURE_CUBE_MAP, level,
+ (kMaxCubeMapTextureSize >> level) * 2,
+ (kMaxCubeMapTextureSize >> level) * 2,
+ 1));
+ }
}
TEST_F(TextureManagerTest, ValidForTargetNPOT) {