6.28. 纹理对象管理

本节介绍低级CUDA驱动程序应用程序编程接口的纹理对象管理功能。 纹理对象API仅支持计算能力3.0或更高的设备。

Functions

CUresult cuTexObjectCreate ( CUtexObject* pTexObject, const CUDA_RESOURCE_DESC* pResDesc, const CUDA_TEXTURE_DESC* pTexDesc, const CUDA_RESOURCE_VIEW_DESC* pResViewDesc )
Creates a texture object.
CUresult cuTexObjectDestroy ( CUtexObject texObject )
Destroys a texture object.
CUresult cuTexObjectGetResourceDesc ( CUDA_RESOURCE_DESC* pResDesc, CUtexObject texObject )
Returns a texture object's resource descriptor.
CUresult cuTexObjectGetResourceViewDesc ( CUDA_RESOURCE_VIEW_DESC* pResViewDesc, CUtexObject texObject )
Returns a texture object's resource view descriptor.
CUresult cuTexObjectGetTextureDesc ( CUDA_TEXTURE_DESC* pTexDesc, CUtexObject texObject )
Returns a texture object's texture descriptor.

Functions

CUresult cuTexObjectCreate ( CUtexObject* pTexObject, const CUDA_RESOURCE_DESC* pResDesc, const CUDA_TEXTURE_DESC* pTexDesc, const CUDA_RESOURCE_VIEW_DESC* pResViewDesc )
创建一个纹理对象。
参数
pTexObject
- Texture object to create
pResDesc
- Resource descriptor
pTexDesc
- Texture descriptor
pResViewDesc
- Resource view descriptor
描述

创建一个纹理对象并在pTexObject中返回它。pResDesc描述了要从中获取纹理的数据。pTexDesc描述了应如何采样数据。pResViewDesc是一个可选参数,它指定了pResDesc所描述数据的替代格式,并描述了在纹理处理时要限制访问的子资源区域。只有当资源类型是CUDA数组或非块压缩格式的CUDA mipmapped数组时,才能指定pResViewDesc

纹理对象仅支持计算能力3.0或更高的设备。此外,纹理对象是一个不透明的值,因此应仅通过CUDA API调用来访问。

CUDA_RESOURCE_DESC结构体定义如下:

‎        typedef struct CUDA_RESOURCE_DESC_st
              {
                  CUresourcetype resType;
      
                  union {
                      struct {
                          CUarray hArray;
                      } array;
                      struct {
                          CUmipmappedArray hMipmappedArray;
                      } mipmap;
                      struct {
                          CUdeviceptr devPtr;
                          CUarray_format format;
                          unsigned int numChannels;
                          size_t sizeInBytes;
                      } linear;
                      struct {
                          CUdeviceptr devPtr;
                          CUarray_format format;
                          unsigned int numChannels;
                          size_t width;
                          size_t height;
                          size_t pitchInBytes;
                      } pitch2D;
                  } res;
      
                  unsigned int flags;
              } CUDA_RESOURCE_DESC;
where:

如果CUDA_RESOURCE_DESC::resType设置为CU_RESOURCE_TYPE_ARRAY,则必须将CUDA_RESOURCE_DESC::res::array::hArray设置为有效的CUDA数组句柄。

如果CUDA_RESOURCE_DESC::resType设置为CU_RESOURCE_TYPE_MIPMAPPED_ARRAY,则必须将CUDA_RESOURCE_DESC::res::mipmap::hMipmappedArray设置为有效的CUDA mipmapped数组句柄。

如果CUDA_RESOURCE_DESC::resType设置为CU_RESOURCE_TYPE_LINEAR,则必须将CUDA_RESOURCE_DESC::res::linear::devPtr设置为一个有效的设备指针,该指针对齐到CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT。CUDA_RESOURCE_DESC::res::linear::format和CUDA_RESOURCE_DESC::res::linear::numChannels描述了每个分量的格式以及每个数组元素的分量数量。CUDA_RESOURCE_DESC::res::linear::sizeInBytes以字节为单位指定数组的大小。线性地址范围内的元素总数不能超过CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH。元素数量计算公式为(sizeInBytes / (sizeof(format) * numChannels))。

