-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Indirect drawing tests

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

Includes:
 + Draw all basic primitives
   - Points, triangles, triangle strips, triangle fans, lines, line
     strips, line loops
 + DrawArraysIndirect firstVertex
 + DrawElementsIndirect index array tests
 + DrawElementsIndirect baseVertex
   - Test positive and negative baseVertex values
 + Instanced draw with a high instance count
 + Negative tests
    - Bad alignment
	- Source data beyond the end of the buffer
	- Use of client side attribute arrays

Excludes:

Description:

Primitive drawing cases draw a group of primitives with random generated
vertex attributes and compare the output to a reference image generated
by a simple reference rasterizer. Each primitive is tested using a single
(generated) attribute array, multiple attribute arrays, instanced
attribute array (instance divisor > 0) and with a non-array current
attribute.

DrawArraysIndirect firstVertex cases draw random triangles using
glDrawElementIndirect with firstVertex > 0 and compare results to a
generated reference image.

DrawElementsIndirect index array cases draw random triangles using
glDrawElementIndirect with index types of unsigned byte, short and int
with both firstIndex = 0 and firstIndex = 1 and compare results to
generated reference images.

DrawElementsIndirect baseVertex cases draw random triangles with index
types of unsigned byte, short and int using both positive and negative
baseVertex values and compare results to generated reference images.

Instanced draw cases draw a grid by instancing a single tile. The result
is verified by simply searching for background colored (black) pixels in
the result image. Resulting image should not contain any background
colored pixels.

Negative cases test try to issue a bad indirect draw command expecting an
INVALID_OPERATION. Bad commands tested are commands with bad alignment,
commands only partially in the DRAW_INDIRECT_BUFFER buffer, and commands
not even partially in the DRAW_INDIRECT_BUFFER buffer.
