Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc |
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc |
index 2d034c3d5b6926a266221d71784e9f0c811969df..9379cf1a1054563a26a46a7513b18dc8dc4fe6ca 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc |
@@ -1424,6 +1424,67 @@ TEST_P(GLES2DecoderTest, LoseContextCHROMIUMInvalidArgs1_0) { |
EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); |
} |
+TEST_P(GLES3DecoderTest, TransformFeedbackStates) { |
+ cmds::BeginTransformFeedback begin_cmd; |
+ begin_cmd.Init(GL_POINTS); |
+ cmds::EndTransformFeedback end_cmd; |
+ end_cmd.Init(); |
+ cmds::PauseTransformFeedback pause_cmd; |
+ pause_cmd.Init(); |
+ cmds::ResumeTransformFeedback resume_cmd; |
+ resume_cmd.Init(); |
+ |
+ // Before Begin: Pause, Resume, and End is invalid. |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
+ |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(pause_cmd)); |
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
+ |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(resume_cmd)); |
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
+ |
+ // Begin |
+ EXPECT_CALL(*gl_, BeginTransformFeedback(GL_POINTS)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+ |
+ // Begin again is invalid. |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
+ |
+ // Before Pause: Resume is invalid. |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(resume_cmd)); |
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
+ |
+ // Pause |
+ EXPECT_CALL(*gl_, PauseTransformFeedback()) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(pause_cmd)); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+ |
+ // Pause again is invalid. |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(pause_cmd)); |
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
+ |
+ // Resume |
+ EXPECT_CALL(*gl_, ResumeTransformFeedback()) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(resume_cmd)); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+ |
+ // End |
+ EXPECT_CALL(*gl_, EndTransformFeedback()) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+} |
+ |
class GLES2DecoderDoCommandsTest : public GLES2DecoderTest { |
public: |
GLES2DecoderDoCommandsTest() { |