Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette section s’applique uniquement aux systèmes d’exploitation Windows 7 et ultérieurs.
Un pilote d’affichage en mode utilisateur qui s’exécute sur Windows Vista et versions ultérieures et Windows Server 2008 et versions ultérieures doivent échouer à la création de l’adaptateur (autrement dit, échouer un appel à la fonction OpenAdapter10 du pilote) pour les versions DDI que le pilote ne prend pas explicitement en charge.
Windows 7 permet aux applications Direct3D de découvrir les versions et fonctionnalités matérielles DDI prises en charge explicitement par le pilote. Cela améliore la vérification de version. Windows 7 introduit de nouvelles fonctions spécifiques à l’adaptateur pour améliorer le contrôle de version et offrir la possibilité d’optimiser l’initialisation des API et des pilotes. Vous devez implémenter et exporter la fonction OpenAdapter10_2 dans votre pilote Direct3D version 10.1 afin que le runtime Direct3D puisse appeler les nouvelles fonctions spécifiques à l’adaptateur du pilote. Si vous implémentez plutôt OpenAdapter10 dans votre pilote Direct3D version 10.1, le pilote peut indiquer uniquement s’il prend en charge une version DDI en passant ou en échouant l’appel à OpenAdapter10.
OpenAdapter10_2 renvoie une table des fonctions du pilote spécifiques à l’adaptateur dans le membre pAdapterFuncs_2 de la structure D3D10DDIARG_OPENADAPTER. pAdapterFuncs_2 pointe vers une structure de D3D10_2DDI_ADAPTERFUNCS . Le runtime Direct3D appelle la fonction GetSupportedVersions spécifique à l’adaptateur du pilote pour rechercher les versions et les fonctionnalités matérielles DDI prises en charge par le pilote. GetSupportedVersions retourne les versions DDI et les capacités matérielles sous forme d'un tableau de valeurs de 64 bits. L’exemple de code suivant montre une implémentation GetSupportedVersions :
// Array of 64-bit values that are defined in D3d10umddi.h
const UINT64 c_aSupportedVersions[] = {
D3D10_0_7_DDI_SUPPORTED, // 10.0 on Windows 7
D3D10_0_DDI_SUPPORTED, // 10.0 on Windows Vista
D3D10_1_x_DDI_SUPPORTED, // 10.1 with all extended
// format support (but not
// Windows 7 scheduling)
};
HRESULT APIENTRY GetSupportedVersions(
D3D10DDI_HADAPTER hAdapter,
__inout UINT32* puEntries,
__out_ecount_opt( *puEntries )
UINT64* pSupportedDDIInterfaceVersions)
)
{
const UINT32 uEntries = ARRAYSIZE( c_aSupportedVersions );
if (pSupportedDDIInterfaceVersions &&
*puEntries < uEntries)
{
return HRESULT_FROM_WIN32( ERROR_INSUFFICIENT_BUFFER );
}
// Determine concise hardware support from kernel, cache with hAdapter.
// pfnQueryAdapterInfoCb( hAdapter, ... )
*puEntries = uEntries;
if (pSupportedDDIInterfaceVersions)
{
UINT64* pCurEntry = pSupportedDDIInterfaceVersions;
memcpy( pCurEntry, c_aSupportedVersions, sizeof( c_aSupportedVersions ) );
pCurEntry += ARRAYSIZE( c_aSupportedVersions );
assert( pCurEntry - pSupportedDDIInterfaceVersions == uEntries );
}
return S_OK;
}
Un pilote Direct3D version 10.1 n’est pas nécessaire pour vérifier les valeurs transmises aux membres de l’interface et de la version de D3D10DDIARG_OPENADAPTER dans un appel à sa fonction OpenAdapter10_2 même si ces valeurs contiennent des informations de version DDI avec lesquelles initialiser le pilote. Le pilote peut renvoyer la version DDI et les fonctionnalités matérielles via un appel à sa fonction GetSupportedVersions.
Le runtime Direct3D peut transmettre des valeurs aux membres Interface et Version de D3D10DDIARG_CREATEDEVICE dans un appel de la fonction CreateDevice(D3D10) du pilote, qui sont différentes de celles que le runtime a transmises à la fonction OpenAdapter10_2. Le runtime transmet des valeurs aux membres Interface et Version de D3D10DDIARG_CREATEDEVICE qui sont basées sur la version DDI et les capacités matérielles que le pilote a renvoyées via GetSupportedVersions au runtime. Le pilote n’est pas nécessaire pour valider les valeurs transmises aux membres d’interface et de version de D3D10DDIARG_CREATEDEVICE, car le pilote a déjà indiqué la prise en charge de ces valeurs via sa fonction GetSupportedVersions .
Si vous transférez votre pilote de Direct3D version 10.0 vers Direct3D version 10.1, vous devez convertir le pilote pour surveiller uniquement les membres interface et version passés à CreateDevice(D3D10) au lieu de OpenAdapter10_2. Vous devez analyser les implémentations de fonction CalcPrivateDeviceSize et CreateDevice(D3D10) dans votre pilote porté pour vous assurer qu’il n’existe aucune hypothèse sur les valeurs des membres Interface et Version pour CreateDevice (D3D10) correspondant aux valeurs des membres interface et Version pour OpenAdapter10_2.
NotezOpenAdapter10_2 a la même signature de fonction que OpenAdapter10 (autrement dit, PFND3D10DDI_OPENADAPTER définie dans l’en-tête D3d10umddi.h ). Vous pouvez implémenter les deux fonctions dans la même DLL de pilote d’affichage en mode utilisateur.