| ------------------------------------------------------------------------- |
| 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 Shared Variable Tests |
| |
| Tests: |
| + dEQP-GLES31.functional.compute.shared_var.* |
| |
| Includes: |
| + All basic types, all precisions |
| + Single shared variable |
| + Various work group sizes |
| - 2x1x3 in basic type cases |
| - 1x1x1, 64x1x1, 1x64x1, 1x1x64, 256x1x1, 1x256x1, 17x5x9 for selected types |
| + All built-in atomic operation functions |
| + int, uint types |
| + all precisions |
| + Multiple work groups for atomic function cases |
| |
| Excludes: |
| + Multiple shared variables |
| + Complex types (arrays, structures) |
| + Negative tests |
| |
| Description: |
| |
| Basic type test cases declare a single shared variable of the appropriate |
| type. In addition following input/output variables are used: |
| + buffer block containing an array of booleans, one for each item in work group |
| + u_val[], u_ref[] uniform arrays, filled with identical values |
| + u_numIters iteration count uniform, initialized with work group size |
| |
| The compute shader contains a loop that is limited by the u_numIters uniform. |
| In each iteration one of the work items writes a value from u_val to the |
| shared variable. A shared memory barrier is issued, and after that all work |
| items read and compare shared var value to u_ref. If comparison passed for all |
| iterations, true is set to appropriate element of the output array. Test case |
| then maps the output SSBO and checks that all elements are true, meaning that |
| all shader invocations passed the test. |
| |
| |
| Atomic operation test cases issue multiple work groups of size 3x2x1. In each |
| work group first invocation initializes shared variable to a certain value. |
| Barrier is issued and after that each invocation issues atomic operation with |
| per-invocation value. Resulting values are written out into SSBO. Finally, one |
| invocation per work group writes out the final shared variable value. |
| |
| Resulting values from SSBO are read using buffer mapping and verified. The |
| input values and validation logic depends on the type of the atomic operation. |