2012-05-30 3 views
0

Я хочу сделать некоторые кусочки 3d-поверхности.CUDA: Получить подмножество 3D Surface

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.

Смежные вопросы