Partager via


DXGKDDI_RENDERKM fonction de rappel (d3dkmddi.h)

Pour les cartes d’affichage qui prennent en charge l’accélération matérielle GDI, la fonction DxgkDdiRenderKm génère une mémoire tampon d’accès direct à la mémoire (DMA) à partir de la mémoire tampon de commande que le pilote d’affichage canonique (CDD) en mode noyau a passé.

Syntaxe

DXGKDDI_RENDERKM DxgkddiRenderkm;

NTSTATUS DxgkddiRenderkm(
  [in]     IN_CONST_HANDLE hContext,
  [in/out] INOUT_PDXGKARG_RENDER pRenderKmArgs
)
{...}

Paramètres

[in] hContext

Handle dans le contexte de l’appareil pour les mémoires tampons DMA et de commande. La fonction DxgkDdiCreateContext du pilote miniport d’affichage a précédemment retourné ce handle dans le membre hContext de la structure DXGKARG_CREATECONTEXT vers laquelle pointe le paramètre pCreateContext de DxgkDdiCreateContext .

Si le pilote ne prend pas en charge la création de contexte, le sous-système du noyau graphique Microsoft DirectX remplace le handle du contexte par un handle pour l’appareil. La fonction DxgkDdiCreateDevice du pilote miniport d’affichage a précédemment retourné le handle d’appareil dans le membre hDevice de la structure DXGKARG_CREATEDEVICE vers laquelle pointe le paramètre pCreateDevice de DxgkDdiCreateDevice .

[in/out] pRenderKmArgs

Pointeur vers une structure de DXGKARG_RENDER qui contient des informations sur la mémoire tampon DMA et une mémoire tampon de commande mise en forme.

Si le pilote miniport d’affichage prend en charge l’accélération matérielle GDI, pRenderKmArgs-pCommand> pointe vers la mémoire tampon de commande DXGK_RENDERKM_COMMAND.

Le pilote doit traduire la mémoire tampon de commande d’entrée en commandes de mémoire tampon DMA et générer la liste des emplacements de correctif.

Valeur retournée

DxgkDdiRenderKm retourne l’une des valeurs suivantes :

Code de retour Description
STATUS_SUCCESS La mémoire tampon de commande entière a été traduite.
STATUS_NO_MEMORY DxgkDdiRenderKm n’a pas pu allouer la mémoire nécessaire à sa fin.
STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER La mémoire tampon DMA actuelle est épuisée.
STATUS_INVALID_PARAMETER DxgkDdiRenderKm a détecté des paramètres d’instruction que le matériel graphique ne pouvait pas prendre en charge ; toutefois, le matériel graphique peut prendre en charge les instructions elles-mêmes. Le pilote n’est pas nécessaire pour retourner ce code d’erreur. Au lieu de cela, il peut retourner STATUS_ILLEGAL_INSTRUCTION lorsqu’il détecte des paramètres d’instruction non pris en charge.
STATUS_INVALID_USER_BUFFER DxgkDdiRenderKm a détecté des données ou des instructions sous-exécutées ou dépassées. Autrement dit, le pilote a reçu moins ou plus d’instructions ou de données que prévu. Le pilote n’est pas nécessaire pour retourner ce code d’erreur. Au lieu de cela, il peut retourner STATUS_ILLEGAL_INSTRUCTION lorsqu’il détecte des données ou des instructions en dessous ou en dépassement.
STATUS_INVALID_HANDLE DxgkDdiRenderKm a détecté un handle non valide dans la mémoire tampon de commande.
STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE Le pilote de miniport d’affichage a détecté une erreur dans le flux DMA. Le périphérique de contexte graphique est placé dans un état perdu si le pilote retourne ce code d’erreur.

Remarques

