-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Stencil test

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

Includes:
 + Stencil buffer clears
 + Stencil update with GL_REPLACE in stencil fail, depth fail and depth pass
 + All stencil update modes in stencil fail
 + All stencil comparison modes
 + Masked stencil comparison
 + Out-of-range stencil clear values
 + Out-of-range stencil update values

Excludes:
 + Stencil compare or update with points and lines
 + Exhaustive testing of all possible stencil test states

Description:

The viewport is divided into NxN cells, where each cell is assigned a target
stencil value, choosen uniformly from available values. In addition there are
two cells that target out-of-range stencil values. The amount of cells is scaled
based on available stencil bits. For example with 8b there are 6x6 cells.

Test cases choose input parameters for operations based on target stencil value
for each cell. The parametrized operations are then executed and finally stencil
buffer contents are visualized by rendering full-screen quads with different
colors that pass only where stencil value equals one of the target values.

The rendered image is compared against reference image. The reference is
computed using a simplified model of the GL rendering pipe.
