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

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

Issue 12647003: Refactor a bunch of Texture related GPU code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 | Annotate | Revision Log
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/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include "base/atomicops.h" 7 #include "base/atomicops.h"
8 #include "gpu/command_buffer/common/gles2_cmd_format.h" 8 #include "gpu/command_buffer/common/gles2_cmd_format.h"
9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
10 #include "gpu/command_buffer/common/id_allocator.h" 10 #include "gpu/command_buffer/common/id_allocator.h"
(...skipping 1803 matching lines...) Expand 10 before | Expand all | Expand 10 after
1814 0, 0); 1814 0, 0);
1815 GenerateMipmap cmd; 1815 GenerateMipmap cmd;
1816 cmd.Init(GL_TEXTURE_2D); 1816 cmd.Init(GL_TEXTURE_2D);
1817 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1817 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1818 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 1818 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
1819 } 1819 }
1820 1820
1821 TEST_F(GLES2DecoderTest, GenerateMipmapHandlesOutOfMemory) { 1821 TEST_F(GLES2DecoderTest, GenerateMipmapHandlesOutOfMemory) {
1822 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 1822 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
1823 TextureManager* manager = group().texture_manager(); 1823 TextureManager* manager = group().texture_manager();
1824 Texture* info = 1824 Texture* texture = manager->GetTexture(client_texture_id_);
1825 manager->GetTexture(client_texture_id_); 1825 ASSERT_TRUE(texture != NULL);
1826 ASSERT_TRUE(info != NULL);
1827 GLint width = 0; 1826 GLint width = 0;
1828 GLint height = 0; 1827 GLint height = 0;
1829 EXPECT_FALSE(info->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height)); 1828 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height));
1830 DoTexImage2D( 1829 DoTexImage2D(
1831 GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 1830 GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE,
1832 kSharedMemoryId, kSharedMemoryOffset); 1831 kSharedMemoryId, kSharedMemoryOffset);
1833 EXPECT_CALL(*gl_, TexParameteri( 1832 EXPECT_CALL(*gl_, TexParameteri(
1834 GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST)) 1833 GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST))
1835 .Times(1) 1834 .Times(1)
1836 .RetiresOnSaturation(); 1835 .RetiresOnSaturation();
1837 EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D)) 1836 EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D))
1838 .Times(1); 1837 .Times(1);
1839 EXPECT_CALL(*gl_, TexParameteri( 1838 EXPECT_CALL(*gl_, TexParameteri(
1840 GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR)) 1839 GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR))
1841 .Times(1) 1840 .Times(1)
1842 .RetiresOnSaturation(); 1841 .RetiresOnSaturation();
1843 EXPECT_CALL(*gl_, GetError()) 1842 EXPECT_CALL(*gl_, GetError())
1844 .WillOnce(Return(GL_NO_ERROR)) 1843 .WillOnce(Return(GL_NO_ERROR))
1845 .WillOnce(Return(GL_OUT_OF_MEMORY)) 1844 .WillOnce(Return(GL_OUT_OF_MEMORY))
1846 .RetiresOnSaturation(); 1845 .RetiresOnSaturation();
1847 GenerateMipmap cmd; 1846 GenerateMipmap cmd;
1848 cmd.Init(GL_TEXTURE_2D); 1847 cmd.Init(GL_TEXTURE_2D);
1849 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1848 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1850 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 1849 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
1851 EXPECT_FALSE(info->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height)); 1850 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height));
1852 } 1851 }
1853 1852
1854 TEST_F(GLES2DecoderTest, GenerateMipmapClearsUnclearedTexture) { 1853 TEST_F(GLES2DecoderTest, GenerateMipmapClearsUnclearedTexture) {
1855 EXPECT_CALL(*gl_, GenerateMipmapEXT(_)) 1854 EXPECT_CALL(*gl_, GenerateMipmapEXT(_))
1856 .Times(0); 1855 .Times(0);
1857 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 1856 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
1858 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 1857 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
1859 0, 0); 1858 0, 0);
1860 SetupClearTextureExpections( 1859 SetupClearTextureExpections(
1861 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D, 1860 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
(...skipping 2857 matching lines...) Expand 10 before | Expand all | Expand 10 after
4719 GLenum target = GL_TEXTURE_2D; 4718 GLenum target = GL_TEXTURE_2D;
4720 GLint level = 0; 4719 GLint level = 0;
4721 GLenum internal_format = GL_RGBA; 4720 GLenum internal_format = GL_RGBA;
4722 GLsizei width = 2; 4721 GLsizei width = 2;
4723 GLsizei height = 4; 4722 GLsizei height = 4;
4724 GLint border = 0; 4723 GLint border = 0;
4725 GLenum format = GL_RGBA; 4724 GLenum format = GL_RGBA;
4726 GLenum type = GL_UNSIGNED_BYTE; 4725 GLenum type = GL_UNSIGNED_BYTE;
4727 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 4726 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4728 TextureManager* manager = group().texture_manager(); 4727 TextureManager* manager = group().texture_manager();
4729 Texture* info = 4728 Texture* texture = manager->GetTexture(client_texture_id_);
4730 manager->GetTexture(client_texture_id_); 4729 ASSERT_TRUE(texture != NULL);
4731 ASSERT_TRUE(info != NULL); 4730 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
4732 EXPECT_FALSE(info->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
4733 EXPECT_CALL(*gl_, GetError()) 4731 EXPECT_CALL(*gl_, GetError())
4734 .WillOnce(Return(GL_NO_ERROR)) 4732 .WillOnce(Return(GL_NO_ERROR))
4735 .WillOnce(Return(GL_OUT_OF_MEMORY)) 4733 .WillOnce(Return(GL_OUT_OF_MEMORY))
4736 .RetiresOnSaturation(); 4734 .RetiresOnSaturation();
4737 EXPECT_CALL(*gl_, TexImage2D(target, level, internal_format, 4735 EXPECT_CALL(*gl_, TexImage2D(target, level, internal_format,
4738 width, height, border, format, type, _)) 4736 width, height, border, format, type, _))
4739 .Times(1) 4737 .Times(1)
4740 .RetiresOnSaturation(); 4738 .RetiresOnSaturation();
4741 TexImage2D cmd; 4739 TexImage2D cmd;
4742 cmd.Init(target, level, internal_format, width, height, border, format, 4740 cmd.Init(target, level, internal_format, width, height, border, format,
4743 type, kSharedMemoryId, kSharedMemoryOffset); 4741 type, kSharedMemoryId, kSharedMemoryOffset);
4744 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4742 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4745 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 4743 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
4746 EXPECT_FALSE(info->GetLevelSize(GL_TEXTURE_2D, level, &width, &height)); 4744 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
4747 } 4745 }
4748 4746
4749 TEST_F(GLES2DecoderTest, BufferDataGLError) { 4747 TEST_F(GLES2DecoderTest, BufferDataGLError) {
4750 GLenum target = GL_ARRAY_BUFFER; 4748 GLenum target = GL_ARRAY_BUFFER;
4751 GLsizeiptr size = 4; 4749 GLsizeiptr size = 4;
4752 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId); 4750 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
4753 BufferManager* manager = group().buffer_manager(); 4751 BufferManager* manager = group().buffer_manager();
4754 Buffer* info = 4752 Buffer* info =
4755 manager->GetBuffer(client_buffer_id_); 4753 manager->GetBuffer(client_buffer_id_);
4756 ASSERT_TRUE(info != NULL); 4754 ASSERT_TRUE(info != NULL);
(...skipping 14 matching lines...) Expand all
4771 4769
4772 TEST_F(GLES2DecoderTest, CopyTexImage2DGLError) { 4770 TEST_F(GLES2DecoderTest, CopyTexImage2DGLError) {
4773 GLenum target = GL_TEXTURE_2D; 4771 GLenum target = GL_TEXTURE_2D;
4774 GLint level = 0; 4772 GLint level = 0;
4775 GLenum internal_format = GL_RGBA; 4773 GLenum internal_format = GL_RGBA;
4776 GLsizei width = 2; 4774 GLsizei width = 2;
4777 GLsizei height = 4; 4775 GLsizei height = 4;
4778 GLint border = 0; 4776 GLint border = 0;
4779 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 4777 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4780 TextureManager* manager = group().texture_manager(); 4778 TextureManager* manager = group().texture_manager();
4781 Texture* info = 4779 Texture* texture = manager->GetTexture(client_texture_id_);
4782 manager->GetTexture(client_texture_id_); 4780 ASSERT_TRUE(texture != NULL);
4783 ASSERT_TRUE(info != NULL); 4781 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
4784 EXPECT_FALSE(info->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
4785 EXPECT_CALL(*gl_, GetError()) 4782 EXPECT_CALL(*gl_, GetError())
4786 .WillOnce(Return(GL_NO_ERROR)) 4783 .WillOnce(Return(GL_NO_ERROR))
4787 .WillOnce(Return(GL_OUT_OF_MEMORY)) 4784 .WillOnce(Return(GL_OUT_OF_MEMORY))
4788 .RetiresOnSaturation(); 4785 .RetiresOnSaturation();
4789 EXPECT_CALL(*gl_, CopyTexImage2D( 4786 EXPECT_CALL(*gl_, CopyTexImage2D(
4790 target, level, internal_format, 0, 0, width, height, border)) 4787 target, level, internal_format, 0, 0, width, height, border))
4791 .Times(1) 4788 .Times(1)
4792 .RetiresOnSaturation(); 4789 .RetiresOnSaturation();
4793 CopyTexImage2D cmd; 4790 CopyTexImage2D cmd;
4794 cmd.Init(target, level, internal_format, 0, 0, width, height, border); 4791 cmd.Init(target, level, internal_format, 0, 0, width, height, border);
4795 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4792 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4796 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 4793 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
4797 EXPECT_FALSE(info->GetLevelSize(GL_TEXTURE_2D, level, &width, &height)); 4794 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
4798 } 4795 }
4799 4796
4800 TEST_F(GLES2DecoderTest, FramebufferRenderbufferGLError) { 4797 TEST_F(GLES2DecoderTest, FramebufferRenderbufferGLError) {
4801 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 4798 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
4802 kServiceFramebufferId); 4799 kServiceFramebufferId);
4803 EXPECT_CALL(*gl_, GetError()) 4800 EXPECT_CALL(*gl_, GetError())
4804 .WillOnce(Return(GL_NO_ERROR)) 4801 .WillOnce(Return(GL_NO_ERROR))
4805 .WillOnce(Return(GL_OUT_OF_MEMORY)) 4802 .WillOnce(Return(GL_OUT_OF_MEMORY))
4806 .RetiresOnSaturation(); 4803 .RetiresOnSaturation();
4807 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 4804 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
5303 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5300 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5304 5301
5305 // Test CompressedTexSubImage not allowed 5302 // Test CompressedTexSubImage not allowed
5306 CompressedTexSubImage2DBucket sub_cmd; 5303 CompressedTexSubImage2DBucket sub_cmd;
5307 bucket->SetSize(kBlockSize); 5304 bucket->SetSize(kBlockSize);
5308 sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 4, kFormat, kBucketId); 5305 sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 4, kFormat, kBucketId);
5309 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd)); 5306 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
5310 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5307 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5311 5308
5312 // Test TexSubImage not allowed for ETC1 compressed texture 5309 // Test TexSubImage not allowed for ETC1 compressed texture
5313 Texture* info = GetTexture(client_texture_id_); 5310 Texture* texture = GetTexture(client_texture_id_);
5314 ASSERT_TRUE(info != NULL); 5311 ASSERT_TRUE(texture != NULL);
5315 GLenum type, internal_format; 5312 GLenum type, internal_format;
5316 EXPECT_TRUE(info->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); 5313 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
5317 EXPECT_EQ(kFormat, internal_format); 5314 EXPECT_EQ(kFormat, internal_format);
5318 TexSubImage2D texsub_cmd; 5315 TexSubImage2D texsub_cmd;
5319 texsub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE, 5316 texsub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE,
5320 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); 5317 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
5321 EXPECT_EQ(error::kNoError, ExecuteCmd(texsub_cmd)); 5318 EXPECT_EQ(error::kNoError, ExecuteCmd(texsub_cmd));
5322 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5319 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5323 5320
5324 // Test CopyTexSubImage not allowed for ETC1 compressed texture 5321 // Test CopyTexSubImage not allowed for ETC1 compressed texture
5325 CopyTexSubImage2D copy_cmd; 5322 CopyTexSubImage2D copy_cmd;
5326 copy_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4); 5323 copy_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
5413 false, // request depth 5410 false, // request depth
5414 false, // request stencil 5411 false, // request stencil
5415 true); // bind generates resource 5412 true); // bind generates resource
5416 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kNewServiceId)); 5413 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kNewServiceId));
5417 EXPECT_CALL(*gl_, GenTextures(1, _)) 5414 EXPECT_CALL(*gl_, GenTextures(1, _))
5418 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); 5415 .WillOnce(SetArgumentPointee<1>(kNewServiceId));
5419 BindTexture cmd; 5416 BindTexture cmd;
5420 cmd.Init(GL_TEXTURE_EXTERNAL_OES, kNewClientId); 5417 cmd.Init(GL_TEXTURE_EXTERNAL_OES, kNewClientId);
5421 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5418 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5422 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5419 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5423 Texture* info = GetTexture(kNewClientId); 5420 Texture* texture = GetTexture(kNewClientId);
5424 EXPECT_TRUE(info != NULL); 5421 EXPECT_TRUE(texture != NULL);
5425 EXPECT_TRUE(info->target() == GL_TEXTURE_EXTERNAL_OES); 5422 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
5426 } 5423 }
5427 5424
5428 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalGetBinding) { 5425 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalGetBinding) {
5429 InitDecoder( 5426 InitDecoder(
5430 "GL_OES_EGL_image_external", // extensions 5427 "GL_OES_EGL_image_external", // extensions
5431 false, // has alpha 5428 false, // has alpha
5432 false, // has depth 5429 false, // has depth
5433 false, // has stencil 5430 false, // has stencil
5434 false, // request alpha 5431 false, // request alpha
5435 false, // request depth 5432 false, // request depth
(...skipping 27 matching lines...) Expand all
5463 "GL_OES_EGL_image_external", // extensions 5460 "GL_OES_EGL_image_external", // extensions
5464 false, // has alpha 5461 false, // has alpha
5465 false, // has depth 5462 false, // has depth
5466 false, // has stencil 5463 false, // has stencil
5467 false, // request alpha 5464 false, // request alpha
5468 false, // request depth 5465 false, // request depth
5469 false, // request stencil 5466 false, // request stencil
5470 true); // bind generates resource 5467 true); // bind generates resource
5471 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId); 5468 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5472 5469
5473 Texture* info = GetTexture(client_texture_id_); 5470 Texture* texture = GetTexture(client_texture_id_);
5474 EXPECT_TRUE(info != NULL); 5471 EXPECT_TRUE(texture != NULL);
5475 EXPECT_TRUE(info->target() == GL_TEXTURE_EXTERNAL_OES); 5472 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
5476 EXPECT_TRUE(info->min_filter() == GL_LINEAR); 5473 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
5477 EXPECT_TRUE(info->wrap_s() == GL_CLAMP_TO_EDGE); 5474 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
5478 EXPECT_TRUE(info->wrap_t() == GL_CLAMP_TO_EDGE); 5475 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
5479 } 5476 }
5480 5477
5481 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParam) { 5478 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParam) {
5482 InitDecoder( 5479 InitDecoder(
5483 "GL_OES_EGL_image_external", // extensions 5480 "GL_OES_EGL_image_external", // extensions
5484 false, // has alpha 5481 false, // has alpha
5485 false, // has depth 5482 false, // has depth
5486 false, // has stencil 5483 false, // has stencil
5487 false, // request alpha 5484 false, // request alpha
5488 false, // request depth 5485 false, // request depth
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
5521 GL_CLAMP_TO_EDGE); 5518 GL_CLAMP_TO_EDGE);
5522 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5519 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5523 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5520 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5524 5521
5525 cmd.Init(GL_TEXTURE_EXTERNAL_OES, 5522 cmd.Init(GL_TEXTURE_EXTERNAL_OES,
5526 GL_TEXTURE_WRAP_T, 5523 GL_TEXTURE_WRAP_T,
5527 GL_CLAMP_TO_EDGE); 5524 GL_CLAMP_TO_EDGE);
5528 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5525 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5529 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5526 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5530 5527
5531 Texture* info = GetTexture(client_texture_id_); 5528 Texture* texture = GetTexture(client_texture_id_);
5532 EXPECT_TRUE(info != NULL); 5529 EXPECT_TRUE(texture != NULL);
5533 EXPECT_TRUE(info->target() == GL_TEXTURE_EXTERNAL_OES); 5530 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
5534 EXPECT_TRUE(info->min_filter() == GL_LINEAR); 5531 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
5535 EXPECT_TRUE(info->wrap_s() == GL_CLAMP_TO_EDGE); 5532 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
5536 EXPECT_TRUE(info->wrap_t() == GL_CLAMP_TO_EDGE); 5533 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
5537 } 5534 }
5538 5535
5539 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParamInvalid) { 5536 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParamInvalid) {
5540 InitDecoder( 5537 InitDecoder(
5541 "GL_OES_EGL_image_external", // extensions 5538 "GL_OES_EGL_image_external", // extensions
5542 false, // has alpha 5539 false, // has alpha
5543 false, // has depth 5540 false, // has depth
5544 false, // has stencil 5541 false, // has stencil
5545 false, // request alpha 5542 false, // request alpha
5546 false, // request depth 5543 false, // request depth
(...skipping 14 matching lines...) Expand all
5561 GL_REPEAT); 5558 GL_REPEAT);
5562 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5559 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5563 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 5560 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
5564 5561
5565 cmd.Init(GL_TEXTURE_EXTERNAL_OES, 5562 cmd.Init(GL_TEXTURE_EXTERNAL_OES,
5566 GL_TEXTURE_WRAP_T, 5563 GL_TEXTURE_WRAP_T,
5567 GL_REPEAT); 5564 GL_REPEAT);
5568 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5565 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5569 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 5566 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
5570 5567
5571 Texture* info = GetTexture(client_texture_id_); 5568 Texture* texture = GetTexture(client_texture_id_);
5572 EXPECT_TRUE(info != NULL); 5569 EXPECT_TRUE(texture != NULL);
5573 EXPECT_TRUE(info->target() == GL_TEXTURE_EXTERNAL_OES); 5570 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
5574 EXPECT_TRUE(info->min_filter() == GL_LINEAR); 5571 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
5575 EXPECT_TRUE(info->wrap_s() == GL_CLAMP_TO_EDGE); 5572 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
5576 EXPECT_TRUE(info->wrap_t() == GL_CLAMP_TO_EDGE); 5573 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
5577 } 5574 }
5578 5575
5579 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTexImage2DError) { 5576 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTexImage2DError) {
5580 InitDecoder( 5577 InitDecoder(
5581 "GL_OES_EGL_image_external", // extensions 5578 "GL_OES_EGL_image_external", // extensions
5582 false, // has alpha 5579 false, // has alpha
5583 false, // has depth 5580 false, // has depth
5584 false, // has stencil 5581 false, // has stencil
5585 false, // request alpha 5582 false, // request alpha
5586 false, // request depth 5583 false, // request depth
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
5654 .WillOnce(Return(kObjectId)) 5651 .WillOnce(Return(kObjectId))
5655 .RetiresOnSaturation(); 5652 .RetiresOnSaturation();
5656 5653
5657 CreateStreamTextureCHROMIUM cmd; 5654 CreateStreamTextureCHROMIUM cmd;
5658 CreateStreamTextureCHROMIUM::Result* result = 5655 CreateStreamTextureCHROMIUM::Result* result =
5659 static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_); 5656 static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_);
5660 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_); 5657 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
5661 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5658 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5662 EXPECT_EQ(kObjectId, *result); 5659 EXPECT_EQ(kObjectId, *result);
5663 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5660 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5664 Texture* info = GetTexture(client_texture_id_); 5661 Texture* texture = GetTexture(client_texture_id_);
5665 EXPECT_TRUE(info != NULL); 5662 EXPECT_TRUE(texture != NULL);
5666 EXPECT_TRUE(info->IsStreamTexture()); 5663 EXPECT_TRUE(texture->IsStreamTexture());
5667 } 5664 }
5668 5665
5669 TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMBadId) { 5666 TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMBadId) {
5670 InitDecoder( 5667 InitDecoder(
5671 "GL_CHROMIUM_stream_texture", // extensions 5668 "GL_CHROMIUM_stream_texture", // extensions
5672 false, // has alpha 5669 false, // has alpha
5673 false, // has depth 5670 false, // has depth
5674 false, // has stencil 5671 false, // has stencil
5675 false, // request alpha 5672 false, // request alpha
5676 false, // request depth 5673 false, // request depth
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
5711 InitDecoder( 5708 InitDecoder(
5712 "GL_CHROMIUM_stream_texture", // extensions 5709 "GL_CHROMIUM_stream_texture", // extensions
5713 false, // has alpha 5710 false, // has alpha
5714 false, // has depth 5711 false, // has depth
5715 false, // has stencil 5712 false, // has stencil
5716 false, // request alpha 5713 false, // request alpha
5717 false, // request depth 5714 false, // request depth
5718 false, // request stencil 5715 false, // request stencil
5719 true); // bind generates resource 5716 true); // bind generates resource
5720 5717
5721 Texture* info = GetTexture(client_texture_id_); 5718 Texture* texture = GetTexture(client_texture_id_);
5722 info->SetStreamTexture(true); 5719 texture->SetStreamTexture(true);
5723 5720
5724 CreateStreamTextureCHROMIUM cmd; 5721 CreateStreamTextureCHROMIUM cmd;
5725 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_); 5722 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
5726 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5723 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5727 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5724 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5728 } 5725 }
5729 5726
5730 TEST_F(GLES2DecoderManualInitTest, BindStreamTextureCHROMIUM) { 5727 TEST_F(GLES2DecoderManualInitTest, BindStreamTextureCHROMIUM) {
5731 InitDecoder( 5728 InitDecoder(
5732 "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions 5729 "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
5733 false, // has alpha 5730 false, // has alpha
5734 false, // has depth 5731 false, // has depth
5735 false, // has stencil 5732 false, // has stencil
5736 false, // request alpha 5733 false, // request alpha
5737 false, // request depth 5734 false, // request depth
5738 false, // request stencil 5735 false, // request stencil
5739 true); // bind generates resource 5736 true); // bind generates resource
5740 5737
5741 StrictMock<MockStreamTextureManager> manager; 5738 StrictMock<MockStreamTextureManager> manager;
5742 StrictMock<MockStreamTexture> texture; 5739 StrictMock<MockStreamTexture> stream_texture;
5743 decoder_->SetStreamTextureManager(&manager); 5740 decoder_->SetStreamTextureManager(&manager);
5744 5741
5745 Texture* info = GetTexture(client_texture_id_); 5742 Texture* texture = GetTexture(client_texture_id_);
5746 info->SetStreamTexture(true); 5743 texture->SetStreamTexture(true);
5747 5744
5748 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kServiceTextureId)) 5745 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kServiceTextureId))
5749 .Times(1) 5746 .Times(1)
5750 .RetiresOnSaturation(); 5747 .RetiresOnSaturation();
5751 EXPECT_CALL(manager, LookupStreamTexture(kServiceTextureId)) 5748 EXPECT_CALL(manager, LookupStreamTexture(kServiceTextureId))
5752 .WillOnce(Return(&texture)) 5749 .WillOnce(Return(&stream_texture))
5753 .RetiresOnSaturation(); 5750 .RetiresOnSaturation();
5754 EXPECT_CALL(texture, Update()) 5751 EXPECT_CALL(stream_texture, Update())
5755 .Times(1) 5752 .Times(1)
5756 .RetiresOnSaturation(); 5753 .RetiresOnSaturation();
5757 5754
5758 BindTexture cmd; 5755 BindTexture cmd;
5759 cmd.Init(GL_TEXTURE_EXTERNAL_OES, client_texture_id_); 5756 cmd.Init(GL_TEXTURE_EXTERNAL_OES, client_texture_id_);
5760 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5757 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5761 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5758 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5762 } 5759 }
5763 5760
5764 TEST_F(GLES2DecoderManualInitTest, BindStreamTextureCHROMIUMInvalid) { 5761 TEST_F(GLES2DecoderManualInitTest, BindStreamTextureCHROMIUMInvalid) {
5765 InitDecoder( 5762 InitDecoder(
5766 "GL_CHROMIUM_stream_texture", // extensions 5763 "GL_CHROMIUM_stream_texture", // extensions
5767 false, // has alpha 5764 false, // has alpha
5768 false, // has depth 5765 false, // has depth
5769 false, // has stencil 5766 false, // has stencil
5770 false, // request alpha 5767 false, // request alpha
5771 false, // request depth 5768 false, // request depth
5772 false, // request stencil 5769 false, // request stencil
5773 true); // bind generates resource 5770 true); // bind generates resource
5774 5771
5775 Texture* info = GetTexture(client_texture_id_); 5772 Texture* texture = GetTexture(client_texture_id_);
5776 info->SetStreamTexture(true); 5773 texture->SetStreamTexture(true);
5777 5774
5778 BindTexture cmd; 5775 BindTexture cmd;
5779 cmd.Init(GL_TEXTURE_2D, client_texture_id_); 5776 cmd.Init(GL_TEXTURE_2D, client_texture_id_);
5780 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5777 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5781 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5778 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5782 5779
5783 BindTexture cmd2; 5780 BindTexture cmd2;
5784 cmd2.Init(GL_TEXTURE_CUBE_MAP, client_texture_id_); 5781 cmd2.Init(GL_TEXTURE_CUBE_MAP, client_texture_id_);
5785 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 5782 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
5786 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5783 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5787 } 5784 }
5788 5785
5789 TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUM) { 5786 TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUM) {
5790 InitDecoder( 5787 InitDecoder(
5791 "GL_CHROMIUM_stream_texture", // extensions 5788 "GL_CHROMIUM_stream_texture", // extensions
5792 false, // has alpha 5789 false, // has alpha
5793 false, // has depth 5790 false, // has depth
5794 false, // has stencil 5791 false, // has stencil
5795 false, // request alpha 5792 false, // request alpha
5796 false, // request depth 5793 false, // request depth
5797 false, // request stencil 5794 false, // request stencil
5798 true); // bind generates resource 5795 true); // bind generates resource
5799 5796
5800 StrictMock<MockStreamTextureManager> manager; 5797 StrictMock<MockStreamTextureManager> manager;
5801 decoder_->SetStreamTextureManager(&manager); 5798 decoder_->SetStreamTextureManager(&manager);
5802 5799
5803 Texture* info = GetTexture(client_texture_id_); 5800 Texture* texture = GetTexture(client_texture_id_);
5804 info->SetStreamTexture(true); 5801 texture->SetStreamTexture(true);
5805 5802
5806 EXPECT_CALL(manager, DestroyStreamTexture(kServiceTextureId)) 5803 EXPECT_CALL(manager, DestroyStreamTexture(kServiceTextureId))
5807 .Times(1) 5804 .Times(1)
5808 .RetiresOnSaturation(); 5805 .RetiresOnSaturation();
5809 5806
5810 DestroyStreamTextureCHROMIUM cmd; 5807 DestroyStreamTextureCHROMIUM cmd;
5811 cmd.Init(client_texture_id_); 5808 cmd.Init(client_texture_id_);
5812 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5809 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5813 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5810 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5814 EXPECT_FALSE(info->IsStreamTexture()); 5811 EXPECT_FALSE(texture->IsStreamTexture());
5815 EXPECT_EQ(0U, info->target()); 5812 EXPECT_EQ(0U, texture->target());
5816 } 5813 }
5817 5814
5818 TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMInvalid) { 5815 TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMInvalid) {
5819 InitDecoder( 5816 InitDecoder(
5820 "GL_CHROMIUM_stream_texture", // extensions 5817 "GL_CHROMIUM_stream_texture", // extensions
5821 false, // has alpha 5818 false, // has alpha
5822 false, // has depth 5819 false, // has depth
5823 false, // has stencil 5820 false, // has stencil
5824 false, // request alpha 5821 false, // request alpha
5825 false, // request depth 5822 false, // request depth
5826 false, // request stencil 5823 false, // request stencil
5827 true); // bind generates resource 5824 true); // bind generates resource
5828 5825
5829 Texture* info = GetTexture(client_texture_id_); 5826 Texture* texture = GetTexture(client_texture_id_);
5830 info->SetStreamTexture(false); 5827 texture->SetStreamTexture(false);
5831 5828
5832 DestroyStreamTextureCHROMIUM cmd; 5829 DestroyStreamTextureCHROMIUM cmd;
5833 cmd.Init(client_texture_id_); 5830 cmd.Init(client_texture_id_);
5834 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5831 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5835 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 5832 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
5836 } 5833 }
5837 5834
5838 TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMBadId) { 5835 TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMBadId) {
5839 InitDecoder( 5836 InitDecoder(
5840 "GL_CHROMIUM_stream_texture", // extensions 5837 "GL_CHROMIUM_stream_texture", // extensions
(...skipping 20 matching lines...) Expand all
5861 false, // request alpha 5858 false, // request alpha
5862 false, // request depth 5859 false, // request depth
5863 false, // request stencil 5860 false, // request stencil
5864 true); // bind generates resource 5861 true); // bind generates resource
5865 5862
5866 CreateStreamTextureCHROMIUM cmd; 5863 CreateStreamTextureCHROMIUM cmd;
5867 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_); 5864 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
5868 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); 5865 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
5869 GetGLError(); // ignore internal error 5866 GetGLError(); // ignore internal error
5870 5867
5871 Texture* info = GetTexture(client_texture_id_); 5868 Texture* texture = GetTexture(client_texture_id_);
5872 info->SetStreamTexture(true); 5869 texture->SetStreamTexture(true);
5873 5870
5874 DestroyStreamTextureCHROMIUM cmd2; 5871 DestroyStreamTextureCHROMIUM cmd2;
5875 cmd2.Init(client_texture_id_); 5872 cmd2.Init(client_texture_id_);
5876 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd2)); 5873 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd2));
5877 GetGLError(); // ignore internal error 5874 GetGLError(); // ignore internal error
5878 } 5875 }
5879 5876
5880 TEST_F(GLES2DecoderManualInitTest, ReCreateStreamTextureCHROMIUM) { 5877 TEST_F(GLES2DecoderManualInitTest, ReCreateStreamTextureCHROMIUM) {
5881 const GLuint kObjectId = 123; 5878 const GLuint kObjectId = 123;
5882 InitDecoder( 5879 InitDecoder(
5883 "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions 5880 "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
5884 false, // has alpha 5881 false, // has alpha
5885 false, // has depth 5882 false, // has depth
5886 false, // has stencil 5883 false, // has stencil
5887 false, // request alpha 5884 false, // request alpha
5888 false, // request depth 5885 false, // request depth
5889 false, // request stencil 5886 false, // request stencil
5890 true); // bind generates resource 5887 true); // bind generates resource
5891 5888
5892 StrictMock<MockStreamTextureManager> manager; 5889 StrictMock<MockStreamTextureManager> manager;
5893 StrictMock<MockStreamTexture> texture; 5890 StrictMock<MockStreamTexture> stream_texture;
5894 decoder_->SetStreamTextureManager(&manager); 5891 decoder_->SetStreamTextureManager(&manager);
5895 5892
5896 EXPECT_CALL(manager, LookupStreamTexture(kServiceTextureId)) 5893 EXPECT_CALL(manager, LookupStreamTexture(kServiceTextureId))
5897 .WillOnce(Return(&texture)) 5894 .WillOnce(Return(&stream_texture))
5898 .RetiresOnSaturation(); 5895 .RetiresOnSaturation();
5899 EXPECT_CALL(texture, Update()) 5896 EXPECT_CALL(stream_texture, Update())
5900 .Times(1) 5897 .Times(1)
5901 .RetiresOnSaturation(); 5898 .RetiresOnSaturation();
5902 EXPECT_CALL(manager, DestroyStreamTexture(kServiceTextureId)) 5899 EXPECT_CALL(manager, DestroyStreamTexture(kServiceTextureId))
5903 .Times(1) 5900 .Times(1)
5904 .RetiresOnSaturation(); 5901 .RetiresOnSaturation();
5905 EXPECT_CALL(manager, CreateStreamTexture(kServiceTextureId, 5902 EXPECT_CALL(manager, CreateStreamTexture(kServiceTextureId,
5906 client_texture_id_)) 5903 client_texture_id_))
5907 .WillOnce(Return(kObjectId)) 5904 .WillOnce(Return(kObjectId))
5908 .RetiresOnSaturation(); 5905 .RetiresOnSaturation();
5909 5906
5910 Texture* info = GetTexture(client_texture_id_); 5907 Texture* texture = GetTexture(client_texture_id_);
5911 info->SetStreamTexture(true); 5908 texture->SetStreamTexture(true);
5912 5909
5913 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId); 5910 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5914 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5911 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5915 5912
5916 DestroyStreamTextureCHROMIUM cmd; 5913 DestroyStreamTextureCHROMIUM cmd;
5917 cmd.Init(client_texture_id_); 5914 cmd.Init(client_texture_id_);
5918 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5915 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5919 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5916 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5920 EXPECT_FALSE(info->IsStreamTexture()); 5917 EXPECT_FALSE(texture->IsStreamTexture());
5921 5918
5922 CreateStreamTextureCHROMIUM cmd2; 5919 CreateStreamTextureCHROMIUM cmd2;
5923 cmd2.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_); 5920 cmd2.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
5924 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 5921 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
5925 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5922 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5926 EXPECT_TRUE(info->IsStreamTexture()); 5923 EXPECT_TRUE(texture->IsStreamTexture());
5927 } 5924 }
5928 5925
5929 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) { 5926 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) {
5930 InitDecoder( 5927 InitDecoder(
5931 "GL_ARB_texture_rectangle", // extensions 5928 "GL_ARB_texture_rectangle", // extensions
5932 false, // has alpha 5929 false, // has alpha
5933 false, // has depth 5930 false, // has depth
5934 false, // has stencil 5931 false, // has stencil
5935 false, // request alpha 5932 false, // request alpha
5936 false, // request depth 5933 false, // request depth
5937 false, // request stencil 5934 false, // request stencil
5938 true); // bind generates resource 5935 true); // bind generates resource
5939 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_RECTANGLE_ARB, kNewServiceId)); 5936 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_RECTANGLE_ARB, kNewServiceId));
5940 EXPECT_CALL(*gl_, GenTextures(1, _)) 5937 EXPECT_CALL(*gl_, GenTextures(1, _))
5941 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); 5938 .WillOnce(SetArgumentPointee<1>(kNewServiceId));
5942 BindTexture cmd; 5939 BindTexture cmd;
5943 cmd.Init(GL_TEXTURE_RECTANGLE_ARB, kNewClientId); 5940 cmd.Init(GL_TEXTURE_RECTANGLE_ARB, kNewClientId);
5944 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5941 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5945 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5942 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5946 Texture* info = GetTexture(kNewClientId); 5943 Texture* texture = GetTexture(kNewClientId);
5947 EXPECT_TRUE(info != NULL); 5944 EXPECT_TRUE(texture != NULL);
5948 EXPECT_TRUE(info->target() == GL_TEXTURE_RECTANGLE_ARB); 5945 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
5949 } 5946 }
5950 5947
5951 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleGetBinding) { 5948 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleGetBinding) {
5952 InitDecoder( 5949 InitDecoder(
5953 "GL_ARB_texture_rectangle", // extensions 5950 "GL_ARB_texture_rectangle", // extensions
5954 false, // has alpha 5951 false, // has alpha
5955 false, // has depth 5952 false, // has depth
5956 false, // has stencil 5953 false, // has stencil
5957 false, // request alpha 5954 false, // request alpha
5958 false, // request depth 5955 false, // request depth
(...skipping 29 matching lines...) Expand all
5988 false, // has alpha 5985 false, // has alpha
5989 false, // has depth 5986 false, // has depth
5990 false, // has stencil 5987 false, // has stencil
5991 false, // request alpha 5988 false, // request alpha
5992 false, // request depth 5989 false, // request depth
5993 false, // request stencil 5990 false, // request stencil
5994 true); // bind generates resource 5991 true); // bind generates resource
5995 DoBindTexture( 5992 DoBindTexture(
5996 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId); 5993 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
5997 5994
5998 Texture* info = GetTexture(client_texture_id_); 5995 Texture* texture = GetTexture(client_texture_id_);
5999 EXPECT_TRUE(info != NULL); 5996 EXPECT_TRUE(texture != NULL);
6000 EXPECT_TRUE(info->target() == GL_TEXTURE_RECTANGLE_ARB); 5997 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
6001 EXPECT_TRUE(info->min_filter() == GL_LINEAR); 5998 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
6002 EXPECT_TRUE(info->wrap_s() == GL_CLAMP_TO_EDGE); 5999 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
6003 EXPECT_TRUE(info->wrap_t() == GL_CLAMP_TO_EDGE); 6000 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
6004 } 6001 }
6005 6002
6006 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParam) { 6003 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParam) {
6007 InitDecoder( 6004 InitDecoder(
6008 "GL_ARB_texture_rectangle", // extensions 6005 "GL_ARB_texture_rectangle", // extensions
6009 false, // has alpha 6006 false, // has alpha
6010 false, // has depth 6007 false, // has depth
6011 false, // has stencil 6008 false, // has stencil
6012 false, // request alpha 6009 false, // request alpha
6013 false, // request depth 6010 false, // request depth
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
6047 GL_CLAMP_TO_EDGE); 6044 GL_CLAMP_TO_EDGE);
6048 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6045 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6049 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 6046 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6050 6047
6051 cmd.Init(GL_TEXTURE_RECTANGLE_ARB, 6048 cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
6052 GL_TEXTURE_WRAP_T, 6049 GL_TEXTURE_WRAP_T,
6053 GL_CLAMP_TO_EDGE); 6050 GL_CLAMP_TO_EDGE);
6054 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6051 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6055 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 6052 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6056 6053
6057 Texture* info = GetTexture(client_texture_id_); 6054 Texture* texture = GetTexture(client_texture_id_);
6058 EXPECT_TRUE(info != NULL); 6055 EXPECT_TRUE(texture != NULL);
6059 EXPECT_TRUE(info->target() == GL_TEXTURE_RECTANGLE_ARB); 6056 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
6060 EXPECT_TRUE(info->min_filter() == GL_LINEAR); 6057 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
6061 EXPECT_TRUE(info->wrap_s() == GL_CLAMP_TO_EDGE); 6058 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
6062 EXPECT_TRUE(info->wrap_t() == GL_CLAMP_TO_EDGE); 6059 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
6063 } 6060 }
6064 6061
6065 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParamInvalid) { 6062 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParamInvalid) {
6066 InitDecoder( 6063 InitDecoder(
6067 "GL_ARB_texture_rectangle", // extensions 6064 "GL_ARB_texture_rectangle", // extensions
6068 false, // has alpha 6065 false, // has alpha
6069 false, // has depth 6066 false, // has depth
6070 false, // has stencil 6067 false, // has stencil
6071 false, // request alpha 6068 false, // request alpha
6072 false, // request depth 6069 false, // request depth
(...skipping 15 matching lines...) Expand all
6088 GL_REPEAT); 6085 GL_REPEAT);
6089 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6086 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6090 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 6087 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
6091 6088
6092 cmd.Init(GL_TEXTURE_RECTANGLE_ARB, 6089 cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
6093 GL_TEXTURE_WRAP_T, 6090 GL_TEXTURE_WRAP_T,
6094 GL_REPEAT); 6091 GL_REPEAT);
6095 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6092 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6096 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 6093 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
6097 6094
6098 Texture* info = GetTexture(client_texture_id_); 6095 Texture* texture = GetTexture(client_texture_id_);
6099 EXPECT_TRUE(info != NULL); 6096 EXPECT_TRUE(texture != NULL);
6100 EXPECT_TRUE(info->target() == GL_TEXTURE_RECTANGLE_ARB); 6097 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
6101 EXPECT_TRUE(info->min_filter() == GL_LINEAR); 6098 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
6102 EXPECT_TRUE(info->wrap_s() == GL_CLAMP_TO_EDGE); 6099 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
6103 EXPECT_TRUE(info->wrap_t() == GL_CLAMP_TO_EDGE); 6100 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
6104 } 6101 }
6105 6102
6106 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTexImage2DError) { 6103 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTexImage2DError) {
6107 InitDecoder( 6104 InitDecoder(
6108 "GL_ARB_texture_rectangle", // extensions 6105 "GL_ARB_texture_rectangle", // extensions
6109 false, // has alpha 6106 false, // has alpha
6110 false, // has depth 6107 false, // has depth
6111 false, // has stencil 6108 false, // has stencil
6112 false, // request alpha 6109 false, // request alpha
6113 false, // request depth 6110 false, // request depth
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
6419 DrawArrays cmd; 6416 DrawArrays cmd;
6420 cmd.Init(GL_TRIANGLES, 0, kNumVertices); 6417 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
6421 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6418 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6422 EXPECT_EQ(GL_INVALID_FRAMEBUFFER_OPERATION, GetGLError()); 6419 EXPECT_EQ(GL_INVALID_FRAMEBUFFER_OPERATION, GetGLError());
6423 } 6420 }
6424 6421
6425 TEST_F(GLES2DecoderTest, CopyTexImage2DMarksTextureAsCleared) { 6422 TEST_F(GLES2DecoderTest, CopyTexImage2DMarksTextureAsCleared) {
6426 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 6423 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
6427 6424
6428 TextureManager* manager = group().texture_manager(); 6425 TextureManager* manager = group().texture_manager();
6429 Texture* info = 6426 Texture* texture = manager->GetTexture(client_texture_id_);
6430 manager->GetTexture(client_texture_id_);
6431 6427
6432 EXPECT_CALL(*gl_, GetError()) 6428 EXPECT_CALL(*gl_, GetError())
6433 .WillOnce(Return(GL_NO_ERROR)) 6429 .WillOnce(Return(GL_NO_ERROR))
6434 .RetiresOnSaturation(); 6430 .RetiresOnSaturation();
6435 EXPECT_CALL(*gl_, CopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0)) 6431 EXPECT_CALL(*gl_, CopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0))
6436 .Times(1) 6432 .Times(1)
6437 .RetiresOnSaturation(); 6433 .RetiresOnSaturation();
6438 EXPECT_CALL(*gl_, GetError()) 6434 EXPECT_CALL(*gl_, GetError())
6439 .WillOnce(Return(GL_NO_ERROR)) 6435 .WillOnce(Return(GL_NO_ERROR))
6440 .RetiresOnSaturation(); 6436 .RetiresOnSaturation();
6441 CopyTexImage2D cmd; 6437 CopyTexImage2D cmd;
6442 cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0); 6438 cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0);
6443 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6439 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6444 6440
6445 EXPECT_TRUE(info->SafeToRenderFrom()); 6441 EXPECT_TRUE(texture->SafeToRenderFrom());
6446 } 6442 }
6447 6443
6448 TEST_F(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedTexture) { 6444 TEST_F(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedTexture) {
6449 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 6445 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
6450 DoTexImage2D( 6446 DoTexImage2D(
6451 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 6447 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
6452 6448
6453 SetupClearTextureExpections( 6449 SetupClearTextureExpections(
6454 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D, 6450 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
6455 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2); 6451 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
(...skipping 25 matching lines...) Expand all
6481 .Times(1) 6477 .Times(1)
6482 .RetiresOnSaturation(); 6478 .RetiresOnSaturation();
6483 EXPECT_CALL(*gl_, GetError()) 6479 EXPECT_CALL(*gl_, GetError())
6484 .WillOnce(Return(GL_NO_ERROR)) 6480 .WillOnce(Return(GL_NO_ERROR))
6485 .RetiresOnSaturation(); 6481 .RetiresOnSaturation();
6486 CompressedTexImage2D cmd; 6482 CompressedTexImage2D cmd;
6487 cmd.Init(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, 6483 cmd.Init(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0,
6488 8, kSharedMemoryId, kSharedMemoryOffset); 6484 8, kSharedMemoryId, kSharedMemoryOffset);
6489 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6485 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6490 TextureManager* manager = group().texture_manager(); 6486 TextureManager* manager = group().texture_manager();
6491 Texture* info = 6487 Texture* texture = manager->GetTexture(client_texture_id_);
6492 manager->GetTexture(client_texture_id_); 6488 EXPECT_TRUE(texture->SafeToRenderFrom());
6493 EXPECT_TRUE(info->SafeToRenderFrom());
6494 } 6489 }
6495 6490
6496 TEST_F(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnClear) { 6491 TEST_F(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnClear) {
6497 const GLuint kFBOClientTextureId = 4100; 6492 const GLuint kFBOClientTextureId = 4100;
6498 const GLuint kFBOServiceTextureId = 4101; 6493 const GLuint kFBOServiceTextureId = 4101;
6499 6494
6500 // Register a texture id. 6495 // Register a texture id.
6501 EXPECT_CALL(*gl_, GenTextures(_, _)) 6496 EXPECT_CALL(*gl_, GenTextures(_, _))
6502 .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId)) 6497 .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
6503 .RetiresOnSaturation(); 6498 .RetiresOnSaturation();
(...skipping 751 matching lines...) Expand 10 before | Expand all | Expand 10 after
7255 group().mailbox_manager()->GenerateMailboxName( 7250 group().mailbox_manager()->GenerateMailboxName(
7256 reinterpret_cast<MailboxName*>(mailbox)); 7251 reinterpret_cast<MailboxName*>(mailbox));
7257 7252
7258 memcpy(shared_memory_address_, mailbox, sizeof(mailbox)); 7253 memcpy(shared_memory_address_, mailbox, sizeof(mailbox));
7259 7254
7260 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 7255 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
7261 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 7256 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
7262 0, 0); 7257 0, 0);
7263 DoTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 7258 DoTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
7264 0, 0); 7259 0, 0);
7265 Texture* info = 7260 Texture* texture = group().texture_manager()->GetTexture(client_texture_id_);
7266 group().texture_manager()->GetTexture(client_texture_id_); 7261 EXPECT_EQ(kServiceTextureId, texture->service_id());
7267 EXPECT_EQ(kServiceTextureId, info->service_id());
7268 7262
7269 // Assigns and binds new service side texture ID. 7263 // Assigns and binds new service side texture ID.
7270 EXPECT_CALL(*gl_, GenTextures(1, _)) 7264 EXPECT_CALL(*gl_, GenTextures(1, _))
7271 .WillOnce(SetArgumentPointee<1>(kNewServiceId)) 7265 .WillOnce(SetArgumentPointee<1>(kNewServiceId))
7272 .RetiresOnSaturation(); 7266 .RetiresOnSaturation();
7273 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kNewServiceId)) 7267 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kNewServiceId))
7274 .Times(1) 7268 .Times(1)
7275 .RetiresOnSaturation(); 7269 .RetiresOnSaturation();
7276 7270
7277 ProduceTextureCHROMIUM produce_cmd; 7271 ProduceTextureCHROMIUM produce_cmd;
7278 produce_cmd.Init(GL_TEXTURE_2D, kSharedMemoryId, kSharedMemoryOffset); 7272 produce_cmd.Init(GL_TEXTURE_2D, kSharedMemoryId, kSharedMemoryOffset);
7279 EXPECT_EQ(error::kNoError, ExecuteCmd(produce_cmd)); 7273 EXPECT_EQ(error::kNoError, ExecuteCmd(produce_cmd));
7280 7274
7281 // Texture is zero-by-zero. 7275 // Texture is zero-by-zero.
7282 GLsizei width; 7276 GLsizei width;
7283 GLsizei height; 7277 GLsizei height;
7284 GLenum type; 7278 GLenum type;
7285 GLenum internal_format; 7279 GLenum internal_format;
7286 7280
7287 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 7281 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
7288 EXPECT_EQ(0, width); 7282 EXPECT_EQ(0, width);
7289 EXPECT_EQ(0, height); 7283 EXPECT_EQ(0, height);
7290 EXPECT_TRUE(info->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); 7284 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
7291 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); 7285 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
7292 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); 7286 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
7293 7287
7294 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); 7288 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
7295 EXPECT_EQ(0, width); 7289 EXPECT_EQ(0, width);
7296 EXPECT_EQ(0, height); 7290 EXPECT_EQ(0, height);
7297 EXPECT_TRUE(info->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format)); 7291 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format));
7298 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); 7292 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
7299 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); 7293 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
7300 7294
7301 // Service ID has changed. 7295 // Service ID has changed.
7302 EXPECT_EQ(kNewServiceId, info->service_id()); 7296 EXPECT_EQ(kNewServiceId, texture->service_id());
7303 7297
7304 // Assigns and binds original service size texture ID. 7298 // Assigns and binds original service size texture ID.
7305 EXPECT_CALL(*gl_, DeleteTextures(1, _)) 7299 EXPECT_CALL(*gl_, DeleteTextures(1, _))
7306 .Times(1) 7300 .Times(1)
7307 .RetiresOnSaturation(); 7301 .RetiresOnSaturation();
7308 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId)) 7302 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
7309 .Times(1) 7303 .Times(1)
7310 .RetiresOnSaturation(); 7304 .RetiresOnSaturation();
7311 7305
7306 // TextureManager::Restore will set TexParameters.
7307 EXPECT_CALL(*gl_, TexParameteri(
7308 GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR))
7309 .Times(1)
7310 .RetiresOnSaturation();
7311 EXPECT_CALL(*gl_, TexParameteri(
7312 GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR))
7313 .Times(1)
7314 .RetiresOnSaturation();
7315 EXPECT_CALL(*gl_, TexParameteri(
7316 GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT))
7317 .Times(1)
7318 .RetiresOnSaturation();
7319 EXPECT_CALL(*gl_, TexParameteri(
7320 GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT))
7321 .Times(1)
7322 .RetiresOnSaturation();
7323 EXPECT_CALL(*gl_, TexParameteri(
7324 GL_TEXTURE_2D, GL_TEXTURE_USAGE_ANGLE, GL_NONE))
7325 .Times(1)
7326 .RetiresOnSaturation();
7327
7312 ConsumeTextureCHROMIUM consume_cmd; 7328 ConsumeTextureCHROMIUM consume_cmd;
7313 consume_cmd.Init(GL_TEXTURE_2D, kSharedMemoryId, kSharedMemoryOffset); 7329 consume_cmd.Init(GL_TEXTURE_2D, kSharedMemoryId, kSharedMemoryOffset);
7314 EXPECT_EQ(error::kNoError, ExecuteCmd(consume_cmd)); 7330 EXPECT_EQ(error::kNoError, ExecuteCmd(consume_cmd));
7315 7331
7316 // Texture is redefined. 7332 // Texture is redefined.
7317 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 7333 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
7318 EXPECT_EQ(3, width); 7334 EXPECT_EQ(3, width);
7319 EXPECT_EQ(1, height); 7335 EXPECT_EQ(1, height);
7320 EXPECT_TRUE(info->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); 7336 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
7321 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); 7337 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
7322 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); 7338 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
7323 7339
7324 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); 7340 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
7325 EXPECT_EQ(2, width); 7341 EXPECT_EQ(2, width);
7326 EXPECT_EQ(4, height); 7342 EXPECT_EQ(4, height);
7327 EXPECT_TRUE(info->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format)); 7343 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format));
7328 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); 7344 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
7329 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); 7345 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
7330 7346
7331 // Service ID is restored. 7347 // Service ID is restored.
7332 EXPECT_EQ(kServiceTextureId, info->service_id()); 7348 EXPECT_EQ(kServiceTextureId, texture->service_id());
7333 } 7349 }
7334 7350
7335 7351
7336 TEST_F(GLES2DecoderTest, CanChangeSurface) { 7352 TEST_F(GLES2DecoderTest, CanChangeSurface) {
7337 scoped_refptr<GLSurfaceMock> other_surface(new GLSurfaceMock); 7353 scoped_refptr<GLSurfaceMock> other_surface(new GLSurfaceMock);
7338 EXPECT_CALL(*other_surface.get(), GetBackingFrameBufferObject()). 7354 EXPECT_CALL(*other_surface.get(), GetBackingFrameBufferObject()).
7339 WillOnce(Return(7)); 7355 WillOnce(Return(7));
7340 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER_EXT, 7)); 7356 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER_EXT, 7));
7341 7357
7342 decoder_->SetSurface(other_surface); 7358 decoder_->SetSurface(other_surface);
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
7834 } 7850 }
7835 TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, 7851 TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
7836 BindVertexArrayOESValidArgsNewId) { 7852 BindVertexArrayOESValidArgsNewId) {
7837 BindVertexArrayOESValidArgsNewId(); 7853 BindVertexArrayOESValidArgsNewId();
7838 } 7854 }
7839 7855
7840 TEST_F(GLES2DecoderTest, BindTexImage2DCHROMIUM) { 7856 TEST_F(GLES2DecoderTest, BindTexImage2DCHROMIUM) {
7841 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 7857 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
7842 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 7858 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
7843 0, 0); 7859 0, 0);
7844 Texture* info = 7860 Texture* texture = group().texture_manager()->GetTexture(client_texture_id_);
7845 group().texture_manager()->GetTexture(client_texture_id_); 7861 EXPECT_EQ(kServiceTextureId, texture->service_id());
7846 EXPECT_EQ(kServiceTextureId, info->service_id());
7847 7862
7848 group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0), 1); 7863 group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0), 1);
7849 EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL); 7864 EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL);
7850 7865
7851 GLsizei width; 7866 GLsizei width;
7852 GLsizei height; 7867 GLsizei height;
7853 GLenum type; 7868 GLenum type;
7854 GLenum internal_format; 7869 GLenum internal_format;
7855 7870
7856 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 7871 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
7857 EXPECT_EQ(3, width); 7872 EXPECT_EQ(3, width);
7858 EXPECT_EQ(1, height); 7873 EXPECT_EQ(1, height);
7859 EXPECT_TRUE(info->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); 7874 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
7860 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); 7875 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
7861 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); 7876 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
7862 EXPECT_TRUE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); 7877 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
7863 7878
7864 // Bind image to texture. 7879 // Bind image to texture.
7865 BindTexImage2DCHROMIUM bind_tex_image_2d_cmd; 7880 BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
7866 bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1); 7881 bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1);
7867 EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd)); 7882 EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
7868 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 7883 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
7869 // Image should now be set. 7884 // Image should now be set.
7870 EXPECT_FALSE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); 7885 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
7871 7886
7872 // Define new texture image. 7887 // Define new texture image.
7873 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 7888 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
7874 0, 0); 7889 0, 0);
7875 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 7890 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
7876 // Image should no longer be set. 7891 // Image should no longer be set.
7877 EXPECT_TRUE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); 7892 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
7878 } 7893 }
7879 7894
7880 TEST_F(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) { 7895 TEST_F(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) {
7881 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 7896 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
7882 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 7897 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
7883 0, 0); 7898 0, 0);
7884 Texture* info = 7899 Texture* texture = group().texture_manager()->GetTexture(client_texture_id_);
7885 group().texture_manager()->GetTexture(client_texture_id_); 7900 EXPECT_EQ(kServiceTextureId, texture->service_id());
7886 EXPECT_EQ(kServiceTextureId, info->service_id());
7887 7901
7888 group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0), 1); 7902 group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0), 1);
7889 EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL); 7903 EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL);
7890 7904
7891 GLsizei width; 7905 GLsizei width;
7892 GLsizei height; 7906 GLsizei height;
7893 GLenum type; 7907 GLenum type;
7894 GLenum internal_format; 7908 GLenum internal_format;
7895 7909
7896 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 7910 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
7897 EXPECT_EQ(3, width); 7911 EXPECT_EQ(3, width);
7898 EXPECT_EQ(1, height); 7912 EXPECT_EQ(1, height);
7899 EXPECT_TRUE(info->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); 7913 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
7900 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); 7914 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
7901 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); 7915 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
7902 EXPECT_TRUE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); 7916 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
7903 7917
7904 // Bind image to texture. 7918 // Bind image to texture.
7905 BindTexImage2DCHROMIUM bind_tex_image_2d_cmd; 7919 BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
7906 bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1); 7920 bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1);
7907 EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd)); 7921 EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
7908 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 7922 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
7909 // Image should now be set. 7923 // Image should now be set.
7910 EXPECT_FALSE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); 7924 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
7911 7925
7912 // Release image from texture. 7926 // Release image from texture.
7913 ReleaseTexImage2DCHROMIUM release_tex_image_2d_cmd; 7927 ReleaseTexImage2DCHROMIUM release_tex_image_2d_cmd;
7914 release_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1); 7928 release_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1);
7915 EXPECT_EQ(error::kNoError, ExecuteCmd(release_tex_image_2d_cmd)); 7929 EXPECT_EQ(error::kNoError, ExecuteCmd(release_tex_image_2d_cmd));
7916 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 7930 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
7917 // Image should no longer be set. 7931 // Image should no longer be set.
7918 EXPECT_TRUE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); 7932 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
7919 } 7933 }
7920 7934
7921 TEST_F(GLES2DecoderManualInitTest, GpuMemoryManagerCHROMIUM) { 7935 TEST_F(GLES2DecoderManualInitTest, GpuMemoryManagerCHROMIUM) {
7922 InitDecoder( 7936 InitDecoder(
7923 "GL_ARB_texture_rectangle", // extensions 7937 "GL_ARB_texture_rectangle", // extensions
7924 false, // has alpha 7938 false, // has alpha
7925 false, // has depth 7939 false, // has depth
7926 false, // has stencil 7940 false, // has stencil
7927 false, // request alpha 7941 false, // request alpha
7928 false, // request depth 7942 false, // request depth
7929 false, // request stencil 7943 false, // request stencil
7930 true); // bind generates resource 7944 true); // bind generates resource
7931 7945
7932 Texture* info = GetTexture(client_texture_id_); 7946 Texture* texture = GetTexture(client_texture_id_);
7933 EXPECT_TRUE(info != NULL); 7947 EXPECT_TRUE(texture != NULL);
7934 EXPECT_TRUE(info->pool() == GL_TEXTURE_POOL_UNMANAGED_CHROMIUM); 7948 EXPECT_TRUE(texture->pool() == GL_TEXTURE_POOL_UNMANAGED_CHROMIUM);
7935 7949
7936 DoBindTexture( 7950 DoBindTexture(
7937 GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 7951 GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
7938 7952
7939 TexParameteri cmd; 7953 TexParameteri cmd;
7940 cmd.Init(GL_TEXTURE_2D, 7954 cmd.Init(GL_TEXTURE_2D,
7941 GL_TEXTURE_POOL_CHROMIUM, 7955 GL_TEXTURE_POOL_CHROMIUM,
7942 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM); 7956 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM);
7943 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 7957 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7944 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 7958 EXPECT_EQ(GL_NO_ERROR, GetGLError());
7945 7959
7946 cmd.Init(GL_TEXTURE_2D, 7960 cmd.Init(GL_TEXTURE_2D,
7947 GL_TEXTURE_POOL_CHROMIUM, 7961 GL_TEXTURE_POOL_CHROMIUM,
7948 GL_TEXTURE_POOL_MANAGED_CHROMIUM); 7962 GL_TEXTURE_POOL_MANAGED_CHROMIUM);
7949 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 7963 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7950 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 7964 EXPECT_EQ(GL_NO_ERROR, GetGLError());
7951 7965
7952 EXPECT_TRUE(info->pool() == GL_TEXTURE_POOL_MANAGED_CHROMIUM); 7966 EXPECT_TRUE(texture->pool() == GL_TEXTURE_POOL_MANAGED_CHROMIUM);
7953 7967
7954 cmd.Init(GL_TEXTURE_2D, 7968 cmd.Init(GL_TEXTURE_2D,
7955 GL_TEXTURE_POOL_CHROMIUM, 7969 GL_TEXTURE_POOL_CHROMIUM,
7956 GL_NONE); 7970 GL_NONE);
7957 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 7971 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7958 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 7972 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
7959 } 7973 }
7960 7974
7961 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransfers) { 7975 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransfers) {
7962 InitDecoder( 7976 InitDecoder(
7963 "GL_CHROMIUM_async_pixel_transfers", // extensions 7977 "GL_CHROMIUM_async_pixel_transfers", // extensions
7964 false, false, false, // has alpha/depth/stencil 7978 false, false, false, // has alpha/depth/stencil
7965 false, false, false, // request alpha/depth/stencil 7979 false, false, false, // request alpha/depth/stencil
7966 true); // bind generates resource 7980 true); // bind generates resource
7967 7981
7968 // Set up the texture. 7982 // Set up the texture.
7969 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 7983 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
7970 Texture* info = GetTexture(client_texture_id_); 7984 Texture* texture = GetTexture(client_texture_id_);
7971 7985
7972 // Set a mock Async delegate 7986 // Set a mock Async delegate
7973 // Async state is returned as a scoped_ptr, but we keep a raw copy. 7987 // Async state is returned as a scoped_ptr, but we keep a raw copy.
7974 StrictMock<gfx::MockAsyncPixelTransferDelegate>* delegate = 7988 StrictMock<gfx::MockAsyncPixelTransferDelegate>* delegate =
7975 new StrictMock<gfx::MockAsyncPixelTransferDelegate>; 7989 new StrictMock<gfx::MockAsyncPixelTransferDelegate>;
7976 decoder_->SetAsyncPixelTransferDelegate(delegate); 7990 decoder_->SetAsyncPixelTransferDelegate(delegate);
7977 StrictMock<gfx::MockAsyncPixelTransferState>* state = NULL; 7991 StrictMock<gfx::MockAsyncPixelTransferState>* state = NULL;
7978 7992
7979 // Tex(Sub)Image2D upload commands. 7993 // Tex(Sub)Image2D upload commands.
7980 AsyncTexImage2DCHROMIUM teximage_cmd; 7994 AsyncTexImage2DCHROMIUM teximage_cmd;
7981 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, 7995 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA,
7982 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); 7996 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
7983 AsyncTexSubImage2DCHROMIUM texsubimage_cmd; 7997 AsyncTexSubImage2DCHROMIUM texsubimage_cmd;
7984 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA, 7998 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA,
7985 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); 7999 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
7986 WaitAsyncTexImage2DCHROMIUM wait_cmd; 8000 WaitAsyncTexImage2DCHROMIUM wait_cmd;
7987 wait_cmd.Init(GL_TEXTURE_2D); 8001 wait_cmd.Init(GL_TEXTURE_2D);
7988 gfx::AsyncTexImage2DParams teximage_params = 8002 gfx::AsyncTexImage2DParams teximage_params =
7989 {GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE}; 8003 {GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE};
7990 8004
7991 // No transfer state exists initially. 8005 // No transfer state exists initially.
7992 EXPECT_FALSE(info->GetAsyncTransferState()); 8006 EXPECT_FALSE(texture->GetAsyncTransferState());
7993 8007
7994 // AsyncTexImage2D 8008 // AsyncTexImage2D
7995 { 8009 {
7996 // Create transfer state since it doesn't exist. 8010 // Create transfer state since it doesn't exist.
7997 EXPECT_CALL(*delegate, CreateRawPixelTransferState(kServiceTextureId)) 8011 EXPECT_CALL(*delegate, CreateRawPixelTransferState(kServiceTextureId))
7998 .WillOnce(Return( 8012 .WillOnce(Return(
7999 state = new StrictMock<gfx::MockAsyncPixelTransferState>)) 8013 state = new StrictMock<gfx::MockAsyncPixelTransferState>))
8000 .RetiresOnSaturation(); 8014 .RetiresOnSaturation();
8001 EXPECT_CALL(*delegate, AsyncTexImage2D(state, _, _)) 8015 EXPECT_CALL(*delegate, AsyncTexImage2D(state, _, _))
8002 .RetiresOnSaturation(); 8016 .RetiresOnSaturation();
8003 // Command succeeds. 8017 // Command succeeds.
8004 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); 8018 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
8005 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8019 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8006 EXPECT_TRUE(info->GetAsyncTransferState()); 8020 EXPECT_TRUE(texture->GetAsyncTransferState());
8007 EXPECT_TRUE(info->IsImmutable()); 8021 EXPECT_TRUE(texture->IsImmutable());
8008 // The texture is safe but the level has not been defined yet. 8022 // The texture is safe but the level has not been defined yet.
8009 EXPECT_TRUE(info->SafeToRenderFrom()); 8023 EXPECT_TRUE(texture->SafeToRenderFrom());
8010 GLsizei width, height; 8024 GLsizei width, height;
8011 EXPECT_FALSE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 8025 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
8012 } 8026 }
8013 { 8027 {
8014 // Async redefinitions are not allowed! 8028 // Async redefinitions are not allowed!
8015 // Command fails. 8029 // Command fails.
8016 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); 8030 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
8017 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 8031 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
8018 EXPECT_TRUE(info->GetAsyncTransferState()); 8032 EXPECT_TRUE(texture->GetAsyncTransferState());
8019 EXPECT_TRUE(info->IsImmutable()); 8033 EXPECT_TRUE(texture->IsImmutable());
8020 EXPECT_TRUE(info->SafeToRenderFrom()); 8034 EXPECT_TRUE(texture->SafeToRenderFrom());
8021 } 8035 }
8022 8036
8023 // Lazy binding/defining of the async transfer 8037 // Lazy binding/defining of the async transfer
8024 { 8038 {
8025 // We the code should check that the transfer is done, 8039 // We the code should check that the transfer is done,
8026 // call bind transfer on it, and update the texture info. 8040 // call bind transfer on it, and update the texture texture.
8027 InSequence scoped_in_sequence; 8041 InSequence scoped_in_sequence;
8028 EXPECT_CALL(*state, TransferIsInProgress()) 8042 EXPECT_CALL(*state, TransferIsInProgress())
8029 .WillOnce(Return(false)) 8043 .WillOnce(Return(false))
8030 .RetiresOnSaturation(); 8044 .RetiresOnSaturation();
8031 EXPECT_CALL(*state, BindTransfer(_)) 8045 EXPECT_CALL(*state, BindTransfer(_))
8032 .WillOnce(SetArgPointee<0>(teximage_params)) 8046 .WillOnce(SetArgPointee<0>(teximage_params))
8033 .RetiresOnSaturation(); 8047 .RetiresOnSaturation();
8034 TextureManager* manager = decoder_->GetContextGroup()->texture_manager(); 8048 TextureManager* manager = decoder_->GetContextGroup()->texture_manager();
8035 bool texture_dirty, framebuffer_dirty; 8049 bool texture_dirty, framebuffer_dirty;
8036 manager->BindFinishedAsyncPixelTransfers(&texture_dirty, 8050 manager->BindFinishedAsyncPixelTransfers(&texture_dirty,
8037 &framebuffer_dirty); 8051 &framebuffer_dirty);
8038 EXPECT_TRUE(texture_dirty); 8052 EXPECT_TRUE(texture_dirty);
8039 EXPECT_FALSE(framebuffer_dirty); 8053 EXPECT_FALSE(framebuffer_dirty);
8040 // Texture is safe, and has the right size etc. 8054 // Texture is safe, and has the right size etc.
8041 EXPECT_TRUE(info->SafeToRenderFrom()); 8055 EXPECT_TRUE(texture->SafeToRenderFrom());
8042 GLsizei width, height; 8056 GLsizei width, height;
8043 EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); 8057 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
8044 EXPECT_EQ(width, 8); 8058 EXPECT_EQ(width, 8);
8045 EXPECT_EQ(height, 8); 8059 EXPECT_EQ(height, 8);
8046 } 8060 }
8047 8061
8048 // AsyncTexSubImage2D 8062 // AsyncTexSubImage2D
8049 info->SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState>()); 8063 texture->SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState>());
8050 info->SetImmutable(false); 8064 texture->SetImmutable(false);
8051 { 8065 {
8052 // Create transfer state since it doesn't exist. 8066 // Create transfer state since it doesn't exist.
8053 EXPECT_CALL(*delegate, CreateRawPixelTransferState(kServiceTextureId)) 8067 EXPECT_CALL(*delegate, CreateRawPixelTransferState(kServiceTextureId))
8054 .WillOnce(Return( 8068 .WillOnce(Return(
8055 state = new StrictMock<gfx::MockAsyncPixelTransferState>)) 8069 state = new StrictMock<gfx::MockAsyncPixelTransferState>))
8056 .RetiresOnSaturation(); 8070 .RetiresOnSaturation();
8057 EXPECT_CALL(*delegate, AsyncTexSubImage2D(state, _, _)) 8071 EXPECT_CALL(*delegate, AsyncTexSubImage2D(state, _, _))
8058 .RetiresOnSaturation(); 8072 .RetiresOnSaturation();
8059 // Command succeeds. 8073 // Command succeeds.
8060 EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd)); 8074 EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd));
8061 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8075 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8062 EXPECT_TRUE(info->GetAsyncTransferState()); 8076 EXPECT_TRUE(texture->GetAsyncTransferState());
8063 EXPECT_TRUE(info->IsImmutable()); 8077 EXPECT_TRUE(texture->IsImmutable());
8064 EXPECT_TRUE(info->SafeToRenderFrom()); 8078 EXPECT_TRUE(texture->SafeToRenderFrom());
8065 } 8079 }
8066 { 8080 {
8067 // No transfer is in progress. 8081 // No transfer is in progress.
8068 EXPECT_CALL(*state, TransferIsInProgress()) 8082 EXPECT_CALL(*state, TransferIsInProgress())
8069 .WillOnce(Return(false)) // texSubImage validation 8083 .WillOnce(Return(false)) // texSubImage validation
8070 .WillOnce(Return(false)) // async validation 8084 .WillOnce(Return(false)) // async validation
8071 .RetiresOnSaturation(); 8085 .RetiresOnSaturation();
8072 EXPECT_CALL(*delegate, AsyncTexSubImage2D(state, _, _)) 8086 EXPECT_CALL(*delegate, AsyncTexSubImage2D(state, _, _))
8073 .RetiresOnSaturation(); 8087 .RetiresOnSaturation();
8074 // Command succeeds. 8088 // Command succeeds.
8075 EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd)); 8089 EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd));
8076 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8090 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8077 EXPECT_TRUE(info->GetAsyncTransferState()); 8091 EXPECT_TRUE(texture->GetAsyncTransferState());
8078 EXPECT_TRUE(info->IsImmutable()); 8092 EXPECT_TRUE(texture->IsImmutable());
8079 EXPECT_TRUE(info->SafeToRenderFrom()); 8093 EXPECT_TRUE(texture->SafeToRenderFrom());
8080 } 8094 }
8081 { 8095 {
8082 // A transfer is still in progress! 8096 // A transfer is still in progress!
8083 EXPECT_CALL(*state, TransferIsInProgress()) 8097 EXPECT_CALL(*state, TransferIsInProgress())
8084 .WillOnce(Return(true)) 8098 .WillOnce(Return(true))
8085 .RetiresOnSaturation(); 8099 .RetiresOnSaturation();
8086 // No async call, command fails. 8100 // No async call, command fails.
8087 EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd)); 8101 EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd));
8088 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 8102 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
8089 EXPECT_TRUE(info->GetAsyncTransferState()); 8103 EXPECT_TRUE(texture->GetAsyncTransferState());
8090 EXPECT_TRUE(info->IsImmutable()); 8104 EXPECT_TRUE(texture->IsImmutable());
8091 EXPECT_TRUE(info->SafeToRenderFrom()); 8105 EXPECT_TRUE(texture->SafeToRenderFrom());
8092 } 8106 }
8093 8107
8094 // WaitAsyncTexImage2D 8108 // WaitAsyncTexImage2D
8095 { 8109 {
8096 // Get a fresh texture since the existing texture cannot be respecified 8110 // Get a fresh texture since the existing texture cannot be respecified
8097 // asynchronously and AsyncTexSubImage2D does not involved binding. 8111 // asynchronously and AsyncTexSubImage2D does not involved binding.
8098 EXPECT_CALL(*gl_, GenTextures(1, _)) 8112 EXPECT_CALL(*gl_, GenTextures(1, _))
8099 .WillOnce(SetArgumentPointee<1>(kServiceTextureId)); 8113 .WillOnce(SetArgumentPointee<1>(kServiceTextureId));
8100 info->SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState>()); 8114 texture->SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState>());
8101 DoDeleteTexture(client_texture_id_, kServiceTextureId); 8115 DoDeleteTexture(client_texture_id_, kServiceTextureId);
8102 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8116 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8103 info = GetTexture(client_texture_id_); 8117 texture = GetTexture(client_texture_id_);
8104 info->SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState>()); 8118 texture->SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState>());
8105 info->SetImmutable(false); 8119 texture->SetImmutable(false);
8106 // Create transfer state since it doesn't exist. 8120 // Create transfer state since it doesn't exist.
8107 EXPECT_CALL(*delegate, CreateRawPixelTransferState(kServiceTextureId)) 8121 EXPECT_CALL(*delegate, CreateRawPixelTransferState(kServiceTextureId))
8108 .WillOnce(Return( 8122 .WillOnce(Return(
8109 state = new StrictMock<gfx::MockAsyncPixelTransferState>)) 8123 state = new StrictMock<gfx::MockAsyncPixelTransferState>))
8110 .RetiresOnSaturation(); 8124 .RetiresOnSaturation();
8111 EXPECT_CALL(*delegate, AsyncTexImage2D(state, _, _)) 8125 EXPECT_CALL(*delegate, AsyncTexImage2D(state, _, _))
8112 .RetiresOnSaturation(); 8126 .RetiresOnSaturation();
8113 // Start async transfer. 8127 // Start async transfer.
8114 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); 8128 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
8115 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8129 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8116 EXPECT_TRUE(info->GetAsyncTransferState()); 8130 EXPECT_TRUE(texture->GetAsyncTransferState());
8117 EXPECT_TRUE(info->IsImmutable()); 8131 EXPECT_TRUE(texture->IsImmutable());
8118 // Wait for completion. 8132 // Wait for completion.
8119 EXPECT_CALL(*delegate, WaitForTransferCompletion(state)); 8133 EXPECT_CALL(*delegate, WaitForTransferCompletion(state));
8120 EXPECT_CALL(*state, TransferIsInProgress()) 8134 EXPECT_CALL(*state, TransferIsInProgress())
8121 .WillOnce(Return(false)) 8135 .WillOnce(Return(false))
8122 .RetiresOnSaturation(); 8136 .RetiresOnSaturation();
8123 EXPECT_CALL(*state, BindTransfer(_)) 8137 EXPECT_CALL(*state, BindTransfer(_))
8124 .WillOnce(SetArgPointee<0>(teximage_params)) 8138 .WillOnce(SetArgPointee<0>(teximage_params))
8125 .RetiresOnSaturation(); 8139 .RetiresOnSaturation();
8126 // State restoration after binding. 8140 // State restoration after binding.
8127 EXPECT_CALL(*gl_, ActiveTexture(_)); 8141 EXPECT_CALL(*gl_, ActiveTexture(_));
8128 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, _)); 8142 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, _));
8129 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd)); 8143 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd));
8130 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8144 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8131 } 8145 }
8132 8146
8133 decoder_->SetAsyncPixelTransferDelegate(NULL); 8147 decoder_->SetAsyncPixelTransferDelegate(NULL);
8134 info->SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState>()); 8148 texture->SetAsyncTransferState(scoped_ptr<gfx::AsyncPixelTransferState>());
8135 } 8149 }
8136 8150
8137 namespace { 8151 namespace {
8138 8152
8139 class SizeOnlyMemoryTracker : public MemoryTracker { 8153 class SizeOnlyMemoryTracker : public MemoryTracker {
8140 public: 8154 public:
8141 SizeOnlyMemoryTracker() { 8155 SizeOnlyMemoryTracker() {
8142 // These are the default textures. 1 for TEXTURE_2D and 6 faces for 8156 // These are the default textures. 1 for TEXTURE_2D and 6 faces for
8143 // TEXTURE_CUBE_MAP. 8157 // TEXTURE_CUBE_MAP.
8144 const size_t kInitialUnmanagedPoolSize = 7 * 4; 8158 const size_t kInitialUnmanagedPoolSize = 7 * 4;
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
8417 // TODO(gman): TexImage2DImmediate 8431 // TODO(gman): TexImage2DImmediate
8418 8432
8419 // TODO(gman): TexSubImage2DImmediate 8433 // TODO(gman): TexSubImage2DImmediate
8420 8434
8421 // TODO(gman): UseProgram 8435 // TODO(gman): UseProgram
8422 8436
8423 // TODO(gman): SwapBuffers 8437 // TODO(gman): SwapBuffers
8424 8438
8425 } // namespace gles2 8439 } // namespace gles2
8426 } // namespace gpu 8440 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698