【问题标题】:How to give an option to select graphics adapter in a DirectX 11 application?如何在 DirectX 11 应用程序中提供选择图形适配器的选项?
【发布时间】:2017-10-25 18:29:49
【问题描述】:

我想我知道它应该如何工作——只是它不知道。我有一台 860m 和 intel 集成卡的联想笔记本电脑。

我可以使用两个 gpu 从外部运行我的应用程序,一切正常:所选 gpu 将是索引为 0 的适配器,它将笔记本电脑屏幕作为输出,等等。

但是,如果我尝试使用索引为 1 的适配器(如果我正常运行应用程序,那就是 nvidia,如果我使用 nvidia gpu 运行它,那就是 intel),IDXGIOutput::EnumOutputs 找不到任何东西,所以我无法正确配置显示设置。

我正在考虑简单地跳过配置,或者使用来自另一个适配器的输出 - 但是没有办法过滤掉没有实际输出的适配器 - 例如我的电脑也有集成卡,但它没有物理连接显示器,所以应该无法使用。

我还试图找到“使用图形处理器运行”上下文菜单按钮的确切作用,但我找不到任何东西。

目标是让用户能够在应用程序中选择适配器,他/她的选择被保存到配置文件中,并在重新启动后使用 - 但我找不到过滤可能的适配器的方法。

【问题讨论】:

  • 我想我以前试过这个,我记得,我没能做到。我不是 100% 确定(这就是我将其发布为评论的原因),但我认为它与硬件相关,一旦你全屏启动它,它会自动切换到 nvidia 卡。此外,您可以转到 nvidia 控制面板并为您的应用设置最高性能,它将始终在 nvidia 卡上运行。
  • 欢迎来到 Stack Overflow!请edit您的问题显示the code you have so far。您应该至少包含您遇到问题的代码的大纲(但最好是minimal reproducible example),然后我们可以尝试帮助解决具体问题。您还应该阅读How to Ask

标签: c++ gpu directx-11 display


【解决方案1】:

您可能有一个“异构适配器”系统(又名 NVIDIA Optimus 或 AMD PowerXPress)。这些解决方案让驱动程序操纵默认适配器和设备枚举来控制使用哪张卡。您确实对此没有任何编程控制,但您可以在您的 Win32“经典”桌面应用程序中注入一些东西,这将鼓励驱动程序选择离散部分:

// Indicates to hybrid graphics systems to prefer the discrete part by default
extern "C"
{
    __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
    __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
}

更新 对于 Windows 10 April 2018 Update (17134) 或更高版本,您可以使用 DXGI 1.6 界面 EnumAdapterByGpuPreference。有关示例用法,请参阅GitHub

【讨论】:

  • 确实有效。太糟糕了,我不能直接给用户选择。无论如何,如果他用集成的强制启动它仍然使用它,所以如果有人真的知道他在做什么,他仍然可以这样做。我想那会好的。谢谢你的回复:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多