我听说取纹理是相当昂贵的操作。但是多少钱?像十倍的算术乘法。
例如,有一个3D查找表技术来处理需要3d纹理提取一次的图像:
http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter24.html
即使只使用着色器中的某些矩阵和矢量积来实现转换,我还能期望3D-LUT在性能方面仍然有用吗?
3D-LUT与矩阵/矢量产品就是一个例子。我想知道的是在测量精确运行时间之前通过纹理提取来估计开销的一般方法。或者,是否有像GLSL开销那样的“作弊表”?
答案 0 :(得分:7)
总是取决于。纹理提取的一个问题是内存带宽 - 与此相关 - 缓存效率。针对相邻片段访问相邻纹素的情况优化了高速缓存。我做了一些基准测试,在这种情况下,我甚至没有注意到使用双线性滤波器采样最近或采样与直接使用texelFetch
之间存在差异。
在我使用3D纹理作为颜色查找的另一种情况下,缓存效率成为一个主要问题。图像内容实际上会显着影响性能。我的基准测试场景是后处理1920x1080帧,并且具有相当缓存友好的内容(ms office的屏幕截图),我测量了大约0.35ms的操作,而对于包含随机噪声的图像,处理时间上升到~4ms (使用双线性滤波)或~2ms(最近/ texelFetch
)。
当然,这在很大程度上取决于您的具体情况和硬件,因此我唯一可以给出的建议是:基准/配置文件。