我有一个vec4的纹理,由计算着色器修改。
计算着色器的不同调用会修改同一向量的不同组件,这似乎会导致一些并发问题,因为目前我的方法是:
vec4 texelData = imageLoad(Texture, texCoords);
//Do operations on individual components of texelData based on the invocation id
imageStore(Texture, texCoords, texelData);
我想这里发生的是,不同的调用正在获得texelData的原始状态,它将全部为0,将其位写入其中,然后存储它,这意味着只有最后一次调用修改的组件才会出现在结束。
所以我正在研究使用imageAtomicExchange,它应该原子地执行此操作,因此消除了并发性问题,但是我无法使其工作。
spec说参数是:
它不是vec4,因为每个纹素都存在吗?如果不是,不应该有另一个参数或坐标向量的额外维度来指定要交换的纹素的哪个组件?