IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement d'images Discussion :

CUDA lié une texture a un CudaArray


Sujet :

Traitement d'images

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut CUDA lié une texture a un CudaArray
    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?

  2. #2
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    il faudrait peut-etre utiliser cudaMemcopy a la place de memcpy dans memcpy(pagelockedPtr.ptr, h_volume, size); ?

    Salutations,

    Greg

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Par défaut Même problème
    Salut,

    je voulais savoir si tu as trouvé une solution car j'ai le même problème.

    J'ai essayé de ta manière, et apparemment il n'y a que des zéros dans la texture.

    J'ai essayé aussi de lié la texture 3d directement a partir d'un float * et cela me donne la meme chose :

    cudaBindTexture( 0 , float* tab, channelDesc, size);

    je suis vraiment bloqué à cause de cela. Si quelqu'un a une solution, je lui serai vraiment reconnaissant.

    Bonne journée

Discussions similaires

  1. Color key d'une texture
    Par Freakazoid dans le forum DirectX
    Réponses: 9
    Dernier message: 07/07/2004, 16h48
  2. comment modifier une texture?
    Par tibyann dans le forum DirectX
    Réponses: 6
    Dernier message: 16/06/2004, 15h27
  3. Charger 16x16 sur une texture 256x256
    Par Johngame dans le forum DirectX
    Réponses: 4
    Dernier message: 06/03/2004, 17h16
  4. Chargement d'une texture a partir de la mémoire
    Par logramme dans le forum DirectX
    Réponses: 6
    Dernier message: 27/01/2003, 14h57
  5. Changer l'image d'une texture
    Par alltech dans le forum DirectX
    Réponses: 5
    Dernier message: 21/08/2002, 01h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo