目前我有一个使用以下纹理参考的内核(类型为 3d 纹理unsigned char
):
texture<unsigned char, 3, cudaReadModeElementType> volumeTexture;
但是,我需要能够交换纹理的类型。我已经对内核进行了模板化,因此它能够处理不同的类型。但是我无法在保持旧状态的同时交换纹理的类型或纹理本身(即能够同时处理unsigned char
)unsigned short
。
这就是我想到使用纹理对象 API 的原因。但是,此 API 似乎不支持 3d 纹理。可用的资源类型是Linear
、Array
和。它们似乎都不是为 3d 纹理设计的。纹理对象 API 真的根本不支持 3d 纹理吗?MipMappedArray
Pitch2D
有什么解决方法吗?我可以使用 2d 纹理,其中切片只是堆叠在一起。但是,512³ 条目体积(=512*512=262,144)的必要高度超过了最大 texture2d 高度(我的设备上为 65,536)。因此,我必须将切片彼此相邻和彼此叠加,这将导致我想避免的非常脏的地址计算。
另一种方法是复制内核代码并交换纹理参考。但这不是一个非常干净的解决方案。可以以某种方式对引用本身进行模板化吗?