如果CUDA_RESOURCE_DESC::resType设置为CU_RESOURCE_TYPE_PITCH2D,则CUDA_RESOURCE_DESC::res::pitch2D::devPtr必须指向一个有效的设备指针,该指针对齐到CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT。CUDA_RESOURCE_DESC::res::pitch2D::format和CUDA_RESOURCE_DESC::res::pitch2D::numChannels描述了每个分量的格式以及每个数组元素的分量数量。CUDA_RESOURCE_DESC::res::pitch2D::width和CUDA_RESOURCE_DESC::res::pitch2D::height分别指定数组的宽度和高度(以元素为单位),且不能超过CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTHCU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT。CUDA_RESOURCE_DESC::res::pitch2D::pitchInBytes指定两行之间的间距(以字节为单位),并且必须对齐到CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT。间距不能超过CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH

  • flags必须设置为零。

CUDA_TEXTURE_DESC结构体定义为

‎        typedef struct CUDA_TEXTURE_DESC_st {
                  CUaddress_mode addressMode[3];
                  CUfilter_mode filterMode;
                  unsigned int flags;
                  unsigned int maxAnisotropy;
                  CUfilter_mode mipmapFilterMode;
                  float mipmapLevelBias;
                  float minMipmapLevelClamp;
                  float maxMipmapLevelClamp;
              } CUDA_TEXTURE_DESC;
where

CUDA_RESOURCE_VIEW_DESC结构体定义为

‎        typedef struct CUDA_RESOURCE_VIEW_DESC_st
              {
                  CUresourceViewFormat format;
                  size_t width;
                  size_t height;
                  size_t depth;
                  unsigned int firstMipmapLevel;
                  unsigned int lastMipmapLevel;
                  unsigned int firstLayer;
                  unsigned int lastLayer;
              } CUDA_RESOURCE_VIEW_DESC;
where:
  • CUDA_RESOURCE_VIEW_DESC::format 指定应如何解释CUDA数组或CUDA多级渐远纹理数组中包含的数据。请注意,这可能会导致纹理数据大小发生变化。如果资源视图格式是块压缩格式,则底层CUDA数组或CUDA多级渐远纹理数组必须具有CU_AD_FORMAT_UNSIGNED_INT32基本格式,并根据块压缩格式包含2或4个通道。例如,BC1和BC4要求底层CUDA数组具有2通道的CU_AD_FORMAT_UNSIGNED_INT32格式。其他BC格式要求底层资源具有相同的基本格式但包含4个通道。

  • CUDA_RESOURCE_VIEW_DESC::width 指定纹理数据的新宽度。如果资源视图格式是块压缩格式,该值必须是资源原始宽度的4倍。对于非块压缩格式,该值必须与原始资源保持一致。

  • CUDA_RESOURCE_VIEW_DESC::height 指定纹理数据的新高度。如果资源视图格式是块压缩格式,该值必须是资源原始高度的4倍。对于非块压缩格式,该值必须与原始资源的高度相等。

另请参阅:

cuTexObjectDestroy, cudaCreateTextureObject

CUresult cuTexObjectDestroy ( CUtexObject texObject )
销毁一个纹理对象。
参数
texObject
- Texture object to destroy
描述

销毁由texObject指定的纹理对象。

另请参阅:

cuTexObjectCreate, cudaDestroyTextureObject

CUresult cuTexObjectGetResourceDesc ( CUDA_RESOURCE_DESC* pResDesc, CUtexObject texObject )
返回纹理对象的资源描述符。
参数
pResDesc
- Resource descriptor
texObject
- Texture object
描述

返回由texObject指定的纹理对象的资源描述符。

另请参阅:

cuTexObjectCreate, cudaGetTextureObjectResourceDesc,

CUresult cuTexObjectGetResourceViewDesc ( CUDA_RESOURCE_VIEW_DESC* pResViewDesc, CUtexObject texObject )
返回纹理对象的资源视图描述符。
参数
pResViewDesc
- Resource view descriptor
texObject
- Texture object
描述

返回由texObject指定的纹理对象的资源视图描述符。如果未为texObject设置资源视图,则返回CUDA_ERROR_INVALID_VALUE

另请参阅:

cuTexObjectCreate, cudaGetTextureObjectResourceViewDesc

CUresult cuTexObjectGetTextureDesc ( CUDA_TEXTURE_DESC* pTexDesc, CUtexObject texObject )
返回纹理对象的纹理描述符。
参数
pTexDesc
- Texture descriptor
texObject
- Texture object
描述

返回由texObject指定的纹理对象的纹理描述符。

另请参阅:

cuTexObjectCreate, cudaGetTextureObjectTextureDesc