10 #include <cuda_runtime.h>
24 static std::unique_ptr<CudaArrayLayeredTexture<T>>
FromGpuMat(
25 const cudaTextureDesc& texture_desc,
const GpuMat<T>& mat);
26 static std::unique_ptr<CudaArrayLayeredTexture<T>>
FromHostArray(
27 const cudaTextureDesc& texture_desc,
33 cudaTextureObject_t
GetObj()
const;
51 const cudaTextureDesc texture_desc_;
57 cudaResourceDesc resource_desc_;
58 cudaTextureObject_t texture_;
66 std::unique_ptr<CudaArrayLayeredTexture<T>>
69 auto array = std::make_unique<CudaArrayLayeredTexture<T>>(
72 cudaMemcpy3DParms params;
73 memset(¶ms, 0,
sizeof(params));
76 params.kind = cudaMemcpyDeviceToDevice;
77 params.srcPtr = make_cudaPitchedPtr((
void*)mat.
GetPtr(), mat.
GetPitch(),
79 params.dstArray = array->array_;
86 std::unique_ptr<CudaArrayLayeredTexture<T>>
92 auto array = std::make_unique<CudaArrayLayeredTexture<T>>(
95 cudaMemcpy3DParms params;
96 memset(¶ms, 0,
sizeof(params));
97 params.extent = make_cudaExtent(
width,
height, depth);
98 params.kind = cudaMemcpyHostToDevice;
101 params.dstArray = array->array_;
107 template <
typename T>
109 const cudaTextureDesc& texture_desc,
113 : texture_desc_(texture_desc),
118 CHECK_GT(height_, 0);
121 cudaExtent extent = make_cudaExtent(width_, height_, depth_);
122 cudaChannelFormatDesc
fmt = cudaCreateChannelDesc<T>();
125 memset(&resource_desc_, 0,
sizeof(resource_desc_));
126 resource_desc_.resType = cudaResourceTypeArray;
127 resource_desc_.res.array.array = array_;
129 CUDA_SAFE_CALL(cudaCreateTextureObject(&texture_, &resource_desc_,
130 &texture_desc_,
nullptr));
133 template <
typename T>
139 template <
typename T>
144 template <
typename T>
149 template <
typename T>
154 template <
typename T>
~CudaArrayLayeredTexture()
CudaArrayLayeredTexture(const cudaTextureDesc &texture_desc, const size_t width, const size_t height, const size_t depth)
static std::unique_ptr< CudaArrayLayeredTexture< T > > FromHostArray(const cudaTextureDesc &texture_desc, const size_t width, const size_t height, const size_t depth, const T *data)
cudaTextureObject_t GetObj() const
static std::unique_ptr< CudaArrayLayeredTexture< T > > FromGpuMat(const cudaTextureDesc &texture_desc, const GpuMat< T > &mat)
__host__ __device__ size_t GetWidth() const
__host__ __device__ size_t GetDepth() const
__host__ __device__ const T * GetPtr() const
__host__ __device__ size_t GetHeight() const
__host__ __device__ size_t GetPitch() const
#define CUDA_SAFE_CALL(error)