OpenGL: рабочие группы вычислений шейдеров выполняются параллельно? - PullRequest
1 голос
/ 25 июня 2019

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

Но может ли фактически вычисляться рабочие группы шейдеров в пределах одной команды диспетчеризации, выполняемой параллельно?

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

1 Ответ

2 голосов
/ 25 июня 2019

Вызовы из разных рабочих групп могут выполняться параллельно, да.Это верно практически для любого вызова стадии шейдера.

И да, вы не можете выполнять межгрупповую синхронизацию.Это также верно практически для любой стадии шейдера;с одним другим исключением, вы не можете синхронизировать между любыми вызовами одной и той же стадии.

Ну, нет, если у вас нет доступа к расширению фрагментной шейдерной блокировки , которое, как следует из названия, ограниченофрагментные шейдеры.

...