Partager via


structure DXGKARG_PATCH (d3dkmddi.h)

La structure DXGKARG_PATCH décrit une mémoire tampon d’accès direct à la mémoire (DMA) qui nécessite une mise à jour corrective (autrement dit, nécessite l’attribution d’adresses physiques).

Syntaxe

typedef struct _DXGKARG_PATCH {
  union {
    [in] HANDLE hDevice;
    [in] HANDLE hContext;
  };
  [in] UINT                           DmaBufferSegmentId;
  [in] PHYSICAL_ADDRESS               DmaBufferPhysicalAddress;
  [in] VOID                           *pDmaBuffer;
  [in] UINT                           DmaBufferSize;
  [in] UINT                           DmaBufferSubmissionStartOffset;
  [in] UINT                           DmaBufferSubmissionEndOffset;
  [in] VOID                           *pDmaBufferPrivateData;
  [in] UINT                           DmaBufferPrivateDataSize;
  [in] UINT                           DmaBufferPrivateDataSubmissionStartOffset;
  [in] UINT                           DmaBufferPrivateDataSubmissionEndOffset;
  [in] const DXGK_ALLOCATIONLIST      *pAllocationList;
  [in] UINT                           AllocationListSize;
  [in] const D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
  [in] UINT                           PatchLocationListSize;
  [in] UINT                           PatchLocationListSubmissionStart;
  [in] UINT                           PatchLocationListSubmissionLength;
  [in] UINT                           SubmissionFenceId;
  [in] DXGK_PATCHFLAGS                Flags;
  [in] UINT                           EngineOrdinal;
} DXGKARG_PATCH;

Membres

[in] hDevice

Si un pilote n’est pas conscient de plusieurs moteurs (autrement dit, le pilote ne prend pas en charge la création de contexte), un handle pour le périphérique d’affichage (contexte graphique) d’où provient la demande de soumission. Un handle de périphérique est fourni à la fonction DxgkDdiPatch du pilote dans l’union que contient DXGKARG_PATCH.

Pour certaines opérations de pagination, hDevice a la valeur NULL (par exemple, les opérations de pagination qui suppriment le contenu de la mémoire tampon d’image entière pendant la gestion de l’alimentation). Les opérations de pagination sont indiquées par l’indicateur de champ bit pagination dans le membre Indicateurs .

[in] hContext

Si le pilote est conscient de plusieurs moteurs (autrement dit, le pilote prend en charge la création de contexte), un handle vers le contexte d’appareil d’où provient la demande de soumission. Un handle de contexte est fourni à la fonction DxgkDdiPatch du pilote dans l’union que contient DXGKARG_PATCH.

Pour certaines opérations de pagination, hContext a la valeur NULL (par exemple, les opérations de pagination qui suppriment le contenu de la mémoire tampon d’image entière pendant la gestion de l’alimentation). Les opérations de pagination sont indiquées par l’indicateur de champ bit pagination dans le membre Indicateurs .

[in] DmaBufferSegmentId

Identificateur du segment de mémoire dans lequel la mémoire tampon DMA a été paginée.

L’identificateur peut être égal à zéro si le pilote a indiqué de ne pas mapper la mémoire tampon DMA dans le segment en définissant le membre DmaBufferSegmentSet de la structure DXGK_CONTEXTINFO sur 0 dans un appel à la fonction DxgkDdiCreateContext du pilote. Si DmaBufferSegmentId est égal à zéro, la mémoire tampon DMA a été allouée en tant que bloc contigu de mémoire système.

[in] DmaBufferPhysicalAddress

Un PHYSICAL_ADDRESS type de données (défini comme LARGE_INTEGER) qui indique l’adresse physique où la mémoire tampon DMA a été paginée.

Si DmaBufferSegmentId est égal à zéro, DmaBufferPhysicalAddress est l’adresse physique dans la mémoire système où se trouve la mémoire tampon DMA.

Si DmaBufferSegmentId est différent de zéro, DmaBufferPhysicalAddress est l’adresse physique du segment pour la mémoire tampon DMA (autrement dit, DXGK_SEGMENTDESCRIPTOR. BaseAddress + DmaBuffer.SegmentOffset).

Notez que DmaBufferPhysicalAddress fait toujours référence au début de la mémoire tampon DMA, même si le pilote peut être nécessaire pour corriger ou envoyer une section de la mémoire tampon DMA qui n’inclut pas le début de la mémoire tampon DMA (autrement dit, si le membre DmaBufferSubmissionStartOffset est différent de zéro).

[in] pDmaBuffer

Pointeur vers le début de la mémoire tampon DMA (autrement dit, l’adresse virtuelle du début de la mémoire tampon DMA).

[in] DmaBufferSize

Taille, en octets, de la mémoire tampon DMA vers laquelle pDmaBuffer pointe.

Notez que DmaBufferSize représente toute la longueur de la mémoire tampon DMA ; toutefois, la demande de mise à jour corrective ou d’envoi ne peut faire référence qu’à une partie de la mémoire tampon DMA.

[in] DmaBufferSubmissionStartOffset

Décalage, en octets, du début de la mémoire tampon DMA que pDmaBuffer spécifie au début de la partie de la mémoire tampon DMA qui nécessite une mise à jour corrective ou une soumission. Le décalage reçu au moment du correctif correspond au décalage reçu au moment de la soumission.

