我想知道在着色器中集成动态循环功能的最佳方法是什么?
首先,似乎动态数组是不可能的。因此,创建最大大小的数组并仅填充其中一部分或使用预定义的大小定义数组会更好吗?
那么,迭代此数组的最佳方法是什么?
使用展开循环或动态循环进行4到128次迭代比较好吗?我还看到有可能将其展开到最大的预定义迭代次数,然后使用诸如的条件将其停止if (i == myCurrentMaximumIterationNumber)
。
2
您想对数组和循环做什么?我问是因为这听起来有点像XY问题。由于在GPU上使用条件和循环的最佳方法是避免使用它们,因此在您的情况下,也许还有更好的方法来代替使用数组和循环。
—
Nero
我正在实现当前有效的屏幕空间次表面散射效果。但是我对根据性能使用内核的方式有些怀疑。我选择最大数组大小并只填充一部分,并使用具有动态迭代次数的动态循环,该循环与当前使用的数组内容有关。我认为例如根据性能对着色器进行编程时,有些事情要做或知道。在我看来,循环是一个常见的性能主题,可能遵循一些规则,甚至遵循“良好实践”,但我没有找到任何好的答案。
—
2013年