Vedo che hai già arrivare ad una soluzione, ma ho pensato che sarebbe stato bello per gettare le mie recenti esperienze di chiunque altro che arriva sul questa domanda ...
Sì, è possibile guida qualsiasi numero di adattatori e uscite da un singolo processo. Ecco alcune informazioni che potrebbero essere utili:
In DXGI e DX11:
Ogni scheda grafica è una "Scheda". Ogni monitor è un "Output". Vedere here per ulteriori informazioni sull'enumerazione tramite questi.
Dopo aver puntato agli adattatori che si desidera utilizzare, creare un dispositivo (ID3D11Device) utilizzando D3D11CreateDevice per ciascuno degli adattatori. Forse vuoi un thread diverso per interagire con ciascuno dei tuoi dispositivi. Questo thread può avere un'affinità specifica del processore se questo aiuta ad accelerare le cose per te.
volta ogni adattatore ha il proprio dispositivo, e creare un swap chainrender target per ogni uscita. Puoi anche fare il create your depth stencil view per ogni uscita mentre ci sei.
Il processo di creazione di una catena di scambio richiede la configurazione delle finestre: una finestra per output. Non penso che ci sia molto vantaggio nel guidare il rendering da alla finestra che contiene la catena di scambio. Puoi semplicemente creare le finestre come host per la tua catena di scambio e poi dimenticarle interamente dopo.
Per il rendering, è necessario scorrere tutte le uscite di ciascun dispositivo. Per ciascun output, modificare la destinazione del rendering del dispositivo sulla destinazione di rendering creata per l'output corrente utilizzando OMSetRenderTargets. Anche in questo caso, puoi eseguire ciascun dispositivo su un thread diverso se lo desideri, quindi ogni coppia di thread/dispositivi avrà una propria iterazione tramite gli output per il rendering.
Qui ci sono un sacco di link che potrebbero essere di aiuto quando si passa attraverso questo processo:
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
Buona fortuna!
fonte
2013-03-16 21:38:29
Stai utilizzando le librerie del fornitore?Che aspetto ha l'utilizzo e il trasferimento di VRAM con un proc/molti? Stai facendo funzionare a schermo intero esclusivo su ogni scheda, e questo cambia qualcosa se non? Stai inviando fotogrammi a tutti contemporaneamente (più thread di rendering)? – ssube
@peachykeen: utilizza DirectX dal C++. Abbiamo fatto alcuni test iniziali ma non avvieremo il lavoro di base per una settimana o giù di lì, quindi ho pensato di fare questa domanda ora per vedere se qualcuno là fuori ha appena saputo la risposta - non l'abbiamo fatto qualsiasi profiling o debug approfondito ancora. Abbiamo bisogno di eseguire in modalità finestra in quanto siamo un'app desktop e ogni finestra viene renderizzata indipendentemente dal proprio thread (che rallenta lentamente) o processa (che rende veloce). Possiamo dividere il rendering su più processi, ma ciò non dovrebbe essere necessario. –
Avete attivato VSync? in realtà ho notato alcuni gravi rallentamenti in (quasi) lo stesso caso d'uso come te. Senza VSync è abbastanza ok. – catflier