[in] DmaBufferSubmissionEndOffset

Décalage, en octets, entre le début de la mémoire tampon DMA que pDmaBuffer spécifie jusqu’à la fin de la partie de la mémoire tampon DMA qui nécessite la mise à jour corrective ou l’envoi. Le décalage reçu au moment du correctif correspond au décalage reçu au moment de la soumission.

[in] pDmaBufferPrivateData

Pointeur vers les données privées résidentes du pilote associées à la mémoire tampon DMA vers laquelle pDmaBuffer pointe.

Pour les opérations de pagination, une mémoire tampon de pagination unique est utilisée pour plusieurs soumissions indépendantes. Dans ce scénario, le pilote peut indiquer, en retournant le pointeur de données du pilote privé approprié dans un appel à sa fonction DxgkDdiBuildPagingBuffer , d’avoir une seule plage de données privée de pilote pour toutes les soumissions ou une pour chaque soumission.

[in] DmaBufferPrivateDataSize

Taille, en octets, des données du pilote privé dans pDmaBufferPrivateData.

Notez que DmaBufferPrivateDataSize représente toute la longueur de la mémoire tampon de données du pilote privé ; toutefois, la partie associée à la soumission actuelle peut être plus petite.

[in] DmaBufferPrivateDataSubmissionStartOffset

Décalage, en octets, du début des données privées de la mémoire tampon DMA que pDmaBufferPrivateData spécifie au début de la partie des données privées associées à la soumission en cours. DmaBufferPrivateDataSubmissionStartOffset est toujours égal à zéro pour une requête sans mise en service.

[in] DmaBufferPrivateDataSubmissionEndOffset

Décalage, en octets, du début des données privées de la mémoire tampon DMA que pDmaBufferPrivateData spécifie à la fin de la partie des données privées associée à la soumission actuelle.

[in] pAllocationList

Pointeur vers un tableau de structures DXGK_ALLOCATIONLIST pour la liste des allocations associées à la mémoire tampon DMA vers laquelle pDmaBuffer pointe.

Pour les opérations de pagination, pAllocationList a lavaleur NULL , car les mémoires tampons de pagination ne sont pas associées aux listes d’allocation.

[in] AllocationListSize

Nombre d’éléments dans le tableau spécifié par pAllocationList .

Notez que AllocationListSize représente la taille totale de la liste d’allocations ; toutefois, la partie de la liste d’allocation associée à la soumission actuelle peut être plus petite.

Notez que pour les opérations de pagination AllocationListSize est zéro, car les mémoires tampons de pagination ne sont pas associées à des listes d’allocation.

[in] pPatchLocationList

Pointeur vers un tableau de structures D3DDDI_PATCHLOCATIONLIST pour la liste des emplacements de correctifs associés à la mémoire tampon DMA vers laquelle pDmaBuffer pointe.

Notez que le tableau peut commencer par un élément qui se trouve avant la plage utilisée pour corriger la mémoire tampon DMA.

Pour les opérations de pagination, pPatchLocationList a la valeur NULL , car les mémoires tampons de pagination ne sont pas associées à des listes d’emplacements correctifs.

[in] PatchLocationListSize

Nombre d’éléments dans le tableau spécifié par pPatchLocationList .

Notez que PatchLocationListSize représente la taille totale de la liste patch-location ; toutefois, la plage que le pilote doit traiter est généralement plus petite.

Pour les opérations de pagination, PatchLocationListSize est égal à zéro, car les mémoires tampons de pagination ne sont pas associées à des listes de localisation des correctifs.

[in] PatchLocationListSubmissionStart

Index du premier élément de la liste patch-location que pPatchLocationList spécifie et qui doit être traité.

Pour les opérations de pagination, PatchLocationListSubmissionStart est égal à zéro.

[in] PatchLocationListSubmissionLength

Nombre d’éléments dans la liste d’emplacements correctifs que pPatchLocationList spécifie et qui doivent être traités.

Pour les opérations de pagination, PatchLocationListSubmissionLength est égal à zéro.

[in] SubmissionFenceId

Identificateur unique que le pilote peut écrire dans la commande de clôture à la fin de la mémoire tampon DMA. Pour plus d’informations sur ce type d’identificateur, consultez Fournir des identificateurs de clôture.

[in] Flags

Une structure de DXGK_PATCHFLAGS qui identifie des informations sur la mémoire tampon DMA qui nécessite une mise à jour corrective.

[in] EngineOrdinal

Réservé pour un usage futur.

Remarques

Le pilote miniport d’affichage retourne un tableau dans le membre pAllocationList d’une structure DXGKARG_PRESENT ou DXGKARG_RENDER à partir de sa fonction DxgkDdiPresent ou DxgkDdiRender après avoir traduit la mémoire tampon de commande en mémoire tampon d’accès direct (DMA). Le gestionnaire de mémoire vidéo affecte des adresses physiques aux membres PhysicalAddress des structures DXGK_ALLOCATIONLIST dans le tableau et transmet ce tableau à la fonction DxgkDdiPatch du pilote. DxgkDdiPatch corrige les emplacements dans la mémoire tampon DMA avec ces adresses physiques.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
En-tête d3dkmddi.h (inclure D3dkmddi.h)

Voir aussi

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender