| ------------------------------------------------------------------------- |
| 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. |
| ------------------------------------------------------------------------- |
| Uniform Buffer Object tests |
| |
| Tests: |
| + dEQP-GLES3.functional.ubo.* |
| + dEQP-GLES3.functional.shaders.linkage.uniform_block* |
| + dEQP-GLES3.functional.shaders.declarations.invalid_declarations.uniform_block* |
| |
| Includes: |
| + Basic uniform buffer object usage |
| - Binding and unbinding uniform buffers |
| - Writing uniform buffer data with glBufferData() |
| + Binding uniform buffers to uniform blocks |
| - glBindBufferRange() |
| - glBindBufferBase() |
| - glUniformBlockBinding() |
| + Querying uniform block memory layout |
| + std140 memory layout |
| + Uniform blocks GLSL |
| - Basic scalar, vector and matrix types in uniform blocks |
| - Samplers in uniform blocks - as negative case! |
| - Structures and arrays in uniform blocks |
| - Uniform block instance names |
| - Uniform block arrays |
| - Layout qualifiers: shared, packed, std140, row_major, column_major |
| - Negative tests for syntax and semantic errors in declarations |
| - Negative tests for uniform block linking |
| - Unused uniforms in uniform blocks |
| + Sharing uniform blocks between vertex and fragment shaders |
| |
| Excludes: |
| + Mapping uniform buffers |
| - Will be covered in buffer mapping tests |
| + Negative tests for uniform buffer API |
| - Will be covered in negative API tests |
| |
| Description: |
| |
| Uniform block tests define a set of uniforms and uniform blocks. In addition two |
| subsets are computed: uniforms accessed from vertex shader and uniforms accessed |
| from fragment shader respectively. The uniform sets are either specified manually |
| or choosen randomly. Values for each uniform are choosen. |
| |
| Shaders are generated based on uniform declarations and use set. Each uniform that |
| is in "used set" is read and compared against expected value in the shader. Final |
| result is a boolean value: true if all uniforms contained expected values and false |
| otherwise. Vertex shader result controls green channel: output is 1 if values were |
| correct and 0 otherwise. Fragment shader result controls blue channel in the same |
| manner. |
| |
| Shaders are compiled and linked together. Uniform block layout is queried and |
| values are stored into one or more uniform buffers. If std140 memory layout is used, |
| a reference memory layout is used instead and queries are made to validate the |
| layout computed by implementation prior to issuing any draw calls. |
| |
| A single quad consisting of two triangles is rendered and resulting framebuffer |
| pixels are checked. If all pixels are white and uniform layout queries didn't |
| return any unexpected values or errors, test case passes. |
| |
| Negative tests for compiler and linker use a pair of hand-written shaders. Compile |
| or link is verified to return failure. |