1------------------------------------------------------------------------- 2drawElements Quality Program Test Specification 3----------------------------------------------- 4 5Copyright 2014 The Android Open Source Project 6 7Licensed under the Apache License, Version 2.0 (the "License"); 8you may not use this file except in compliance with the License. 9You may obtain a copy of the License at 10 11 http://www.apache.org/licenses/LICENSE-2.0 12 13Unless required by applicable law or agreed to in writing, software 14distributed under the License is distributed on an "AS IS" BASIS, 15WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16See the License for the specific language governing permissions and 17limitations under the License. 18------------------------------------------------------------------------- 19 Geometry and tessellation shader interaction tests 20 21Tests: 22 + dEQP-GLES31.functional.tessellation_geometry_interaction.* 23 + dEQP-GLES31.stress.tessellation_geometry_interaction.* 24 25Includes: 26 + Basic render tests using a shader program with tessellation and 27 geometry shading stages. 28 + Render tests with maximum geometry amplification in different stages 29 + Scattering render tests where result primitives are scattered all 30 over the viewport and render layers. 31 + Basic transform feedback tests 32 + Point size render tests 33 34Excludes: 35 + Complex rendering tests 36 + SSBO memory access ordering test between tessellation and geometry shaders 37 + Transform feedback with all basic types 38 39Description: 40 41render.passthrough cases tests basic rendering with a shader program with 42attached tessellation and geometry shaders. Tests verify that attaching either a 43passthrough geometry or tessellation shader does not change the result image. In 44*_passthrough_geometry_* cases, the pattern is first rendered without a geometry 45shader and then with a passthrough geometry shader. In 46*_passthrough_tessellation_* cases, image is first rendered without a 47tessellation stage and then with a passthrough tessellation shader attached. 48 49render.limits.* cases test rendering with a five stage shader program with a 50shader that uses the maximum number of geometry output vertices, uses maximum 51number geometry shader instances, or sets the maximum tessellation level. 52*_required_* cases use the maximum limit as required by the extension 53specifications and *_implementation_* cases use the maximum limit reported by 54the glGetInteger(GL_MAX_...) queries. Cases render a grid of green and yellow 55cells, and the result image is verified. 56 57The 58dEQP-GLES31.stress.tessellation_geometry_interaction.render_multiple_limits.* 59cases are otherwise identical to the functional cases but the stress.* 60counterparts test multiple implementation and specification mandated limits at 61the same time. Due to the extreme geometry amplification in certain tests, the 62OUT_OF_MEMORY error is treated as a valid result (in addition to the valid 63render result). 64 65render.scatter.* cases use geometry shader to scatter the output primitives all 66over the viewport. In the geometry_scatter_instances case, each geometry shader 67instance emits its primitives near to each other but far form the primitives 68emitted by the other instances of the same geometry shader execution. In the 69geometry_scatter_primitives, each geometry shader instance emits its primitives 70far form each other. In geometry_scatter_layers case, each emitted primitive of 71a geometry shader instance is assigned a different layer index. Cases render a 72grid of green and yellow cells, and the result image is verified. 73 74feedback.tessellation_output_*_geometry_output_* cases test that transform 75feedback works with five stage shader programs with different tessellation and 76geometry output primitive types. Tests verify the validity of feedback results 77and the value GL_PRIMITIVES_GENERATED query and then compare the rendered image 78against the feedback results. 79 80feedback.record_variable_selection case tests that when using transform 81feedback the recorded variable is selected from the geometry shader if the 82geometry shader is active. 83 84point_size.* cases test reading and writing to gl_PointSize varible in different 85shader stages. In {vertex, control, evaluation, geometry}_set cases, a constant 86is assigned to the gl_PointSize in the corresponding shader stage. In {vertex, 87control, ...}_add cases, gl_PointSize is incremented by a constant. In {eval, 88default}_default cases, the corresponding shader stage is active, but it does 89not modify the point size or use the shader stage specific point size extension. 90The shader program is used to render a single point, and the rendered point size 91is then verified from the image. 92