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) |