10.6_使用归一化坐标的纹理操作
10.6 使用归一化坐标的纹理操作
当使用归一化的坐标进行纹理操作时,纹理寻址的坐标范围将由[0,MaxDim)变为[0,1.0)。对于一个16元素的一维纹理,其归一化的坐标如图10-6所示。

图10-6 使用归一化坐标的纹理操作
除了失去独立于纹理维度的纹理坐标,纹理操作与先前基本是一样的。但CUDA纹理操作的全部功能变得可用。使用归一化的坐标进行操作时,纹理寻址除了夹取和边界寻址模式外,还有另外两种模式可供使用,即重叠寻址模式和镜像寻址模式,相应公式如下所示:
图10-7显示了CUDA支持的四种纹理寻址模式。图中描述了每行头尾超出范围的两个坐标进行纹理获取的操作方式以及与正确范围内纹理元素的关系。如果读者通过此图还是无法理解这些纹理寻址模式,请参考下一小节中tex2d_opengl.cu程序演示。

图10-7 纹理寻址模式

特别注意 在驱动程序API中,cuTexRefSetArray()或
cuTexRefSetAddress()可以完成纹理引用的改变。换言之,只有将纹理引用与内存进行绑定之后,调用诸如cuTexRefSetFilterMode()或cuTexRefSetAddressMode()之类的状态改变函数才会生效。
一维设备内存中的浮点坐标
对于那些使用浮点坐标进行纹理寻址的应用程序,或者那些使用只有归一化坐标才有的纹理操作特性的应用程序,可以调用 CUDABindTexture2D()或cuTexRefSetAddress2D()指定基地址。指定高度为1,步长为N*sizeof(T)。内核可以接着调用tex2D(x,0.0f)读取包含浮点坐标的一维纹理。