CUDA NPPライブラリは、nppiFilter_8u_C1Rコマンドを使用した画像のフィルタリングをサポートしていますが、エラーが発生し続けます。boxFilterNPPサンプルコードを起動して実行するのに問題はありません。
eStatusNPP = nppiFilterBox_8u_C1R(oDeviceSrc.data(), oDeviceSrc.pitch(),
oDeviceDst.data(), oDeviceDst.pitch(),
oSizeROI, oMaskSize, oAnchor);
しかし、代わりにnppiFilter_8u_C1Rを使用するように変更すると、eStatusNPPはエラー-24(NPP_TEXTURE_BIND_ERROR)を返します。以下のコードは、元のboxFilterNPPサンプルに加えた変更です。
NppiSize oMaskSize = {5,5};
npp::ImageCPU_32s_C1 hostKernel(5,5);
for(int x = 0 ; x < 5; x++){
for(int y = 0 ; y < 5; y++){
hostKernel.pixels(x,y)[0].x = 1;
}
}
npp::ImageNPP_32s_C1 pKernel(hostKernel);
Npp32s nDivisor = 1;
eStatusNPP = nppiFilter_8u_C1R(oDeviceSrc.data(), oDeviceSrc.pitch(),
oDeviceDst.data(), oDeviceDst.pitch(),
oSizeROI,
pKernel.data(),
oMaskSize, oAnchor,
nDivisor);
これはCUDA4.2と5.0で試され、同じ結果になりました。
oMaskSize = {1,1}の場合、コードは期待どおりの結果で実行されます