C++ DirectX 11 多个显卡问题

3

我正在使用DirectX 11编写一个C++程序,用于图形处理。我的笔记本电脑配备了一张轻量级的英特尔显卡,以延长电池寿命,只能用于“轻量级”图形处理。我还安装了一张更加强大的显卡。

我想知道如何在DirectX中指定使用哪张显卡?在创建设备时,有没有办法在代码中指定使用哪张显卡?

谢谢。


1
我不知道你问题的答案,但真正的解决方案是:不要那样做。DirectX会自动使用用户在操作系统设置中选择的正确显卡。如果有第二张显卡,很可能它甚至没有连接显示器。 - BlueRaja - Danny Pflughoeft
2个回答

2
如果你的显卡是英特尔/英伟达组合,你有两个选择:
-第一种是将英伟达显卡设置为首选设备(在英伟达控制面板中,管理3D设置,全局/程序设置,更改首选图形处理器)。
另一种方法是使用代码,通过DXGI枚举适配器,并尝试获取具有受限功能级别的设备(如果不可用,则CreateDevice将失败,大多数英特尔显卡为10.1)。
使用http://msdn.microsoft.com/en-us/library/windows/desktop/bb174538(v=vs.85).aspx来枚举适配器。
然后尝试仅为每个适配器创建D3D_FEATURE_LEVEL_11_0版本的设备,只有支持它的设备才会被创建。

0

我遇到了类似的问题。虽然我还没有尝试升级显卡驱动程序,但当我把电脑插回互联网时,我会尝试。

以下是我发现的问题以及我如何“解决”(即临时修补)我的问题:

症状:

  1. 与上面的帖子类似。
  2. 我只有一张支持DirectX 11的NVDIA显卡。
  3. 当我在DirectX Caps Viewer中查看它时,它仅支持DirectX 9.3及以下版本。

解决方案:

  1. 通过D3D_FEATURE_LEVEL向后迭代,每次调用D3D11CreateDeviceAndSwapChain()。
  2. 一旦D3D11CreateDeviceAndSwapChain()工作正常,您就知道您选择的显卡所支持的最大功能级别。

可能有更好的方法来解决这个问题,但这就是我的“问题”。显然,如果我的显卡支持完整的DX11系统,那将会更好,但这不是一个坏的保障,以防用户遇到类似的问题。至少我可以通过编程方式识别问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接