我听说获取纹理是一项非常昂贵的操作。但是多少钱?就像十次算术乘法。
例如,有 3D-Look-up table 技术来处理需要 3d 纹理获取一次的图像:
http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter24.html
即使可以在着色器中仅使用一些矩阵和向量乘积来实现转换,我是否可以期望 3D-LUT 在性能方面仍然有用?
3D-LUT 与矩阵/矢量积只是一个例子。我想知道的是在测量确切的运行时间之前通过纹理获取来估计开销的一般方法。或者,是否有类似 GLSL 开销的“备忘单”之类的东西?
最佳答案
这总是取决于。纹理提取的一个问题是内存带宽和 - 与此非常相关 - 缓存效率。缓存针对相邻片段访问相邻纹素的情况进行了优化。我做了一些基准测试,在这种情况下,我什至没有注意到使用最近采样或使用双线性滤波器采样与直接使用 texelFetch
之间的任何区别。 .
在我使用 3D 纹理作为颜色查找的另一个场景中,缓存效率成为一个主要问题。图像内容实际上显着影响性能。我的基准场景是对 1920x1080 帧进行后处理,并且具有非常适合缓存的内容(ms office 的屏幕截图),我测量了大约 0.35 毫秒的操作时间,而对于包含随机噪声的图像,处理时间长达约 4 毫秒(使用双线性过滤)或~2ms(最近的/texelFetch
)。
当然,这在很大程度上取决于您的特定场景和硬件,因此我可以给出的唯一建议是:基准测试/配置文件。
关于performance - 在 GLSL 中获取纹理有多昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18803293/