C ++ AMP中的FFT抛出CLIPBRD_E_CANT_OPEN错误

时间:2018-04-07 15:32:54

标签: directx c++-amp

我正在尝试在Windows 10上的Visual C ++ 2017中使用C ++ AMP(更新到最新版本),我在Codeplex上找到了来自C ++ AMP团队的归档FFT库。我尝试运行示例代码,但是在创建DirectX FFT时程序会抛出内存错误。我按照Microsoft论坛上的thread解决了这个问题。

然而,问题并未停止。当FFT库尝试创建无序访问视图时,它会抛出CLIPBRD_E_CANT_OPEN错误。无论如何我没有尝试在剪贴板上操作。

感谢您阅读本文!

1 个答案:

答案 0 :(得分:0)

我似乎解决了这个问题。原帖提到我们需要创建一个新的DirectX设备,然后在其上创建加速器视图。然后我把那个视图传递给fft的ctor作为第二个参数。

fft( concurrency::extent<_Dim> _Transform_extent, const concurrency::accelerator_view& _Av = concurrency::accelerator().default_view, float _Forward_scale = 0.0f, float _Inverse_scale = 0.0f)

但是,我仍然崩溃了CLIPBRD_E_CANT_OPEN。

阅读完代码后,我意识到我需要在DirectX视图上创建数组。所以我开始改变:

array<std::complex<float>,dims> transformed_array(extend, directx_acc_view);

这个想法来自create_uav()的不同行为。内部缓冲区和预计算没有问题,但样本&#39;调用触发剪贴板错误。我想这个设备很重要,所以我做了那个改变。

我希望我的理解是正确的,无论如何现在没有这样的错误。