CUDA纹理线性过滤

3
在CUDA C编程指南版本5的附录E.2(线性过滤)中,它指出:
在此过滤模式下,仅适用于浮点纹理,纹理获取返回的值是...
粗体部分让我感到困惑。浮点型是否只适用于texel类型,还是返回类型也是浮点型?例如,我声明了3个纹理如下。
texture<float,cudaTextureType2D> tex32f;
texture<unsigned char, cudaTextureType2D, cudaReadModeNormalizedFloat> tex8u;
texture<unsigned short, cudaTextureType2D, cudaReadModeNormalizedFloat> tex16u;

线性过滤仅适用于tex32f,还是tex8utex16u也可以使用?

感谢您的这篇文章。因为在整数纹理上设置 tex.filterMode = cudaFilterModeLinear; 导致许多其他事情默默失败,我浪费了大部分时间。 - Meekohi
1个回答

6

这意味着线性过滤仅适用于纹理的“读取模式”为cudaReadModeNormalizedFloat时,即整数类型(如u8)会被提升为浮点值,范围为[0.0,1.0](对于无符号整数)或[-1.0,1.0](对于有符号整数)。


2
我的原始答案实际上也是不正确的... 事实上,你可以使用非归一化纹理坐标进行插值(尽管你必须进行一个尴尬的+0.5偏移才能获得预期的效果)。但你不能线性地插值从设置为cudaReadModeElementType的纹理引用。 - ArchaeaSoftware
这意味着插值取决于纹理的返回类型?并且所有我的示例纹理都可以进行插值处理吗? - sgarizvi
1
是的,您所有示例纹理都可以使用9位精度进行插值,返回值将为浮点数。如果没有获得预期结果,可能是因为您的纹理坐标没有被正确计算(有时需要在表达式中进行看起来很别扭的强制转换为浮点数),或者与纹理寻址模式以意外的方式交互。 - ArchaeaSoftware

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接