| Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
|
| index fbad893fcf5980c46e381231db12982031d7eb5d..0fc0769ee500e5adc51893148fc6937ccf9cbb13 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
|
| @@ -4038,6 +4038,106 @@ TEST_P(GLES3DecoderTest, BlitFramebufferMissingDepthOrStencil) {
|
| }
|
| }
|
|
|
| +class GLES2DecoderTestWithDrawRectangle : public GLES2DecoderTest {
|
| + void SetUp() override {
|
| + surface_supports_draw_rectangle_ = true;
|
| + GLES2DecoderTest::SetUp();
|
| + }
|
| +};
|
| +
|
| +// Test that the draw offset is correctly honored when SetDrawRectangle is
|
| +// supported.
|
| +TEST_P(GLES2DecoderTestWithDrawRectangle, FramebufferDrawRectangleClear) {
|
| + EXPECT_CALL(*gl_, Scissor(101, 202, 3, 4)).Times(1).RetiresOnSaturation();
|
| + cmds::Scissor scissor_cmd;
|
| + scissor_cmd.Init(1, 2, 3, 4);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(scissor_cmd));
|
| +
|
| + // Scissor and Viewport should be restored to (0,0) offset on when clearing
|
| + // a framebuffer.
|
| + {
|
| + const GLuint kFBOClientTextureId = 4100;
|
| + const GLuint kFBOServiceTextureId = 4101;
|
| +
|
| + // Register a texture id.
|
| + EXPECT_CALL(*gl_, GenTextures(_, _))
|
| + .WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
|
| + .RetiresOnSaturation();
|
| + GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
|
| +
|
| + // Setup "render to" texture.
|
| + DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
|
| + DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
|
| + 0, 0);
|
| + DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
|
| + kServiceFramebufferId);
|
| + DoFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
|
| + kFBOClientTextureId, kFBOServiceTextureId, 0,
|
| + GL_NO_ERROR);
|
| + // Set scissor rect and enable GL_SCISSOR_TEST to make sure we re-enable it
|
| + // and restore the rect again after the clear.
|
| + DoEnableDisable(GL_SCISSOR_TEST, true);
|
| + EXPECT_CALL(*gl_, Viewport(0, 0, 128, 64)).Times(1).RetiresOnSaturation();
|
| + EXPECT_CALL(*gl_, Scissor(1, 2, 3, 4)).Times(1).RetiresOnSaturation();
|
| +
|
| + // Setup "render from" texture.
|
| + SetupTexture();
|
| +
|
| + SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target
|
| + GL_COLOR_BUFFER_BIT, // clear bits
|
| + 0, 0, 0,
|
| + 0, // color
|
| + 0, // stencil
|
| + 1.0f, // depth
|
| + true, // scissor test
|
| + 1, 2, 3, 4);
|
| + SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
|
| + false, // Framebuffer has depth
|
| + false, // Framebuffer has stencil
|
| + 0x1111, // color bits
|
| + false, // depth mask
|
| + false, // depth enabled
|
| + 0, // front stencil mask
|
| + 0, // back stencil mask
|
| + false); // stencil enabled
|
| +
|
| + EXPECT_CALL(*gl_, Clear(GL_COLOR_BUFFER_BIT))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| +
|
| + Clear cmd;
|
| + cmd.Init(GL_COLOR_BUFFER_BIT);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + }
|
| +
|
| + // Check that the draw offset is used when switching to the default
|
| + // framebuffer and clearing it.
|
| + {
|
| + DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0);
|
| + EXPECT_CALL(*gl_, Clear(GL_COLOR_BUFFER_BIT))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + SetupExpectationsForColorMask(true, true, true, true);
|
| + SetupExpectationsForDepthMask(true);
|
| + SetupExpectationsForStencilMask(0, 0);
|
| + SetupExpectationsForEnableDisable(GL_DEPTH_TEST, false);
|
| + SetupExpectationsForEnableDisable(GL_STENCIL_TEST, false);
|
| + EXPECT_CALL(*gl_, Viewport(100, 200, 128, 64))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + EXPECT_CALL(*gl_, Scissor(101, 202, 3, 4)).Times(1).RetiresOnSaturation();
|
| + Clear cmd;
|
| + cmd.Init(GL_COLOR_BUFFER_BIT);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + }
|
| +}
|
| +
|
| +INSTANTIATE_TEST_CASE_P(Service,
|
| + GLES2DecoderTestWithDrawRectangle,
|
| + ::testing::Bool());
|
| +
|
| // TODO(gman): PixelStorei
|
|
|
| // TODO(gman): SwapBuffers
|
|
|