Le sous-système du noyau graphique DirectX appelle la fonction DxgkDdiRenderKm du pilote miniport pour générer une mémoire tampon DMA à partir de la mémoire tampon de commande transmise par le pilote d’affichage canonique (CDD) en mode noyau fourni par le système d’exploitation. En plus de la mémoire tampon DMA de sortie, le pilote miniport d’affichage doit également générer une liste d’emplacements de correctif de sortie. Le gestionnaire de mémoire vidéo utilise cette liste pour fractionner et corriger les mémoires tampons DMA de manière appropriée.

L’accès aux mémoires tampons du noyau ne nécessite pas de protection contre le try/except code.

Le pilote miniport d’affichage n’est pas nécessaire pour utiliser les informations fournies par le CDD s’il peut recréer les informations de manière plus optimale. Par exemple, si le membre pRender-pPatchLocationListIn> est vide parce que le pilote d’affichage en mode utilisateur n’a pas fourni de liste d’emplacement de correctif d’entrée, le pilote miniport d’affichage peut générer le contenu du membre pRender-pPatchLocationListOut> en fonction du contenu de la mémoire tampon de commande à la place.

En plus du handle spécifique à l’appareil, le sous-système du noyau graphique DirectX fournit le pilote miniport d’affichage avec la dernière adresse de segment GPU connue pour chaque allocation. Si l’index d’allocation N est actuellement désintégé, le sous-système du noyau graphique DirectX définit le membre SegmentId du Nième élément du membre pAllocationList de DXGKARG_RENDER à zéro. Si le membre SegmentId du Nième élément de la liste d’allocation n’est pas défini sur zéro, le pilote miniport d’affichage doit corriger la mémoire tampon DMA générée avec les informations d’adresse de segment fournies avant que le sous-système du noyau graphique DirectX n’appelle la fonction DxgkDdiPatch pour corriger la mémoire tampon DMA. Le pilote doit effectuer cette mise à jour corrective initiale lorsque cela est demandé, car le sous-système du noyau graphique DirectX peut ne pas appeler la fonction DxgkDdiPatch sur une mémoire tampon DMA que le pilote doit avoir correctement corrigée.

Même si la fonction DxgkDdiRenderKm du pilote effectue la mise à jour corrective initiale de la mémoire tampon DMA comme décrit précédemment, le pilote doit toujours insérer toutes les références aux allocations dans la liste de l’emplacement de correctif de sortie que le membre pPatchLocationListOut de DXGKARG_RENDER spécifie. Cette liste doit contenir toutes les références, car les adresses des allocations peuvent changer avant que la mémoire tampon DMA ne soit envoyée au GPU ; par conséquent, le sous-système du noyau graphique DirectX appelle la fonction DxgkDdiPatch pour repatchter la mémoire tampon DMA.

Pour dissocier une allocation, le pilote miniport d’affichage peut spécifier un élément dans la liste d’allocations qui fait référence à un handle NULL , puis utiliser un élément patch-location qui fait référence à cette allocation NULL . En règle générale, le pilote doit utiliser le premier élément de la liste d’allocation (élément 0) comme élément NULL .

En mode DMA de contrat garanti, lorsque le pilote miniport d’affichage convertit une mémoire tampon de commande en mémoire tampon DMA, le CDD doit garantir suffisamment de ressources pour la commande de traduction. S’il n’existe pas suffisamment de ressources pour la traduction, le pilote miniport d’affichage doit rejeter la mémoire tampon DMA. Pour plus d’informations, consultez Utilisation du modèle de mémoire tampon DMA de contrat garanti.

DxgkDdiRenderKm doit être rendu paginable.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7
Plateforme cible Desktop (Expérience utilisateur)
En-tête d3dkmddi.h
IRQL PASSIVE_LEVEL

Voir aussi

D3DDDI_ALLOCATIONLIST

DXGKARG_CREATECONTEXT

DXGKARG_CREATEDEVICE

DXGK_ALLOCATIONLIST

DXGK_RENDERKM_COMMAND

DxgkDdiCreateContext

DxgkDdiCreateDevice

DxgkDdiOpenAllocation

DxgkDdiPatch

DxgkDdiRender