-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Integer operator tests

Tests:
 + dEQP-GLES3.functional.shaders.operator.unary_operator.*.*_int_*
 + dEQP-GLES3.functional.shaders.operator.unary_operator.*.*_ivec_*
 + dEQP-GLES3.functional.shaders.operator.unary_operator.*.*_uint_*
 + dEQP-GLES3.functional.shaders.operator.unary_operator.*.*_uvec_*
 + dEQP-GLES3.functional.shaders.operator.binary_operator.*.*_int_*
 + dEQP-GLES3.functional.shaders.operator.binary_operator.*.*_ivec_*
 + dEQP-GLES3.functional.shaders.operator.binary_operator.*.*_uint_*
 + dEQP-GLES3.functional.shaders.operator.binary_operator.*.*_uvec_*

Includes:
 + Integer scalar and vector unary operators:
   - plus
   - minus
   - bitwise not
 + Integer scalar and vector binary operators:
   - add
   - sub
   - mul
   - div
   - mod
   - bitwise and
   - bitwise or
   - bitwise xor
   - less
   - less or equal
   - greater
   - greater or equal
   - equal
   - not equal
 + Scalar-scalar, vector-vector and vector-scalar binary operators
 + Lowp, mediump operands where behaviour is well-defined
 + Highp operands

Excludes:
 + Integer type range and bitlayout verification
   - Will be tested in later type range and storage tests

Description:

Integer test cases use shader rendering test framework. Depending on case type
(vertex or fragment) a single quad or a tight grid of quads is rendered with
the shader program that is being tested. Results are compared against a reference.
Reference image is rendered using a C reference of the shader. A fuzzy comparison
is used to allow small deviations due to fragment input interpolation.

Integer operator test shaders use floating-point attributes or varyings converted
to integers as operands. The value range is chosen based on precision. Results
from the operation are casted back to floating-point values and scaled to range
0..1. The resulting scalar or vector value is then written out as vertex or
fragment color.
