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