CUDA:获取3D Surface的子集

时间:2012-05-30 14:22:57

标签: c++ c 3d cuda geometry-surface

我想渲染一些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成功时,第二个memcpy失败了。 (如果偏移量为0,0,则确实成功。)

有没有想过如何在没有额外内核的情况下解决这个问题?

1 个答案:

答案 0 :(得分:1)

我认为你应该使用cudaMemcpy3D,而不是cudaMemcpyArrayToArray