7

我听说获取纹理是一项非常昂贵的操作。但是多少钱?比如十次算术乘法。

例如,有 3D 查找表技术来处理需要 3D 纹理提取一次的图像:

http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter24.html

即使在着色器中仅使用一些矩阵和矢量乘积就可以实现转换,我是否可以期望 3D-LUT 在性能方面仍然有用?

3D-LUT 与矩阵/向量积只是一个例子。我想知道的是在测量确切的运行时间之前通过纹理提取来估计开销的一般方法。或者,对于 GLSL 开销,是否有类似“备忘单”的东西?

4

1 回答 1

9

它总是取决于。纹理提取的一个问题是内存带宽和 - 与此非常相关的 - 缓存效率。缓存针对相邻片段访问相邻纹素的情况进行了优化。我做了一些基准测试,在这种情况下,我什至没有注意到使用最近采样或使用双线性滤波器采样与直接使用texelFetch.

在另一个我使用 3D 纹理作为颜色查找的场景中,缓存效率成为一个主要问题。图像内容实际上会显着影响性能。我的基准场景是对 1920x1080 帧进行后处理,并且对于缓存非常友好的内容(ms office 的屏幕截图),我测量了大约 0.35ms 的操作,而对于包含随机噪声的图像,处理时间上升到 ~4ms (使用双线性过滤)或~2ms(最近/ texelFetch)。

当然,这在很大程度上取决于您的具体场景和硬件,所以我能给出的唯一建议是:对它进行基准测试/配置文件。

于 2013-09-14T15:38:17.110 回答