Directx 计算着色器、缓冲区或纹理

Directx 计算着色器、缓冲区或纹理,directx,shader,compute-shader,Directx,Shader,Compute Shader,我正在尝试使用计算着色器实现。在本文中,有一系列的过程是在纹理上完成的,因为这是在计算着色器之前编写的 在纹理或缓冲区上进行每次传递是否会更快?最终的过程无论如何都必须应用于纹理。我建议使用适合模拟的资源维度。如果是1D模拟,请使用RWBuffer;如果是2D模拟,请使用RWTexture2D;如果是3D模拟,请使用RWTexture3D 您链接的算法中似乎存在使用双线性过滤的阶段。如果您限制自己使用缓冲区,则必须执行4或8次内存提取(取决于2D或3D),然后执行更多指令来计算加权平均值。尽可能

我正在尝试使用计算着色器实现。在本文中,有一系列的过程是在纹理上完成的,因为这是在计算着色器之前编写的


在纹理或缓冲区上进行每次传递是否会更快?最终的过程无论如何都必须应用于纹理。

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

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


另一件需要注意的事情是,纹理中的数据并不像您预期的那样逐行(线性)排列,而是以这样一种方式排列,即相邻的texel在内存中尽可能彼此接近;这可以称为平铺或滑动,具体取决于您阅读的文档。因此,除非您的模拟是一维的,否则从布局与模拟维度最匹配的资源读取/写入时,您可能会获得更好的缓存一致性。

这是一个很好的答案。回答了这个问题,但也教会了我一些东西。谢谢