| ------------------------------------------------------------------------- |
| 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. |
| ------------------------------------------------------------------------- |
| Object lifetime tests. |
| |
| Tests: |
| + dEQP-GLES2.functional.lifetime.* |
| |
| Includes: |
| + All OpenGL ES 2.0 object types |
| - Buffers |
| - Textures |
| - Renderbuffers |
| - Framebuffers |
| - Shaders |
| - Programs |
| + Object existence tests based on Is* queries |
| - After calling Gen* or Create* |
| - After calling Gen* or Create*, then Delete* |
| - After calling Gen*, then Bind* |
| - After calling Gen*, then Bind*, then Delete* |
| - After calling Bind* without preceding Gen* |
| - After calling CreateProgram, then UseProgram, then DeleteProgram |
| + Tests for deleting an object that is attached to a container |
| - Is* queries for the name of the deleted object |
| - Reading from the container |
| - Writing to the container |
| |
| Excludes: |
| + Deleting an object that is currently bound in another context |
| |
| Description: |
| |
| These tests check that creation and deletion of objects adheres to the |
| OpenGL ES 2.0 specification. The tests check the existence of objects as |
| reported by the Is* family of GL functions, the state of bindings as |
| reported in various state variables, and the behavior of containers with |
| deleted objects. |
| |
| NOTE: Because these tests try to delete objects that are directly or |
| indirectly attached to the current context, a faulty OpenGL ES |
| implementation may reclaim and later reallocate memory that is still |
| being referenced. This may result in unpredictable errors at some later |
| time. Use of external memory debugging tools may be required to |
| accurately identify these errors. |
| |
| The "gen.*" test cases call the object type's Gen* or Create* function |
| to allocate a new name, and then check whether the name is used, i.e. |
| whether a new object was created for the name (as reported by the result |
| of the corresponding Is* function). In OpenGL ES 2.0, the Gen* functions |
| must never create an object, and the Create* functions must always |
| create an object. |
| |
| The "delete.*" test cases call an object type's Gen* or Create* function |
| followed by the Delete* function. They then check that the generated |
| name is no longer in use. |
| |
| The "bind.*" test cases call an object type's Gen* function followed by |
| its Bind* function. They then check that the name is in use. |
| |
| The "delete_bound.*" test cases call an object type's Gen* function |
| followed by its Bind* function and Delete* function. They then check |
| that the name is no longer in use and that the binding has been removed. |
| |
| The "bind_no_gen.*" test cases call the object type's Bind* function for |
| a random name that has not been produced by the Gen* function. They then |
| check whether the function call succeeded. In OpenGL ES 2.0, all Bind* |
| calls must succeed even for names not produced by the Gen* function. |
| |
| The "delete_used.program" test case creates a new program object (along |
| with associated shader objects) and makes it the current program with |
| the glUseProgram function. The program object is then deleted. The test |
| checks that the name of the program remains in use and is flagged for |
| deletion. Then the program is made non-current and the test checks that |
| the name becomes unused. |
| |
| The "attach.*" family of test cases create a container object (a |
| framebuffer or a program) and attach another object (a texture, |
| renderbuffer or shader) to it. The attached object is then deleted. |
| |
| In the "attach.deleted_name.*" test cases, the container is queried for |
| its attachment, and the existence of the deleted attachment object is |
| checked. In OpenGL ES 2.0, shader objects must exist even after deletion |
| if they are attached to a program. The names of other types of |
| attachment objects must become unused, even though their state still |
| remains referenced by the container. |
| |
| In the "attach.deleted_input.*" test cases, the container is read from |
| (by reading a framebuffer's pixel contents or using a program for |
| drawing) before the attachment is deleted, and then after deleting the |
| attachment and creating a new object of the attachment type. If the |
| results differ, the new object erroneously affected the container's |
| state. |
| |
| In the "attach.deleted_output.*" test cases, the container is written to |
| (by drawing to a framebuffer) after deleting the attachment and creating |
| a new object of the attachment type. If the writing affected the new |
| object state, it erroneously shared state with the deleted attachment. |