GLSL, семафоры?

Ранее у меня уже была проблема, связанная с тем, что я хотел смешать значения цвета в единице изображения, выполнив что-то вроде:

vec4 texelCol = imageLoad(myImage, myTexel);
imageStore(myImage, myTexel, texelCol+newCol);

В сценарии, где несколько фрагментов могут иметь одно и то же значение для 'myTexel', возможно, потому что нельзя создать атомарность между командами imageLoad и imageStore, а другие вызовы шейдеров могут изменить цвет текселя между ними.

Кто-то сказал мне, что люди работают над решением этой проблемы, создавая семафоры, используя атомарные команды для текстур uint, чтобы шейдер каким-то образом ждал в цикле while, прежде чем получить доступ к текселю, и как только он освободится, атомарно записал Это не целочисленная текстура, чтобы блокировать вызовы других фрагментных шейдеров, обрабатывать цветной тексель и после завершения атомарно освобождать целочисленный тексель снова.

Но я не могу сообразить, как это может работать на самом деле и как будет выглядеть такой код?

Неужели это возможно? можно ли настроить фрагментный шейдер GLSL на ожидание в цикле while? Если можно, может кто пример привести?

11
задан Nicol Bolas 21 June 2012 в 18:48
поделиться