| Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
|
| index c41f34edae2ca886a7612b19a9b7cf14299984a4..159813d460570ebca5fbc6bcd11b46efae6da494 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
|
| @@ -103,16 +103,9 @@ TEST_P(GLES2DecoderTest, GenerateMipmapClearsUnclearedTexture) {
|
| DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
|
| DoTexImage2D(
|
| GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
|
| - SetupClearTextureExpectations(kServiceTextureId,
|
| - kServiceTextureId,
|
| - GL_TEXTURE_2D,
|
| - GL_TEXTURE_2D,
|
| - 0,
|
| - GL_RGBA,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - 2,
|
| - 2);
|
| + SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
|
| + GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
|
| + GL_RGBA, GL_UNSIGNED_BYTE, 0, 0, 2, 2);
|
| EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D));
|
| EXPECT_CALL(*gl_, GetError())
|
| .WillOnce(Return(GL_NO_ERROR))
|
| @@ -139,16 +132,9 @@ TEST_P(GLES2DecoderManualInitTest, SetTextureFiltersBeforeGenerateMipmap) {
|
| DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
|
| DoTexImage2D(
|
| GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
|
| - SetupClearTextureExpectations(kServiceTextureId,
|
| - kServiceTextureId,
|
| - GL_TEXTURE_2D,
|
| - GL_TEXTURE_2D,
|
| - 0,
|
| - GL_RGBA,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - 2,
|
| - 2);
|
| + SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
|
| + GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
|
| + GL_RGBA, GL_UNSIGNED_BYTE, 0, 0, 2, 2);
|
| EXPECT_CALL(
|
| *gl_,
|
| TexParameteri(
|
| @@ -511,16 +497,6 @@ TEST_P(GLES2DecoderTest, TexImage2DRedefinitionSucceeds) {
|
| kSharedMemoryId,
|
| kSharedMemoryOffset);
|
| } else {
|
| - SetupClearTextureExpectations(kServiceTextureId,
|
| - kServiceTextureId,
|
| - GL_TEXTURE_2D,
|
| - GL_TEXTURE_2D,
|
| - 0,
|
| - GL_RGBA,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - kWidth,
|
| - kHeight);
|
| cmd.Init(GL_TEXTURE_2D,
|
| 0,
|
| GL_RGBA,
|
| @@ -1776,52 +1752,23 @@ TEST_P(GLES2DecoderManualInitTest, TexSubImage2DClearsAfterTexImage2DNULL) {
|
| DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
|
| DoTexImage2D(
|
| GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
|
| - SetupClearTextureExpectations(kServiceTextureId,
|
| - kServiceTextureId,
|
| - GL_TEXTURE_2D,
|
| - GL_TEXTURE_2D,
|
| - 0,
|
| - GL_RGBA,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - 2,
|
| - 2);
|
| - EXPECT_CALL(*gl_,
|
| - TexSubImage2D(GL_TEXTURE_2D,
|
| - 0,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - shared_memory_address_))
|
| - .Times(1)
|
| + SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
|
| + GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
|
| + GL_RGBA, GL_UNSIGNED_BYTE, 0, 1, 2, 1);
|
| + EXPECT_CALL(*gl_, TexSubImage2D(GL_TEXTURE_2D, 0, 0, _, _, 1, GL_RGBA,
|
| + GL_UNSIGNED_BYTE, shared_memory_address_))
|
| + .Times(2)
|
| .RetiresOnSaturation();
|
| TexSubImage2D cmd;
|
| - cmd.Init(GL_TEXTURE_2D,
|
| - 0,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - kSharedMemoryId,
|
| - kSharedMemoryOffset,
|
| - GL_FALSE);
|
| + cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 2, 1, GL_RGBA, GL_UNSIGNED_BYTE,
|
| + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + cmd.Init(GL_TEXTURE_2D, 0, 0, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
|
| + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
|
| EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| // Test if we call it again it does not clear.
|
| - EXPECT_CALL(*gl_,
|
| - TexSubImage2D(GL_TEXTURE_2D,
|
| - 0,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - shared_memory_address_))
|
| + EXPECT_CALL(*gl_, TexSubImage2D(GL_TEXTURE_2D, 0, 0, 1, 1, 1, GL_RGBA,
|
| + GL_UNSIGNED_BYTE, shared_memory_address_))
|
| .Times(1)
|
| .RetiresOnSaturation();
|
| EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| @@ -1978,40 +1925,19 @@ TEST_P(GLES2DecoderTest, TexSubImage2DClearsAfterTexImage2DWithDataThenNULL) {
|
| // It won't actually call TexImage2D, just mark it as uncleared.
|
| EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
|
| // Next call to TexSubImage2d should clear.
|
| - SetupClearTextureExpectations(kServiceTextureId,
|
| - kServiceTextureId,
|
| - GL_TEXTURE_2D,
|
| - GL_TEXTURE_2D,
|
| - 0,
|
| - GL_RGBA,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - 2,
|
| - 2);
|
| - EXPECT_CALL(*gl_,
|
| - TexSubImage2D(GL_TEXTURE_2D,
|
| - 0,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - shared_memory_address_))
|
| - .Times(1)
|
| + SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
|
| + GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
|
| + GL_RGBA, GL_UNSIGNED_BYTE, 0, 1, 2, 1);
|
| + EXPECT_CALL(*gl_, TexSubImage2D(GL_TEXTURE_2D, 0, 0, _, _, 1, GL_RGBA,
|
| + GL_UNSIGNED_BYTE, shared_memory_address_))
|
| + .Times(2)
|
| .RetiresOnSaturation();
|
| TexSubImage2D cmd;
|
| - cmd.Init(GL_TEXTURE_2D,
|
| - 0,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - 1,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - kSharedMemoryId,
|
| - kSharedMemoryOffset,
|
| - GL_FALSE);
|
| + cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 2, 1, GL_RGBA, GL_UNSIGNED_BYTE,
|
| + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + cmd.Init(GL_TEXTURE_2D, 0, 0, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
|
| + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
|
| EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| }
|
|
|
| @@ -2039,27 +1965,67 @@ TEST_P(GLES2DecoderTest, CopyTexImage2DMarksTextureAsCleared) {
|
| EXPECT_TRUE(texture->SafeToRenderFrom());
|
| }
|
|
|
| -TEST_P(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedTexture) {
|
| +TEST_P(GLES2DecoderTest, CopyTexSubImage2DTwiceMarksTextureAsCleared) {
|
| DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
|
| DoTexImage2D(
|
| GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
|
|
|
| - SetupClearTextureExpectations(kServiceTextureId,
|
| - kServiceTextureId,
|
| - GL_TEXTURE_2D,
|
| - GL_TEXTURE_2D,
|
| - 0,
|
| - GL_RGBA,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - 2,
|
| - 2);
|
| - EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1))
|
| - .Times(1)
|
| - .RetiresOnSaturation();
|
| - CopyTexSubImage2D cmd;
|
| - cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
|
| - EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + // This will initialize the top part.
|
| + {
|
| + EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + CopyTexSubImage2D cmd;
|
| + cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + }
|
| +
|
| + // This will initialize the bottom part.
|
| + {
|
| + EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 1, 0, 0, 2, 1))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + CopyTexSubImage2D cmd;
|
| + cmd.Init(GL_TEXTURE_2D, 0, 0, 1, 0, 0, 2, 1);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + }
|
| +
|
| + TextureManager* manager = group().texture_manager();
|
| + TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
|
| + ASSERT_TRUE(texture_ref != NULL);
|
| + Texture* texture = texture_ref->texture();
|
| + EXPECT_TRUE(texture->SafeToRenderFrom());
|
| +}
|
| +
|
| +TEST_P(GLES2DecoderTest, CopyTexSubImage2DTwiceClearsUnclearedTexture) {
|
| + DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
|
| + DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0,
|
| + 0);
|
| +
|
| + // This will initialize the top part.
|
| + {
|
| + EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + CopyTexSubImage2D cmd;
|
| + cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + }
|
| +
|
| + SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
|
| + GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
|
| + GL_RGBA, GL_UNSIGNED_BYTE, 0, 1, 2, 1);
|
| +
|
| + // This will clear the bottom part as a rectangle is not sufficient to keep
|
| + // track of the initialized area.
|
| + {
|
| + EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 1, 1, 0, 0, 1, 1))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + CopyTexSubImage2D cmd;
|
| + cmd.Init(GL_TEXTURE_2D, 0, 1, 1, 0, 0, 1, 1);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + }
|
|
|
| TextureManager* manager = group().texture_manager();
|
| TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
|
| @@ -2680,8 +2646,8 @@ TEST_P(GLES2DecoderTest, GLImageAttachedAfterClearLevel) {
|
| height, format, type, _))
|
| .Times(1)
|
| .RetiresOnSaturation();
|
| - GetDecoder()->ClearLevel(texture, target, level, format, format, type, width,
|
| - height, false);
|
| + GetDecoder()->ClearLevel(texture, target, level, format, type, 0, 0, width,
|
| + height);
|
| EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == image.get());
|
| }
|
|
|
| @@ -2895,17 +2861,9 @@ TEST_P(GLES2DecoderManualInitTest, DrawWithGLImageExternal) {
|
| TextureRef* texture_ref = GetTexture(client_texture_id_);
|
| scoped_refptr<MockGLImage> image(new MockGLImage);
|
| group().texture_manager()->SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES);
|
| - group().texture_manager()->SetLevelInfo(texture_ref,
|
| - GL_TEXTURE_EXTERNAL_OES,
|
| - 0,
|
| - GL_RGBA,
|
| - 0,
|
| - 0,
|
| - 1,
|
| - 0,
|
| - GL_RGBA,
|
| - GL_UNSIGNED_BYTE,
|
| - true);
|
| + group().texture_manager()->SetLevelInfo(texture_ref, GL_TEXTURE_EXTERNAL_OES,
|
| + 0, GL_RGBA, 0, 0, 1, 0, GL_RGBA,
|
| + GL_UNSIGNED_BYTE, gfx::Rect());
|
| group().texture_manager()->SetLevelImage(
|
| texture_ref, GL_TEXTURE_EXTERNAL_OES, 0, image.get());
|
|
|
| @@ -3058,40 +3016,19 @@ TEST_P(GLES2DecoderManualInitTest, TexSubImage2DFloatDoesClearOnGLES3) {
|
| GL_FLOAT,
|
| 0,
|
| 0);
|
| - SetupClearTextureExpectations(kServiceTextureId,
|
| - kServiceTextureId,
|
| - GL_TEXTURE_2D,
|
| - GL_TEXTURE_2D,
|
| - 0,
|
| - GL_RGBA32F,
|
| - GL_RGBA,
|
| - GL_FLOAT,
|
| - kWidth,
|
| - kHeight);
|
| - EXPECT_CALL(*gl_,
|
| - TexSubImage2D(GL_TEXTURE_2D,
|
| - 0,
|
| - 1,
|
| - 0,
|
| - kWidth - 1,
|
| - kHeight,
|
| - GL_RGBA,
|
| - GL_FLOAT,
|
| - shared_memory_address_))
|
| - .Times(1)
|
| + SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
|
| + GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA32F,
|
| + GL_RGBA, GL_FLOAT, 0, kHeight - 1, kWidth, 1);
|
| + EXPECT_CALL(*gl_, TexSubImage2D(GL_TEXTURE_2D, 0, 0, _, _, _, GL_RGBA,
|
| + GL_FLOAT, shared_memory_address_))
|
| + .Times(2)
|
| .RetiresOnSaturation();
|
| TexSubImage2D cmd;
|
| - cmd.Init(GL_TEXTURE_2D,
|
| - 0,
|
| - 1,
|
| - 0,
|
| - kWidth - 1,
|
| - kHeight,
|
| - GL_RGBA,
|
| - GL_FLOAT,
|
| - kSharedMemoryId,
|
| - kSharedMemoryOffset,
|
| - GL_FALSE);
|
| + cmd.Init(GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight - 1, GL_RGBA, GL_FLOAT,
|
| + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + cmd.Init(GL_TEXTURE_2D, 0, 0, kHeight - 1, kWidth - 1, 1, GL_RGBA, GL_FLOAT,
|
| + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
|
| EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| }
|
|
|