DirectX 11:同时使用多个适配器

Jas*_*ams 6 directx direct3d11

我们需要从一台PC上驱动8到12台显示器,所有显示器都可以呈现单个3d场景图的不同视图,因此必须使用多个图形卡.我们目前正在运行dx9,所以我们希望转向dx11,希望能让这更容易.

初步调查似乎表明,显而易见的方法不起作用 - 除非我们从单独的流程中驱动每张卡,否则性能很糟糕.网络搜索没有任何结果.任何人都可以建议使用dx11从单个进程同时使用多张卡的最佳方法吗?

All*_*uky 6

我看到您已经找到了解决方案,但我认为最好为遇到此问题的其他人提供我自己最近的经验......

是的,您可以从单个进程驱动任意数量的适配器和输出。以下是一些可能有用的信息:

在 DXGI 和 DX11 中:

每个显卡都是一个“适配器”。每个监视器都是一个“输出”。有关通过这些进行枚举的更多信息,请参见此处

获得指向要使用的适配器的指针后,使用D3D11CreateDevice为每个适配器创建一个设备 (ID3D11Device) 。也许您想要一个不同的线程来与您的每个设备进行交互。如果这有助于为您加快速度,则此线程可能具有特定的处理器关联。

一旦每个适配器都有自己的设备,就为每个输出创建一个交换链渲染目标。您还可以在使用时为每个输出创建深度模板视图

创建交换链的过程需要设置您的窗口:每个输出一个窗口。我认为包含交换链的窗口驱动渲染没有太大好处。您可以将窗口创建为交换链的主机,然后完全忘记它们。

对于渲染,您需要遍历每个设备的每个输出。对于每个输出,将设备的渲染目标更改为您使用OMSetRenderTargets为当前输出创建的渲染目标。同样,如果您愿意,您可以在不同的线程上运行每个设备,因此每个线程/设备对将通过输出进行自己的迭代以进行渲染。

以下是一些在完成此过程时可能会有所帮助的链接:

每台显示器显示不同的图像 directX 10

DXGI 和 2+ 全屏显示在 Windows 7 上

http://msdn.microsoft.com/en-us/library/windows/desktop/ee417025%28v=vs.85%29.aspx#multiple_monitors

祝你好运!


Axe*_*ing 1

使用 IDXGIFactory 枚举可用设备,为每个设备创建一个 ID3D11Device,然后从不同的线程提供它们。应该可以正常工作。