Ich sehe, dass Sie bereits zu einer Lösung gekommen sind, aber ich dachte, es wäre gut, in meinem eigenen jüngsten Erfahrungen für jemand anderen zu werfen, die auf diese Frage kommt ...
Ja, können Sie eine beliebige Anzahl von Adaptern und Ausgaben aus einem einzigen Prozess steuern. Hier einige Informationen, die hilfreich sein könnte:
In DXGI und DX11:
Jede Grafikkarte ist ein "Adapter". Jeder Monitor ist ein "Output". Weitere Informationen zum Aufzählen durch diese finden Sie unter here. Wenn Sie Zeiger auf die Adapter haben, die Sie verwenden möchten, erstellen Sie ein Gerät (ID3D11Device) mit D3D11CreateDevice für jeden der Adapter. Vielleicht möchten Sie einen anderen Thread für die Interaktion mit jedem Ihrer Geräte. Dieser Thread kann eine bestimmte Prozessoraffinität aufweisen, wenn dies die Geschwindigkeit für Sie erhöht.
Sobald jeder Adapter über ein eigenes Gerät verfügt, erstellen Sie einen swap chain und render target für jeden Ausgang. Sie können auch create your depth stencil view für jeden Ausgang, während Sie gerade dabei sind.
Beim Erstellen einer Tauschkette müssen Ihre Fenster eingerichtet werden: ein Fenster pro Ausgabe. Ich glaube nicht, dass das Rendering von das Fenster, das die Swap-Kette enthält, viel von Vorteil ist. Sie können die Fenster nur als Hosts für Ihre Swap-Kette erstellen und sie anschließend vollständig vergessen.
Für das Rendern müssen Sie jeden Ausgang jedes Geräts durchlaufen. Ändern Sie für jede Ausgabe das Renderziel des Geräts in das Renderziel, das Sie für die aktuelle Ausgabe erstellt haben, indem Sie OMSetRenderTargets verwenden. Auch hier können Sie jedes Gerät in einem anderen Thread ausführen, sodass jedes Thread/Geräte-Paar eine eigene Iteration über die Ausgaben zum Rendern hat.
Hier sind ein paar Links, die hilfreich sein könnten, wenn durch diesen Prozess gehen:
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
Viel Glück!
Verwenden Sie die Herstellerbibliotheken überhaupt?Wie sieht VRAM-Nutzung und -Übertragung mit einem proc/many aus? Spielen Sie Vollbild-Exklusiv auf jeder Karte, und ändert das etwas, wenn nicht? Senden Sie Frames gleichzeitig an alle (mehrere Render-Threads)? – ssube
@peachykeen: Dies verwendet DirectX von C++. Wir haben ein paar Tests gemacht, werden aber die Kernarbeit nicht für eine Woche beginnen, also dachte ich, ich würde diese Frage jetzt stellen, um zu sehen, ob irgendjemand da draußen zufällig die Antwort kannte - wir haben es nicht getan noch ein tiefgreifendes Profiling oder Debugging. Wir müssen im Fenstermodus laufen, da wir eine Desktop-App sind, und jedes Fenster wird unabhängig von seinem eigenen Thread gerendert (der langsam rennt) oder verarbeitet (der rendert). Wir können unser Rendering auf mehrere Prozesse aufteilen, aber das sollte nicht notwendig sein. –
Haben Sie VSync aktiviert? tatsächlich habe ich in (fast) dem gleichen Anwendungsfall wie Sie einige starke Verlangsamungen bemerkt. Ohne VSync ist es ziemlich in Ordnung. – catflier