DirectCompute原子计数器

时间:2015-02-20 21:44:56

标签: unity3d compute-shader directcompute

在计算着色器(使用Unity)中,我有一个光线投影查找与网格三角形的交叉点。在某些时候,我想返回找到多少个交叉点。

我可以通过标记像素清楚地看到有多少个交叉点,但是如果我只是为计算着色器中的每个交叉点增加一个全局int(并通过缓冲区返回),那么我得到的数字就没有意义了。我认为这是因为我创造了竞争条件。

我看到opengl有"原子计数器" :https://www.opengl.org/wiki/Atomic_Counter,这似乎就是我在这种情况下所需要的。我没有在Unity和DirectCompute文档中找到这样的功能。有没有办法做到这一点?

我可以创建一个appendBuffer,但它看起来很傻,因为我确实需要返回一个int。

1 个答案:

答案 0 :(得分:6)

HA!那很简单。我会把这个留在这里,以防万一有人遇到同样的问题。   HLSL有一整套"互锁"阻止此类事件发生的函数:

https://msdn.microsoft.com/en-us/library/windows/desktop/ff476334(v=vs.85).aspx

就我而言:

InterlockedAdd(collisionCount, 1);

替换

collisionCount++;

那就是它!