-------------------------------------------------------------------------
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 upload performance tests

Tests:
 + dEQP-GLES2.performance.texture.upload.*

Includes:
 + All legal format-type-combinations
	- ALPHA, RGB, RGBA, LUMINANCE and LUMINANCE_ALPHA for UNSIGNED_BYTE
	- RGB for UNSIGNED_SHORT_5_6_5
	- RGBA for UNSIGNED_SHORT_4_4_4_4 and UNSIGNED_SHORT_5_5_5_1
 + Upload functions glTexImage2D and glTexSubImage2D
 + Different texture sizes from 16x16 to 2048x2048
	- Including npot texture (257x257)
 + Measurements for:
	- Upload call only
	- Upload and draw with uploaded texture + buffer swap

Excludes:
 + Different pixel unpack alignments
 + Trashed cache before upload

Description:

Texture upload performance cases measure the performance of texture upload
calls. Subgroup 'upload' measures the duration of upload calls (i.e.
recorded iteration time includes only multiple texture upload calls).
Subgroup 'upload_draw_swap' draws a quad with the uploaded texture after
each upload and swaps buffers afterwards (i.e. recorded iteration time
includes multiple upload and draw calls and one buffer swap). Texture
sizes vary from 16x16 to 2048x2048 and include an npot texture with size
257x257. Viewport size is held constant at 64x64.

The amount of draw calls is automatically calibrated to find a workload
that produces approximately 30fps. Result is reported as uploaded MTex/s.

See performance.txt for more details on performance testing.
