------------------------------------------------------------------------- drawElements Quality Program Test Specification ----------------------------------------------- Copyright 2014 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ------------------------------------------------------------------------- Separate shader object tests Tests: + dEQP-GLES31.separate_shader.* Includes: + Single-program and two-program pipelines + Replacement of pipeline stages + Independence of homonymous uniforms and constants in the pipeline's programs + Interface compatibility between shader stages + glProgramUniform on the pipeline's stages + glCreateShaderProgram + glActiveShaderProgram + glBindProgramPipeline vs glUseProgram priority + glGetProgramPipelineiv queries: - GL_ACTIVE_PROGRAM - GL_VERTEX_SHADER - GL_FRAGMENT_SHADER Excludes: + Testing pipeline rendering against a hardware-independent reference renderer The "api.current_program_priority" test case checks that a bound pipeline has no effect when there is a current program. The test creates a program pipeline and a differently behaving monolithic program. It then calls glUseProgram and and glBindProgramPipeline and draws a triangle. The resulting image is compared to a reference image drawn with the program but without a bound program pipeline. The "api.active_program_uniform" test case creates a pipeline and a program, binds the pipeline and sets that program as the pipeline's active program. After this, glUniform is called and a triangle is drawn. The resulting image is compared to a reference image from a similar program whose uniform was set after glUseProgram. The "api.pipeline_programs" test case checks that glGetProgramPipelineiv returns the correct programs for vertex and shader stages. The "api.pipeline_active" test case checks that glGetProgramPipelineiv returns the program that was set as the pipeline's active program. The following tests create a program pipeline with one or two programs, and then possibly replace either or both of the stages with a new single-shader program. A triangle is drawn with the pipeline and the result is compared to a triangle drawn with an equivalent monolithic program. In the "pipeline.*" test cases the shaders have uniforms or constants, but no varyings. The variables in distinct programs may have the same name. In the "program_uniform.*" test cases the shaders have uniforms which are set with glProgramUniform. In the "create_shader_program.*" test cases the single-shader programs in the pipeline are created with glCreateShaderProgram. In the "interface.*" test cases there is a varying between the vertex and fragment shaders. The declarations of the vertex output and fragment input variables may have different qualifiers or names. The "random.*" test cases create random pipeline configurations that mix properties of the previous test case groups. The shaders may have zero, one or more varyings. The values of different varyings are rendered as diagonal stripes in the drawn triangle.