-------------------------------------------------------------------------
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-GLES3.functional.lifetime.*
Includes:
+ The following OpenGL ES 3.0 object types
- Buffers
- Textures
- Renderbuffers
- Framebuffers
- Shaders
- Programs
- Queries
- Transform feedbacks
- Vertex arrays
- Samplers
+ 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
- After calling BeginTransformFeedback, then DeleteTransformFeedbacks
+ 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:
+ Sync objects
+ 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 3.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 3.0, the Create*
functions and the GenSamplers function must always create an object, and
the other Gen* functions must never 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 3.0, the
BindBuffer, BindFramebuffer, BindRenderbuffer and BindTexture functions
must succeed for arbitrary object names, and the other Bind* functions
must fail.
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 "delete_active.transform_feedback" test case creates a new transform
feedback object, makes it active with the BeginTransformFeedback
function, and then attempts to delete it. The test checks that the
deletion fails.
The "attach.*" family of test cases create a container object (a
framebuffer, vertex array, transform feedback, or program) and attach
another object (a texture, renderbuffer, buffer 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 3.0, shader objects must exist even after deletion
if they are attached to a program.
In the "attach.deleted_input.*" test cases, the container is read from
(by reading a framebuffer's pixel contents or using a program or vertex
array for drawing) first before the attachment is deleted, and then
again 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 or by using a transform feedback) first
after deleting the attachment and then again after creating a new object
of the attachment type. If the writing affected the new object state, it
erroneously shared state with the deleted attachment.