2012-05-30 44 views
0

我想渲染3d表面的某些切片。CUDA:獲取3D表面的子集

cudaArray* surfArray; 
cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsigned); 
cudaExtent surfSize = make_cudaExtent(640,480,2); 
cudaMalloc3DArray(&surfArray,&channelDesc,surfSize,cudaArraySurfaceLoadStore); 

因此,我試圖通過MemcpyArrayToArray()和偏移量獲取子集。

cudaGraphicsSubResourceGetMappedArray(&cu_rgbArray,tex_rgb,0,0); 
cudaMemcpyArrayToArray(cu_rgbArray,0,0,surfArray,0,0,640*480*sizeof(uchar4),cudaMemcpyDeviceToDevice); 

cudaGraphicsSubResourceGetMappedArray(&cu_depthArray,tex_depth,0,0); 
cudaMemcpyArrayToArray(cu_depthArray,0,0,surfArray,640,480,640*480*sizeof(uchar4),cudaMemcpyDeviceToDevice); 

但是,當第一個memcpy成功時,第二個失敗。 (如果偏移量爲0,0,它會成功)。

任何想法如何解決這個問題沒有額外的內核?

回答

1

我相信你應該使用cudaMemcpy3D而不是cudaMemcpyArrayToArray