-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Uniform Buffer Object tests

Tests:
 + dEQP-GLES3.functional.ubo.*
 + dEQP-GLES3.functional.shaders.linkage.uniform_block*
 + dEQP-GLES3.functional.shaders.declarations.invalid_declarations.uniform_block*

Includes:
 + Basic uniform buffer object usage
   - Binding and unbinding uniform buffers
   - Writing uniform buffer data with glBufferData()
 + Binding uniform buffers to uniform blocks
   - glBindBufferRange()
   - glBindBufferBase()
   - glUniformBlockBinding()
 + Querying uniform block memory layout
 + std140 memory layout
 + Uniform blocks GLSL
   - Basic scalar, vector and matrix types in uniform blocks
   - Samplers in uniform blocks - as negative case!
   - Structures and arrays in uniform blocks
   - Uniform block instance names
   - Uniform block arrays
   - Layout qualifiers: shared, packed, std140, row_major, column_major
   - Negative tests for syntax and semantic errors in declarations
   - Negative tests for uniform block linking
   - Unused uniforms in uniform blocks
 + Sharing uniform blocks between vertex and fragment shaders

Excludes:
 + Mapping uniform buffers
   - Will be covered in buffer mapping tests
 + Negative tests for uniform buffer API
   - Will be covered in negative API tests

Description:

Uniform block tests define a set of uniforms and uniform blocks. In addition two
subsets are computed: uniforms accessed from vertex shader and uniforms accessed
from fragment shader respectively. The uniform sets are either specified manually
or choosen randomly. Values for each uniform are choosen.

Shaders are generated based on uniform declarations and use set. Each uniform that
is in "used set" is read and compared against expected value in the shader. Final
result is a boolean value: true if all uniforms contained expected values and false
otherwise. Vertex shader result controls green channel: output is 1 if values were
correct and 0 otherwise. Fragment shader result controls blue channel in the same
manner.

Shaders are compiled and linked together. Uniform block layout is queried and
values are stored into one or more uniform buffers. If std140 memory layout is used,
a reference memory layout is used instead and queries are made to validate the
layout computed by implementation prior to issuing any draw calls.

A single quad consisting of two triangles is rendered and resulting framebuffer
pixels are checked. If all pixels are white and uniform layout queries didn't
return any unexpected values or errors, test case passes.

Negative tests for compiler and linker use a pair of hand-written shaders. Compile
or link is verified to return failure.
