structure DXGI1_2_DDI_BASE_FUNCTIONS (dxgiddi.h)
Contient des pointeurs vers des fonctions qu’un pilote d’affichage wdDM (Windows Display Driver Model) 1.2 et versions ultérieures peut implémenter pour effectuer des tâches de bas niveau, telles que la présentation d’images rendues dans une sortie, le contrôle gamma, l’obtention de notifications concernant les surfaces interopérables GDI (Graphics Device Interface) partagées et Windows, et la gestion d’une transition en plein écran.
Syntaxe
typedef struct DXGI1_2_DDI_BASE_FUNCTIONS {
HRESULT()(DXGI_DDI_ARG_PRESENT *) * pfnPresent;
HRESULT()(DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *) * pfnGetGammaCaps;
HRESULT()(DXGI_DDI_ARG_SETDISPLAYMODE *) * pfnSetDisplayMode;
HRESULT()(DXGI_DDI_ARG_SETRESOURCEPRIORITY *) * pfnSetResourcePriority;
HRESULT()(DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *) * pfnQueryResourceResidency;
HRESULT()(DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *) * pfnRotateResourceIdentities;
HRESULT()(DXGI_DDI_ARG_BLT *) * pfnBlt;
HRESULT()(DXGI_DDI_ARG_RESOLVESHAREDRESOURCE *) * pfnResolveSharedResource;
HRESULT()(DXGI_DDI_ARG_BLT1 *) * pfnBlt1;
HRESULT()(DXGI_DDI_ARG_OFFERRESOURCES *) * pfnOfferResources;
HRESULT()(DXGI_DDI_ARG_RECLAIMRESOURCES *) * pfnReclaimResources;
HRESULT()(DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *) * pfnGetMultiplaneOverlayCaps;
HRESULT()(void *) * pfnGetMultiplaneOverlayFilterRange;
HRESULT()(DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT *) * pfnCheckMultiplaneOverlaySupport;
HRESULT()(DXGI_DDI_ARG_PRESENTMULTIPLANEOVERLAY *) * pfnPresentMultiplaneOverlay;
} DXGI1_2_DDI_BASE_FUNCTIONS;
Membres
pfnPresent
Pointeur vers la fonction PresentDXGI du pilote.
pfnGetGammaCaps
Pointeur vers la fonction GetGammaCapsDXGI du pilote.
pfnSetDisplayMode
Pointeur vers la fonction SetDisplayModeDXGI du pilote.
pfnSetResourcePriority
Pointeur vers la fonction SetResourcePriorityDXGI du pilote.
pfnQueryResourceResidency
Pointeur vers la fonction QueryResourceResidencyDXGI du pilote.
pfnRotateResourceIdentities
Pointeur vers la fonction RotateResourceIdentitiesDXGI du pilote.
pfnBlt
Pointeur vers la fonction BltDXGI du pilote.
Le runtime Direct3D peut définir le membre Flags de la structure DXGI_DDI_ARG_BLT vers laquelle pointe le paramètre pBltData de manière à exiger que la fonction Blt1DXGI effectue une opération de transfert de bloc de bits (bitblt) qui résout les ressources multi-échantillonnées, effectue une conversion au format de couleur et effectue une étirement ou une réduction en même temps. Toutefois, le runtime Direct3D ne définit jamais le membre Flags de DXGI_DDI_ARG_BLT1 sur zéro (c’est-à-dire aucun indicateur défini) ainsi que la valeur DXGI_DDI_MODE_ROTATION_IDENTITY définie dans le membre Pivoter de DXGI_DDI_ARG_BLT1 (c’est-à-dire, pour indiquer qu’il n’y a pas de rotation) pour effectuer une opération de copie en mémoire directe. Au lieu de cela, à moins que les deux ressources ne soient échantillonnées plusieurs, le runtime Direct3D appelle la fonction ResourceCopy ou ResourceCopyRegion(D3D11_1) du pilote pour effectuer une opération de copie en mémoire directe.
La qualité de l’étirement ou du rétrécissement effectué par le pilote d’affichage en mode utilisateur doit être aussi bonne que l’étirement ou le rétrécissement effectué par un filtre bilinéaire.
Le runtime Direct3D appelle rarement la fonction Blt1DXGI du pilote. Autrement dit, le runtime ne doit pas appeler Blt1DXGI plus d’une ou deux fois par image, car le runtime utilise Blt1DXGI principalement pour prendre en charge une présentation.
Lorsque le runtime appelle Blt1DXGI pour une présentation, le runtime définit l’indicateur de champ de bits Présent dans le membre Indicateurs de DXGI_DDI_ARG_BLT1. Le runtime définit l’indicateur de champ de bits présent pour informer le pilote qu’il existe des exigences supplémentaires pour le bitblt et qu’une synchronisation supplémentaire peut être nécessaire (par exemple, le runtime peut avoir besoin d’effectuer une synchronisation supplémentaire dans les configurations d’ordinateur qui contiennent deux cartes graphiques qui gèrent chacune des parties distinctes de l’affichage). Lorsque l’indicateur de champ de bits Présent est défini, le pilote doit effectuer une opération de copie à partir des mémoires tampons arrière d’une application vers la surface partagée du DWM. Étant donné que la synchronisation de ce type d’opération de copie n’est pas exacte, le déchirement des artefacts doit être le pire type d’artefacts qu’un utilisateur rencontre. Pour ce type d’opération de copie, le pilote ne doit pas utiliser une approche multi-passe en résolvant d’abord dans la surface de destination, puis en convertissant les résultats sur place, car les artefacts possibles seraient bien pires.
Si le pilote prend en charge le retour de DXGI_DDI_ERR_UNSUPPORTED lors de la création d’une surface primaire (autrement dit, le retour d’DXGI_DDI_ERR_UNSUPPORTED à partir d’un appel à sa fonction CreateResource(D3D10) avec l’indicateur D3D10_DDI_BIND_PRESENT défini dans le membre BindFlags de D3D10DDIARG_CREATERESOURCE avec le membre pPrimaryDesc de D3D10DDIARG_CREATERESOURCE défini sur non NULL), le pilote doit également prendre en charge la rotation pendant une opération de copie. Si le pilote ne retourne jamais DXGI_DDI_ERR_UNSUPPORTED d’un appel à sa fonction CreateResource(D3D10) ou CreateResource(D3D11), le runtime ne transmet jamais la valeur DXGI_DDI_MODE_ROTATION_ROTATE90, DXGI_DDI_MODE_ROTATION_ROTATE180 ou DXGI_DDI_MODE_ROTATION_ROTATE270 au membre Rotate de DXGI_DDI_ARG_BLT1. Par conséquent, dans ce cas, la fonction Blt1DXGI du pilote n’est pas nécessaire pour prendre en charge la rotation.
Le runtime définit une valeur dans le membre Pivoter de DXGI_DDI_ARG_BLT1 pour indiquer le nombre de degrés à faire pivoter dans le sens inverse des aiguilles d’une montre le contenu de la source avant que le pilote ne copie le contenu vers la destination. La rotation est spécifiée par incréments de 90 degrés.
Notes
Lorsque la fonction Blt1DXGI du pilote copie le contenu au format sRGB d’une surface source vers une surface de destination non sRGB, le pilote doit copier le contenu sRGB inchangé (autrement dit, le pilote ne doit pas effectuer la conversion sRGB en une conversion linéaire).
Restrictions de source
La fonction Blt1DXGI utilise toujours une sous-source entière (par opposition à une zone sous-rectangulaire) pour effectuer l’opération bitblt. En outre, la source est une représentation D3D10DDIRESOURCE_TEXTURE2D (spécifiée dans le membre ResourceDimension de D3D10DDIARG_CREATERESOURCE ou D3D11DDIARG_CREATERESOURCE lorsque la source est créée dans un appel à la fonction CreateResource (D3D10) ou CreateResource(D3D11) du pilote d’affichage, respectivement). Lorsque le runtime définit le champ de bits Résoudre dans le membre Flags de DXGI_DDI_ARG_BLT1, la source est une ressource multi-échantillonnées. La ressource source est limitée à une ressource dans laquelle l’indicateur D3D10_DDI_BIND_PRESENT a été défini dans le membre BindFlags de D3D10DDIARG_CREATERESOURCE ou D3D11DDIARG_CREATERESOURCE. Le format de la source (spécifié dans le membre Format de D3D10DDIARG_CREATERESOURCE ou D3D11DDIARG_CREATERESOURCE) est limité aux formats de mode d’affichage, spécifiés par les valeurs suivantes de l’énumération DXGI_FORMAT :
- DXGI_FORMAT_B5G6R5_UNORM
- DXGI_FORMAT_B5G5R5A1_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM (voir la note ci-dessous))
- DXGI_FORMAT_B8G8R8X8_UNORM
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
Notes
Si le pilote prend en charge le format source DXGI_FORMAT_B8G8R8A8_UNORM, les restrictions suivantes s’appliquent :
- Lorsque le pilote effectue une opération bitblt d’un format à virgule flottante vers un format entier tel que BGRA8888, il doit encoder implicitement gamma dans les résultats.
- À l’inverse, lorsque le pilote effectue une opération bitblt d’un format entier vers un format à virgule flottante, il doit supprimer implicitement l’encodage gamma des résultats.
Restrictions de destination
La destination est également une représentation D3D10DDIRESOURCE_TEXTURE2D . Le format de la destination est également limité aux formats de mode d’affichage. La ressource de destination est limitée à une ressource liée en tant que cible de rendu (D3D10_DDI_BIND_RENDER_TARGET définie dans le membre BindFlags de D3D10DDIARG_CREATERESOURCE ou D3D11DDIARG_CREATERESOURCE).
Création d’une mémoire tampon d’arrière stéréo
À compter de Windows 8, si le pilote doit créer une mémoire tampon d’arrière stéréo, il doit définir les membres de la structure D3D10DDIARG_CREATERESOURCE ou D3D11DDIARG_CREATERESOURCE, respectivement, pointés vers le paramètre pCreateResource des fonctions CreateResource(D3D10) ou CreateResource(D3D11), comme suit :
- Définissez le membre ArraySize sur la valeur 2.
- Définissez la valeur d’indicateur D3D10_DDI_BIND_PRESENT dans le membre BindFlags .
En outre, pour prendre en charge la présentation stéréo, la fonction BltDXGI doit autoriser toutes les valeurs pour les membres DstSubresource et SrcSubresource de la structure DXGI_DDI_ARG_BLT qui se trouvent dans la plage des ressources source et de destination.
pfnResolveSharedResource
Pointeur vers la fonction ResolveSharedResourceDXGI du pilote.
pfnBlt1
Pointeur vers la fonction Blt1DXGI du pilote.
pfnOfferResources
Pointeur vers la fonction pfnOfferResources du pilote.
pfnReclaimResources
Appelé par le runtime DXGI pour récupérer les ressources de mémoire vidéo que le pilote d’affichage en mode utilisateur offrait précédemment pour réutilisation. Implémenté par les pilotes d’affichage en mode utilisateur WDDM 1.2 et versions ultérieures.
pfnGetMultiplaneOverlayCaps
Appelé par le runtime DXGI (Microsoft DirectX Graphics Infrastructure) pour demander au pilote d’affichage en mode utilisateur d’obtenir les fonctionnalités de base du plan de superposition. Implémenté éventuellement par les pilotes d’affichage en mode utilisateur Windows (WDDM) 1.3 et versions ultérieures. La syntaxe de pfnGetMultiplaneOverlayCaps est la suivante :
pfnGetMultiPlaneOverlayCaps GetMultiPlaneOverlayCaps;
HRESULT __stdcall* GetMultiPlaneOverlayCaps(
DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *pCaps
)
{ ... }
Le paramètre pCaps est un pointeur vers une structure DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS qui spécifie les fonctionnalités du plan de superposition.
pfnGetMultiplaneOverlayCaps retourne l’une des valeurs suivantes :
- S_OK : le pilote a correctement fourni les fonctionnalités de plan de superposition.
- D3DDDIERR_DEVICEREMOVED : le pilote a détecté que l’adaptateur d’affichage a été supprimé, de sorte que le pilote n’a pas terminé l’opération. Si le pilote n’est pas au courant de la suppression de l’adaptateur, il n’est pas nécessaire de retourner ce code d’erreur.
pfnGetMultiplaneOverlayFilterRange
Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.1.
pfnCheckMultiplaneOverlaySupport
Appelé par le runtime DXGI (Microsoft DirectX Graphics Infrastructure) pour case activée les détails de la prise en charge matérielle des superpositions multiplanes. La syntaxe de pfnCheckMultiplaneOverlaySupport est la suivante :
PFND3DDDI_CHECKMULTIPLANEOVERLAYSUPPORT pfnCheckMultiplaneOverlaySupport;
HRESULT __stdcall* pfnCheckMultiplaneOverlaySupport(
D3DDDIARG_CHECKMULTIPLANEOVERLAYSUPPORT *pSupport
)
{ ... }
Le paramètre pSupport est un pointeur vers une structure DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT qui décrit comment s’afficher sur l’aire de destination.
Si pfnCheckMultiplaneOverlaySupport réussit, il retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.
pfnPresentMultiplaneOverlay
Pointeur vers la fonction pfnPresentMultiplaneOverlay (DXGI) du pilote. Pris en charge à partir de Windows 8.1.
pSupport
Pointeur vers une structure de DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT qui décrit comment s’afficher sur l’aire de destination.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8, WDDM 1.2 |
Serveur minimal pris en charge | Windows Server 2012 |
En-tête | dxgiddi.h (include D3d10umddi.h) |