2.2.4.1 纹理参考声明
纹理参考的一些属性不可变并且在编译时必须知道;它们在声明纹理参考时指定。纹理参考必须在文件域内声明,变量类型为texture;
其中:
Type指定纹理获取时的返回的数据类型,Type限制为基本的整形和单精度浮点型和B.3.1节定义的1,2和4个组件的向量类型的任何一个。
Dim指定纹理参考的维数,且等于1,2或3;Dim是可选的,默认为1;
ReadMode等于cudaReadModeNormalizedFloat或cudaReadModeElementType;如果它是cudaReadModeNormalizedFloat且Type是16位或者8位整形,实际返回值是浮点类型,对于无符号整型,整形全范围被映射到[0.0,1.0],对于有符号整型,映射成[-1.0,1.0];例如,无符号八位值为0xff的纹理元素映射为1;如果ReadMode是cudaReadModeElementType,不会进行转换;ReadMode是个可选参数,默认为cudaReadModeElementType。
3.2.4.2 运行时纹理参考属性
纹理参考的其它属性是可变的,并且能够在运行时通过主机运行时改变。这些属性指定纹理坐标是否归一化、寻址模式和纹理滤波,细节如下。
默认情况下,纹理使用[0,N)范围内的浮点坐标引用,其中N是坐标对应维度的尺寸。例如,尺寸为64*32的纹理可引用的坐标范围是x维[0,63]和y维[0,31]。归一化的纹理坐标范围指定为[0.0,1.0)而不是[0,N),所以同样的64*32纹理的归一化坐标x维和y维可寻址范围都是[0,1)。归一化的纹理坐标天然的符合某些应用的要求,如果为了让纹理坐标独立于纹理尺寸,就更可取了。
寻址模式定义了当纹理坐标越界时发生了什么了。当使用非归一化纹理坐标时,纹理坐标在[0,N)范围之外的被钳位(clamp):小于0的设置为0而大于等于N的设置为N-1。钳位也是使用归一化纹理坐标时默认的寻址模式:小于0.0或大于1.0钳位到[0.0,1.0)范围。对于归一化坐标,也可以指定为循环寻址模式。一般在纹理有周期性信号时使用循环模式。循环模式只使用纹理坐标的小数部分;如1.25和0.25等同,-1.25和0.75等同。
线性纹理滤波只能对返回值为浮点型的纹理配置起作用。它在周围的纹理元素点上执行低精度插值。如果启用滤波,纹理获取点周围的点被读取,纹理获取点的返回值基于那些纹理坐标落入那些元素中间的元素进行插值。对于一维的纹理进行简单的线性插值,而二维纹理使用双线性插值。
附录F给出了纹理获取的细节。