GLSL:等待SSBO值更新

时间:2019-05-19 00:32:27

标签: synchronization glsl shader

一个着色器调用执行一个调用:

uint ret = atomicCompSwap(ssbo[index], 0, 1);

如果返回的值等于0,则调用在索引写为1时“占用” SSBO。经过一些计算后,它将写出一个大于1的值。

否则,如果返回值大于1,则调用将使用返回值进行计算。

但是,如果返回的值等于1,则意味着另一个调用仍在进行计算,并且当前调用需要等待,直到写入的值大于1。

问:可以实施这种等待吗?如果是这样,怎么办?

我在下面尝试了此代码,但是应用程序崩溃了。据我了解,如果某些着色器调用在一个循环中循环并且一段时间无法返回,则GPU驱动程序会报告失败。

while(ret == 1)
{
    memoryBarrierBuffer();
    ret = ssbo[index];
}

0 个答案:

没有答案