Considérations relatives aux performances pour l’interopérabilité Direct3D9 et WPF
Vous pouvez héberger du contenu Direct3D9 à l’aide de la classe D3DImage. L’hébergement de contenu Direct3D9 peut affecter les performances de votre application. Cette rubrique décrit les meilleures pratiques pour optimiser les performances lors de l’hébergement de contenu Direct3D9 dans une application WPF (Windows Presentation Foundation). Ces meilleures pratiques incluent l’utilisation de D3DImage et les meilleures pratiques lorsque vous utilisez Des écrans Windows Vista, Windows XP et multi-moniteurs.
Note
Pour obtenir des exemples de code illustrant ces meilleures pratiques, consultez WPF et Direct3D9 Interoperation.
Utiliser D3DImage avec parcimonie
Le contenu Direct3D9 hébergé dans une instance de D3DImage ne s’affiche pas aussi rapidement que dans une application Direct3D pure. La copie de la surface et le vidage de la mémoire tampon de commande peuvent être des opérations coûteuses. À mesure que le nombre d’instances D3DImage augmente, davantage de vidage se produit et les performances se dégradent. Par conséquent, vous devez utiliser D3DImage avec parcimonie.
Meilleures pratiques sur Windows Vista
Pour des performances optimales sur Windows Vista avec un affichage configuré pour utiliser le modèle de pilote d’affichage Windows (WDDM), créez votre surface Direct3D9 sur un appareil IDirect3DDevice9Ex
. Cela permet le partage de surface. La carte vidéo doit prendre en charge les fonctionnalités du pilote D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
et D3DCAPS2_CANSHARERESOURCE
sur Windows Vista. Tous les autres paramètres entraînent la copie de la surface par le biais de logiciels, ce qui réduit considérablement les performances.
Note
Si Windows Vista dispose d’un affichage configuré pour utiliser le modèle de pilote d’affichage Windows XP (XDDM), la surface est toujours copiée par le biais du logiciel, quels que soient les paramètres. Avec les paramètres et la carte vidéo appropriés, vous verrez de meilleures performances sur Windows Vista lorsque vous utilisez wdDM, car les copies de surface sont effectuées dans le matériel.
Meilleures pratiques sur Windows XP
Pour des performances optimales sur Windows XP, qui utilise le modèle de pilote d’affichage Windows XP (XDDM), créez une surface verrouillée qui se comporte correctement lorsque la méthode IDirect3DSurface9::GetDC
est appelée. En interne, la méthode BitBlt
transfère la surface entre les systèmes dans le matériel. La méthode GetDC
fonctionne toujours sur des surfaces XRGB. Toutefois, si l’ordinateur client exécute Windows XP avec SP3 ou SP2 et si le client dispose également du correctif logiciel pour la fonctionnalité de fenêtre superposée, cette méthode fonctionne uniquement sur les surfaces ARGB. La carte vidéo doit prendre en charge la fonctionnalité de pilote D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
.
Une profondeur d’affichage de bureau 16 bits peut réduire considérablement les performances. Un bureau 32 bits est recommandé.
Si vous développez pour Windows Vista et Windows XP, testez les performances sur Windows XP. L’épuisement de la mémoire vidéo sur Windows XP est un problème. En outre, D3DImage sur Windows XP utilise plus de mémoire vidéo et de bande passante que Windows Vista WDDM, en raison d’une copie de mémoire vidéo supplémentaire nécessaire. Par conséquent, vous pouvez vous attendre à ce que les performances soient pires sur Windows XP que sur Windows Vista pour le même matériel vidéo.
Note
XDDM est disponible sur Windows XP et Windows Vista ; toutefois, WDDM est disponible uniquement sur Windows Vista.
Bonnes pratiques générales
Lorsque vous créez l’appareil, utilisez l’indicateur de création D3DCREATE_MULTITHREADED
. Cela réduit les performances, mais le système de rendu WPF appelle des méthodes sur cet appareil depuis un autre thread. Veillez à suivre correctement le protocole de verrouillage afin qu’aucun thread n’accède à l’appareil en même temps.
Si votre rendu est effectué sur un thread managé WPF, il est fortement recommandé de créer l’appareil avec l’indicateur de création D3DCREATE_FPU_PRESERVE
. Sans ce paramètre, le rendu D3D peut réduire la précision des opérations de double précision WPF et introduire des problèmes de rendu.
La mosaïque d’un D3DImage est rapide, sauf si vous vignettez une surface non-pow2 sans prise en charge matérielle, ou si vous vignettez un DrawingBrush ou VisualBrush qui contient un D3DImage.
Meilleures pratiques pour les affichages multi-moniteur
Si vous utilisez un ordinateur doté de plusieurs moniteurs, vous devez suivre les meilleures pratiques décrites précédemment. Il existe également des considérations supplémentaires en matière de performances pour une configuration multi-moniteur.
Lorsque vous créez la mémoire tampon d’arrière-plan, elle est créée sur un appareil et une carte spécifiques, mais WPF peut afficher la mémoire tampon frontale sur n’importe quel adaptateur. La copie entre les adaptateurs pour mettre à jour la mémoire tampon frontale peut être très coûteuse. Sur Windows Vista configuré pour utiliser le WDDM avec plusieurs cartes vidéo et un appareil IDirect3DDevice9Ex
, si le tampon avant se trouve sur un adaptateur différent mais toujours sur la même carte vidéo, il n’y a aucune pénalité de performance. Toutefois, sur Windows XP et le XDDM avec plusieurs cartes vidéo, il existe une pénalité significative des performances lorsque la mémoire tampon frontale est affichée sur un adaptateur différent de la mémoire tampon arrière. Pour plus d’informations, consultez WPF et Direct3D9 Interopération.
Résumé des performances
Le tableau suivant présente les performances de la mise à jour de la mémoire tampon frontale en tant que fonction du système d’exploitation, du format de pixels et de la verrouillage de la surface. La mémoire tampon frontale et la mémoire tampon arrière sont supposées se trouver sur le même adaptateur. Selon la configuration de l’adaptateur, les mises à jour matérielles sont généralement beaucoup plus rapides que les mises à jour logicielles.
Format de pixel surface | Windows Vista, WDDM et 9Ex | Autres configurations Windows Vista | Windows XP SP3 ou SP2 avec correctif | Windows XP SP2 |
---|---|---|---|---|
D3DFMT_X8R8G8B8 (non verrouillable) | Mise à jour matérielle | Mise à jour logicielle | Mise à jour logicielle | Mise à jour logicielle |
D3DFMT_X8R8G8B8 (verrouillable) | Mise à jour matérielle | Mise à jour logicielle | Mise à jour matérielle | de mise à jour matérielle |
D3DFMT_A8R8G8B8 (non verrouillable) | Mise à jour du matériel | Mise à jour logicielle | Mise à jour logicielle | Mise à jour logicielle |
D3DFMT_A8R8G8B8 (verrouillable) | Mise à jour du matériel | Mise à jour logicielle | mise à jour matérielle | Mise à jour logicielle |
Voir aussi
- D3DImage
- Interopérabilité entre WPF et Direct3D9
- Guide pratique : création de contenu Direct3D9 pour l’hébergement dans WPF
- procédure pas à pas : hébergement de contenu Direct3D9 dans WPF
.NET Desktop feedback