DirectX 11: using multiple adapters simultaneously

We need to control 8 - 12 monitors from one PC, all visualizing different types of one 3d scene, so we will have to use several video cards. We are currently working on dx9, so we are hoping to upgrade to dx11 to hopefully make this easier.

Initial research seems to suggest that the obvious approach does not work - performance is disgusting if we do not drive each card from a separate process. Web search does not cause anything. Can anyone suggest a better way to use multiple cards at the same time from one process using dx11?

+6
source share
3 answers

You may not need to update DirectX.
See this article .

+2
source

I see that you have already come to a decision, but I thought it would be nice to give up my own recent impressions for everyone who comes to this question ...

Yes, you can control any number of adapters and outputs from one process. Here is some information that might be helpful:

In DXGI and DX11:

Each video card is an “adapter”. Each monitor represents an “Exit”. See here for more information on listing through them.

Once you have the pointers to the adapters that you want to use, create a device (ID3D11Device) using the D3D11CreateDevice for each of the adapters. Perhaps you need a different thread to interact with each of your devices. This thread may be processor specific if it helps speed up the process for you.

Once each adapter has its own device, create a swap chain and display a target for each pin. You can also create a depth representation of the stencil for each exit while you are on it.

The process of creating swap chains will require the installation of your windows: one window for each output. I do not think that when using rendering from a window, there is a chain of its own. You can simply create windows as hosts for your swap chain and then forget about them completely afterwards.

For rendering, you will need to iterate each output of each device. For each output, change the device’s rendering target to a rendering target created for the current output using OMSetRenderTargets . Again, you can run each device in a different thread if you want, so each pair of threads / devices will have its own iteration through the outputs for rendering.

Here are some links that may help you through this process:

Display different images on directX 10 monitor

Fullscreen DXGI and 2+ displays in Windows 7

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

Good luck

+2
source

List the available devices using IDXGIFactory, create an ID3D11Device for each, and then load them from different streams. Should work fine.

+1
source

Source: https://habr.com/ru/post/915940/


All Articles