-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Program-specific Uniform Assignment Tests

Tests:
 + dEQP-GLES31.functional.program_uniform.*

Includes:
 + Assigning uniform values for a single program with glProgramUniform*
 + Various uniform types
   - Most basic types
   - Structs and arrays, including nested
 + Both by-pointer and by-value variants of functions tested
 + Uniforms used in vertex shader, fragment shader, or both
 + Verify by glGetUniform* or rendering

Excludes:
 + Assigning uniforms to multiple programs
 + Sampler types other than 2d and cube
 + Negative tests

Description:

The glProgramUniform* tests use the alternative uniform assignment API (in
contrast to the glUniform* functions) for assigning uniform values to a
different program than the currently active one.

Various combinations of uniforms are tested: single basic-type uniforms, arrays,
structs, and nested structures with arrays. Each active uniform is assigned
a value using an appropriate glProgramUniform* function, either the pointer
variant or the value variant (if possible; for instance, matrices can only be
assigned using the pointer variant). Arrays with basic element type can have
their first element identified using either just the array's name or that
appended with "[0]"; both methods are tested.

To verify that the correct uniform values were assigned, either the uniform
values are queried with glGetUniform* or the shaders are rendered with; the
shaders are constructed such that the result should be an all-green quad if
the uniforms have correct values, and all-black otherwise.

At the beginning of each test case, a dummy program is created and made active
with glUseProgram; otherwise, the glProgramUniform* calls would behave just as
the corresponding glUniform* calls.
