Partager via


DXGKDDI_ACQUIRESWIZZLINGRANGE fonction de rappel (d3dkmddi.h)

La fonction DxgkDdiAcquireSwizzlingRange rend une allocation accessible via l’ouverture de l’unité de traitement centrale (UC) pour le segment donné.

Syntaxe

DXGKDDI_ACQUIRESWIZZLINGRANGE DxgkddiAcquireswizzlingrange;

NTSTATUS DxgkddiAcquireswizzlingrange(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_ACQUIRESWIZZLINGRANGE pAcquireSwizzlingRange
)
{...}

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/out] pAcquireSwizzlingRange

Pointeur vers une structure DXGKARG_ACQUIRESWIZZLINGRANGE qui contient des informations pour rendre une allocation accessible via l’ouverture du processeur.

Valeur de retour

DxgkDdiAcquireSwizzlingRange retourne l’une des valeurs suivantes :

Retourner le code Description
STATUS_SUCCESS DxgkDdiAcquireSwizzlingRange rendu l’allocation accessible.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED DxgkDdiAcquireSwizlingRange n’a pas pu programmer la plage swizzling pour l’allocation. Le gestionnaire de mémoire vidéo ne parvient pas à acquérir la plage swizzling sans effectuer d’autres tentatives.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE DxgkDdiAcquireSwizzlingRange n’a pas pu programmer la plage swizzling pour l’allocation, car une autre plage swizzling utilise actuellement les ressources d’unité de traitement graphique (GPU) requises. Le gestionnaire de mémoire vidéo tente de libérer une plage actuellement en cours d’utilisation, puis tente de configurer à nouveau la plage swizzling.

Remarques

La fonction DxgkDdiAcquireSwizzlingRange est appelée après que le pilote d’affichage en mode utilisateur demande une adresse virtuelle qui référence les bits d’une allocation (autrement dit, après que le pilote d’affichage en mode utilisateur appelle la fonction pfnLockCb avec l’indicateur de AcquireAperture bit-field défini dans les indicateurs membre de la structure D3DDDICB_LOCK et pendant que l’allocation se trouve actuellement dans un segment de mémoire accessible au processeur). Si l’indicateur AcquireAperture bit-field n’est pas défini dans l’appel à pfnLockCb, DxgkDdiAcquireSwizlingRange n’est pas appelé, et l’allocation doit être dans un format que le pilote d’affichage en mode utilisateur ou une application peut traiter.

Quand DxgkDdiAcquireSwizzlingRange est appelé, le pilote de miniport d’affichage doit rendre l’allocation spécifiée (autrement dit, le membre hAllocation de la structure DXGKARG_ACQUIRESWIZZLINGRANGE que le pAcquireSwizzlingRange points de paramètre) accessible via l’ouverture du processeur pour le segment spécifié (autrement dit, le SegmentId membre de DXGKARG_ACQUIRESWIZZLINGRANGE). L’allocation doit apparaître exactement comme elle apparaît dans la mémoire de l’ordinateur après une éviction non dynamique.

Toutes les demandes du pilote d’affichage en mode utilisateur ne sont pas accessibles au pilote miniport d’affichage. Plages swizzling que le gestionnaire de mémoire vidéo acquis sont mises en cache en fonction de l’allocation à laquelle ils sont associés et des données privées spécifiées. Lors de la première requête du pilote d’affichage en mode utilisateur pour accéder à une allocation, la fonction DxgkDdiAcquireSwizzlingRange du pilote display miniport est appelée pour rendre l’allocation accessible. Lors des demandes suivantes avec des données privées correspondantes, le mappage de configuration précédemment est utilisé pour accéder à l’allocation.

Le gestionnaire de mémoire vidéo appelle la fonction d’affichage du pilote miniport DxgkDdiReleaseSwizzlingRange pour libérer une plage swizzling lorsqu’une allocation est supprimée ou détruite, ou quand une autre allocation nécessite une ouverture. Une allocation peut être associée à n’importe quel nombre de plages swizzling (par exemple, une ouverture par niveau MIP).

Le nombre de plages swizzling qu’un adaptateur prend en charge est exposé par le pilote dans le NumberOfSwizzlingRanges membre de la structure DXGK_DRIVERCAPS lorsque la fonction DxgkDdiQueryAdapterInfo du pilote est appelée. Toutes les plages sont égales (autrement dit, n’importe quelle plage peut annuler ou jusqu’à n’importe quel type de mosaïque ou de mosaïque). Le gestionnaire de mémoire vidéo arbitre les plages swizzling disponibles parmi toutes les applications qui les nécessitent.

Le pilote doit utiliser les E/S mappées en mémoire (MMIO) pour configurer une plage swizzling. Ces accès swizzling-range ne doivent pas interférer avec l’exécution du GPU (autrement dit, le GPU ne doit pas être inactif quand DxgkDdiAcquireSwizzlingRange est appelé).

Tous les appels à DxgkDdiAcquireSwizzlingRange sont sérialisés entre eux, mais pas avec une autre fonction DDI.

Si le GPU prend en charge des plages swizzling qui redirigent l’accès au processeur vers des segments de mémoire non accessibles au processeur ou à la mémoire système, le pilote d’affichage en mode utilisateur peut définir la combinaison d’indicateurs de AcquireAperture et d'UseAlternateVA indicateurs de bits dans les indicateurs membre de la structure D3DDDICB_LOCK dans un appel à la fonction pfnLockCb pour verrouiller l’allocation. Dans ce cas, le gestionnaire de mémoire vidéo appelle la du pilote miniport d’affichage DxgkDdiAcquireSwizzlingRange fonction pour acquérir une plage swizzling pour l’allocation, même si l’allocation se trouve dans un segment de mémoire non accessible par l’UC ou un segment d’ouverture. Les plages swizzling sont associées à certaines ressources GPU (par exemple, les plages d’ouverture PCI) que le pilote gère et ne sont pas accessibles ou comptabilisées par le gestionnaire de mémoire vidéo.

Un appel à DxgkDdiAcquireSwizzlingRange pour acquérir une plage swizzling peut échouer, car une ressource gérée par le pilote a expiré. Bien que la plage swizzling elle-même soit gratuite, elle peut ne pas être utilisable en raison de la ressource manquante. Le pilote peut indiquer qu’une plage swizzling n’est pas disponible pour le gestionnaire de mémoire vidéo en retournant STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE à partir de DxgkDdiAcquireSwizzlingRange. Le gestionnaire de mémoire vidéo tente ensuite de libérer une plage swizzling actuellement utilisée, puis appelle la DxgkDdiAcquireSwizlingRange fonction pour configurer la nouvelle plage swizzling. Si toutes les plages swizzling sont libérées et que le pilote échoue toujours avec STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE, le gestionnaire de mémoire vidéo ne parvient pas à acquérir une plage swizzling pour l’allocation.

DxgkDdiAcquireSwizzlingRange doit être rendu paginable.

Exigences

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

Voir aussi

D3DDDICB_LOCK

DXGKARG_ACQUIRESWIZZLINGRANGE

DXGK_DRIVERCAPS

DxgkDdiAddDevice

DxgkDdiCreateAllocation

DxgkDdiQueryAdapterInfo

DxgkDdiReleaseSwizzlingRange

pfnLockCb