-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Texture image specification tests

Tests:
 + dEQP-GLES2.functional.texture.teximage.*

Includes:
 + Texture upload using:
   - glTexImage2D()
   - glTexSubImage2D()
 + Copy from framebuffer using:
   - glCopyTexImage2D()
   - glCopyTexSubImage2D()
 + 2D and cube map texture targets
 + Different pixel alignments in upload (GL_UNPACK_ALIGNMENT)
 + All supported pixel formats
 + Named and default texture objects

Excludes:
 + Compressed texture formats

Description:

Texture image specification tests build a complete 2D or cubemap texture
using the texture image specification functions. The exact order and functions
used depends on the test case.

For glCopyTexImage2D() and glCopyTexSubImage2D() usage the rendering target
is first filled with meaningful data by rendering a simple textured quad first.

Reference texture object is constructed by applying reference versions of the
same operations to a reference pixel buffer.

Finally both the constructed texture is rendered using a simple quad and the
resulting images are compared against the reference. Nearest-neighbor -filtering
is used. For cubemap textures each face is rendered separately and all are
verified. If mipmaps were constructed, texture is rendered multiple times
sampling texels from different mipmap levels.
