Freigeben über


Updates für IddCx-Versionen 1.5, 1.6 und höher

Die folgenden Updates für IddCx-Versionen 1.5 und 1.6 gelten sowohl für Konsolen als auch für indirekte Remote-Displaytreiber (IDDs).

Aktualisierung der IddCxGetVersion-Version

Die IddCx-Version, die von IddCxGetVersion zurückgegeben wird, wurde für Version 1.5 auf 0x1500 und für Version 1.6 auf 0x1600 aktualisiert. Eine vollständige Liste der Informationen zu IddCx-Versionen finden Sie unter IddCx-Versionen.

WPP-Informationen in öffentlichen IddCx-Symbolen

Ab IddCx Version 1.5 enthalten die öffentlichen IddCx-Symboldateien alle WPP-Informationen (Windows Software Trace Processor). Diese Änderung bedeutet, dass der !wmitrace.logdump-Debugger decodiert und die WPP-Meldung im Kernel-Debugger angezeigt wird.

Möglichkeit, auf Puffer zuzugreifen, die im Systemspeicher zugeordnet sind

In bestimmten Szenarien befinden sich Swapchain-Puffer im Systemspeicher, z. B. wenn WARP (Windows Advanced Rasterization Platform, der vom System bereitgestellte Softwarerenderer) der verwendete Renderadapter ist. IddCx 1.5 fügt die folgenden Betriebssystemrückrufe hinzu, mithilfe derer der Treiber auf Puffer im Systemspeicher zugreifen kann, wodurch das Kopieren der Unterressource vermieden wird:

  • IddCxSwapChainInSystemMemory ermöglicht es einem IDD zu überprüfen, ob im Systemtreiber die Puffer für eine Swapchain vorhanden sind. Das Ergebnis dieses Rückrufs bleibt während der gesamten Lebensdauer der Swapchain konstant. Der Treiber sollte den Wert dieses Rückrufs in seinemEvtIddCxMonitorAssignSwapChain-Rückruf und Einrichtungsstatus überprüfen, um Puffer freizugeben und abzurufen.

  • IddCxSwapChainReleaseAndAcquireSystemBuffer ermöglicht es einem IDD, einen Puffer freizugeben und abzurufen sowie Informationen für den Zugriff auf den Puffer zu erhalten (z. B. ein Systemspeicherzeiger, Schrittweite (Pitch) des Puffers und Oberflächenformat und Dimensionen). Der zurückgegebene Puffer ist solange gültig, bis der nächste erfolgreiche Aufruf dieser Funktion ausgeführt wird.

    Zum Zeitpunkt der Zuweisung einer neuen Swapchain muss der Treiber entscheiden, welche Variante des IddCxSwapChainReleaseAndAcquireBuffer/IddCxSwapChainReleaseAndAcquireSystemBuffer er für die jeweilige Swapchain aufrufen wird. Er wird diese Variante während der verbleibenden Lebensdauer dieser Swapchain verwenden müssen. Der Treiber sollte seine spezifischen Anforderungen und das Ergebnis des Aufrufs von IddCxSwapChainInSystemMemory berücksichtigen, um die richtige Entscheidung zu treffen. Ein Treiber sorgt dafür, dass das Betriebssystem den UMDF-Prozess auf Fehler überprüft, wenn er:

    • die andere Variante des IddCxSwapChainReleaseAndAcquireSystemBuffer/IddCxSwapChainReleaseAndAcquireBuffer aufruft.
    • IddCxSwapChainReleaseAndAcquireSystemBuffer aufruft, wenn IddCxSwapChainInSystemMemory „false“ zurückgibt.

Treiber werden empfohlen, sind aber nicht erforderlich, um diese Rückruffunktionen zu verwenden. Das Verhalten vor IddCx 1.5 wird weiterhin unterstützt.

Möglichkeit, auf Puffer im physisch zusammenhängenden Speicher zuzugreifen

Hinweis

IddCxSwapChainGetPhysicallyContiguousAddress wird auf keinem Windows 10-System unterstützt und wird in Zukunft wahrscheinlich eingestellt.

Ab IddCx 1.6 wurde das IDDCX_ADAPTER_FLAGS_PREFER_PHYSICALLY_CONTIGUOUS-Flag und die Betriebssystem-Rückruffunktion IddCxSwapChainGetPhysicallyContiguousAddress hinzugefügt, sodass Puffer im physischen zusammenhängenden Speicher aufgerufen werden können.

Anzeigetreiber können anfordern, dass primäre Oberflächen im physischen zusammenhängenden Systemspeicher zugewiesen werden, indem das IDDCX_ADAPTER_FLAGS_PREFER_PHYSICALLY_CONTIGUOUS-Flag in IDDCX_ADAPTER_CAPS festgelegt wird. Mithilfe dieser Funktion kann ein Treiber eine Oberfläche direkt ohne Zwischenkopie scannen.

Es ist nicht garantiert, dass die Anforderung des Treibers während der Initialisierung erfolgreich ist. Wenn die Anforderung nicht erfolgreich ist, schlägt der Aufruf von IddCxAdapterInitAsync nicht fehl. Sobald der Treiber einen IddCxSwapChainReleaseAndAcquireBuffer (oder IddCxSwapChainReleaseAndAcquireSystemBuffer) ausführt, sollte er IddCxSwapChainGetPhysicallyContiguousAddress aufrufen, um die physische Adresse der Oberfläche abzurufen. IddCxSwapChainGetPhysicallyContiguousAddress wartet zunächst auf ausstehende Renderbefehle, leert und macht anschließend die CPU-Caches, die dem Adressbereich, in dem die Oberfläche gespeichert ist, zugeordnet sind, ungültig. Hat jedoch die anfängliche Anforderung für die Oberflächen, die im physisch zusammenhängenden Speicher zugeordnet werden sollen, fehlgeschlagen, gibt IddCxSwapChainGetPhysicallyContiguousAddress E_NOINTERFACE zurück.