C++ CUDA:获取三维曲面的子集

C++ CUDA:获取三维曲面的子集,c++,c,3d,cuda,geometry-surface,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,cud

我想渲染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,则会成功)


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

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