Если у вас есть вычислительный шейдер, где разные рабочие группы в одной и той же диспетчеризации помещаются в непрерывный цикл, и вы хотите сообщить им все, чтобы выйти из указанного цикла любым из них, установив флаг. Возможно ли это?OpenGL Compute shader sync различные рабочие группы
Я попытался использовать флаг в SSBO, обозначенный как согласованный, так и неустойчивый, чтобы вызвать их выход. Который иногда не работает на AMD, кажется. Когда одна из рабочих групп хочет вызвать все из них для выхода, я просто устанавливаю флаг от нуля до одного напрямую (поскольку это не имеет значения, если кто-то его устанавливает) без использования атомистики и вызова памятиBarrier() впоследствии ,
Из документации памятиBarrier() мне кажется, что это будет гарантией возможной видимости набора для других рабочих групп в рамках одной и той же отправки?
Спасибо, отличный ответ! Я хочу, чтобы стандартная документация OpenGL включала это. Мне нужно было точно сказать это, чтобы быть уверенным в правильной ментальной модели для этого. – iam
@iam: «* Я хочу, чтобы стандартная документация OpenGL включала это. *« It * does * include this. В стандарте OpenGL очень четко сказано: «рабочие группы выполняются полностью независимо и в неуказанном порядке». Все, что я сделал, это повторить это с большим количеством слов. –
ok Я, очевидно, хотел бы, чтобы он использовал немного больше слов, как вы, чтобы я чувствовал себя более уверенно в понимании этого! :) И, если честно, может быть, это случай, когда его не совсем подтвердили/поняли другие примеры за пределами этого. – iam