如何在 DirectX 11 应用程序中提供选择图形适配器的选项?

How to give an option to select graphics adapter in a DirectX 11 application?

本文关键字:选择 图形适配器 选项 DirectX 应用程序      更新时间:2023-10-16

我想我知道它应该如何工作 - 只是它没有。我有一台 860m 的联想笔记本电脑和一个英特尔集成卡。

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

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

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

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

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

您可能有一个"异构适配器"系统(又名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 2018 年 4 月更新 (17134) 或更高版本,您可以使用 DXGI 1.6 界面EnumAdapterByGpuPreference。有关一些示例用法,请参阅 GitHub。