2

我正在尝试使用计算着色器来实现流体动力学。在这篇文章中,由于这是在计算着色器之前编写的,因此对纹理进行了一系列处理。

对纹理或缓冲区进行每次传递会更快吗?无论如何,最终通道必须应用于纹理。

4

1 回答 1

8

我建议使用适合模拟的任何维度的资源。如果是 1D 模拟,使用 RWBuffer,如果是 2D 模拟,使用 RWTexture2D,如果是 3D 模拟,使用 RWTexture3D。

您链接的算法中似乎存在使用双线性过滤的阶段。如果您限制自己使用 Buffer,则必须发出 4 或 8 次内存提取(取决于 2D 或 3D),然后执行更多指令来计算加权平均值。尽可能利用硬件为您执行此操作的能力。

另一件需要注意的事情是纹理中的数据不是像您所期望的那样逐行(线性)布置,而是以相邻纹素在内存中尽可能靠近的方式布置;这可以称为 Tiling 或 Swizzling,具体取决于您阅读的文档。出于这个原因,除非您的模拟是一维的,否则您可能会从布局与模拟维度最匹配的资源中获得更好的读/写缓存一致性。

于 2015-07-12T20:53:49.527 回答