| ------------------------------------------------------------------------- |
| 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. |
| ------------------------------------------------------------------------- |
| GL 3 conditional render |
| |
| Tests: |
| + dEQP-GL3.functional.conditional_render.* |
| |
| Includes: |
| + All valid rendering commands included/excluded by query |
| - DrawArrays |
| - DrawArraysInstanced |
| - MultiDrawArrays |
| |
| - DrawElements |
| - DrawElementsInstanced |
| - DrawElementsInstancedBaseVertex |
| - DrawElementsBaseVertex |
| - DrawRangeElements |
| - DrawRangeElementsBaseVertex |
| - MultiDrawElements |
| - MultiDrawElementsBaseVertex |
| - Clear |
| - ClearBuffer* |
| + All depth comparison modes |
| + Framebuffer swap between query & render |
| - Excluding BY_REGION query modes |
| + All modes |
| - QUERY_(BY_REGION_)(NO_)WAIT |
| + Dependent queries |
| |
| Excludes: |
| + Immediate mode rendering |
| + Primitives other than triangles |
| + Negative tests |
| + Tests for NO_WAIT and BY_REGION modes are very limited |
| |
| Description: |
| |
| Conditional rendering is tested with various depth function/primitive |
| overlap conditions. Each query test renders a scene with one conditional |
| render call and verifies the result against the same scene with the |
| previously GL controlled conditional render call controlled by the test. |
| |
| Draw calls (excluding clears) are tested with the same method, with the |
| conditional call indicated by the test name. The occlusion query used in |
| these tests is trivially true/false. |
| |
| Clears are tested by rendering some geometry for an occlusion query and then |
| conditionally clearing the framebuffer. The verification used depends on the |
| expected result of the occlusion query. If the query is expected to pass, the |
| framebuffer is verified to contain only the color it was cleared to. |
| Otherwise the contents of the framebuffer are verified to match its contents |
| before the conditional clear. |
| |
| Depth/stencil clear tests unconditionally clear the color buffer after |
| rendering the occlusion geometry. After the conditional depth/stencil clear |
| a full framebuffer triangle is rendered with depth/stencil tests setup |
| to pass if the clear took place. The resulting framebuffer is read out and |
| compared to the color of the intermediate clear or the filling triangle as |
| appropriate for the expected occlusion query result. |
| |
| All clear tests use non-default framebuffers, all others use the default. |
| |
| Framebuffer swap cases use a trivial occlusion query but change the bound |
| (read & write) FBO between the occludion query and the conditional rendering. |
| The occlusion query is performed with the default framebuffer. |
| |
| Wait mode test render geometry that is not dependent on the result of the |
| occlusion queries. These tests thus only test for false positive occlusion |
| query results. |
| |
| Dependent queries render a number of primitives where each conditionally |
| rendered primitive (excluding the first) is also used for an occlusion query |
| that controls the rendering of the next primitive, which in turn is used for |
| the next occlusion query and so on. In some of these test one primitive in |
| this chain is placed in an occluded location, starting a cascade of failing |
| occlusion queries. |