Допустим, у меня есть вычислительный шейдер opengl, написанный на GLSL, работающий на NVidia Geforce 970.
В начале шейдера при однократном вызове выполняется запись в «буферный объект хранилища шейдеров» (SSBO).
Затем я создаю подходящий барьер, например memoryBarrier () в моем GLSL.
Затем я читаю из памяти, записанной на первом шаге, при каждом вызове.
Будет ли эта первая запись видна для всех вызовов в текущей вычислительной операции?
На странице https://www.khronos.org/opengl/wiki/Memory_Model#Ensuring_visibility, Хронос говорит:
«Используйте согласованный и соответствующий вызов memoryBarrier * или groupMemoryBarrier, если вы используете такой механизм, как барьер, для синхронизации между вызовами».
Я почти уверен, что таким образом можно синхронизироваться в рабочей группе. Но работает ли это для всех вызовов в каждой рабочей группе во всей вычислительной операции?
Я не уверен, как планируется весь набор рабочих групп. Я ожидал, что они, возможно, будут работать последовательно, что сделает синхронизацию, о которой я спрашиваю, невозможной?