4

我有一个计算着色器,它可以修改 256x256 纹理中的纹素。

计算着色器有 256x256x256 次调用,其中调用的 x 和 y 分量直接映射到 texel 的 u 和 v 坐标。所以每个 texel 可以被写入 256 次。

我希望计算着色器的每次调用都检查给定纹素中当前的内容并执行一些测试来决定是否覆盖它。然而,为了避免在任何其他调用写入之前它们都获得纹素值的并发问题,我希望使用原子操作将值写入纹理。

但是我被告知,这破坏了并行化操作的意义,因为原子操作迫使其他一切都等到它完成,这意味着计算着色器的每个 z 调用都必须按顺序进行,因为它们等待前一个原子地写入纹理。

是这样吗?如果是这样,这会对性能产生多大影响?值得注意的是 z 调用可以改变并且可能比 256 多很多

4

0 回答 0