-------------------------------------------------------------------------
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 interface query

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

Includes:
 + Basic queries for every property of every program interface
 + Basic tests for resource list contents for every program interface
 + Attempts to query data to too small buffers

Excludes:
 + Exact layout validation for data layout related queries (offset,
   stride)
 + Consistency validation for location queries (as in no two different
   variables with the same location)

Description:

buffer_limited_query.* cases test that queries function properly when
given a return value buffer that is too short to contain all queried
data. resource_name_query case tests GetProgramResourceName function
with different character output buffer sizes and resource_query case
tests GetProgramResourceiv with different property value output buffer
sizes.

Program interface query tests are structured as follows. Each program
interface has its own test group at the
functional.program_interface_query.* level. Each program interface test
group contains a test group for each supported property, for example
"uniform.location.*". Additionally, each program interface contains test
group "resource_list" which contains tests for resource list generation.
In addition, some program interfaces contain "random" test group which
contains randomly (fixed seed) generated tests.

Each program interface query test, a program corresponding to the case's
full name is generated. For example,
"uniform.name_length.default_block.var_struct" would mean a NAME_LENGTH
query for a member variable of a uniform struct in the default block.
Cases without explicit mention of the shader type in its full name
generate compute shaders. The generated program is compiled and linked
and then the specified property is queried and verified. For the
randomly generated cases, all supported properties of the interface are
queried and verified.

uniform.* and buffer_variable.* cases test GL_UNIFORM and
GL_BUFFER_VARIABLE program interfaces, respectively. Test groups
array_size, array_stride, atomic_counter_buffer_index, block_index,
location, matrix_row_major, matrix_stride, name_length, offset,
referenced_by_shader, and type test properties ARRAY_SIZE, ARRAY_STRIDE,
ATOMIC_COUNTER_BUFFER_INDEX, BLOCK_INDEX, LOCATION, IS_ROW_MAJOR,
MATRIX_STRIDE, NAME_LENGTH, OFFSET, REFERENCED_BY_*_SHADER, and TYPE
properties, respectively. Additionally, the buffer_variable.* test group
contains tests for TOP_LEVEL_ARRAY_SIZE (top_level_array_size.*) and
TOP_LEVEL_ARRAY_STRIDE (top_level_array_stride.*) properties.

uniform_block.* and shader_storage_block.* cases test GL_UNIFORM_BLOCK
and GL_SHADER_STORAGE_BLOCK program interfaces, respectively. Test
groups active_variables, buffer_binding, buffer_data_size, name_length,
and referenced_by test properties ACTIVE_VARIABLES, BUFFER_BINDING,
BUFFER_DATA_SIZE, NAME_LENGTH, and REFERENCED_BY_*_SHADER properties,
respectively.

atomic_counter_buffer.* cases test GL_ATOMIC_COUNTER_BUFFER program
interface. Test cases active_variables, buffer_binding,
buffer_data_size, and referenced_by_* test ACTIVE_VARIABLES,
BUFFER_BINDING, BUFFER_DATA_SIZE, and REFERENCED_BY_*_SHADER properties,
respectively.

program_input.* and program_output.* cases test PROGRAM_INPUT and
PROGRAM_OUTPUT program interfaces, respectively. Test groups array_size,
location, name_length, referenced_by, and type test ARRAY_SIZE,
LOCATION, NAME_LENGTH, REFERENCED_BY_*_SHADER and TYPE properties,
respectively. Each test group contains separate tests for different
program configurations such as compute program, vertex-fragment program,
or separable shader programs.

transform_feedback_varying.* cases test TRANSFORM_FEEDBACK_VARYING
program interface. Test groups array_size, name_length, and type test
ARRAY_SIZE, NAME_LENGTH, and TYPE properties. Each test group contains
separate tests for a complete vertex-fragment program and for separable
program containing only a vertex shader. Test query properties of
various types of user-defined output variables and a built-in output
gl_Position.