Considérations sur les performances de l'interopérabilité entre Direct3D9 et WPF

Vous pouvez héberger du contenu Direct3D9 à l’aide de la D3DImage classe. 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 D3DImage et les meilleures pratiques lorsque vous utilisez Des écrans Windows Vista, Windows XP et multi-moniteurs.

Remarque

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 D3DImage instance 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 augmente, davantage de D3DImage 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 wdDM (Windows Display Driver Model), créez votre surface Direct3D9 sur un IDirect3DDevice9Ex appareil. Cela permet le partage de surface. La vidéo carte doit prendre en charge les fonctionnalités et D3DCAPS2_CANSHARERESOURCE les fonctionnalités du D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES pilote 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.

Remarque

Si Windows Vista dispose d’un affichage configuré pour utiliser le modèle de pilote d’affichage Windows XP (XDDM), l’aire est toujours copiée par le biais de logiciels, quel que soit les paramètres. Avec les paramètres appropriés et les carte vidéo, 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 IDirect3DSurface9::GetDC méthode est appelée. En interne, la BitBlt méthode transfère la surface sur les appareils du matériel. La GetDC méthode fonctionne toujours sur les 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 vidéo carte doit prendre en charge la fonctionnalité du D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES pilote.

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. De plus, sur Windows XP utilise D3DImage 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.

Remarque

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 D3DCREATE_MULTITHREADED création. Cela réduit les performances, mais les méthodes d’appel du système de rendu WPF sur cet appareil à partir d’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 D3DCREATE_FPU_PRESERVE création. 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.

Tiling a 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 wdDM avec plusieurs carte vidéo et avec un IDirect3DDevice9Ex appareil, si la mémoire tampon frontale se trouve sur un autre adaptateur, mais toujours la même vidéo carte, aucune pénalité de performances n’est appliquée. Toutefois, sur Windows XP et le XDDM avec plusieurs carte 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 celui de la mémoire tampon arrière. Pour plus d’informations, consultez WPF et Direct3D9 Interoperation.

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 Correctif logiciel windows XP SP3 ou SP2 Windows XP SP2
D3D OGF_X8R8G8B8 (non verrouillable) Mise à jour matérielle Mise à jour logicielle Mise à jour logicielle Mise à jour logicielle
D3D OGF_X8R8G8B8 (verrouillable) Mise à jour matérielle Mise à jour logicielle Mise à jour matérielle Mise à jour matérielle
D3D OGF_A8R8G8B8 (non verrouillable) Mise à jour matérielle Mise à jour logicielle Mise à jour logicielle Mise à jour logicielle
D3D OGF_A8R8G8B8 (verrouillable) Mise à jour matérielle Mise à jour logicielle Mise à jour matérielle Mise à jour logicielle

Voir aussi