Jas*_*ams 6 directx direct3d11
我们需要从一台PC上驱动8到12台显示器,所有显示器都可以呈现单个3d场景图的不同视图,因此必须使用多个图形卡.我们目前正在运行dx9,所以我们希望转向dx11,希望能让这更容易.
初步调查似乎表明,显而易见的方法不起作用 - 除非我们从单独的流程中驱动每张卡,否则性能很糟糕.网络搜索没有任何结果.任何人都可以建议使用dx11从单个进程同时使用多张卡的最佳方法吗?
我看到您已经找到了解决方案,但我认为最好为遇到此问题的其他人提供我自己最近的经验......
是的,您可以从单个进程驱动任意数量的适配器和输出。以下是一些可能有用的信息:
在 DXGI 和 DX11 中:
每个显卡都是一个“适配器”。每个监视器都是一个“输出”。有关通过这些进行枚举的更多信息,请参见此处。
获得指向要使用的适配器的指针后,使用D3D11CreateDevice为每个适配器创建一个设备 (ID3D11Device) 。也许您想要一个不同的线程来与您的每个设备进行交互。如果这有助于为您加快速度,则此线程可能具有特定的处理器关联。
一旦每个适配器都有自己的设备,就为每个输出创建一个交换链和渲染目标。您还可以在使用时为每个输出创建深度模板视图。
创建交换链的过程需要设置您的窗口:每个输出一个窗口。我认为从包含交换链的窗口驱动渲染没有太大好处。您可以将窗口创建为交换链的主机,然后完全忘记它们。
对于渲染,您需要遍历每个设备的每个输出。对于每个输出,将设备的渲染目标更改为您使用OMSetRenderTargets为当前输出创建的渲染目标。同样,如果您愿意,您可以在不同的线程上运行每个设备,因此每个线程/设备对将通过输出进行自己的迭代以进行渲染。
以下是一些在完成此过程时可能会有所帮助的链接:
http://msdn.microsoft.com/en-us/library/windows/desktop/ee417025%28v=vs.85%29.aspx#multiple_monitors
祝你好运!