桌面复制和C ++ AMP不兼容?

时间:2016-11-22 17:21:45

标签: windows gpu c++-amp dxgi desktop-duplication

我想在GPU上捕获并压缩屏幕。 C ++ AMP和DXGI桌面复制各自单独工作,但似乎无法协同工作。

示例:

This project效果很好,但在DesktopDuplication.cpp顶部附近添加最小的C ++ AMP代码会使其失败:

#include <amp.h>
//void f() { Concurrency::direct3d::create_accelerator_view( nullptr ); }
//void f() { Concurrency::accelerator default_acc; }
void f() { Concurrency::accelerator::get_all(); }

即使永远不会调用f()m_Factory->CreateSwapChainForHwnd(...)也会返回E_ACCESSDENIED。 (评论版f()产生相同的结果。)

在我自己的项目中,当我尝试使用C ++ AMP时,IDXGIOutput1::DuplicateOutput()会返回DXGI_ERROR_UNSUPPORTED

发生了什么事?

更新:在NVIDIA控制面板中,将“首选图形处理器”更改为“集成图形”。 (但是,使用NVIDIA显卡很多首选。)

1 个答案:

答案 0 :(得分:0)

MSDN并未将此声明为强制性要求,但still suggests您未在多线程环境中使用该API:

  

应用程序可以在单独的线程上使用IDXGIOutputDuplication来接收桌面映像并将其提供给特定的图像处理管道。

也就是说,建议您使用与捕获更新的特定线程对齐的单个循环,并且您可以自由地利用各种多线程来加速处理。