【问题标题】:Force to use integrated (Intel) graphic card on Microsoft Hybrid system强制在 Microsoft 混合系统上使用集成 (Intel) 显卡
【发布时间】: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;
}
  1. Intel 卡有类似的选项吗?
  2. 或者是否可以从我的代码中更改 NVIDIA / AMD 卡设置,以便下次在集成 GPU 上运行? 我的意思是:启动我的应用程序,检查 NVIDIA / AMD 设置,如果它没有强制使用集成显卡(如果可用),然后修改此设置并重新启动我的应用程序。
  3. 还有其他使用集成卡的解决方案吗? (不是手动解决方案)

【问题讨论】:

  • 在创建 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


【解决方案1】:

虽然您可以使用 NVAPI 创建应用程序配置文件并设置特定标志以使您的应用程序在集成芯片上运行,但较新版本的 Windows 可能会覆盖您的偏好。因此,最可靠/最简单的方法是使用Windows 10 build 17093 中引入的set a registry value

或者是否可以从我的代码中更改 NVIDIA / AMD 卡设置,以便下次在集成 GPU 上运行?我的意思是:启动我的应用程序,它会检查 NVIDIA / AMD 设置,如果它没有强制使用集成显卡(如果可用),那么修改此设置并重新启动我的应用程序。

您可以使用注册表值执行此操作,是的。我在实践中使用这种方法,wrote an overview 我选择如何进行 GPU 检查。我相信 Roman Ryltsov 在他的DxgiTakeSnapshot 申请中做了类似的事情(他有很多关于这个主题的帖子值得一读)。

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 2017-08-05
    • 2023-03-06
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多