计算着色器调用编写冲突

时间:2017-08-06 12:04:18

标签: opengl compute-shader

我正在使用计算着色器做一些工作,我注意到如果两个调用使用+--------+--------+--------------------+------------+-----+ | ItemId | Placed | TableDetailsNumber | Date | Qty | +--------+--------+--------------------+------------+-----+ | 111 | Dubai | 556 | 2017-07-31 | 50 | | 112 | London | 555 | 2017-05-31 | 10 | | 123 | Dubai | 556 | 2017-07-31 | 2 | +--------+--------+--------------------+------------+-----+ 写入纹理上的相同位置,则在渲染纹理时会获得闪烁效果,因为访问速度不保证,所以有时一个调用最后到达,有时是另一个调用。我想我的最终颜色值是,例如,具有最高红色值的值。我有办法在着色器中确定它吗?

我认为有一些混乱,所以我会提供更多信息。我正在处理我作为imageStore绑定在CPU上的数据,并使用

访问它

GL_UNSIGNED_BYTE

在这个阶段,我只是想停止闪烁,即一些着色器调用优先于其他着色器调用。最高值是理想的,但我希望这很快。

1 个答案:

答案 0 :(得分:1)

Image atomic operations仅允许用于单通道,32位格式(整数和浮点数)。因此,只需将数据更改为使用32位整数而不是8位整数,并使用imageAtomicMax将值设置到图像中。

您可以使用32位整数缓冲区作为中介,使用后处理读取32位数据并写入8位缓冲区。