Freigeben über


D3DKMT_CREATE_DOORBELL Struktur (d3dkmthk.h)

Die D3DKMT_CREATE_DOORBELL Struktur enthält Parameter für D3DKMTCreateDoorbell.

Syntax

typedef struct _D3DKMT_CREATE_DOORBELL {
  D3DKMT_HANDLE                hHwQueue;
  D3DKMT_HANDLE                hRingBuffer;
  D3DKMT_HANDLE                hRingBufferControl;
  D3DKMT_CREATE_DOORBELL_FLAGS Flags;
  UINT                         PrivateDriverDataSize;
  VOID                         *PrivateDriverData;
  VOID                         *DoorbellCPUVirtualAddress;
  VOID                         *DoorbellSecondaryCPUVirtualAddress;
  VOID                         *DoorbellStatusCPUVirtualAddress;
  VOID                         *HwQueueProgressFenceLastQueuedValueCPUVirtualAddress;
  D3DKMT_HANDLE                hDoorbell;
} D3DKMT_CREATE_DOORBELL;

Angehörige

hHwQueue

[in] UMD-Handle des Hardwarewarteschlangenobjekts, das in einem vorherigen Aufruf von D3DKMTCreateHwQueueerstellt wurde. Mit diesem Handle wird die Hardwarewarteschlange identifiziert, für die eine Türglocke zugewiesen werden muss.

hRingBuffer

[in] UMD-Handle zu einer Ringpufferzuordnung, die UMD zuvorerstellt hat. Die Zuordnung muss gpu sichtbar und bereits resident sein. Dxgkrnl- übergibt die virtuelle GPU-Adresse (VA) und die Größe dieser Zuordnung an KMD in einem entsprechenden DxgkDdiCreateDoorbell Aufruf. Die ResizeRingBufferOperation Flag ist ein Hinweis von UMD zu KMD, dass eine Türglocke für diese Hardwarewarteschlange mit einem neuen, geänderten Ringpuffer neu erstellt wird.

hRingBufferControl

[in/optional] UMD-Handle zu einer Ringpuffersteuerungszuordnung zuvor von UMD erstellt. UMD und KMD können diese Zuordnung als Kontrollbereich verwenden, um bei Bedarf Lese-/Schreibzugriffszeigerpositionen für Ringpuffer zu speichern. Die Zuordnung muss gpu sichtbar und bereits vorhanden sein, wenn UMD D3DKMTCreateDoorbellaufruft. Dxgkrnl übergibt die GPU VA und die Größe dieser Zuordnung an KMD in einem entsprechenden DxgkDdiCreateDoorbell Aufruf.

Flags

[in/optional] Ein Bitfeld mit D3DKMT_CREATE_DOORBELL_FLAGS Werten, die die Flags für die Erstellung von Türglocken angeben.

PrivateDriverDataSize

[in] Größe der privaten Treiberdaten, auf die pPrivateDriverData in Byte verweist.

PrivateDriverData

[in/out] Zeigen Sie auf einen Puffer, der für den Treiber privat ist. Die Größe dieses Puffers wird durch PrivateDriverDataSize-angegeben. Die zulässige maximale Puffergröße ist D3DDDI_DOORBELL_PRIVATEDATA_MAX_BYTES_WDDM3_1 Bytes.

DoorbellCPUVirtualAddress

[out] Zeiger auf die CPU VA (beide Lese-/Schreibzugriff), die vom Betriebssystem für diese Türglocke reserviert sind. UMD schreibt einen bestimmten Wert auf diese Adresse, um den GPU-Scheduler effektiv über eine neue Arbeitsübermittlung in der Hardwarewarteschlange zu benachrichtigen. Diese Adresse bleibt während der Lebensdauer der Türglocke konstant, auch wenn die zugrunde liegende physische Türglocke getrennt wird. Die UMD sollte diese Adresse immer verwenden, um diese Türglocke zu schreiben/zu lesen.

