Hello,
I work with CUDA 2.0 with an GeForce 9800 GT.
My problem is pretty simple :
I load datas from a raw file into an 1D array.
After I copy this array into a 3D cudaArray.
And I bind thios cudaArray with a texture 3D.
The problem is that my texture does not contain datas (texture 's values are always 0 ). So I think the texture is not correctly loaded.
I put a part of my code here :
I use a function to load a raw file (323232) and who store datas in an 1D array.
I copy data from my 1D array into a 3D cuda array like this:
cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<unsigned char>();
CUDA_SAFE_CALL( cudaMalloc3DArray(&d_volumeArray, &channelDesc, volumeSize) );
// The sample does not work with pageable memory
// This is a known issue for beta that will be fixed for the public release
#define USE_PAGE_LOCKED_MEMORY 1
#if USE_PAGE_LOCKED_MEMORY
// copy to page-locked mem
cudaPitchedPtr pagelockedPtr;
pagelockedPtr.pitch = volumeSize.width*sizeof(unsigned char);
pagelockedPtr.xsize = volumeSize.width;
pagelockedPtr.ysize = volumeSize.height;
size_t size = volumeSize.width*volumeSize.height*volumeSize.depth*sizeof(unsigned char);
CUDA_SAFE_CALL( cudaMallocHost(&(pagelockedPtr.ptr), size) );
memcpy(pagelockedPtr.ptr, h_volume, size);
#endif
cudaMemcpy3DParms copyParams = {0};
#if USE_PAGE_LOCKED_MEMORY
copyParams.srcPtr = pagelockedPtr;
#else
copyParams.srcPtr = make_cudaPitchedPtr((void*)h_volume, volumeSize.width*sizeof(uchar), volumeSize.width, volumeSize.height);
#endif
copyParams.dstArray = d_volumeArray;
copyParams.extent = volumeSize;
copyParams.kind = cudaMemcpyHostToDevice;
CUDA_SAFE_CALL( cudaMemcpy3D(©Params) );
Declaration:
texture<unsigned char, 3, cudaReadModeNormalizedFloat> tex; // 3D texture
Binding texture to CudaArray
// set texture parameters
tex.normalized = true; // access with normalized texture coordinates
tex.filterMode = cudaFilterModeLinear; // linear interpolation
tex.addressMode[0] = cudaAddressModeClamp; // wrap texture coordinates
tex.addressMode[1] = cudaAddressModeClamp;
// bind array to 3D texture
CUDA_SAFE_CALL(cudaBindTextureToArray(tex, d_volumeArray, channelDesc));
Please could you tell me where is the problem and what is wrong?