Exiger rétroactivement Free-Threaded DDIS CalcPrivate
Direct3D version 11 nécessite rétroactivement des fonctions de pilote d’affichage en mode utilisateur qui commencent par pfnCalcPrivate sur Direct3D version 10 fonctions DDI qui sont à thread libre. Cette exigence rétroactive correspond au comportement de Direct3D version 11 DDI pour exiger toujours les fonctions pfnCalcPrivate* et pfnCalcDeferredContextHandleSize qui sont libres même si le pilote indique qu’il ne prend pas en charge le thread DDI. Pour plus d’informations sur la façon dont le pilote indique la prise en charge des threads, consultez Prise en charge du threading, des listes de commandes et du pipeline 3D. La raison de cette exigence rétroactive est que ces fonctions sont généralement très simples, car elles retournent une valeur immédiate pour la taille. Les fonctions les plus complexes déterminent la valeur immédiate à retourner en fonction des paramètres passés à la fonction. L’exigence pour les fonctions qui commencent par pfnCalcPrivate d’écrire réellement des données dans des emplacements autres que la pile n’existe pas. La nécessité pour ces fonctions de lire des données autres que les paramètres est une rareté. Toute exigence de lecture des données ne génère pas de problèmes de contention. Ce fait permet à l’API Direct3D version 11 d’effectuer une optimisation indispensable et d’éviter d’effectuer une synchronisation coûteuse deux fois par création (par exemple, tout appel à créer un objet comme un appel à CreateResource(D3D10) ou CreateGeometryShader), au lieu d’une seule fois.
Une exception notable à cette exigence de thread libre rétroactif est la fonction CalcPrivateDeviceSize qui est utilisée pour satisfaire la création d’appareils d’affichage. CalcPrivateDeviceSize se trouve sur la table de fonction de l’adaptateur (D3D10_2DDI_ADAPTERFUNCS ou D3D10DDI_ADAPTERFUNCS). CalcPrivateDeviceSize ne se trouve pas sous le groupe de fonctions qui ont connu la relaxation dans le modèle de threading. Il n’est pas nécessaire de libérer la fonction CalcPrivateDeviceSize .