| ------------------------------------------------------------------------- |
| 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. |
| ------------------------------------------------------------------------- |
| Geometry shader tests |
| |
| Tests: |
| + dEQP-GLES31.functional.geometry_shading.* |
| |
| Includes: |
| + Basic tests: |
| - gl_PointSize, gl_PrimitiveID, gl_PrimitiveIDIn built-ins |
| - Constant and varying emit counts |
| - All input primitive types |
| - All output privitive types (point, line_strip, triangle_strip) |
| - Different number of varyings |
| + Non-sufficient vertex emit counts, superfluous EndPrimitives() |
| + Layered rendering |
| + Negative tests for input types |
| |
| Excludes: |
| + Geometry shader transform feedback |
| + (Negative) tests for vertex-geo-frag shader varying linkage. |
| + Primitive render order with geometry shader instancing |
| |
| Description: |
| |
| Geometry shader tests test geometry shader functionality by rendering |
| a scene using geometry shaders and comparing the resulting image to |
| the output of a reference renderer. Layered rendering render tests |
| draw scene to a texture which is then read back layer by layer. Contents |
| of each layer is then verified. |
| |
| query.* test group contains various query tests. max_geometry_* cases |
| verify that the implementation limit queried via API is equal to the |
| corresponding GLSL constant. geometry_* and max_geometry_* cases test |
| geometry shader related limits and states. primitives_generated_* cases |
| verify GL_PRIMITIVES_GENERATED query result in various scenarios. |
| max_framebuffer_* and framebuffer_* test verify layered fbo limits, states |
| and incompleteness conditions. |
| |
| basic.* tests test basic geometry shader usage: output_* cases emit |
| a constant number of vertices. output_vary_by_* cases emit a varying |
| number of vertices, depending on a shader varying, uniform or a texture |
| lookup. basic.point_size, basic.primitive_id_in[_restarted] and |
| basic.primitive_id cases test functionality of a corresponding built-in |
| variable. *_restarted variant verifies that primitive restart index has |
| no effect to the corresponding variable. |
| |
| input.* tests verify geometry shader behavior with different input types |
| by drawing a separate triangle for each geometry shader input vertex. |
| input.triangle_strip_adjacency.* cases verify correct behavior of |
| TRIANGLE_ADJACENCY primitive with different vertex counts. |
| |
| conversion.* tests verify functionality of geometry shaders with different |
| input and output primitive types. |
| |
| emit.* tests test geometry shaders with different number of EmitVertex() |
| and EndPrimitive() calls, ranging from too few to superfluous. A geometry |
| shader invocation with name *_emit_N_end_M calls EmitVertex() N times and |
| EndPrimitive() M times. |
| |
| varying.* tests verify the functionality of vertex shader -> geometry shader |
| varyigns and geometry shader -> fragment shader varyings. |
| |
| layered.* tests geometry shader layered rendering targeting a cubemap, 3D, |
| 2D array, and 2D multisample array texture. Tests render to the default layers, |
| only to one layer, each layer separately, or to each layer with different |
| contents and verify the contents of each layer. fragment_layer_* cases verify |
| the fragment shader built-in variable gl_Layer by outputting different color to |
| each layer. layer_provoking_vertex_* cases verify implementation dependent value |
| GL_LAYER_PROVOKING_VERTEX by rendering two triangles with one vertex having a |
| different gl_Layer value. The actual provoking vertex is then verified by |
| checking the layer contents. |
| |
| instanced.* tests geometry shader instancing functionality. |
| geometry[_output_different]_N_invocations cases test basic geometry shader |
| instancing by rendering primitives in a circle formation. Each output primitive |
| on the circle is generated by a single geometry shader invocation and each |
| circle is generated by a single input primitive. invocation_per_layer and |
| multiple_layers_per_invocation cases test geometry shader instancing with |
| layered rendering. In invocation_per_layer cases, shader invocation writes only |
| to a single layer and in multiple_layers_per_invocation cases to two layers. In |
| invocation_output_vary_by_* cases, invocations emit a varying number of |
| vertices, depending on a shader varying, uniform or a texture lookup. |
| draw_N_instances_geometry_M_invocations cases test geometry instancing in with |
| instanced drawing. As in the geometry_N_invocations, a group of primitives is |
| drawn around each input primitive instance. |
| |
| negative.* cases create a geometry shader accepting a certain input |
| primitive type and then try to use the shader when drawing with an incompatible |
| primitive type. GL_INVALID_OPERATION is expected. |
| |
| vertex_transform_feedback.* cases test transform feedback relaxations introduced |
| in the extension. Tests include all new render primitive modes and |
| draw{arrays,elements}{e,indirect,instanced} draw functions. |
| capture_vertex_draw_elements_overflow_single_buffer case tests that a |
| buffer-overflowing primitive feedback result is not partially written to the |
| feedback buffer. |