-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Negative API tests

Tests:
 + dEQP-GLES2.functional.negative_api.*

Includes:
 + Negative tests for all API functions capable of producing errors
 + Test cases are organized into following categories:
	- Buffer API
	- Fragment API
	- Shader API
	- State API & Special Functions
	- Texture API
	- Vertex Array API

Excludes:
 + Tests for API functions that cannot produce errors

Description:

Negative API test set goes through all GL commands that are capable of
producing error states. First, each command is used incorrectly, and then
GL errors are queried with glGetError(). If the received error code does
not match the specification, the test case is failed.

Test log includes a quote from the specification indicating the conditions
for the error, which error code was expected and which error code was
returned by the implementation.

Not all commands, such as glFinish() or glIsBuffer(), are capable of
producing errors, and thus are not included in the test set.
