2016-05-20 15 views
2

Das Problem: Aufruf IDXGIOutput1::DuplicateOutput method gibt DXGI_ERROR_UNSUPPORTED zurück, wenn Sie eine Anwendung mit diskreten Grafik-Controller auf einer Maschine mit umschaltbaren Grafiken ausführen.Desktop-Duplizierungs-API und umschaltbare Grafiken

This answer werfen etwas Licht auf das Problem. Kurz gesagt, die diskrete Grafik rendert nur einen Teil des Bildschirms und sendet die Daten an den Framebuffer des integrierten Grafik-Controllers - mit anderen Worten, alle Ausgaben laufen immer durch den integrierten Grafik-Controller. Es scheint, dass dies der Grund ist, warum DuplicateOutput DXGI_ERROR_UNSUPPORTED zurückgibt.

Ich schrieb eine Probe, die alle Ausgänge und ihre Videoadapter mit winapi (EnumDisplayDevices function) & directx (IDXGIFactory::EnumAdapters method & IDXGIAdapter::EnumOutputs method) wird mit umschaltbare Grafik (Intel HD 4600 & NVIDIA 840M) auf einer Maschine zu vergleichen. Dies ist das Ergebnis:

enter image description here

nicht sicher, wie viel richtig ist mein may Vergleich, aber man kann sehen, dass winapi sagt, dass DISPLAY1 gehört zur Intel-Karte und directx sagt DISPLAY1 gehört zur NVIDIA-Karte . Eine Lösung wäre, die Ausgabe der Intel-Karte zu duplizieren (weil alles durchgeht), aber EnumOutputs gibt keine Ausgaben dafür zurück.

Derzeit gibt es eine Problemumgehung: immer eine Anwendung ausführen, die die Duplizierungs-API mit dem integrierten Grafikcontroller verwendet.

Die Frage: wie DuplicateOutput mit dem diskreten Grafik-Controller auf einem Laptop mit umschaltbaren Grafiken arbeiten? Oder ist es eine Einschränkung der Desktop-Duplizierungs-API?

+0

Wie ist Ihre * Abhilfe * eine Abhilfe? Wenn der Desktop auf der integrierten Karte ausgeführt wird, wäre es nicht sinnvoll, dass Sie mit diesem Adapter zunächst duplizieren müssen? Was ist Ihr Ziel bei der Duplizierung des Desktops mit dem diskreten Adapter? – MooseBoys

+0

@MooseBoys, ist mein Ziel nur den Bildschirm zu duplizieren, ist es egal, mit welchem ​​Adapter. Die Verwendung des integrierten oder separaten Adapters wird von den NVIDIA-Einstellungen bestimmt, nicht von mir als Entwickler. Standardmäßig wird für eine schwere WPF-App der diskrete Adapter ausgewählt und nur sein dxgi-Objekt hat die Ausgabe (Duplizierung, die DXGI_NOT_SUPPORTED zurückgibt, da tatsächlich alles durch den integrierten Adapter geht - siehe Bild). Die Problemumgehung besteht also darin, den Benutzer zu ersuchen, die Verwendung der Intel-Karte in der NVIDIA-Systemsteuerung zu erzwingen.und die Frage ist, ob es einen Weg ohne Workarounds gibt –

Antwort

2

gelöst:

leider dieses Problem tritt auf, weil die API Desktop-Duplication nicht seinen Lauf gegen die diskrete GPU auf einem Microsoft Hybrid-System unterstützt. Der Aufruf schlägt zusammen mit Fehlercode DXGI_ERROR_UNSUPPORTED in einem solchen Szenario fehl.

Um dieses Problem zu umgehen, führen Sie die Anwendung auf der integrierten GPU statt auf der diskreten GPU auf einem Microsoft Hybrid-System.

von hier: https://support.microsoft.com/en-us/kb/3019314