C++ DirectX11桌面复制不适用于NVIDIA

C++ DirectX11桌面复制不适用于NVIDIA,c++,directx-11,C++,Directx 11,我试着用得太多了 我试着从 来自 这两个都是使用DXGI进行屏幕捕获的示例 我有NVIDIA GeForce GTX 1060和Windows 10 Pro在机器上。它有英特尔™ 核心i7-6700HQ处理器 当选择NVIDIA Control Panel>3D Settings(NVIDIA控制面板>3D设置)以自动选择处理器时,这些示例工作得非常好 但是,如果我手动将设置设置为NVIDIA图形卡,样本将停止工作 错误发生在下一行 //IDXGIOutput1* DxgiOutput1 hr

我试着用得太多了

我试着从

来自

这两个都是使用DXGI进行屏幕捕获的示例

我有NVIDIA GeForce GTX 1060和Windows 10 Pro在机器上。它有英特尔™ 核心i7-6700HQ处理器

当选择NVIDIA Control Panel>3D Settings(NVIDIA控制面板>3D设置)以自动选择处理器时,这些示例工作得非常好

但是,如果我手动将设置设置为NVIDIA图形卡,样本将停止工作

错误发生在下一行

//IDXGIOutput1* DxgiOutput1
hr = DxgiOutput1->DuplicateOutput(m_Device, &m_DeskDupl);
hrHRESULT中的错误为DXGI\u错误\u不受支持的0x887A0004

我是DirectX新手,我不知道这里的问题是什么,NVIDIA不支持DirectX桌面复制吗

如果是这样的话,那么有没有办法在程序开始时选择一个特定的处理器,这样程序就可以在任何设置下运行

编辑

环顾四周后,我问了第二个示例项目的开发者Evgeny Pereguda

这是讨论的链接

在codeproject.com上发布讨论截图,以防原始链接被删除

我还发现了一个明确建议,桌面复制API无法实现这一点,它指的是microsoft支持站点上的支持票证

报价单

发生此问题的原因是DDA不支持针对 Microsoft混合系统上的离散GPU。根据设计,电话 与错误代码DXGI_error_一起失败,在这种情况下不受支持 情景

然而,在我的机器上,有一些应用程序在windows上以集成图形和离散模式高效地复制桌面

我已经查看了我机器上虚拟桌面的安装文件夹,可以看到以下感兴趣的DLL

SharpDX.D3DCompiler.dll
SharpDX.Direct2D1.dll
SharpDX.Direct3D10.dll
SharpDX.Direct3D11.dll
SharpDX.Direct3D9.dll
SharpDX.dll
SharpDX.DXGI.dll
SharpDX.Mathematics.dll
这可能表明该应用程序正在使用DXGI复制桌面,或者该应用程序能够在启动前选择特定的处理器


无论如何,问题仍然存在,是否有其他有效的方法在两种模式下复制桌面?

可能的原因是桌面复制API的某些内部限制,如中所述:

。。。当应用程序尝试在Microsoft Hybrid系统上针对离散GPU复制桌面映像时,应用程序可能无法正确运行,或者可能会产生以下错误之一:

无法使用0x80070005创建windows swapchain CDesktopCaptureDWM:IDXGIOutput1::DuplicateOutput失败:0x887a0004 除使用不同的GPU外,本文不建议任何其他解决方法,但没有更详细的说明是否可以通过编程实现:

要解决此问题,请在集成GPU上运行应用程序,而不是在Microsoft混合系统上的离散GPU上运行应用程序


Microsoft引入了一个注册表值,可以通过编程方式设置该值来控制应用程序在哪个GPU上运行。完整答案。

谢谢你的回答,我已经放弃了那个项目,不过关于这个话题的讨论可能会对其他人有所帮助。据我回忆,我曾试图运行Unity的游戏引擎本机编程功能,以获得3D空间中的桌面屏幕截图,最终使其在VR应用程序中可见。我之所以启用离散图形,可能是因为Unity在GPU上运行得更好,而且我在集成模式下获得了BSOD,所以我的制造商推荐了相同的。我还发现了一些我在问题本身中发布的其他东西。你有没有发现像虚拟桌面这样的应用程序似乎是如何绕过这个限制的?几个星期以来,我们一直在为这个问题绞尽脑汁,但仍然没有找到一个性能更好的替代方案,可以在专用GPU上运行混合设置。很抱歉,我放弃了这个项目,因为我无法解决它。我添加了我在这个问题中收集的所有信息,以帮助其他人在将来更深入地挖掘。谢谢,我将尝试验证这是否有效。