1 ------------------------------------------------------------------------- 2 drawElements Quality Program Test Specification 3 ----------------------------------------------- 4 5 Copyright 2014 The Android Open Source Project 6 7 Licensed under the Apache License, Version 2.0 (the "License"); 8 you may not use this file except in compliance with the License. 9 You may obtain a copy of the License at 10 11 http://www.apache.org/licenses/LICENSE-2.0 12 13 Unless required by applicable law or agreed to in writing, software 14 distributed under the License is distributed on an "AS IS" BASIS, 15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 See the License for the specific language governing permissions and 17 limitations under the License. 18 ------------------------------------------------------------------------- 19 Program interface query 20 21 Tests: 22 + dEQP-GLES31.functional.program_interface_query.* 23 24 Includes: 25 + Basic queries for every property of every program interface 26 + Basic tests for resource list contents for every program interface 27 + Attempts to query data to too small buffers 28 29 Excludes: 30 + Exact layout validation for data layout related queries (offset, 31 stride) 32 + Consistency validation for location queries (as in no two different 33 variables with the same location) 34 35 Description: 36 37 buffer_limited_query.* cases test that queries function properly when 38 given a return value buffer that is too short to contain all queried 39 data. resource_name_query case tests GetProgramResourceName function 40 with different character output buffer sizes and resource_query case 41 tests GetProgramResourceiv with different property value output buffer 42 sizes. 43 44 Program interface query tests are structured as follows. Each program 45 interface has its own test group at the 46 functional.program_interface_query.* level. Each program interface test 47 group contains a test group for each supported property, for example 48 "uniform.location.*". Additionally, each program interface contains test 49 group "resource_list" which contains tests for resource list generation. 50 In addition, some program interfaces contain "random" test group which 51 contains randomly (fixed seed) generated tests. 52 53 Each program interface query test, a program corresponding to the case's 54 full name is generated. For example, 55 "uniform.name_length.default_block.var_struct" would mean a NAME_LENGTH 56 query for a member variable of a uniform struct in the default block. 57 Cases without explicit mention of the shader type in its full name 58 generate compute shaders. The generated program is compiled and linked 59 and then the specified property is queried and verified. For the 60 randomly generated cases, all supported properties of the interface are 61 queried and verified. 62 63 uniform.* and buffer_variable.* cases test GL_UNIFORM and 64 GL_BUFFER_VARIABLE program interfaces, respectively. Test groups 65 array_size, array_stride, atomic_counter_buffer_index, block_index, 66 location, matrix_row_major, matrix_stride, name_length, offset, 67 referenced_by_shader, and type test properties ARRAY_SIZE, ARRAY_STRIDE, 68 ATOMIC_COUNTER_BUFFER_INDEX, BLOCK_INDEX, LOCATION, IS_ROW_MAJOR, 69 MATRIX_STRIDE, NAME_LENGTH, OFFSET, REFERENCED_BY_*_SHADER, and TYPE 70 properties, respectively. Additionally, the buffer_variable.* test group 71 contains tests for TOP_LEVEL_ARRAY_SIZE (top_level_array_size.*) and 72 TOP_LEVEL_ARRAY_STRIDE (top_level_array_stride.*) properties. 73 74 uniform_block.* and shader_storage_block.* cases test GL_UNIFORM_BLOCK 75 and GL_SHADER_STORAGE_BLOCK program interfaces, respectively. Test 76 groups active_variables, buffer_binding, buffer_data_size, name_length, 77 and referenced_by test properties ACTIVE_VARIABLES, BUFFER_BINDING, 78 BUFFER_DATA_SIZE, NAME_LENGTH, and REFERENCED_BY_*_SHADER properties, 79 respectively. 80 81 atomic_counter_buffer.* cases test GL_ATOMIC_COUNTER_BUFFER program 82 interface. Test cases active_variables, buffer_binding, 83 buffer_data_size, and referenced_by_* test ACTIVE_VARIABLES, 84 BUFFER_BINDING, BUFFER_DATA_SIZE, and REFERENCED_BY_*_SHADER properties, 85 respectively. 86 87 program_input.* and program_output.* cases test PROGRAM_INPUT and 88 PROGRAM_OUTPUT program interfaces, respectively. Test groups array_size, 89 location, name_length, referenced_by, and type test ARRAY_SIZE, 90 LOCATION, NAME_LENGTH, REFERENCED_BY_*_SHADER and TYPE properties, 91 respectively. Each test group contains separate tests for different 92 program configurations such as compute program, vertex-fragment program, 93 or separable shader programs. 94 95 transform_feedback_varying.* cases test TRANSFORM_FEEDBACK_VARYING 96 program interface. Test groups array_size, name_length, and type test 97 ARRAY_SIZE, NAME_LENGTH, and TYPE properties. Each test group contains 98 separate tests for a complete vertex-fragment program and for separable 99 program containing only a vertex shader. Test query properties of 100 various types of user-defined output variables and a built-in output 101 gl_Position. 102