1------------------------------------------------------------------------- 2drawElements Quality Program Test Specification 3----------------------------------------------- 4 5Copyright 2014 The Android Open Source Project 6 7Licensed under the Apache License, Version 2.0 (the "License"); 8you may not use this file except in compliance with the License. 9You may obtain a copy of the License at 10 11 http://www.apache.org/licenses/LICENSE-2.0 12 13Unless required by applicable law or agreed to in writing, software 14distributed under the License is distributed on an "AS IS" BASIS, 15WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16See the License for the specific language governing permissions and 17limitations under the License. 18------------------------------------------------------------------------- 19 Shader Storage / Image Storage synchronization tests 20 21Tests: 22 + dEQP-GLES31.functional.synchronization.* 23 24Includes: 25 26 + In-invocation synchronization 27 - Test synchronization primitives within a single invocation. 28 29 + Inter-invocation synchronization 30 - Test synchronization between work group invocations. 31 32 + Inter-call synchronization 33 - Test synchronization between draw calls 34 35Excludes: 36 37 - Inter-invocation synchronization without use of barrier() 38 - Use vertex, fragment, or geometry shaders. 39 40Description: 41 42In-invocation synchronization tests read and write to a coherent image or 43buffer within a single invocation. Data accessed by a single invocation is not 44accessed by other invocations. Image accesses are synchronized using 45memoryBarrierImage(). SSBO accesses do not need to be explicitly synchronized 46as memory operations execute in order. 47 48Inter-invocation synchronization tests read and write to a coherent image or 49buffer within a single work group. Data accessed by a single invocation is also 50accessed by another invocation within the work group. Accesses are synchronized 51using a combination of groupMemoryBarrier() and barrier(). 52 53inter_call.with_memory_barrier test cases read and write to an image or buffer. 54Data written in a single call is read in another call. glMemoryBarrier() is used 55for synchronization between the calls. 56 57inter_call.without_memory_barrier.* inter-call synchronization tests modify a image 58or buffer declared as volatile with atomic operations or using atomic counters. 59Multiple computes are dispatched without calling MemoryBarrier(). Result and 60intermediate results are checked to verify operation atomicy over multiple compute 61dispatches. 62 63inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_* cases test relative 64atomicy of buffer atomic operations and atomic counter operations. Separate programs 65modify atomically either a buffer or an atomic counter backed by the same buffer. 66Multiple instances of programs are dispatched without calling MemoryBarrrier(). Buffer 67content and intermediate values are checked to verify atomicy between operations. 68