// // Copyright 2021 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // MemoryBarrierTest: // Ensure that implementation of glMemoryBarrier is correct both in terms of memory barriers // issued and potential reordering of commands. // // The barrier bits accepted by glMemoryBarrier are used for synchronization as such: // // VERTEX_ATTRIB_ARRAY_BARRIER_BIT: shader write -> vertex read // ELEMENT_ARRAY_BARRIER_BIT: shader write -> index read // UNIFORM_BARRIER_BIT: shader write -> uniform read // TEXTURE_FETCH_BARRIER_BIT: shader write -> texture sample // SHADER_IMAGE_ACCESS_BARRIER_BIT: shader write -> image access // any access -> image write // COMMAND_BARRIER_BIT: shader write -> indirect buffer read // PIXEL_BUFFER_BARRIER_BIT: shader write -> pbo access // TEXTURE_UPDATE_BARRIER_BIT: shader write -> texture data upload // BUFFER_UPDATE_BARRIER_BIT: shader write -> buffer data upload/map // FRAMEBUFFER_BARRIER_BIT: shader write -> access through framebuffer // TRANSFORM_FEEDBACK_BARRIER_BIT: shader write -> transform feedback write // ATOMIC_COUNTER_BARRIER_BIT: shader write -> atomic counter access // SHADER_STORAGE_BARRIER_BIT: shader write -> buffer access // any access -> buffer write // // In summary, every bit defines a memory barrier for some access after a shader write. // Additionally, SHADER_IMAGE_ACCESS_BARRIER_BIT and SHADER_STORAGE_BARRIER_BIT bits are used to // define a memory barrier for shader writes after other accesses. #include "test_utils/ANGLETest.h" #include "test_utils/gl_raii.h" #include "util/random_utils.h" usingnamespaceangle; namespace … // anonymous namespace