CUDA纹理线性滤波

CUDA纹理线性滤波,cuda,textures,Cuda,Textures,CUDA C编程指南第5版附录E.2(线性滤波)中规定: 在此过滤模式下,仅适用于浮点运算 纹理,纹理提取返回的值为 粗体字的部分使我困惑。浮点是否仅表示texel类型,还是同时表示返回类型?例如,我声明了3种纹理,如下所示 texture<float,cudaTextureType2D> tex32f; texture<unsigned char, cudaTextureType2D, cudaReadModeNormalizedFloat> tex8u; textur

CUDA C编程指南第5版附录E.2(线性滤波)中规定:

在此过滤模式下,仅适用于浮点运算 纹理,纹理提取返回的值为

粗体字的部分使我困惑。
浮点
是否仅表示texel类型,还是同时表示返回类型?例如,我声明了3种纹理,如下所示

texture<float,cudaTextureType2D> tex32f;
texture<unsigned char, cudaTextureType2D, cudaReadModeNormalizedFloat> tex8u;
texture<unsigned short, cudaTextureType2D, cudaReadModeNormalizedFloat> tex16u;
纹理tex32f;
纹理tex8u;
纹理为16U;

线性过滤仅适用于
tex32f
,还是也适用于
tex8u
tex16u

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

我的原始答案实际上也不正确……事实上,您可以使用非规范化纹理坐标进行插值(尽管您必须执行笨拙的+0.5偏移以获得预期效果)。您不能从设置为CUDAREADMODELEMENTTYPE的纹理引用中进行线性插值。这意味着,插值取决于纹理的返回类型?并且在我的所有示例纹理中都是可能的?是的,您的所有示例纹理都可以以9位精度进行插值,并且返回值将是浮动的。如果您没有得到预期的结果,这可能是因为没有正确计算纹理坐标(有时您必须在表达式中放置外观不好的强制类型以使其浮动)或者正在以意外的方式与纹理寻址模式交互。谢谢你的这篇文章。我浪费了大部分时间,因为在整数纹理上设置
tex.filterMode=cudaFilterModeLinear;
会导致许多其他事情以静默方式失败。