我们需要从一台电脑驱动8到12台显示器,所有显示器都会呈现单个3D场景图的不同视图,因此必须使用多个图形卡。我们目前正在运行dx9,所以我们希望转向dx11,希望能让这更容易。
初步调查似乎表明,显而易见的方法不起作用 - 除非我们从单独的流程中驱动每张卡,否则性能很糟糕。网络搜索没有任何结果。任何人都可以建议使用dx11从单个进程中同时使用多张卡的最佳方法吗?
答案 0 :(得分:2)
也许你不需要升级Directx 请参阅this article。
答案 1 :(得分:2)
我看到你已经找到了一个解决方案,但我认为最好把自己最近的经历告诉其他任何提出这个问题的人......
是的,您可以从单个进程驱动任意数量的适配器和输出。以下是一些可能有用的信息:
在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
祝你好运!答案 2 :(得分:1)
使用IDXGIFactory枚举可用设备,为每个设备创建一个ID3D11Device,然后从不同的线程中提供它们。应该工作正常。