Bonour,

J'utilise CUDA 2.0 sur une Geforce 9800GT.
Mon problème est relativement simple:
je Charge des données provenant d'un fichier raw dans une tableau 1D que je copie ensuite dans un cudaArray 3D

Je lie ensuite le cudaArray avec une texture 3D

Le probème est que la texture ne contient que des zeros .
Je pense donc que ma texture n'est pas correctement chargée

Je copie les données du tableau 1D dans le CudaArray 3D comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
 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(&copyParams) );
Declaration:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
texture<unsigned char, 3, cudaReadModeNormalizedFloat> tex;         // 3D texture

Lien entre la texture et le CudaArray
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
// 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));
SVP pouvez vous me dire ce qui semble ne pas être fait correctement?