-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Matrix tests

Tests:
 + dEQP-GLES3.functional.shaders.matrix.*
 + dEQP-GLES3.functional.shaders.conversions.scalar_to_matrix.*
 + dEQP-GLES3.functional.shaders.conversions.matrix_to_matrix.*
 + dEQP-GLES3.functional.shaders.conversions.matrix_combine.*
 + dEQP-GLES3.functional.shaders.conversions.matrix_illegal.*
 + dEQP-GLES3.functional.shaders.indexing.matrix_subscript.*

Includes:
 + matN and matNxM (rectangular) matrix types
 + Matrix-Matrix and Matrix-Vector arithmetic
   - Constant, uniform and shader in inputs
 + Matrix constructors
   - From scalar(s)
   - From other matrices
   - From mixed inputs
 + Negative tests for illegal matrix constructor usage
 + Matrix static and dynamic indexing

Excludes:
 + Matrices in uniform blocks
   - Covered in separate UBO tests

Description:

Matrix arithmetic tests operate like other shader rendering tests.
Input matrices and vectors are read from uniforms, shader inputs
or constructed as constant values. Operation is performed in shader
body and the final result is reduced to vec3 that is assigned to
vertex or fragment color. Rendered image is compared against a
reference image computed using same algorithm written in C.

Matrix constructor and coversion tests compare results against
pre-computed reference value in fragment shader. Fragment color
is either white or black depending on whether the result were
correct or not.

Uniform buffer object tests are described in a separate test
specification document.
