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 shader tests 20 21Tests: 22 + dEQP-GLES31.functional.geometry_shading.* 23 24Includes: 25 + Basic tests: 26 - gl_PointSize, gl_PrimitiveID, gl_PrimitiveIDIn built-ins 27 - Constant and varying emit counts 28 - All input primitive types 29 - All output privitive types (point, line_strip, triangle_strip) 30 - Different number of varyings 31 + Non-sufficient vertex emit counts, superfluous EndPrimitives() 32 + Layered rendering 33 + Negative tests for input types 34 35Excludes: 36 + Geometry shader transform feedback 37 + (Negative) tests for vertex-geo-frag shader varying linkage. 38 + Primitive render order with geometry shader instancing 39 40Description: 41 42Geometry shader tests test geometry shader functionality by rendering 43a scene using geometry shaders and comparing the resulting image to 44the output of a reference renderer. Layered rendering render tests 45draw scene to a texture which is then read back layer by layer. Contents 46of each layer is then verified. 47 48query.* test group contains various query tests. max_geometry_* cases 49verify that the implementation limit queried via API is equal to the 50corresponding GLSL constant. geometry_* and max_geometry_* cases test 51geometry shader related limits and states. primitives_generated_* cases 52verify GL_PRIMITIVES_GENERATED query result in various scenarios. 53max_framebuffer_* and framebuffer_* test verify layered fbo limits, states 54and incompleteness conditions. 55 56basic.* tests test basic geometry shader usage: output_* cases emit 57a constant number of vertices. output_vary_by_* cases emit a varying 58number of vertices, depending on a shader varying, uniform or a texture 59lookup. basic.point_size, basic.primitive_id_in[_restarted] and 60basic.primitive_id cases test functionality of a corresponding built-in 61variable. *_restarted variant verifies that primitive restart index has 62no effect to the corresponding variable. 63 64input.* tests verify geometry shader behavior with different input types 65by drawing a separate triangle for each geometry shader input vertex. 66input.triangle_strip_adjacency.* cases verify correct behavior of 67TRIANGLE_ADJACENCY primitive with different vertex counts. 68 69conversion.* tests verify functionality of geometry shaders with different 70input and output primitive types. 71 72emit.* tests test geometry shaders with different number of EmitVertex() 73and EndPrimitive() calls, ranging from too few to superfluous. A geometry 74shader invocation with name *_emit_N_end_M calls EmitVertex() N times and 75EndPrimitive() M times. 76 77varying.* tests verify the functionality of vertex shader -> geometry shader 78varyigns and geometry shader -> fragment shader varyings. 79 80layered.* tests geometry shader layered rendering targeting a cubemap, 3D, 812D array, and 2D multisample array texture. Tests render to the default layers, 82only to one layer, each layer separately, or to each layer with different 83contents and verify the contents of each layer. fragment_layer_* cases verify 84the fragment shader built-in variable gl_Layer by outputting different color to 85each layer. layer_provoking_vertex_* cases verify implementation dependent value 86GL_LAYER_PROVOKING_VERTEX by rendering two triangles with one vertex having a 87different gl_Layer value. The actual provoking vertex is then verified by 88checking the layer contents. 89 90instanced.* tests geometry shader instancing functionality. 91geometry[_output_different]_N_invocations cases test basic geometry shader 92instancing by rendering primitives in a circle formation. Each output primitive 93on the circle is generated by a single geometry shader invocation and each 94circle is generated by a single input primitive. invocation_per_layer and 95multiple_layers_per_invocation cases test geometry shader instancing with 96layered rendering. In invocation_per_layer cases, shader invocation writes only 97to a single layer and in multiple_layers_per_invocation cases to two layers. In 98invocation_output_vary_by_* cases, invocations emit a varying number of 99vertices, depending on a shader varying, uniform or a texture lookup. 100draw_N_instances_geometry_M_invocations cases test geometry instancing in with 101instanced drawing. As in the geometry_N_invocations, a group of primitives is 102drawn around each input primitive instance. 103 104negative.* cases create a geometry shader accepting a certain input 105primitive type and then try to use the shader when drawing with an incompatible 106primitive type. GL_INVALID_OPERATION is expected. 107 108vertex_transform_feedback.* cases test transform feedback relaxations introduced 109in the extension. Tests include all new render primitive modes and 110draw{arrays,elements}{e,indirect,instanced} draw functions. 111capture_vertex_draw_elements_overflow_single_buffer case tests that a 112buffer-overflowing primitive feedback result is not partially written to the 113feedback buffer. 114