我们需要从一台pc驱动8到12个显示器,所有显示器都渲染单个3d场景图的不同视图,因此必须使用多个显卡。我们目前在dx9上运行,所以我们希望迁移到dx11,希望能让这件事变得更容易。
最初的调查似乎表明,显而易见的方法不起作用-除非我们从单独的进程驱动每张卡,否则性能很差。网络搜索什么也没找到。有没有人能建议在dx11的单个进程中同时使用多张卡的最佳方法?
发布于 2013-03-17 05:38:30
我看到你已经找到了一个解决方案,但我认为把我最近的经验告诉其他遇到这个问题的人是很好的……
是的,您可以从单个进程驱动任意数量的适配器和输出。这里有一些可能会有帮助的信息:
在DXGI和DX11中:
每个图形卡都是一个“适配器”。每个监视器都是一个“输出”。有关枚举这些元素的更多信息,请参见here。
有了指向要使用的适配器的指针后,使用D3D11CreateDevice为每个适配器创建一个设备(ID3D11Device)。也许你想要一个不同的线程来与你的每个设备交互。这个线程可能具有特定的处理器亲和性,如果这有助于加快速度的话。
一旦每个适配器都有了自己的设备,就为每个输出创建一个swap chain和render target。您还可以对每个输出执行create your depth stencil view操作。
创建交换链的过程需要设置窗口:每个输出一个窗口。我不认为在包含交换链的窗口中驱动渲染有多大好处。您可以将窗口创建为交换链的主机,然后完全忘记它们。
对于渲染,您需要遍历每个设备的每个输出。对于每个输出,将设备的呈现目标更改为您使用OMSetRenderTargets为当前输出创建的呈现目标。同样,如果您愿意,您可以在不同的线程上运行每个设备,因此每个线程/设备对将通过其自己的迭代来呈现输出。
以下是一些在完成此过程时可能会有所帮助的链接:
Display Different images per monitor directX 10
DXGI and 2+ full screen displays on Windows 7
http://msdn.microsoft.com/en-us/library/windows/desktop/ee417025%28v=vs.85%29.aspx#multiple_monitors
祝好运!
发布于 2012-06-01 00:15:29
也许你不需要升级Directx。
参见this article。
发布于 2012-05-25 04:55:10
使用IDXGIFactory枚举可用的设备,为每个设备创建一个ID3D11Device,然后从不同的线程馈送它们。应该工作得很好。
https://stackoverflow.com/questions/10625595
复制相似问题