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

Side by Side Diff: gpu/command_buffer/service/texture_manager_unittest.cc

Issue 1950233002: Fix a bug in texture validation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 unified diff | Download patch
« no previous file with comments | « gpu/command_buffer/service/texture_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/texture_manager.h" 5 #include "gpu/command_buffer/service/texture_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 return texture->owned_service_id(); 52 return texture->owned_service_id();
53 } 53 }
54 }; 54 };
55 55
56 class TextureManagerTest : public GpuServiceTest { 56 class TextureManagerTest : public GpuServiceTest {
57 public: 57 public:
58 static const GLint kMaxTextureSize = 32; 58 static const GLint kMaxTextureSize = 32;
59 static const GLint kMaxCubeMapTextureSize = 8; 59 static const GLint kMaxCubeMapTextureSize = 8;
60 static const GLint kMaxRectangleTextureSize = 32; 60 static const GLint kMaxRectangleTextureSize = 32;
61 static const GLint kMaxExternalTextureSize = 32; 61 static const GLint kMaxExternalTextureSize = 32;
62 static const GLint kMax3DTextureSize = 256; 62 static const GLint kMax3DTextureSize = 512;
63 static const GLint kMaxArrayTextureLayers = 256;
63 static const GLint kMax2dLevels = 6; 64 static const GLint kMax2dLevels = 6;
64 static const GLint kMaxCubeMapLevels = 4; 65 static const GLint kMaxCubeMapLevels = 4;
65 static const GLint kMaxExternalLevels = 1; 66 static const GLint kMaxExternalLevels = 1;
66 static const GLint kMax3dLevels = 9; 67 static const GLint kMax3dLevels = 10;
67 static const bool kUseDefaultTextures = false; 68 static const bool kUseDefaultTextures = false;
68 69
69 TextureManagerTest() { 70 TextureManagerTest() {
70 // Always run with this command line, but the ES3 features are not 71 // Always run with this command line, but the ES3 features are not
71 // enabled without FeatureInfo::EnableES3Validators(). 72 // enabled without FeatureInfo::EnableES3Validators().
72 base::CommandLine command_line(0, nullptr); 73 base::CommandLine command_line(0, nullptr);
73 command_line.AppendSwitch(switches::kEnableUnsafeES3APIs); 74 command_line.AppendSwitch(switches::kEnableUnsafeES3APIs);
74 GpuDriverBugWorkarounds gpu_driver_bug_workaround(&command_line); 75 GpuDriverBugWorkarounds gpu_driver_bug_workaround(&command_line);
75 feature_info_ = new FeatureInfo(command_line, gpu_driver_bug_workaround); 76 feature_info_ = new FeatureInfo(command_line, gpu_driver_bug_workaround);
76 } 77 }
77 78
78 ~TextureManagerTest() override {} 79 ~TextureManagerTest() override {}
79 80
80 protected: 81 protected:
81 void SetUp() override { 82 void SetUp() override {
82 GpuServiceTest::SetUp(); 83 GpuServiceTest::SetUp();
83 manager_.reset(new TextureManager(NULL, 84 manager_.reset(new TextureManager(NULL,
84 feature_info_.get(), 85 feature_info_.get(),
85 kMaxTextureSize, 86 kMaxTextureSize,
86 kMaxCubeMapTextureSize, 87 kMaxCubeMapTextureSize,
87 kMaxRectangleTextureSize, 88 kMaxRectangleTextureSize,
88 kMax3DTextureSize, 89 kMax3DTextureSize,
90 kMaxArrayTextureLayers,
89 kUseDefaultTextures)); 91 kUseDefaultTextures));
90 TestHelper::SetupTextureManagerInitExpectations( 92 TestHelper::SetupTextureManagerInitExpectations(
91 gl_.get(), false, false, "", kUseDefaultTextures); 93 gl_.get(), false, false, "", kUseDefaultTextures);
92 manager_->Initialize(); 94 manager_->Initialize();
93 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); 95 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
94 } 96 }
95 97
96 void TearDown() override { 98 void TearDown() override {
97 manager_->Destroy(false); 99 manager_->Destroy(false);
98 manager_.reset(); 100 manager_.reset();
(...skipping 29 matching lines...) Expand all
128 std::unique_ptr<MockErrorState> error_state_; 130 std::unique_ptr<MockErrorState> error_state_;
129 }; 131 };
130 132
131 // GCC requires these declarations, but MSVC requires they not be present 133 // GCC requires these declarations, but MSVC requires they not be present
132 #ifndef COMPILER_MSVC 134 #ifndef COMPILER_MSVC
133 const GLint TextureManagerTest::kMaxTextureSize; 135 const GLint TextureManagerTest::kMaxTextureSize;
134 const GLint TextureManagerTest::kMaxCubeMapTextureSize; 136 const GLint TextureManagerTest::kMaxCubeMapTextureSize;
135 const GLint TextureManagerTest::kMaxRectangleTextureSize; 137 const GLint TextureManagerTest::kMaxRectangleTextureSize;
136 const GLint TextureManagerTest::kMaxExternalTextureSize; 138 const GLint TextureManagerTest::kMaxExternalTextureSize;
137 const GLint TextureManagerTest::kMax3DTextureSize; 139 const GLint TextureManagerTest::kMax3DTextureSize;
140 const GLint TextureManagerTest::kMaxArrayTextureLayers;
138 const GLint TextureManagerTest::kMax2dLevels; 141 const GLint TextureManagerTest::kMax2dLevels;
139 const GLint TextureManagerTest::kMaxCubeMapLevels; 142 const GLint TextureManagerTest::kMaxCubeMapLevels;
140 const GLint TextureManagerTest::kMaxExternalLevels; 143 const GLint TextureManagerTest::kMaxExternalLevels;
141 const GLint TextureManagerTest::kMax3dLevels; 144 const GLint TextureManagerTest::kMax3dLevels;
142 #endif 145 #endif
143 146
144 class GLStreamTextureImageStub : public GLStreamTextureImage { 147 class GLStreamTextureImageStub : public GLStreamTextureImage {
145 public: 148 public:
146 GLStreamTextureImageStub() {} 149 GLStreamTextureImageStub() {}
147 150
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 TEST_F(TextureManagerTest, UseDefaultTexturesTrue) { 242 TEST_F(TextureManagerTest, UseDefaultTexturesTrue) {
240 bool use_default_textures = true; 243 bool use_default_textures = true;
241 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), 244 TestHelper::SetupTextureManagerInitExpectations(gl_.get(),
242 false, false, "GL_ANGLE_texture_usage", use_default_textures); 245 false, false, "GL_ANGLE_texture_usage", use_default_textures);
243 TextureManager manager(NULL, 246 TextureManager manager(NULL,
244 feature_info_.get(), 247 feature_info_.get(),
245 kMaxTextureSize, 248 kMaxTextureSize,
246 kMaxCubeMapTextureSize, 249 kMaxCubeMapTextureSize,
247 kMaxRectangleTextureSize, 250 kMaxRectangleTextureSize,
248 kMax3DTextureSize, 251 kMax3DTextureSize,
252 kMaxArrayTextureLayers,
249 use_default_textures); 253 use_default_textures);
250 manager.Initialize(); 254 manager.Initialize();
251 255
252 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); 256 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL);
253 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); 257 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL);
254 258
255 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. 259 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB.
256 260
257 manager.Destroy(false); 261 manager.Destroy(false);
258 } 262 }
259 263
260 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { 264 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) {
261 bool use_default_textures = false; 265 bool use_default_textures = false;
262 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), 266 TestHelper::SetupTextureManagerInitExpectations(gl_.get(),
263 false, false, "GL_ANGLE_texture_usage", use_default_textures); 267 false, false, "GL_ANGLE_texture_usage", use_default_textures);
264 TextureManager manager(NULL, 268 TextureManager manager(NULL,
265 feature_info_.get(), 269 feature_info_.get(),
266 kMaxTextureSize, 270 kMaxTextureSize,
267 kMaxCubeMapTextureSize, 271 kMaxCubeMapTextureSize,
268 kMaxRectangleTextureSize, 272 kMaxRectangleTextureSize,
269 kMax3DTextureSize, 273 kMax3DTextureSize,
274 kMaxArrayTextureLayers,
270 use_default_textures); 275 use_default_textures);
271 manager.Initialize(); 276 manager.Initialize();
272 277
273 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); 278 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL);
274 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); 279 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL);
275 280
276 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. 281 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB.
277 282
278 manager.Destroy(false); 283 manager.Destroy(false);
279 } 284 }
280 285
281 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) { 286 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) {
282 bool use_default_textures = true; 287 bool use_default_textures = true;
283 SetupFeatureInfo("", "OpenGL ES 3.0", true); 288 SetupFeatureInfo("", "OpenGL ES 3.0", true);
284 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), 289 TestHelper::SetupTextureManagerInitExpectations(gl_.get(),
285 true, false, "", use_default_textures); 290 true, false, "", use_default_textures);
286 TextureManager manager(NULL, 291 TextureManager manager(NULL,
287 feature_info_.get(), 292 feature_info_.get(),
288 kMaxTextureSize, 293 kMaxTextureSize,
289 kMaxCubeMapTextureSize, 294 kMaxCubeMapTextureSize,
290 kMaxRectangleTextureSize, 295 kMaxRectangleTextureSize,
291 kMax3DTextureSize, 296 kMax3DTextureSize,
297 kMaxArrayTextureLayers,
292 use_default_textures); 298 use_default_textures);
293 manager.Initialize(); 299 manager.Initialize();
294 300
295 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL); 301 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL);
296 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL); 302 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL);
297 303
298 manager.Destroy(false); 304 manager.Destroy(false);
299 } 305 }
300 306
301 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) { 307 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) {
302 bool use_default_textures = false; 308 bool use_default_textures = false;
303 SetupFeatureInfo("", "OpenGL ES 3.0", true); 309 SetupFeatureInfo("", "OpenGL ES 3.0", true);
304 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), 310 TestHelper::SetupTextureManagerInitExpectations(gl_.get(),
305 true, false, "", use_default_textures); 311 true, false, "", use_default_textures);
306 TextureManager manager(NULL, 312 TextureManager manager(NULL,
307 feature_info_.get(), 313 feature_info_.get(),
308 kMaxTextureSize, 314 kMaxTextureSize,
309 kMaxCubeMapTextureSize, 315 kMaxCubeMapTextureSize,
310 kMaxRectangleTextureSize, 316 kMaxRectangleTextureSize,
311 kMax3DTextureSize, 317 kMax3DTextureSize,
318 kMaxArrayTextureLayers,
312 use_default_textures); 319 use_default_textures);
313 manager.Initialize(); 320 manager.Initialize();
314 321
315 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL); 322 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL);
316 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL); 323 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL);
317 324
318 manager.Destroy(false); 325 manager.Destroy(false);
319 } 326 }
320 327
321 TEST_F(TextureManagerTest, TextureUsageExt) { 328 TEST_F(TextureManagerTest, TextureUsageExt) {
322 TestHelper::SetupTextureManagerInitExpectations( 329 TestHelper::SetupTextureManagerInitExpectations(
323 gl_.get(), false, false, "GL_ANGLE_texture_usage", kUseDefaultTextures); 330 gl_.get(), false, false, "GL_ANGLE_texture_usage", kUseDefaultTextures);
324 TextureManager manager(NULL, 331 TextureManager manager(NULL,
325 feature_info_.get(), 332 feature_info_.get(),
326 kMaxTextureSize, 333 kMaxTextureSize,
327 kMaxCubeMapTextureSize, 334 kMaxCubeMapTextureSize,
328 kMaxRectangleTextureSize, 335 kMaxRectangleTextureSize,
329 kMax3DTextureSize, 336 kMax3DTextureSize,
337 kMaxArrayTextureLayers,
330 kUseDefaultTextures); 338 kUseDefaultTextures);
331 manager.Initialize(); 339 manager.Initialize();
332 const GLuint kClient1Id = 1; 340 const GLuint kClient1Id = 1;
333 const GLuint kService1Id = 11; 341 const GLuint kService1Id = 11;
334 // Check we can create texture. 342 // Check we can create texture.
335 manager.CreateTexture(kClient1Id, kService1Id); 343 manager.CreateTexture(kClient1Id, kService1Id);
336 // Check texture got created. 344 // Check texture got created.
337 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 345 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
338 ASSERT_TRUE(texture_ref != NULL); 346 ASSERT_TRUE(texture_ref != NULL);
339 TestHelper::SetTexParameteriWithExpectations( 347 TestHelper::SetTexParameteriWithExpectations(
340 gl_.get(), error_state_.get(), &manager, texture_ref, 348 gl_.get(), error_state_.get(), &manager, texture_ref,
341 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); 349 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR);
342 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), 350 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE),
343 texture_ref->texture()->usage()); 351 texture_ref->texture()->usage());
344 manager.Destroy(false); 352 manager.Destroy(false);
345 } 353 }
346 354
347 TEST_F(TextureManagerTest, Destroy) { 355 TEST_F(TextureManagerTest, Destroy) {
348 const GLuint kClient1Id = 1; 356 const GLuint kClient1Id = 1;
349 const GLuint kService1Id = 11; 357 const GLuint kService1Id = 11;
350 TestHelper::SetupTextureManagerInitExpectations( 358 TestHelper::SetupTextureManagerInitExpectations(
351 gl_.get(), false, false, "", kUseDefaultTextures); 359 gl_.get(), false, false, "", kUseDefaultTextures);
352 TextureManager manager(NULL, 360 TextureManager manager(NULL,
353 feature_info_.get(), 361 feature_info_.get(),
354 kMaxTextureSize, 362 kMaxTextureSize,
355 kMaxCubeMapTextureSize, 363 kMaxCubeMapTextureSize,
356 kMaxRectangleTextureSize, 364 kMaxRectangleTextureSize,
357 kMax3DTextureSize, 365 kMax3DTextureSize,
366 kMaxArrayTextureLayers,
358 kUseDefaultTextures); 367 kUseDefaultTextures);
359 manager.Initialize(); 368 manager.Initialize();
360 // Check we can create texture. 369 // Check we can create texture.
361 manager.CreateTexture(kClient1Id, kService1Id); 370 manager.CreateTexture(kClient1Id, kService1Id);
362 // Check texture got created. 371 // Check texture got created.
363 TextureRef* texture = manager.GetTexture(kClient1Id); 372 TextureRef* texture = manager.GetTexture(kClient1Id);
364 ASSERT_TRUE(texture != NULL); 373 ASSERT_TRUE(texture != NULL);
365 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) 374 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id)))
366 .Times(1) 375 .Times(1)
367 .RetiresOnSaturation(); 376 .RetiresOnSaturation();
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 EXPECT_EQ(kMaxCubeMapTextureSize, 417 EXPECT_EQ(kMaxCubeMapTextureSize,
409 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_POSITIVE_Z)); 418 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_POSITIVE_Z));
410 EXPECT_EQ(kMaxCubeMapTextureSize, 419 EXPECT_EQ(kMaxCubeMapTextureSize,
411 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)); 420 manager_->MaxSizeForTarget(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z));
412 EXPECT_EQ(kMaxRectangleTextureSize, 421 EXPECT_EQ(kMaxRectangleTextureSize,
413 manager_->MaxSizeForTarget(GL_TEXTURE_RECTANGLE_ARB)); 422 manager_->MaxSizeForTarget(GL_TEXTURE_RECTANGLE_ARB));
414 EXPECT_EQ(kMaxExternalTextureSize, 423 EXPECT_EQ(kMaxExternalTextureSize,
415 manager_->MaxSizeForTarget(GL_TEXTURE_EXTERNAL_OES)); 424 manager_->MaxSizeForTarget(GL_TEXTURE_EXTERNAL_OES));
416 EXPECT_EQ(kMaxTextureSize, manager_->MaxSizeForTarget(GL_TEXTURE_2D_ARRAY)); 425 EXPECT_EQ(kMaxTextureSize, manager_->MaxSizeForTarget(GL_TEXTURE_2D_ARRAY));
417 EXPECT_EQ(kMax3DTextureSize, manager_->MaxSizeForTarget(GL_TEXTURE_3D)); 426 EXPECT_EQ(kMax3DTextureSize, manager_->MaxSizeForTarget(GL_TEXTURE_3D));
427 EXPECT_EQ(kMaxArrayTextureLayers, manager_->max_array_texture_layers());
418 } 428 }
419 429
420 TEST_F(TextureManagerTest, ValidForTarget) { 430 TEST_F(TextureManagerTest, ValidForTarget) {
421 // check 2d 431 // check 2d
422 EXPECT_TRUE(manager_->ValidForTarget( 432 EXPECT_TRUE(manager_->ValidForTarget(
423 GL_TEXTURE_2D, 0, kMaxTextureSize, kMaxTextureSize, 1)); 433 GL_TEXTURE_2D, 0, kMaxTextureSize, kMaxTextureSize, 1));
424 EXPECT_TRUE(manager_->ValidForTarget( 434 EXPECT_TRUE(manager_->ValidForTarget(
425 GL_TEXTURE_2D, kMax2dLevels - 1, 1, 1, 1)); 435 GL_TEXTURE_2D, kMax2dLevels - 1, 1, 1, 1));
426 EXPECT_FALSE(manager_->ValidForTarget( 436 EXPECT_FALSE(manager_->ValidForTarget(
427 GL_TEXTURE_2D, kMax2dLevels - 1, 1, 2, 1)); 437 GL_TEXTURE_2D, kMax2dLevels - 1, 1, 2, 1));
428 EXPECT_FALSE(manager_->ValidForTarget( 438 EXPECT_FALSE(manager_->ValidForTarget(
429 GL_TEXTURE_2D, kMax2dLevels - 1, 2, 1, 1)); 439 GL_TEXTURE_2D, kMax2dLevels - 1, 2, 1, 1));
430 // check level out of range. 440 // check level out of range.
431 EXPECT_FALSE(manager_->ValidForTarget( 441 EXPECT_FALSE(manager_->ValidForTarget(
432 GL_TEXTURE_2D, kMax2dLevels, kMaxTextureSize, 1, 1)); 442 GL_TEXTURE_2D, kMax2dLevels, kMaxTextureSize, 1, 1));
433 // check has depth. 443 // check has depth.
434 EXPECT_FALSE(manager_->ValidForTarget( 444 EXPECT_FALSE(manager_->ValidForTarget(
435 GL_TEXTURE_2D, kMax2dLevels, kMaxTextureSize, 1, 2)); 445 GL_TEXTURE_2D, kMax2dLevels, kMaxTextureSize, 1, 2));
436 // Check NPOT width on level 0 446 // Check NPOT width on level 0
437 EXPECT_TRUE(manager_->ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); 447 EXPECT_TRUE(manager_->ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1));
438 // Check NPOT height on level 0 448 // Check NPOT height on level 0
439 EXPECT_TRUE(manager_->ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); 449 EXPECT_TRUE(manager_->ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1));
440 // Check NPOT width on level 1 450 // Check NPOT width on level 1
441 EXPECT_FALSE(manager_->ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); 451 EXPECT_FALSE(manager_->ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1));
442 // Check NPOT height on level 1 452 // Check NPOT height on level 1
443 EXPECT_FALSE(manager_->ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); 453 EXPECT_FALSE(manager_->ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1));
444 454
455 // check array textures.
456 EXPECT_TRUE(manager_->ValidForTarget(
457 GL_TEXTURE_2D_ARRAY, 0, kMaxTextureSize, kMaxTextureSize,
458 kMaxArrayTextureLayers));
459 EXPECT_FALSE(manager_->ValidForTarget(
460 GL_TEXTURE_2D_ARRAY, 1, kMaxTextureSize, kMaxTextureSize,
461 kMaxArrayTextureLayers));
462 EXPECT_TRUE(manager_->ValidForTarget(
463 GL_TEXTURE_2D_ARRAY, 1, kMaxTextureSize / 2, kMaxTextureSize / 2,
464 kMaxArrayTextureLayers));
465 EXPECT_TRUE(manager_->ValidForTarget(
466 GL_TEXTURE_2D_ARRAY, kMax2dLevels - 1, 0, 0, kMaxArrayTextureLayers));
467
445 // check cube 468 // check cube
446 EXPECT_TRUE(manager_->ValidForTarget( 469 EXPECT_TRUE(manager_->ValidForTarget(
447 GL_TEXTURE_CUBE_MAP, 0, 470 GL_TEXTURE_CUBE_MAP, 0,
448 kMaxCubeMapTextureSize, kMaxCubeMapTextureSize, 1)); 471 kMaxCubeMapTextureSize, kMaxCubeMapTextureSize, 1));
449 EXPECT_TRUE(manager_->ValidForTarget( 472 EXPECT_TRUE(manager_->ValidForTarget(
450 GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels - 1, 1, 1, 1)); 473 GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels - 1, 1, 1, 1));
451 EXPECT_FALSE(manager_->ValidForTarget( 474 EXPECT_FALSE(manager_->ValidForTarget(
452 GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels - 1, 2, 2, 1)); 475 GL_TEXTURE_CUBE_MAP, kMaxCubeMapLevels - 1, 2, 2, 1));
453 // check level out of range. 476 // check level out of range.
454 EXPECT_FALSE(manager_->ValidForTarget( 477 EXPECT_FALSE(manager_->ValidForTarget(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 TestHelper::SetupFeatureInfoInitExpectations( 515 TestHelper::SetupFeatureInfoInitExpectations(
493 gl_.get(), "GL_OES_texture_npot"); 516 gl_.get(), "GL_OES_texture_npot");
494 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 517 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
495 feature_info->InitializeForTesting(); 518 feature_info->InitializeForTesting();
496 TextureManager manager(NULL, 519 TextureManager manager(NULL,
497 feature_info.get(), 520 feature_info.get(),
498 kMaxTextureSize, 521 kMaxTextureSize,
499 kMaxCubeMapTextureSize, 522 kMaxCubeMapTextureSize,
500 kMaxRectangleTextureSize, 523 kMaxRectangleTextureSize,
501 kMax3DTextureSize, 524 kMax3DTextureSize,
525 kMaxArrayTextureLayers,
502 kUseDefaultTextures); 526 kUseDefaultTextures);
503 // Check NPOT width on level 0 527 // Check NPOT width on level 0
504 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); 528 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1));
505 // Check NPOT height on level 0 529 // Check NPOT height on level 0
506 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); 530 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1));
507 // Check NPOT width on level 1 531 // Check NPOT width on level 1
508 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); 532 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1));
509 // Check NPOT height on level 1 533 // Check NPOT height on level 1
510 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); 534 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1));
511 manager.Destroy(false); 535 manager.Destroy(false);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 583
560 SetupFeatureInfo("", "2.1", false); 584 SetupFeatureInfo("", "2.1", false);
561 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, "", 585 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, "",
562 kUseDefaultTextures); 586 kUseDefaultTextures);
563 TextureManager manager(NULL, 587 TextureManager manager(NULL,
564 feature_info_.get(), 588 feature_info_.get(),
565 kMaxTextureSize, 589 kMaxTextureSize,
566 kMaxCubeMapTextureSize, 590 kMaxCubeMapTextureSize,
567 kMaxRectangleTextureSize, 591 kMaxRectangleTextureSize,
568 kMax3DTextureSize, 592 kMax3DTextureSize,
593 kMaxArrayTextureLayers,
569 kUseDefaultTextures); 594 kUseDefaultTextures);
570 manager.Initialize(); 595 manager.Initialize();
571 596
572 // Create a texture. 597 // Create a texture.
573 manager.CreateTexture(kClientId, kServiceId); 598 manager.CreateTexture(kClientId, kServiceId);
574 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); 599 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId));
575 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); 600 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D);
576 601
577 Texture* texture = texture_ref->texture(); 602 Texture* texture = texture_ref->texture();
578 603
(...skipping 24 matching lines...) Expand all
603 628
604 SetupFeatureInfo("", "4.2", true); 629 SetupFeatureInfo("", "4.2", true);
605 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), true, true, "", 630 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), true, true, "",
606 kUseDefaultTextures); 631 kUseDefaultTextures);
607 TextureManager manager(NULL, 632 TextureManager manager(NULL,
608 feature_info_.get(), 633 feature_info_.get(),
609 kMaxTextureSize, 634 kMaxTextureSize,
610 kMaxCubeMapTextureSize, 635 kMaxCubeMapTextureSize,
611 kMaxRectangleTextureSize, 636 kMaxRectangleTextureSize,
612 kMax3DTextureSize, 637 kMax3DTextureSize,
638 kMaxArrayTextureLayers,
613 kUseDefaultTextures); 639 kUseDefaultTextures);
614 manager.Initialize(); 640 manager.Initialize();
615 641
616 // Create a texture. 642 // Create a texture.
617 manager.CreateTexture(kClientId, kServiceId); 643 manager.CreateTexture(kClientId, kServiceId);
618 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId)); 644 scoped_refptr<TextureRef> texture_ref(manager.GetTexture(kClientId));
619 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D); 645 manager.SetTarget(texture_ref.get(), GL_TEXTURE_2D);
620 646
621 Texture* texture = texture_ref->texture(); 647 Texture* texture = texture_ref->texture();
622 648
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 .Times(1) 721 .Times(1)
696 .RetiresOnSaturation(); 722 .RetiresOnSaturation();
697 manager.RemoveTexture(kClientId); 723 manager.RemoveTexture(kClientId);
698 } 724 }
699 725
700 class TextureTestBase : public GpuServiceTest { 726 class TextureTestBase : public GpuServiceTest {
701 public: 727 public:
702 static const GLint kMaxTextureSize = 32; 728 static const GLint kMaxTextureSize = 32;
703 static const GLint kMaxCubeMapTextureSize = 8; 729 static const GLint kMaxCubeMapTextureSize = 8;
704 static const GLint kMaxRectangleTextureSize = 32; 730 static const GLint kMaxRectangleTextureSize = 32;
705 static const GLint kMax3DTextureSize = 256; 731 static const GLint kMax3DTextureSize = 512;
732 static const GLint kMaxArrayTextureLayers = 256;
706 static const GLint kMax2dLevels = 6; 733 static const GLint kMax2dLevels = 6;
707 static const GLint kMaxCubeMapLevels = 4; 734 static const GLint kMaxCubeMapLevels = 4;
708 static const GLuint kClient1Id = 1; 735 static const GLuint kClient1Id = 1;
709 static const GLuint kService1Id = 11; 736 static const GLuint kService1Id = 11;
710 static const bool kUseDefaultTextures = false; 737 static const bool kUseDefaultTextures = false;
711 738
712 TextureTestBase() 739 TextureTestBase()
713 : feature_info_(new FeatureInfo()) { 740 : feature_info_(new FeatureInfo()) {
714 } 741 }
715 ~TextureTestBase() override { texture_ref_ = NULL; } 742 ~TextureTestBase() override { texture_ref_ = NULL; }
716 743
717 protected: 744 protected:
718 void SetUpBase(MemoryTracker* memory_tracker, const std::string& extensions) { 745 void SetUpBase(MemoryTracker* memory_tracker, const std::string& extensions) {
719 GpuServiceTest::SetUp(); 746 GpuServiceTest::SetUp();
720 if (!extensions.empty()) { 747 if (!extensions.empty()) {
721 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), 748 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(),
722 extensions.c_str()); 749 extensions.c_str());
723 feature_info_->InitializeForTesting(); 750 feature_info_->InitializeForTesting();
724 } 751 }
725 752
726 manager_.reset(new TextureManager(memory_tracker, 753 manager_.reset(new TextureManager(memory_tracker,
727 feature_info_.get(), 754 feature_info_.get(),
728 kMaxTextureSize, 755 kMaxTextureSize,
729 kMaxCubeMapTextureSize, 756 kMaxCubeMapTextureSize,
730 kMaxRectangleTextureSize, 757 kMaxRectangleTextureSize,
731 kMax3DTextureSize, 758 kMax3DTextureSize,
759 kMaxArrayTextureLayers,
732 kUseDefaultTextures)); 760 kUseDefaultTextures));
733 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); 761 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>());
734 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); 762 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
735 manager_->CreateTexture(kClient1Id, kService1Id); 763 manager_->CreateTexture(kClient1Id, kService1Id);
736 texture_ref_ = manager_->GetTexture(kClient1Id); 764 texture_ref_ = manager_->GetTexture(kClient1Id);
737 ASSERT_TRUE(texture_ref_.get() != NULL); 765 ASSERT_TRUE(texture_ref_.get() != NULL);
738 } 766 }
739 767
740 void TearDown() override { 768 void TearDown() override {
741 if (texture_ref_.get()) { 769 if (texture_ref_.get()) {
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 TestHelper::SetupFeatureInfoInitExpectations( 1055 TestHelper::SetupFeatureInfoInitExpectations(
1028 gl_.get(), "GL_OES_texture_npot"); 1056 gl_.get(), "GL_OES_texture_npot");
1029 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1057 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1030 feature_info->InitializeForTesting(); 1058 feature_info->InitializeForTesting();
1031 TextureManager manager(NULL, 1059 TextureManager manager(NULL,
1032 feature_info.get(), 1060 feature_info.get(),
1033 kMaxTextureSize, 1061 kMaxTextureSize,
1034 kMaxCubeMapTextureSize, 1062 kMaxCubeMapTextureSize,
1035 kMaxRectangleTextureSize, 1063 kMaxRectangleTextureSize,
1036 kMax3DTextureSize, 1064 kMax3DTextureSize,
1065 kMaxArrayTextureLayers,
1037 kUseDefaultTextures); 1066 kUseDefaultTextures);
1038 manager.CreateTexture(kClient1Id, kService1Id); 1067 manager.CreateTexture(kClient1Id, kService1Id);
1039 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1068 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1040 ASSERT_TRUE(texture_ref != NULL); 1069 ASSERT_TRUE(texture_ref != NULL);
1041 Texture* texture = texture_ref->texture(); 1070 Texture* texture = texture_ref->texture();
1042 1071
1043 manager.SetTarget(texture_ref, GL_TEXTURE_2D); 1072 manager.SetTarget(texture_ref, GL_TEXTURE_2D);
1044 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); 1073 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
1045 // Check Setting level 0 to NPOT 1074 // Check Setting level 0 to NPOT
1046 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, 1075 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0,
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 TestHelper::SetupFeatureInfoInitExpectations( 1357 TestHelper::SetupFeatureInfoInitExpectations(
1329 gl_.get(), "GL_OES_texture_float"); 1358 gl_.get(), "GL_OES_texture_float");
1330 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1359 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1331 feature_info->InitializeForTesting(); 1360 feature_info->InitializeForTesting();
1332 TextureManager manager(NULL, 1361 TextureManager manager(NULL,
1333 feature_info.get(), 1362 feature_info.get(),
1334 kMaxTextureSize, 1363 kMaxTextureSize,
1335 kMaxCubeMapTextureSize, 1364 kMaxCubeMapTextureSize,
1336 kMaxRectangleTextureSize, 1365 kMaxRectangleTextureSize,
1337 kMax3DTextureSize, 1366 kMax3DTextureSize,
1367 kMaxArrayTextureLayers,
1338 kUseDefaultTextures); 1368 kUseDefaultTextures);
1339 manager.CreateTexture(kClient1Id, kService1Id); 1369 manager.CreateTexture(kClient1Id, kService1Id);
1340 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1370 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1341 ASSERT_TRUE(texture_ref != NULL); 1371 ASSERT_TRUE(texture_ref != NULL);
1342 manager.SetTarget(texture_ref, GL_TEXTURE_2D); 1372 manager.SetTarget(texture_ref, GL_TEXTURE_2D);
1343 Texture* texture = texture_ref->texture(); 1373 Texture* texture = texture_ref->texture();
1344 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); 1374 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
1345 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, 1375 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
1346 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); 1376 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1));
1347 EXPECT_FALSE(manager.CanRender(texture_ref)); 1377 EXPECT_FALSE(manager.CanRender(texture_ref));
(...skipping 12 matching lines...) Expand all
1360 TestHelper::SetupFeatureInfoInitExpectations( 1390 TestHelper::SetupFeatureInfoInitExpectations(
1361 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); 1391 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear");
1362 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1392 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1363 feature_info->InitializeForTesting(); 1393 feature_info->InitializeForTesting();
1364 TextureManager manager(NULL, 1394 TextureManager manager(NULL,
1365 feature_info.get(), 1395 feature_info.get(),
1366 kMaxTextureSize, 1396 kMaxTextureSize,
1367 kMaxCubeMapTextureSize, 1397 kMaxCubeMapTextureSize,
1368 kMaxRectangleTextureSize, 1398 kMaxRectangleTextureSize,
1369 kMax3DTextureSize, 1399 kMax3DTextureSize,
1400 kMaxArrayTextureLayers,
1370 kUseDefaultTextures); 1401 kUseDefaultTextures);
1371 manager.CreateTexture(kClient1Id, kService1Id); 1402 manager.CreateTexture(kClient1Id, kService1Id);
1372 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1403 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1373 ASSERT_TRUE(texture_ref != NULL); 1404 ASSERT_TRUE(texture_ref != NULL);
1374 manager.SetTarget(texture_ref, GL_TEXTURE_2D); 1405 manager.SetTarget(texture_ref, GL_TEXTURE_2D);
1375 Texture* texture = texture_ref->texture(); 1406 Texture* texture = texture_ref->texture();
1376 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); 1407 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
1377 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, 1408 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
1378 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); 1409 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1));
1379 EXPECT_TRUE(manager.CanRender(texture_ref)); 1410 EXPECT_TRUE(manager.CanRender(texture_ref));
1380 manager.Destroy(false); 1411 manager.Destroy(false);
1381 } 1412 }
1382 1413
1383 TEST_F(TextureTest, HalfFloatNotLinear) { 1414 TEST_F(TextureTest, HalfFloatNotLinear) {
1384 TestHelper::SetupFeatureInfoInitExpectations( 1415 TestHelper::SetupFeatureInfoInitExpectations(
1385 gl_.get(), "GL_OES_texture_half_float"); 1416 gl_.get(), "GL_OES_texture_half_float");
1386 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1417 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1387 feature_info->InitializeForTesting(); 1418 feature_info->InitializeForTesting();
1388 TextureManager manager(NULL, 1419 TextureManager manager(NULL,
1389 feature_info.get(), 1420 feature_info.get(),
1390 kMaxTextureSize, 1421 kMaxTextureSize,
1391 kMaxCubeMapTextureSize, 1422 kMaxCubeMapTextureSize,
1392 kMaxRectangleTextureSize, 1423 kMaxRectangleTextureSize,
1393 kMax3DTextureSize, 1424 kMax3DTextureSize,
1425 kMaxArrayTextureLayers,
1394 kUseDefaultTextures); 1426 kUseDefaultTextures);
1395 manager.CreateTexture(kClient1Id, kService1Id); 1427 manager.CreateTexture(kClient1Id, kService1Id);
1396 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1428 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1397 ASSERT_TRUE(texture_ref != NULL); 1429 ASSERT_TRUE(texture_ref != NULL);
1398 manager.SetTarget(texture_ref, GL_TEXTURE_2D); 1430 manager.SetTarget(texture_ref, GL_TEXTURE_2D);
1399 Texture* texture = texture_ref->texture(); 1431 Texture* texture = texture_ref->texture();
1400 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); 1432 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
1401 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, 1433 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
1402 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); 1434 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1));
1403 EXPECT_FALSE(manager.CanRender(texture_ref)); 1435 EXPECT_FALSE(manager.CanRender(texture_ref));
(...skipping 12 matching lines...) Expand all
1416 TestHelper::SetupFeatureInfoInitExpectations( 1448 TestHelper::SetupFeatureInfoInitExpectations(
1417 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); 1449 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear");
1418 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1450 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1419 feature_info->InitializeForTesting(); 1451 feature_info->InitializeForTesting();
1420 TextureManager manager(NULL, 1452 TextureManager manager(NULL,
1421 feature_info.get(), 1453 feature_info.get(),
1422 kMaxTextureSize, 1454 kMaxTextureSize,
1423 kMaxCubeMapTextureSize, 1455 kMaxCubeMapTextureSize,
1424 kMaxRectangleTextureSize, 1456 kMaxRectangleTextureSize,
1425 kMax3DTextureSize, 1457 kMax3DTextureSize,
1458 kMaxArrayTextureLayers,
1426 kUseDefaultTextures); 1459 kUseDefaultTextures);
1427 manager.CreateTexture(kClient1Id, kService1Id); 1460 manager.CreateTexture(kClient1Id, kService1Id);
1428 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1461 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1429 ASSERT_TRUE(texture_ref != NULL); 1462 ASSERT_TRUE(texture_ref != NULL);
1430 manager.SetTarget(texture_ref, GL_TEXTURE_2D); 1463 manager.SetTarget(texture_ref, GL_TEXTURE_2D);
1431 Texture* texture = texture_ref->texture(); 1464 Texture* texture = texture_ref->texture();
1432 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); 1465 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
1433 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, 1466 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
1434 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); 1467 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1));
1435 EXPECT_TRUE(manager.CanRender(texture_ref)); 1468 EXPECT_TRUE(manager.CanRender(texture_ref));
1436 manager.Destroy(false); 1469 manager.Destroy(false);
1437 } 1470 }
1438 1471
1439 TEST_F(TextureTest, EGLImageExternal) { 1472 TEST_F(TextureTest, EGLImageExternal) {
1440 TestHelper::SetupFeatureInfoInitExpectations( 1473 TestHelper::SetupFeatureInfoInitExpectations(
1441 gl_.get(), "GL_OES_EGL_image_external"); 1474 gl_.get(), "GL_OES_EGL_image_external");
1442 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1475 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1443 feature_info->InitializeForTesting(); 1476 feature_info->InitializeForTesting();
1444 TextureManager manager(NULL, 1477 TextureManager manager(NULL,
1445 feature_info.get(), 1478 feature_info.get(),
1446 kMaxTextureSize, 1479 kMaxTextureSize,
1447 kMaxCubeMapTextureSize, 1480 kMaxCubeMapTextureSize,
1448 kMaxRectangleTextureSize, 1481 kMaxRectangleTextureSize,
1449 kMax3DTextureSize, 1482 kMax3DTextureSize,
1483 kMaxArrayTextureLayers,
1450 kUseDefaultTextures); 1484 kUseDefaultTextures);
1451 manager.CreateTexture(kClient1Id, kService1Id); 1485 manager.CreateTexture(kClient1Id, kService1Id);
1452 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1486 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1453 ASSERT_TRUE(texture_ref != NULL); 1487 ASSERT_TRUE(texture_ref != NULL);
1454 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); 1488 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES);
1455 Texture* texture = texture_ref->texture(); 1489 Texture* texture = texture_ref->texture();
1456 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); 1490 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target());
1457 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); 1491 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref));
1458 manager.Destroy(false); 1492 manager.Destroy(false);
1459 } 1493 }
1460 1494
1461 TEST_F(TextureTest, DepthTexture) { 1495 TEST_F(TextureTest, DepthTexture) {
1462 TestHelper::SetupFeatureInfoInitExpectations( 1496 TestHelper::SetupFeatureInfoInitExpectations(
1463 gl_.get(), "GL_ANGLE_depth_texture"); 1497 gl_.get(), "GL_ANGLE_depth_texture");
1464 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1498 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1465 feature_info->InitializeForTesting(); 1499 feature_info->InitializeForTesting();
1466 TextureManager manager(NULL, 1500 TextureManager manager(NULL,
1467 feature_info.get(), 1501 feature_info.get(),
1468 kMaxTextureSize, 1502 kMaxTextureSize,
1469 kMaxCubeMapTextureSize, 1503 kMaxCubeMapTextureSize,
1470 kMaxRectangleTextureSize, 1504 kMaxRectangleTextureSize,
1471 kMax3DTextureSize, 1505 kMax3DTextureSize,
1506 kMaxArrayTextureLayers,
1472 kUseDefaultTextures); 1507 kUseDefaultTextures);
1473 manager.CreateTexture(kClient1Id, kService1Id); 1508 manager.CreateTexture(kClient1Id, kService1Id);
1474 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1509 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1475 ASSERT_TRUE(texture_ref != NULL); 1510 ASSERT_TRUE(texture_ref != NULL);
1476 manager.SetTarget(texture_ref, GL_TEXTURE_2D); 1511 manager.SetTarget(texture_ref, GL_TEXTURE_2D);
1477 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1512 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4,
1478 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect()); 1513 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect());
1479 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); 1514 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref));
1480 manager.Destroy(false); 1515 manager.Destroy(false);
1481 } 1516 }
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after
2168 void SetUp() override { 2203 void SetUp() override {
2169 GpuServiceTest::SetUp(); 2204 GpuServiceTest::SetUp();
2170 memory_tracker1_ = new CountingMemoryTracker; 2205 memory_tracker1_ = new CountingMemoryTracker;
2171 texture_manager1_.reset( 2206 texture_manager1_.reset(
2172 new TextureManager(memory_tracker1_.get(), 2207 new TextureManager(memory_tracker1_.get(),
2173 feature_info_.get(), 2208 feature_info_.get(),
2174 TextureManagerTest::kMaxTextureSize, 2209 TextureManagerTest::kMaxTextureSize,
2175 TextureManagerTest::kMaxCubeMapTextureSize, 2210 TextureManagerTest::kMaxCubeMapTextureSize,
2176 TextureManagerTest::kMaxRectangleTextureSize, 2211 TextureManagerTest::kMaxRectangleTextureSize,
2177 TextureManagerTest::kMax3DTextureSize, 2212 TextureManagerTest::kMax3DTextureSize,
2213 TextureManagerTest::kMaxArrayTextureLayers,
2178 kUseDefaultTextures)); 2214 kUseDefaultTextures));
2179 memory_tracker2_ = new CountingMemoryTracker; 2215 memory_tracker2_ = new CountingMemoryTracker;
2180 texture_manager2_.reset( 2216 texture_manager2_.reset(
2181 new TextureManager(memory_tracker2_.get(), 2217 new TextureManager(memory_tracker2_.get(),
2182 feature_info_.get(), 2218 feature_info_.get(),
2183 TextureManagerTest::kMaxTextureSize, 2219 TextureManagerTest::kMaxTextureSize,
2184 TextureManagerTest::kMaxCubeMapTextureSize, 2220 TextureManagerTest::kMaxCubeMapTextureSize,
2185 TextureManagerTest::kMaxRectangleTextureSize, 2221 TextureManagerTest::kMaxRectangleTextureSize,
2186 TextureManagerTest::kMax3DTextureSize, 2222 TextureManagerTest::kMax3DTextureSize,
2223 TextureManagerTest::kMaxArrayTextureLayers,
2187 kUseDefaultTextures)); 2224 kUseDefaultTextures));
2188 TestHelper::SetupTextureManagerInitExpectations( 2225 TestHelper::SetupTextureManagerInitExpectations(
2189 gl_.get(), false, false, "", kUseDefaultTextures); 2226 gl_.get(), false, false, "", kUseDefaultTextures);
2190 texture_manager1_->Initialize(); 2227 texture_manager1_->Initialize();
2191 TestHelper::SetupTextureManagerInitExpectations( 2228 TestHelper::SetupTextureManagerInitExpectations(
2192 gl_.get(), false, false, "", kUseDefaultTextures); 2229 gl_.get(), false, false, "", kUseDefaultTextures);
2193 texture_manager2_->Initialize(); 2230 texture_manager2_->Initialize();
2194 } 2231 }
2195 2232
2196 void TearDown() override { 2233 void TearDown() override {
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
2682 ExpectValid( 2719 ExpectValid(
2683 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); 2720 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8);
2684 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, 2721 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV,
2685 GL_DEPTH32F_STENCIL8); 2722 GL_DEPTH32F_STENCIL8);
2686 2723
2687 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); 2724 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8);
2688 } 2725 }
2689 2726
2690 } // namespace gles2 2727 } // namespace gles2
2691 } // namespace gpu 2728 } // namespace gpu
OLDNEW
« 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