| // | |
| // Copyright 2017 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| // ProgramPipelineTest: | |
| // Various tests related to Program Pipeline. | |
| // | |
| #include "test_utils/ANGLETest.h" | |
| #include "test_utils/gl_raii.h" | |
| using namespace angle; | |
| namespace | |
| { | |
| class ProgramPipelineTest : public ANGLETest | |
| { | |
| protected: | |
| ProgramPipelineTest() | |
| { | |
| setWindowWidth(64); | |
| setWindowHeight(64); | |
| setConfigRedBits(8); | |
| setConfigGreenBits(8); | |
| setConfigBlueBits(8); | |
| setConfigAlphaBits(8); | |
| } | |
| }; | |
| // Verify that program pipeline is not supported in version lower than ES31. | |
| TEST_P(ProgramPipelineTest, GenerateProgramPipelineObject) | |
| { | |
| GLuint pipeline; | |
| glGenProgramPipelines(1, &pipeline); | |
| if (getClientMajorVersion() < 3 || getClientMinorVersion() < 1) | |
| { | |
| EXPECT_GL_ERROR(GL_INVALID_OPERATION); | |
| } | |
| else | |
| { | |
| EXPECT_GL_NO_ERROR(); | |
| glDeleteProgramPipelines(1, &pipeline); | |
| EXPECT_GL_NO_ERROR(); | |
| } | |
| } | |
| class ProgramPipelineTest31 : public ProgramPipelineTest | |
| {}; | |
| // Test generate or delete program pipeline. | |
| TEST_P(ProgramPipelineTest31, GenOrDeleteProgramPipelineTest) | |
| { | |
| GLuint pipeline; | |
| glGenProgramPipelines(-1, &pipeline); | |
| EXPECT_GL_ERROR(GL_INVALID_VALUE); | |
| glGenProgramPipelines(0, &pipeline); | |
| EXPECT_GL_NO_ERROR(); | |
| glDeleteProgramPipelines(-1, &pipeline); | |
| EXPECT_GL_ERROR(GL_INVALID_VALUE); | |
| glDeleteProgramPipelines(0, &pipeline); | |
| EXPECT_GL_NO_ERROR(); | |
| } | |
| // Test BindProgramPipeline. | |
| TEST_P(ProgramPipelineTest31, BindProgramPipelineTest) | |
| { | |
| glBindProgramPipeline(0); | |
| EXPECT_GL_NO_ERROR(); | |
| glBindProgramPipeline(2); | |
| EXPECT_GL_ERROR(GL_INVALID_OPERATION); | |
| GLuint pipeline; | |
| glGenProgramPipelines(1, &pipeline); | |
| glBindProgramPipeline(pipeline); | |
| EXPECT_GL_NO_ERROR(); | |
| glDeleteProgramPipelines(1, &pipeline); | |
| glBindProgramPipeline(pipeline); | |
| EXPECT_GL_ERROR(GL_INVALID_OPERATION); | |
| } | |
| // Test IsProgramPipeline | |
| TEST_P(ProgramPipelineTest31, IsProgramPipelineTest) | |
| { | |
| EXPECT_GL_FALSE(glIsProgramPipeline(0)); | |
| EXPECT_GL_NO_ERROR(); | |
| EXPECT_GL_FALSE(glIsProgramPipeline(2)); | |
| EXPECT_GL_NO_ERROR(); | |
| GLuint pipeline; | |
| glGenProgramPipelines(1, &pipeline); | |
| glBindProgramPipeline(pipeline); | |
| EXPECT_GL_TRUE(glIsProgramPipeline(pipeline)); | |
| EXPECT_GL_NO_ERROR(); | |
| glBindProgramPipeline(0); | |
| glDeleteProgramPipelines(1, &pipeline); | |
| EXPECT_GL_FALSE(glIsProgramPipeline(pipeline)); | |
| EXPECT_GL_NO_ERROR(); | |
| } | |
| ANGLE_INSTANTIATE_TEST_ES3_AND_ES31(ProgramPipelineTest); | |
| ANGLE_INSTANTIATE_TEST_ES31(ProgramPipelineTest31); | |
| } // namespace |