Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Einige Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Veröffentlichung erheblich geändert werden kann. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
In diesem Artikel werden die Änderungen beschrieben, die in IddCx 1.11 vorgenommen werden. Eine einzelne Binärdatei des Indirekten Display-Treibers (IDD), die auf IddCx 1.11 basiert, kann auf Windows 10 1803 und höher ausgeführt werden, indem Laufzeittests verwendet werden, um zu überprüfen, ob DDI-Änderungen in IddCx 1.11 auf diesem System verfügbar sind. Weitere Informationen finden Sie unter Erstellen eines WDF-Treibers für mehrere Versionen von Windows.
Die Änderungen von IddCx 1.11 sind in die folgenden Kategorien unterteilt:
- Aktualisieren Sie die IddCxGetVersion (Konsole und Remote). Eine vollständige Liste der IddCx-bezogenen Versionsinformationen finden Sie unter IddCx-Versionen.
- Fügen Sie die Möglichkeit hinzu, die Unterstützung von Betriebssystemfeatures abzufragen.
- Fügen Sie Unterstützung für die Verwendung der D3D12-API hinzu.
- Fügen Sie eine neue atomare Lese-/Schreiboperation für I2C DDI hinzu.
- Fügen Sie Unterstützung nur für DisplayID-Deskriptoren hinzu.
- Fügen Sie Unterstützung zum Aktualisieren der statischen Anzahl der Desktop-Neucodierungen hinzu.
Aktualisieren Sie IddCxGetVersion
Der von IddCxGetVersion zurückgegebene Wert wurde aktualisiert, um 0x1B00 zurückzugeben.
Unterstützung von Abfragebetriebssystemfeatures
Treiber haben jetzt die Möglichkeit zu ermitteln, ob ein bestimmtes Feature von IddCx 1.11 im zugrunde liegenden Betriebssystem verfügbar ist, indem iddCxCheckOsFeatureSupport aufgerufen wird. Mehrere Betriebssystemversionen können unterstützung für IddCx 1.11 bis IddCxGetVersion melden, aber möglicherweise sind nur einige der Features verfügbar.
D3D12-Unterstützung
IddCx 1.11-Treiber, die D3D12 unterstützen, können ein ID3D12Device-Objekt einer Swapchain zuordnen und ID3D12Resource-Objekte mithilfe von Aufrufen von IddCxSwapChainReleaseAndAcquireBuffer2 empfangen. Eine Übersicht über die zugehörigen Änderungen wird in den folgenden Abschnitten gegeben.
Zuordnen eines D3D12-Geräts zu einer Swapchain
Wenn ein Treiber D3D12-Frames empfangen möchte, muss ein ID3D12Device-Objekt in einem Aufruf von IddCxSwapChainSetDevice2 bereitgestellt werden.
Empfangen von D3D12-Frames
Nachdem ein Treiber IddCxSwapChainSetDevice2 aufgerufen und ein ID3D12Device-Objekt bereitgestellt hat, wird das IDARG_OUT_RELEASEANDACQUIREBUFFER2, das an Aufrufe von IddCxSwapChainReleaseAndAcquireBuffer2 übergeben wird, das Flag IDDCX_METADATA2_VALID_FLAGS_D3D12SURFACE gesetzt haben. Der Treiber sollte dann IDARG_OUT_RELEASEANDACQUIREBUFFER2.MetaData.pD3d12Surface verwenden, um auf die Pixeldaten zuzugreifen.
Synchronisieren des Zugriffs auf D3D12-Oberflächen
Eine wesentliche Änderung bei der Verwendung von D3D12 durch einen Treiber betrifft das Synchronisierungsmodell, das den Zugriff auf die Swap-Chain-Oberflächen steuert und Probleme wie Sperrvorgänge sowie den Zugriff auf veraltete Pixeldaten vermeidet. Aufgrund der feinkörnigeren Steuerung von D3D12 müssen Treiber dem Betriebssystem explizit mitteilen, welche Befehlswarteschlange die Oberfläche als Eingabedaten nutzen wird.
Weitere Details zu den Verantwortlichkeiten der Treiber im Zusammenhang mit der Synchronisierung finden Sie in den Anmerkungen der IDDCX_METADATA2-Zusatzbemerkungen.
Atomic I2C-Unterstützung
Ein 1.11-Treiber, der I2C unterstützt, indem er die DDIs EVT_IDD_CX_MONITOR_I2C_RECEIVE und EVT_IDD_CX_MONITOR_I2C_TRANSMIT bereitstellt, muss auch EVT_IDD_CX_MONITOR_I2C_TRANSMIT_AND_RECEIVE bereitstellen. Dieser neue DDI führt einen I2C-Vorgang in einem einzigen Aufruf aus, um Treibern zu helfen, die ihre eigenen I2C-Vorgänge nicht mit Betriebssystemaufrufen interleavieren.
Hinweis
Treiber, die den neuen DDI bereitstellen, sollten nicht davon ausgehen, dass die vorhandenen DDIs nicht mehr verwendet werden.
Unterstützung nur für DisplayID-Deskriptor
Ein neuer Deskriptortyp, IDDCX_MONITOR_DESCRIPTION_TYPE_DISPLAYID, wurde der IDDCX_MONITOR_DESCRIPTION_TYPE Enumeration hinzugefügt, die in den Argumenten verwendet wird, die an IddCxMonitorCreate und IddCxMonitorCreate2 übergeben werden. Dies sollte verwendet werden, wenn der bereitgestellte Deskriptor nur einen DisplayID-Deskriptor und überhaupt keine EDID-Blöcke enthält.
Aktualisieren der Anzahl statischer Desktop-Neucodierungen
Derzeit wird beim Erstellen eines Adapters die Anzahl der statischen Desktop-Neucodierungen angegeben. Mit einem neuen DDI kann dieser Wert jetzt auf einer Swapchain aktualisiert werden, nachdem der Adapter erstellt wurde.
Unterstützen eines 1.11-Treibers, der die Ebene nach unten läuft
Wenn ein 1.11-Treiber auf älteren Windows-Versionen ausgeführt werden soll, müssen Sie Schritte unternehmen, um die Kompatibilität sicherzustellen.
- Der Treiber muss die Größe der IDD_CX_CLIENT_CONFIG Struktur mithilfe des IDD_CX_CLIENT_CONFIG_INIT-Makros festlegen.
- Der Treiber darf keines der neuen Flags setzen, die zu IDDCX_ADAPTER_FLAGS hinzugefügt wurden.
- Der Treiber darf keine neuen Funktionen testen und aufrufen, die vom Betriebssystem bereitgestellt werden, da sie nicht verfügbar sind. IDD_IS_FUNCTION_AVAILABLE kann zur Überprüfung verwendet werden.
- Keine der neuen Funktionen kann exportiert werden. Treiber können das IDD_IS_FIELD_AVAILABLE Makro verwenden, um zu überprüfen, ob der EvtIddXxx-Rückruf in die IDD_CX_CLIENT_CONFIG-Struktur geschrieben werden soll.
- Auch wenn das Betriebssystem 0x1B00 von einem Aufruf von IddCxGetVersion zurückgibt, muss der Treiber durch Aufrufen von IddCxCheckOsFeatureSupport eine Abfrage nach einer bestimmten Featureunterstützung vornehmen.
Das folgende Beispiel zeigt, wie IDD_IS_FIELD_AVAILABLE verwendet werden kann:
if (IDD_IS_FIELD_AVAILABLE(IDD_CX_CLIENT_CONFIG, EvtIddCxMonitorI2CTransmitAndReceive))
{
IddCxClientConfig.EvtIddCxMonitorI2CTransmitAndReceive = MonitorI2CTransmitAndReceive;
}
Weitere Informationen finden Sie unter Building IddCx 1.4 drivers.
Welche Funktionen verwendet werden
| IddCx 1.11-Feature | Neue Funktionsbetriebssystemaufrufe für 1.11-Adapter | Vorherige Entsprechung |
|---|---|---|
| Atomic I2C | EVT_IDD_CX_MONITOR_I2C_TRANSMIT_AND_RECEIVE | EVT_IDD_CX_MONITOR_I2C_TRANSMIT und EVT_IDD_CX_MONITOR_I2C_RECEIVE |
| IddCx 1.11 Feature | Neue Funktionen, die ein Treiber aufrufen muss | Vorherige Entsprechung |
|---|---|---|
| D3D12 | IddCxSwapChainSetDevice2 | IddCxSwapChainSetDevice |
| Neucodierungsanzahl aktualisieren | IddCxSwapChainUpdateStaticDesktopReencodeFrameCount | N/A |
Vorgängerversionen
Informationen zu Änderungen in früheren IddCx-Versionen finden Sie in den folgenden Artikeln: