-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Arrays of arrays tests

Tests:
 + dEQP-GLES31.functional.shaders.arrays_of_arrays.*
 + dEQP-GLES31.functional.ssbo.*arrays_of_arrays*
 + dEQP-GLES31.functional.ssbo.*_level_array*
 + dEQP-GLES31.functional.ubo.*
 + dEQP-GLES31.functional.program_interface_query.* (selected cases)
 + dEQP-GLES31.functional.shaders.functions.*

Includes:
 + Arrays of arrays of 2, 3, and more levels
 + Constructors with explicit sizes
 + Constructors with implicit sizes
 + Arrays of arrays as function return types
 + Arrays of arrays as function in, out, and inout parameters
 + Accessing arrays of arrays
   - Indexing arrays of arrays with constant and dynamic expressions
 + Explicit and implicit sized type declarations
   - Size from both constructor and assignment from another array
   - Different type declaration syntaxes
 + .length()
 + Arrays of arrays in function overloading
   - Tests to verify that different sized arrays of arrays can be used to
     overload functions
 + Negative cases
   - Dynamic expression as array size
   - Empty declarations
   - Multi-level SSBO/UBO instance arrays
 + Arrays of arrays inside SSBOs, UBOs
   - Access, property queries using legacy and program interface query APIs

Excludes:
 + Extensive negative tests
   - Will be added in 2014.4 release

Description:

Valid cases compile and run a program that perform the operation under test
in either vertex and fragment shader. Results are checked against reference
values in the shader code and either black or white color is selected based
on that. The test verifies that all result pixels are white.

Negative cases attempt to compile a shader with the invalid operation and
checks that the compilation in fact fails.
