【解決済】VDPAUのOutput Surfaceに書き込めない?
いま、VDPAUに犯されまくってるのは周知の事実として、Output Surfaceに書き込もうとすると蹴られるんですが、何か情報ないですかね。
つまり
int width; uchar4 *dev_ptr; kernel<<< ... >>>( dev_ptr, ... ); ... VdpOutputSurface surface; cudaGraphicsResource_t resource; cudaGraphicsVDPAURegisterOutputSurface( &resource, surface, cudaGraphicsMapFlagsNone ); cudaGraphicsMapResource( 1, &resource ); // これはなぜかそもそもできない // uchar4 *out_ptr; // size_t size; // cudaGraphicsResourceGetMappedPointer( &out_ptr, &size, resource ); cudaArray *array; cudaGraphicsSubResourceGetMappedArray( &array, resource, cudaGraphicsCubeFacePositiveX, 0 ); // このmemcpyで蹴られる cudaMemcpy2DToArray( array, 0, 0, dev_ptr, width * sizeof( uchar4 ), width * sizeof( uchar4 ), height, cudaMemcpyDeviceToDevice ); cudaGraphicsUnmapResource( 1, &resource ); cudaGraphicsUnregisterResource( resource );
のcudaMemcpy2DToArrayで蹴られるんですよ。しかもcudaGraphicsResourceGetMappedPointerだと取得できないし。
VDPAU周りに限らずInteroperabilityは全体的にってか、CUDA全体がドキュメント足りなさすぎです...。
05:00 追記:
適当に書いたやつはどうやら通る……なんなんだ?確かに今書いてるのはgcc4.5をバックエンドにしたnvccとgcc4.6(C++0x+std::trehad)を混ぜてリンクしてるから変になるかもだけどなぜ書き込めない……
05:55 追記:
サーセンwwwww引数間違ってたwwww (はぁ……俺の3日間返してくれ…