1*35238bceSAndroid Build Coastguard Worker------------------------------------------------------------------------- 2*35238bceSAndroid Build Coastguard WorkerdrawElements Quality Program Test Specification 3*35238bceSAndroid Build Coastguard Worker----------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker 5*35238bceSAndroid Build Coastguard WorkerCopyright 2014 The Android Open Source Project 6*35238bceSAndroid Build Coastguard Worker 7*35238bceSAndroid Build Coastguard WorkerLicensed under the Apache License, Version 2.0 (the "License"); 8*35238bceSAndroid Build Coastguard Workeryou may not use this file except in compliance with the License. 9*35238bceSAndroid Build Coastguard WorkerYou may obtain a copy of the License at 10*35238bceSAndroid Build Coastguard Worker 11*35238bceSAndroid Build Coastguard Worker http://www.apache.org/licenses/LICENSE-2.0 12*35238bceSAndroid Build Coastguard Worker 13*35238bceSAndroid Build Coastguard WorkerUnless required by applicable law or agreed to in writing, software 14*35238bceSAndroid Build Coastguard Workerdistributed under the License is distributed on an "AS IS" BASIS, 15*35238bceSAndroid Build Coastguard WorkerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16*35238bceSAndroid Build Coastguard WorkerSee the License for the specific language governing permissions and 17*35238bceSAndroid Build Coastguard Workerlimitations under the License. 18*35238bceSAndroid Build Coastguard Worker------------------------------------------------------------------------- 19*35238bceSAndroid Build Coastguard Worker Uniform Buffer Object tests 20*35238bceSAndroid Build Coastguard Worker 21*35238bceSAndroid Build Coastguard WorkerTests: 22*35238bceSAndroid Build Coastguard Worker + dEQP-GLES3.functional.ubo.* 23*35238bceSAndroid Build Coastguard Worker + dEQP-GLES3.functional.shaders.linkage.uniform_block* 24*35238bceSAndroid Build Coastguard Worker + dEQP-GLES3.functional.shaders.declarations.invalid_declarations.uniform_block* 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard WorkerIncludes: 27*35238bceSAndroid Build Coastguard Worker + Basic uniform buffer object usage 28*35238bceSAndroid Build Coastguard Worker - Binding and unbinding uniform buffers 29*35238bceSAndroid Build Coastguard Worker - Writing uniform buffer data with glBufferData() 30*35238bceSAndroid Build Coastguard Worker + Binding uniform buffers to uniform blocks 31*35238bceSAndroid Build Coastguard Worker - glBindBufferRange() 32*35238bceSAndroid Build Coastguard Worker - glBindBufferBase() 33*35238bceSAndroid Build Coastguard Worker - glUniformBlockBinding() 34*35238bceSAndroid Build Coastguard Worker + Querying uniform block memory layout 35*35238bceSAndroid Build Coastguard Worker + std140 memory layout 36*35238bceSAndroid Build Coastguard Worker + Uniform blocks GLSL 37*35238bceSAndroid Build Coastguard Worker - Basic scalar, vector and matrix types in uniform blocks 38*35238bceSAndroid Build Coastguard Worker - Samplers in uniform blocks - as negative case! 39*35238bceSAndroid Build Coastguard Worker - Structures and arrays in uniform blocks 40*35238bceSAndroid Build Coastguard Worker - Uniform block instance names 41*35238bceSAndroid Build Coastguard Worker - Uniform block arrays 42*35238bceSAndroid Build Coastguard Worker - Layout qualifiers: shared, packed, std140, row_major, column_major 43*35238bceSAndroid Build Coastguard Worker - Negative tests for syntax and semantic errors in declarations 44*35238bceSAndroid Build Coastguard Worker - Negative tests for uniform block linking 45*35238bceSAndroid Build Coastguard Worker - Unused uniforms in uniform blocks 46*35238bceSAndroid Build Coastguard Worker + Sharing uniform blocks between vertex and fragment shaders 47*35238bceSAndroid Build Coastguard Worker 48*35238bceSAndroid Build Coastguard WorkerExcludes: 49*35238bceSAndroid Build Coastguard Worker + Mapping uniform buffers 50*35238bceSAndroid Build Coastguard Worker - Will be covered in buffer mapping tests 51*35238bceSAndroid Build Coastguard Worker + Negative tests for uniform buffer API 52*35238bceSAndroid Build Coastguard Worker - Will be covered in negative API tests 53*35238bceSAndroid Build Coastguard Worker 54*35238bceSAndroid Build Coastguard WorkerDescription: 55*35238bceSAndroid Build Coastguard Worker 56*35238bceSAndroid Build Coastguard WorkerUniform block tests define a set of uniforms and uniform blocks. In addition two 57*35238bceSAndroid Build Coastguard Workersubsets are computed: uniforms accessed from vertex shader and uniforms accessed 58*35238bceSAndroid Build Coastguard Workerfrom fragment shader respectively. The uniform sets are either specified manually 59*35238bceSAndroid Build Coastguard Workeror choosen randomly. Values for each uniform are choosen. 60*35238bceSAndroid Build Coastguard Worker 61*35238bceSAndroid Build Coastguard WorkerShaders are generated based on uniform declarations and use set. Each uniform that 62*35238bceSAndroid Build Coastguard Workeris in "used set" is read and compared against expected value in the shader. Final 63*35238bceSAndroid Build Coastguard Workerresult is a boolean value: true if all uniforms contained expected values and false 64*35238bceSAndroid Build Coastguard Workerotherwise. Vertex shader result controls green channel: output is 1 if values were 65*35238bceSAndroid Build Coastguard Workercorrect and 0 otherwise. Fragment shader result controls blue channel in the same 66*35238bceSAndroid Build Coastguard Workermanner. 67*35238bceSAndroid Build Coastguard Worker 68*35238bceSAndroid Build Coastguard WorkerShaders are compiled and linked together. Uniform block layout is queried and 69*35238bceSAndroid Build Coastguard Workervalues are stored into one or more uniform buffers. If std140 memory layout is used, 70*35238bceSAndroid Build Coastguard Workera reference memory layout is used instead and queries are made to validate the 71*35238bceSAndroid Build Coastguard Workerlayout computed by implementation prior to issuing any draw calls. 72*35238bceSAndroid Build Coastguard Worker 73*35238bceSAndroid Build Coastguard WorkerA single quad consisting of two triangles is rendered and resulting framebuffer 74*35238bceSAndroid Build Coastguard Workerpixels are checked. If all pixels are white and uniform layout queries didn't 75*35238bceSAndroid Build Coastguard Workerreturn any unexpected values or errors, test case passes. 76*35238bceSAndroid Build Coastguard Worker 77*35238bceSAndroid Build Coastguard WorkerNegative tests for compiler and linker use a pair of hand-written shaders. Compile 78*35238bceSAndroid Build Coastguard Workeror link is verified to return failure. 79