【发布时间】:2019-10-31 20:44:48
【问题描述】:
我使用 Microsoft 桌面复制 API,如果我的代码在集成 (Intel) 显卡上运行,那么一切正常。但是如果我在专用卡上运行,我会得到一个错误。
我在 Microsoft Hybrid 系统的专用卡上发现了 Microsoft does not support this usage
DXGI_ERROR_UNSUPPORTED
没有解决我需求的类似问题:
解决方法是在集成卡上启动程序。
我想通过代码解决这个问题。
我发现NVIDIA / AMD card can be forced from my code
extern "C" { // Hint to Hybrid laptop drivers that our app would really rather use the NVidia/AMD GPU that you've got sitting over there rather than Intel Graphics...
_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
_declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
}
- Intel 卡有类似的选项吗?
- 或者是否可以从我的代码中更改 NVIDIA / AMD 卡设置,以便下次在集成 GPU 上运行? 我的意思是:启动我的应用程序,检查 NVIDIA / AMD 设置,如果它没有强制使用集成显卡(如果可用),然后修改此设置并重新启动我的应用程序。
- 还有其他使用集成卡的解决方案吗? (不是手动解决方案)
【问题讨论】:
-
在创建 Device / DesktopDuplication 时,您可以尝试枚举适配器以确定哪个是集成适配器:docs.microsoft.com/en-us/windows/desktop/api/dxgi/…
-
我已经用 EnumAdapter1() 枚举了适配器。之后,我使用 EnumOutputs docs.microsoft.com/en-us/windows/desktop/api/dxgi/… 枚举每个适配器上的输出当我在 nvidia 卡上开始我的进程时,只有 nvidia 有输出,其中 3 个监视器重复中的 2 个返回此 DXGI_ERROR_UNSUPPORTED 错误代码。当我使用 Intel GPU 开始我的进程时,在 Intel GPU 上找到 2 个输出,在 Nvidia 上找到 1 个输出(这是正确的),并且所有 DuplicateOutput 工作正常。
-
在您提供的链接中,问题是强制在专用 (Nvidia) GPU 而不是 Intel 上运行。 “Optimus 系统上没有编程方式来影响你的 EXE 将运行的加速器”但是从 310.90 开始,有这个“NvOptimusEnablement”标志,强制 Nvidia 卡。但我想强制集成(英特尔)显卡。
-
是的,我了解您的需求。该链接是为了演示您/用户可以使用右键菜单手动选择适配器来运行您的软件。恐怕没有编程方法可以实现这一点,除了在选择错误的适配器时优雅地出错。
标签: visual-c++ directx-11 screen-capture dxgi video-card