-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    GLES3.1 texture buffer object tests.

Tests:
 + dEQP-GLES31.functional.texture_buffer.*

Includes:
 + Rendering
	- As vertex texture
	- As fragment texture
	- As vertex array
	- As index array
	- All combinations of above
 + Different buffer sizes
	- Including larger than max texture size

 + Different offsets
 + Different texture buffer sizes

 + Modifications
	- glBufferData
	- glBufferSubData
	- glMapBufferRange with write-only and read-write

Excludes:
 + Reading pixels to buffer
 + Transform feedback
 + Negative test

Description:

Rendering tests create a texture buffer object and render to the default
framebuffer using the texture buffer as different data sources. The texture
buffer object is used as vertex array, index array, vertex texture and fragment
texture. Rendering using the texture buffer object simultaneously in different
ways is also tested.

Modifying tests create a texture buffer object, modify it and render it to the
default framebuffer using it as fragment texture.

Modify render tests will create texture buffer object, modify it and render it
to the default framebuffer.

Render modify tests will create a tests buffer object render it to default
framebuffer, modify it and render it again to default framebuffer as fragment
texture.

All textures use RGBA8 format and buffer data is always used as unsigned bytes.
Used values for bytes are also limited to simplify verification. Verification
is always performed at the end of the test.
