-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Vertex Attribute Binding Tests

Tests:
 + dEQP-GLES31.functional.vertex_attribute_binding.*
 + dEQP-GLES31.functional.state_query.vertex_attribute_binding.*
 + dEQP-GLES31.stress.vertex_attribute_binding.*

Includes:
 + Vertex attribute binding state setting and queries
 + Drawing with all attributes sourced from a single buffer
   - Single and multiple attributes, multiple attributes sharing
     components.
   - Non-zero buffer offset
   - Sourcing elements at an aligned location from a buffer with
     a combination of non-aligned buffer offset and non-aligned
     vertex attribute start offset.
 + Drawing with all attributes sourced from different binding points
   - Basic drawing
   - Binding point stride set to zero
   - Binding point instance divisor
   - Binding same buffer object to multiple binding points
 + Mixing vertex attribute binding and vertex attribute pointer APIs
   - Different APIs for different vertex attributes
   - Use vertex attribute binding API to change state set with vertex
     attribute pointer API
 + Negative tests
   - Use with default VAO
   - BindVertexBuffer for non-gen'd buffer name
   - Invalid values
 + Stress tests
   - Sourcing elements over buffer bounds
   - Sourcing elements at non-aligned locations

Excludes:
 + Use of all vertex attribute binding points
 + Sourcing elements from a buffer with a large stride/offset
 + Buffer object lifetime/validity after deleteBuffers

Description:

State query tests verify initial values, and state setting and
querying functions by setting random values. Modifications to
vertex attribute binding state after use of vertex attribute
pointer API is also verified.

Rendering tests set vertex attribute state using vertex attribute
binding API and issue a single draw command. Resulting image is
then verified. Mixed API rendering tests intermix both vertex
attribute binding and the vertexAttribPointer API commands to
modify the state of the same or different vertex attributes.

Stress tests source elements at invalid locations. Tests source
elements out of buffer range and at non-aligned locations using
binding point buffer offset and/or vertex attribute relative
offset.
