Здесь четко указано , что вычислительные вызовы шейдера выполняются параллельно в одной рабочей группе.И мы можем синхронизировать их доступ к памяти через barrier() + memoryBarrier()
функции в этой единственной группе.
Но может ли фактически вычисляться рабочие группы шейдеров в пределах одной команды диспетчеризации, выполняемой параллельно?
Если это так, то прав ли я, что невозможно синхронизировать их доступы к памяти с помощью каких-либо функций языка GLSL?Поскольку barrier()
работает только в пределах одной рабочей группы, и поэтому мы можем использовать только внешнюю синхронизацию через glMemoryBarrier
для синхронизации обращений к памяти из всех рабочих групп, но в этом случае нам нужно разделить вычислительный шейдер на несколько разных шейдеров и выполнитьих из отдельных команд отправки.