DXGKDDI_PREEMPTCOMMAND Rückruffunktion (d3dkmddi.h)

Die DxgkDdiPreemptCommand-Funktion entfernt einen DMA-Puffer (Direct Memory Access), der zuvor an die Hardwarebefehlsausführungseinheit übermittelt und derzeit in die Warteschlange gestellt wurde.

Syntax

DXGKDDI_PREEMPTCOMMAND DxgkddiPreemptcommand;

NTSTATUS DxgkddiPreemptcommand(
  [in] IN_CONST_HANDLE hAdapter,
  [in] IN_CONST_PDXGKARG_PREEMPTCOMMAND pPreemptCommand
)
{...}

Parameter

[in] hAdapter

Ein Handle für einen Kontextblock, der einem Anzeigeadapter zugeordnet ist. Der Anzeigeminiporttreiber hat dieses Handle zuvor für das Microsoft DirectX-Grafikkernsubsystem im Ausgabeparameter MiniportDeviceContext der DxgkDdiAddDevice-Funktion bereitgestellt.

[in] pPreemptCommand

Ein Zeiger auf eine DXGKARG_PREEMPTCOMMAND Struktur, die den Befehl beschreibt, der verwendet wird, um einen DMA-Puffer zu löschen, der zuvor an die Hardwarebefehlsausführungseinheit übermittelt wurde.

Rückgabewert

Gibt nach erfolgreichem Abschluss STATUS_SUCCESS zurück. Wenn der Treiber stattdessen einen Fehlercode zurückgibt, führt das Betriebssystem zu einer Systemfehlerüberprüfung. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Hinweise

Wenn der Treiber feststellt, dass die Hardware bereits alle übermittelten DMA-Puffer verarbeitet hat und dass die Hardware den GPU-Planer (Graphics Processing Unit) über die Vervollständigungen informiert hat, wenn seine DxgkDdiPreemptCommand-Funktion aufgerufen wird, um die DMA-Puffer zu löschen, sollte der Treiber die folgenden Vorgänge ausführen, anstatt den preempt fence zu übermitteln, der durch das PreemptionFenceId-Mitglied von DXGKARG_PREEMPTCOMMAND identifiziert wird:

  • Heben Sie IRQL auf die Interruptebene an. Beispielsweise kann der Treiber die DxgkCbSynchronizeExecution-Funktion aufrufen, um mit seiner DxgkDdiInterruptRoutine-Funktion zu synchronisieren.
  • Informieren Sie den GPU-Planer über die Informationen zum Vorzeitigen Erlösen. Der Treiber kann entweder die DxgkCbNotifyInterrupt-Funktion direkt aufrufen oder seine DxgkDdiInterruptRoutine-Funktion aufrufen (z. B. wenn der Treiber auch andere Updates ausführen muss).

    Beachten Sie, dass der GPU-Planer Instanzen verarbeitet, in denen die Hardware aufgrund von Timeouterkennungs- und Wiederherstellungsvorgängen (Timeout Detection and Recovery, TDR) nicht mehr reagiert.

Wenn der Treiber einen Fehlercode zurückgibt, führt das Microsoft DirectX-Grafikkernsubsystem zu einer Systemfehlerüberprüfung. In einer Absturzabbilddatei wird der Fehler durch die Meldung BugCheck 0x119 notiert, die die folgenden vier Parameter aufweist.
  1. 0x2
  2. Der NTSTATUS-Fehlercode, der vom fehlerhaften Treiberaufruf zurückgegeben wurde
  3. Ein Zeiger auf die DXGKARG_PREEMPTCOMMAND-Struktur
  4. Ein Zeiger auf eine interne Planerdatenstruktur
DxgkDdiPreemptCommand sollte nicht ausserstellbar gemacht werden, da es mit IRQL = DISPATCH_LEVEL

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Zielplattform Desktop
Kopfzeile d3dkmddi.h
IRQL DISPATCH_LEVEL

Weitere Informationen

DXGKARG_PREEMPTCOMMAND

DxgkCbNotifyInterrupt

DxgkCbSynchronizeExecution

DxgkDdiAddDevice

DxgkDdiInterruptRoutine