Updates für IddCx-Versionen 1.10 und höher
In diesem Artikel werden die in IddCx Version 1.10 vorgenommenen Aktualisierungen beschrieben. Eine einzelne auf IddCx 1.10 basierende IDD (Indirect Display Driver)-Binärdatei kann unter Windows 10, Version 1803 und höher, mithilfe von Laufzeitüberprüfungen ausgeführt werden, um zu überprüfen, ob DDI-Änderungen in IddCx 1.10 auf diesem System verfügbar sind. Weitere Informationen finden Sie unter Erstellen eines WDF-Treibers für mehrere Versionen von Windows.
Die Änderungen bei IddCx 1.10 sind in die folgenden Kategorien unterteilt:
- Aktualisierung der IddCxGetVersion-Version (Konsole und Remote). Eine vollständige Liste der auf IddCx bezogenen Versionsinformationen finden Sie unter IddCx-Versionen.
- Hinzufügung von HDR10 (High Dynamic Range) und SDR (Standard Dynamic Range) Wide Color Gamut (WCG)-Unterstützung für indirekte Anzeigen.
Aktualisierung der IddCxGetVersion-Version
Der von IddCxGetVersion zurückgegebene Wert wurde aktualisiert, unterscheidet sich jedoch je nach Betriebssystem:
- Die Plattformversion 24H2 von Windows 11 gibt 0x1A80 (IDDCX_VERSION_GERMANIUM) zurück.
- Für Windows 11, Version 22H2 September Update, wird 0x1A00 (IDDCX_VERSION_SV3) zurückgegeben.
Diese Versionen sind für Remotetreiber von Bedeutung, bei denen sich das Verhalten des Betriebssystems geringfügig unterscheidet.
Unterstützung für HDR and SDR Wide Color Gamut
Einige einführende Informationen zum Thema Farbe unter Windows, einschließlich SDR WCG, finden Sie unter DirectX mit erweiterter Farbe auf HDR- und SDR-Displays.
Treiber-DDI- und Betriebssystemunterstützung
Wo möglich, wurden vorhandene DDIs erweitert, um einem Treiber zu ermöglichen, die Unterstützung für Folgendes zu melden:
- HDR10
- SDR WCG
- Empfangen von Daten zur Beschreibung von HDR-Frames, die an eine IDD gesendet werden
Neuere Varianten vorhandener DDIs wurden hinzugefügt, wenn vorhandene DDIs nicht erweitert werden konnten. In den meisten Fällen gelten diese Änderungen sowohl für Konsolen- als auch für Remote-Treiber, aber einige Details, die für Remote-Treiber spezifisch sind, sind ebenfalls definiert.
Treiber der Version 1.10 und höher, die HDR unterstützen, müssen die neueren DDI-Varianten verwenden. Ältere Treiber oder Treiber, die HDR nicht unterstützen, können weiterhin die vorhandenen Funktionen verwenden. In den folgenden Abschnitten wird eine Übersicht über die Änderungen gegeben.
In der folgenden Tabelle sind die in IddCx 1.10 hinzugefügten treiber-implementierten DDIs und, falls vorhanden, das vorherige Äquivalent angegeben. Das Betriebssystem ruft diese Funktionen möglicherweise auf, wenn der Treiber sie meldet, auch für Adapter, die nicht versuchen, HDR zu unterstützen.
Treiberfunktionen, die vom Betriebssystem für HDR-Adapter aufgerufen werden | Vorherige äquivalente Funktion |
---|---|
EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO | N/V |
EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA* | N/V |
EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION2** | EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION |
EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES2 | EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES |
EVT_IDD_CX_ADAPTER_COMMIT_MODES2 | EVT_IDD_CX_ADAPTER_COMMIT_MODES |
*: Funktion wird nicht für Remote-Treiber aufgerufen.
**: Funktion wird möglicherweise nicht für Remote-Treiber aufgerufen, je nach den Adapter-Flags, die der Treiber eingerichtet hat.
In der folgenden Tabelle sind die vom Betriebssystem implementierten Funktionen aufgeführt, die in IddCx 1.10 hinzugefügt wurden, zusammen mit eventuellen früheren Äquivalenten. Ein Treiber der Version 1.10 kann die neueren Varianten aufrufen, sobald er feststellt, dass diese Funktionen in dem Betriebssystem verfügbar sind, auf dem der Treiber ausgeführt wird.
Neuere Funktionen, die ein Treiber für HDR-Adapter aufrufen muss | Vorheriges Äquivalent |
---|---|
IddCxSwapChainReleaseAndAcquireBuffer2 | IddCxSwapChainReleaseAndAcquireBuffer/IddCxSwapChainReleaseAndAcquireSystemBuffer |
IddCxMonitorQueryHardwareCursor3 | IddCxMonitorQueryHardwareCursor2 oder IddCxMonitorQueryHardwareCursor |
IddCxAdapterDisplayConfigUpdate2* | IddCxAdapterDisplayConfigUpdate* |
IddCxMonitorUpdateModes2 | IddCxMonitorUpdateModes |
*: Nur für die Verwendung durch Remote-Treiber.
Meldung der Adapter-HDR-Unterstützung
Für Treiber der Version 1.10 und höher sollte das Flag IDDCX_ADAPTER_FLAGS_CAN_PROCESS_FP16 zusätzlich zu IDDCX_ADAPTER_FLAGS gesetzt werden, um die Unterstützung für FP16-Oberflächen zu melden. FP16-Oberflächen können für HDR10 oder nur SDR WCG verwendet werden. Das Setzen dieses Flags impliziert, dass ein Treiber alles ausführt, was erforderlich ist, um HDR10 oder SDR WCG zu aktivieren, einschließlich:
- Melden von Zielkapazitäten über die eingeführte EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO-Funktion
- Melden von Extended Mode-Informationen über die folgenden eingeführten Funktionen:
- Aktualisieren lediglich der Zielmodi über IddCxMonitorUpdateModes2 und kein Aufruf vonIddCxMonitorUpdateModes mehr
- Abfrage lediglich der Cursor-Details über IddCxMonitorQueryHardwareCursor3 und kein Aufruf von IddCxMonitorQueryHardwareCursor2 oder IddCxMonitorQueryHardwareCursor mehr
- Verarbeiten von FP16-Desktopoberflächen, die von IddCxSwapChainReleaseAndAcquireBuffer2 bereitgestellt werden
- Verwenden der HDR 3x4-Matrixtransformation, die von EVT_IDD_CX_MONITOR_SET_GAMMA_RAMP empfangen wird
- Senden von HDR-Metadaten an das Display. Diese Metadaten werden in EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA oder IddCxSwapChainReleaseAndAcquireBuffer2 gesendet
- Gegebenenfalls Anwenden des SRD-Weißwerts, etwa auf Mauscursors. Der SDR-Weißwert ist in IddCxSwapChainReleaseAndAcquireBuffer2 und IddCxMonitorQueryHardwareCursor3 enthalten
Melden von Ziel-HDR-Kapazitäten
Wenn ein Treiber HDR für einen Adapter aktivieren will, muss er zusätzliche Informationen zu jedem Zielkonnektor über seine EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO-Funktion bereitstellen. Für den Zielkonnektor spezifische Informationen sind erforderlich, da nur einige der verfügbaren Ziele manche Aspekte von HDR unterstützen können.
HDR-Metadaten
Wenn der Treiber einen Monitordeskriptor mit HDR-Metadaten bereitstellt, ruft das Betriebssystem EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA auf, um dem Treiber die Standard-HDR-Metadaten zu übergeben. Der Treiber muss diese Standarddaten beibehalten und beim Senden von HDR10-Infoframes (SMPTE ST.2086) an den Monitor verwenden. Wenn ein Treiber IddCxSwapChainReleaseAndAcquireBuffer2 aufruft, stellt das Betriebssystem auch HDR-Metadateninformationen bereit. Wenn diese Metadaten angeben, dass der Standardwert verwendet werden soll, wird auf die gespeicherten Standarddaten verwiesen.
Wenn ein HDR-Modus festgelegt ist, sendet das Betriebssystem den HDR-Metadatenstatus mit jedem Frame. Mit diesen Metadaten wird dem Treiber mitgeteilt, welche HDR-Metadaten über die eingeführte IDDCX_METADATA2-Struktur verwendet werden sollen. Die Metadaten sind entweder ein neuer Metadatenblock oder ein Hinweis darauf, dass der Treiber entweder die zuvor bereitgestellten Standardmetadaten oder dieselben Metadaten wie der vorherige Frame verwenden soll.
Hinweis: HDR-Metadaten werden Remotetreibern nicht bereitgestellt, da alle HDR10-Metadaten aus dem Anzeigesubsystem auf dem Client kommen sollen.
Melden von HDR-Modi
Wenn ein Display mit einem Ziel verbunden ist, fragt das Betriebssystem den Treiber nach derzeit unterstützten Monitor- und Zielmodi ab. Um HDR-Kapazitäten korrekt anzugeben, werden zusätzliche Informationen für jeden dieser Modi benötigt. Daher muss ein HDR-Treiber die folgenden DDIs verfügbar machen, die in Version 1.10 eingeführt wurden:
- EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION2 gibt eine Liste von IDDCX_MONITOR_MODE2-Strukturen zurück.
- EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES2 gibt eine Liste von IDDCX_TARGET_MODE2-Strukturen zurück.
Diese erweiterten Modi geben die möglichen Bittiefen und Oberflächenformate an, die verwendet werden können. Ein Treiber kann auch eine Zielmodusliste aktualisieren, indem er IddCxMonitorUpdateModes2 aufruft.
Das Betriebssystem leitet Variationen von Modi für HDR und SDR WCG basierend auf den Informationen ab, die vom EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO-Rückruf des Treibers zurückgegeben werden, bevor Modi gemeldet werden.
Das Betriebssystem überprüft die Modi, um wiederholte Modi zu erkennen, die kombiniert und als Einzelmodus gemeldet werden sollten. Beispielsweise sollte ein Ziel, das 1080p bei 60 Hz in 8 Bits und 10 Bit pro Kanal unterstützt, als Einzelmodus gemeldet werden. Wenn das Ziel diese Modi unterstützt, sie jedoch unterschiedliche Bandbreiten erfordern, ist es weiterhin in Ordnung, dass diese Modi separat gemeldet werden.
Ein hinzugefügter Gammatyp
Die vorhandene EVT_IDD_CX_MONITOR_SET_GAMMA_RAMP-DDI wurde erweitert, so dass das Betriebssystem die 3x4-Matrixtransformation bereitstellen kann, die erforderlich ist, um HDR-Displays für Treiber zu unterstützen, die HDR-Unterstützung bieten.
SDR-Weißwert
Pixeldaten für Mauszeiger sind immer SDR. Wenn ein Monitor in einen HDR-Modus gesetzt ist, muss der SDR-Weißwert auf Mauscursors angewendet werden. IddCx v.10 bietet diese Funktion an zwei Stellen:
- Sie wurde den von einem Treiber empfangenen Framemetadaten beim Aufrufen von IddCxSwapChainReleaseAndAcquireBuffer2 hinzugefügt.
- Sie ist auch Teil der eingeführten IddCxMonitorQueryHardwareCursor3-Funktion, damit ein Treiber Cursoraktualisierungen im korrekten Weißwert rendern kann, ohne einen neuen Frame erhalten zu müssen. Der SDR-Standardweißwert ist 80 Nits.
Oberflächenfarbraum
Obwohl der vom Treiber gemeldete Farbraum Teil der Modusinformationen ist, meldet das Betriebssystem den tatsächlichen Farbraum, der von einem bestimmten Frame in der eingeführten IDDCX_METADATA2-Struktur verwendet wird.
HDR mit Remote-Treibern
Nach Möglichkeit sollte das Verhalten des Betriebssystems und des Treibers für einen Remotetreiber mit dem bei einem Konsolentreiber identisch sein. Es gelten folgende Ausnahmen:
- HDR-Metadaten werden für Remote-Treiber nicht bereitgestellt. Es wird erwartet, dass das Client-System diese Metadaten basierend auf dem physisch verbundenen Display bereitstellt. Es ist sinnlos, Metadaten zu verwenden, die vom Server festgelegt werden.
- Die 3x4-Farbmatrixtransformation wird ebenfalls nicht gesendet. Auch hier wird erwartet, dass ein Remote-Treiber die entsprechenden Daten aus dem Client-System verwendet.
- Remotetreiber können die Farbmessdaten und den SDR-Weißwert bereitstellen, die auf dem Server verwendet werden sollen.
- Monitormodi sind für Remote-Treiber ebenfalls optional. Wenn ein Remotetreiber das IDDCX_ADAPTER_FLAGS_ALL_TARGET_MODES_MONITOR_COMPATIBLE-Adapter-Flag setzt, fordert das Betriebssystem keine Monitormodi an und verwendet stattdessen nur die Zielmodi. Dadurch kann ein Treiber ungewöhnliche Modi angeben, ohne den entsprechenden Monitormodus melden zu müssen, beispielsweise basierend auf einer Clientfenstergröße und nicht auf der Monitorgröße.
Unterstützen eines 1.10-Treiber-Running-Down-Levels
Version 1.10-Treiber, die auf älteren Windows-Versionen ausgeführt werden, müssen mehrere Schritte ausführen, um die Kompatibilität sicherzustellen. Insbesondere ist Folgendes erforderlich:
- Fortsetzung des Exports aller vorhandenen Funktionen, wie etwa EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION, EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES und EVT_IDD_CX_ADAPTER_COMMIT_MODES.
- Verwenden Sie das Makro IDD_CX_CLIENT_CONFIG_INIT, um die Größe der IDD_CX_CLIENT_CONFIG-Struktur festzulegen.
- Versuchen Sie nicht, vom Betriebssystem implementierte Funktionen aufzurufen, die in älteren Versionen nicht verfügbar sind. Verwenden Sie das Makro IDD_IS_FUNCTION_AVAILABLE, um die Verfügbarkeit zu prüfen.
- Keine der v1.10-Funktionen kann exportiert werden. Ein Treiber kann mit dem Makro IDD_IS_FIELD_AVAILABLE prüfen, ob der EvtIddCxXxx-Rückruf an die IDD_CX_CLIENT_CONFIG-Struktur geschrieben werden sollte.
- IDD_IS_FIELD_AVAILABLE kann einem Treiber auch helfen, festzustellen, ob es sicher ist, IDDCX_ADAPTER_FLAGS_CAN_PROCESS_FP16 oder IDDCX_ADAPTER_FLAGS_ALL_TARGET_MODES_MONITOR_COMPATIBLE einzurichten. Wenn eine der v1.10-DDIs nicht verfügbar ist, sollte der Treiber das Flag nicht setzen.
Ein Beispiel für die Verwendung von IDD_IS_FIELD_AVAILABLE:
if (IDD_IS_FIELD_AVAILABLE(IDD_CX_CLIENT_CONFIG, EvtIddCxParseMonitorDescription2))
{
IddCxClientConfig.EvtIddCxParseMonitorDescription2 = ParseMonitorDescription2;
}
Weitere Informationen finden Sie unter Erstellen von IddCx 1.4-Treibers.