DoorbellSecondaryCPUVirtualAddress

[out/optional] Zeiger auf eine sekundäre CPU VA (beide Lese-/Schreibzugriff), die vom Betriebssystem für diese Türglocke reserviert ist.

Auf hardware that implements a secondary doorbell location the UMD sets the RequireSecondaryCpuVA flag. Für solche Geräte reserviert das Betriebssystem eine weitere CPU VA für diese Türglocke. Während der Lebensdauer der Türglocke bleibt diese Adresse konstant, auch wenn die zugrunde liegende physische Türglocke getrennt wird.

DoorbellStatusCPUVirtualAddress

[out] Zeiger auf die CPU VA des Doorbell-Status. Der Wert an dieser Adresse gibt an, ob die dieser Hardwarewarteschlange zugewiesene Türglocke derzeit verbunden ist. Jedes Mal, wenn die UMD neue Arbeiten an die Warteschlange übermittelt und die Türglocke klingelt, muss dieser Wert überprüft werden, um zu bestimmen, ob der Klingelring erfolgreich war. Wenn der Ring fehlgeschlagen ist, muss UMD D3DKMTConnectDoorbell- aufrufen, um die Türglocke wiederherzustellen, und versuchen Sie dann erneut, die Arbeit zu übermitteln.

Das Betriebssystem weist diesen 64-Bit-Doorbell-Statusspeicher zu und schreibt ihn in den Adressraum des Prozesses zu und gibt dem UMD die CPU VA des Benutzermodus zum Lesen aus. Daher sollte UMD den in dieser Adresse gespeicherten 64-Bit-Wert lesen, um den Doorbell-Status zu erhalten. Der Wert dieser Adresse kann einer der D3DDDI_DOORBELL_STATUS Enumerationswerte sein.

Diese Adresse bleibt während der Lebensdauer der Türglocke konstant, auch wenn die zugrunde liegende physische Türglocke getrennt wird. Die UMD sollte diese Adresse immer verwenden, um den Status der Türglocke zu lesen.

Nur das Betriebssystem schreibt und aktualisiert diesen Statusspeicher:

  • Bei erfolgreicher Rückgabe von DxgkDdiConnectDoorbellschreibt das Betriebssystem den Status als D3DDDI_DOORBELL_STATUS_CONNECTED.
  • Wenn das Betriebssystem die Türglocke als Teil des Anhaltens der Hardwarewarteschlange trennt oder die GPU herunterschaltet, ruft das KMD-DxgkDdiDisconnectDoorbell- auf und schreibt dann den Status als D3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRY.
  • Wenn die KMD die Türglocke aus irgendeinem Grund trennen möchte, ruft sie die DxgkDisconnectDoorbellCB Rückruf auf, um das Betriebssystem zu informieren. KMD stellt D3DDDI_DOORBELL_STATUS als Status bereit, den das Betriebssystem auf diese Statusseite schreibt.
  • In GPU-Szenarien, die verloren gegangen sind oder angehalten wurden, schreibt das Betriebssystem D3DDDI_DOORBELL_STATUS_DISCONNECTED_ABORT als Status.

HwQueueProgressFenceLastQueuedValueCPUVirtualAddress

[out] CPU VA des Speicherorts, an dem die UMD den neu in die Warteschlange eingereihten Statuszaunwert jedes Mal schreibt, wenn ein neuer Befehlspuffer an den Ringpuffer angefügt wird.

hDoorbell

[out] Laufzeithandle für das neu erstellte Doorbell-Objekt.

Bemerkungen

Weitere Informationen finden Sie unter Arbeitsübermittlung im Benutzermodus.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 11, Version 24H2 (WDDM 3.2)
Header- d3dkmthk.h

Siehe auch

D3DKMT_CREATE_DOORBELL_FLAGS

D3DKMTConnectDoorbell

D3DKMTCreateAllocation

D3DKMTCreateDoorbell

DxgkDdiConnectDoorbell

DxgkDdiCreateDoorbell