Freigeben über


DXGKDDI_PREEMPTCOMMAND Rückruffunktion (d3dkmddi.h)

Der DxgkDdiPreemptCommand--Funktion nimmt einen DMA-Puffer (Direct Memory Access) vor, der zuvor an die Hardwarebefehlsausführungseinheit übermittelt und aktuell 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 zu einem Kontextblock, der einem Anzeigeadapter zugeordnet ist. Der Display-Miniporttreiber, der zuvor dieses Handle für das Microsoft DirectX-Grafikkernsubsystem im MiniportDeviceContext Ausgabeparameter des DxgkDdiAddDevice--Funktion bereitgestellt hat.

[in] pPreemptCommand

Ein Zeiger auf eine DXGKARG_PREEMPTCOMMAND Struktur, die den Befehl beschreibt, der verwendet wird, um einen zuvor an die Hardwarebefehlsausführungseinheit übermittelten DMA-Puffer vorab zu ersetzen.

Rückgabewert

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

Bemerkungen

Wenn der Treiber feststellt, dass die Hardware bereits die Verarbeitung aller übermittelten DMA-Puffer abgeschlossen ist – und dass die Hardware den Grafikverarbeitungseinheits-Planer (GPU) über den Abschluss informiert hat – wenn der DxgkDdiPreemptCommand--Funktion aufgerufen wird, um die DMA-Puffer vorab zu deaktivieren, der Treiber sollte die folgenden Vorgänge ausführen, anstatt den Vorabzaun zu übermitteln, der durch die PreemptionFenceId Mitglied von DXGKARG_PREEMPTCOMMAND an die Hardware identifiziert wird:

  • Heben Sie IRQL auf, um die Unterbrechungsebene zu unterbrechen. Beispielsweise kann der Treiber die DxgkCbSynchronizeExecution--Funktion aufrufen, um mit der DxgkDdiInterruptRoutine-Funktion zu synchronisieren.
  • Informieren Sie den GPU-Scheduler über die Vorabinformationen. 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-Scheduler Instanzen verarbeitet, in denen die Hardware aufgrund der TDR-Arbeit (Timeout Detection and Recovery) nicht mehr reagiert.

Wenn der Treiber einen Fehlercode zurückgibt, verursacht das Microsoft DirectX-Grafik-Kernelsubsystem eine Systemfehlerüberprüfung. In einer Absturzabbilddatei wird der Fehler durch die Meldung BugCheck-0x119angegeben, die die folgenden vier Parameter enthält.
  1. 0x2
  2. Der vom fehlgeschlagenen Treiberaufruf zurückgegebene NTSTATUS-Fehlercode
  3. Ein Zeiger auf die DXGKARG_PREEMPTCOMMAND-Struktur
  4. Ein Zeiger auf eine interne Planerdatenstruktur
DxgkDdiPreemptCommand- sollte nicht seitenfähig gemacht werden, da sie unter IRQL = DISPATCH_LEVEL

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista
Zielplattform- Desktop
Header- d3dkmddi.h
IRQL- DISPATCH_LEVEL

Siehe auch

DXGKARG_PREEMPTCOMMAND

DxgkCbNotifyInterrupt

DxgkCbSynchronizeExecution

DxgkDdiAddDevice

DxgkDdiInterruptRoutine