| ------------------------------------------------------------------------- |
| 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. |
| ------------------------------------------------------------------------- |
| Shader Storage Buffer Object / Buffer Block Tests |
| |
| Tests: |
| + dEQP-GLES31.functional.ssbo.* |
| |
| Includes: |
| + SSBO access from compute shaders |
| + Basic SSBO usage |
| - Binding and unbinding uniform buffers |
| - Writing uniform buffer data with glBufferData() |
| + Binding SSBOs to buffer blocks |
| - glBindBufferRange() |
| - glBindBufferBase() |
| - glShaderStorageBlockBinding() |
| + Querying buffer block memory layout |
| + Layout sanity verification |
| + std140 and std430 layout verification |
| + Buffer blocks GLSL |
| - Basic scalar, vector and matrix types in buffer blocks |
| - Samplers in buffer blocks - as negative case! |
| - Structures and arrays in buffer blocks |
| - Buffer block instance names |
| - Buffer block arrays |
| - Unsized arrays as a last element of buffer block |
| - Layout qualifiers: shared, packed, std140, row_major, column_major |
| - Unused variables in buffer blocks |
| * Atomic operations |
| |
| Excludes: |
| + Access from other shader shader stages (currently compute only) |
| + Negative tests |
| |
| Description: |
| |
| SSBO layout and access tests generate compute shader code based on interface |
| declaration. Shader is compiled and layout is queried. Validity checks are |
| performed to the layout, and in case of std140 and std430 layouts the layout |
| is compared against a full reference layout. |
| |
| Single compute shader invocation is issued. Shader reads and/or writes to |
| SSBO. Reads are validated by comparing values to constant values declared in |
| shader text. Writes are validated by reading back the SSBO and comparing |
| against expected values. |
| |
| Atomic operation test cases use a single SSBO for both input data, output data |
| and data operated with atomic memory functions. Multiple work groups of size |
| 3x2x1 is issued and each invocation executes atomic operation with per- |
| invocation data. Result values are then stored into SSBO. Results are |
| validated by mapping buffer and doing comparison that varies per function. The |
| input values are chosen so that comparison can detect obvious non-atomic |
| behavior. |