Opengl 我可以用模具缓冲区防止GPU片段暂停吗?

Opengl 我可以用模具缓冲区防止GPU片段暂停吗?,opengl,gpu,shader,stencil-buffer,Opengl,Gpu,Shader,Stencil Buffer,我对片段着色器进行了一些繁重的计算,这是在多个过程中进行的。但是在一些片段上,结果只经过一次就可以了,而对于其他片段,则需要更多的过程 因此,很多片段在一段时间后确实会丢弃,但正如我们所知,这些线程可能会暂停,直到所有其他片段都完成 我在想。由于某些opengl版本,可以从片段着色器写入模具缓冲区。当我知道我不需要对特定片段进行另一次传递时,我可以写入模具缓冲区。在下一个渲染过程中,我可以打开模具测试,以防止这些片段再次计算 我的问题是:这能防止失速问题吗?这些线程是否可以执行更多仍有待处理的片

我对片段着色器进行了一些繁重的计算,这是在多个过程中进行的。但是在一些片段上,结果只经过一次就可以了,而对于其他片段,则需要更多的过程

因此,很多片段在一段时间后确实会丢弃,但正如我们所知,这些线程可能会暂停,直到所有其他片段都完成

我在想。由于某些opengl版本,可以从片段着色器写入模具缓冲区。当我知道我不需要对特定片段进行另一次传递时,我可以写入模具缓冲区。在下一个渲染过程中,我可以打开模具测试,以防止这些片段再次计算

我的问题是:这能防止失速问题吗?这些线程是否可以执行更多仍有待处理的片段,以便在每个过程消除下一个过程的片段时,每个过程都比上一个过程快


换句话说,假设我有一个16x16的纹理需要计算。在第一个过程中,我必须计算256个片段(假设我有16个内核,这意味着16个周期)。例如,如果在第一次传递之后,我知道我只需要进一步计算128个片段,并且我已经标记了在模具缓冲区中完成的片段,那么第二次传递是否会执行两倍的速度(因此:16个核上的128个片段=8个周期而不是16个周期)?

它可能会这样做,但可能不会。这取决于数据是如何分布在coresAny上的?有什么办法强迫它吗?还是取决于硬件?nvidia或ati是否知道这一点?也可能是丢弃会在批处理中得到早期回报,最好的了解方法是在您的系统上进行分析可能不是,您在问题的很早就提到碎片着色器
丢弃
,这将阻止在许多硬件上进行早期深度/模具测试。Well@AndonM.Coleman,我不再丢弃,我会将模具值设置为“下次不渲染”。我不再需要丢弃,因为模具缓冲区可以为我这样做,而无需再次测试片段是否应该被丢弃。我只是想知道当模具缓冲区被标记为不渲染片段时,片段着色器是否仍然会使用线程。