にゃははー

はへらー

【解決済】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日間返してくれ…