Partager via


DXGKDDI_PREEMPTCOMMAND fonction de rappel (d3dkmddi.h)

La fonction DxgkDdiPreemptCommand préempt une mémoire tampon d’accès direct à la mémoire (DMA) précédemment envoyée à l’unité d’exécution de commande matérielle et actuellement mise en file d’attente.

Syntaxe

DXGKDDI_PREEMPTCOMMAND DxgkddiPreemptcommand;

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

Paramètres

[in] hAdapter

Handle vers un bloc de contexte associé à un adaptateur d’affichage. Le pilote miniport d’affichage a précédemment fourni ce handle au sous-système du noyau graphique Microsoft DirectX dans le MiniportDeviceContext paramètre de sortie de la fonction DxgkDdiAddDevice.

[in] pPreemptCommand

Pointeur vers une structure DXGKARG_PREEMPTCOMMAND qui décrit la commande utilisée pour préempter une mémoire tampon DMA précédemment envoyée à l’unité d’exécution de commande matérielle.

Valeur de retour

Retourne STATUS_SUCCESS une fois l’opération terminée. Si le pilote retourne plutôt un code d’erreur, le système d’exploitation provoque une vérification de bogue système. Pour plus d’informations, consultez la section Remarques suivante.

Remarques

Si le pilote détermine que le matériel est déjà terminé de traiter toutes les mémoires tampons DMA envoyées, et que le matériel a informé le planificateur de l’unité de traitement graphique (GPU) sur les achèvements- lorsque son DxgkDdiPreemptCommand fonction est appelée pour préempter les mémoires tampons DMA, le pilote doit effectuer les opérations suivantes au lieu de soumettre la clôture prédéfinie identifiée par le PreemptionFenceId membre de DXGKARG_PREEMPTCOMMAND au matériel :

  • Augmentez le niveau d’interruption IRQL. Par exemple, le pilote peut appeler la fonction DxgkCbSynchronizeExecution pour la synchroniser avec sa fonction DxgkDdiInterruptRoutine.
  • Informez le planificateur GPU sur les informations de préemption. Le pilote peut appeler directement la fonction DxgkCbNotifyInterrupt ou appeler directement sa fonction DxgkDdiInterruptRoutine (par exemple, si le pilote doit également effectuer d’autres mises à jour).

    Notez que le planificateur GPU gère les instances où le matériel a cessé de répondre en raison du travail TDR (Timeout Detection and Recovery).

Si le pilote retourne un code d’erreur, le sous-système du noyau graphique Microsoft DirectX provoque une vérification de bogue système. Dans un fichier de vidage sur incident, l’erreur est notée par le message BugCheck 0x119, qui a les quatre paramètres suivants.
  1. 0x2
  2. Code d’erreur NTSTATUS retourné par l’appel de pilote ayant échoué
  3. Pointeur vers la structure DXGKARG_PREEMPTCOMMAND
  4. Pointeur vers une structure de données du planificateur interne
DxgkDdiPreemptCommand doit être rendu non modifiable, car il s’exécute à IRQL = DISPATCH_LEVEL

Exigences

Exigence Valeur
client minimum pris en charge Windows Vista
plateforme cible Bureau
d’en-tête d3dkmddi.h
IRQL DISPATCH_LEVEL

Voir aussi

DXGKARG_PREEMPTCOMMAND

DxgkCbNotifyInterrupt

DxgkCbSynchronizeExecution

DxgkDdiAddDevice

DxgkDdiInterruptRoutine