Share via


API graphiques dans Windows

Windows Vista inclut la prise en charge d’un tout nouveau modèle de pilote d’affichage qui représente une révision majeure de la conception des pilotes vidéo depuis l’introduction du modèle de pilote Windows (WDM) pour Windows 98. Ce modèle repensé reflète l’évolution du matériel vidéo du monde des opérations raster 2D et des applications GDI à celui des jeux 3D avec du matériel graphique à fonction fixe, et enfin à celle de l’unité de traitement graphique programmable (GPU) moderne qui prend en charge un large éventail d’applications graphiques hautes performances. Windows 7 et Windows 8 s’appuient sur l’infrastructure graphique Windows Vista en fournissant des fonctionnalités graphiques et des API supplémentaires. Cet article traite des fonctionnalités et DES API graphiques Windows.

Arrière-plan

L’API principale pour la programmation de graphiques depuis les premiers jours de Windows a été l’interface d’appareil graphique (GDI). Cette API a été conçue pour gérer de nombreux appareils de sortie 2D et elle a constitué la base de l’expérience d’interface utilisateur Windows. DirectDraw et Direct3D ont été introduits en tant qu’API alternatives pour prendre en charge les jeux en plein écran et le rendu 3D en tant qu’extensions du matériel existant de l’époque. Les interactions avec GDI ont été compliquées. Le mélange efficace d’éléments GDI traditionnels avec des éléments Direct3D a été limité par cette conception. La version Windows XP de WDM, appelée XPDM, reflète la nature côte à côte de GDI et Direct3D (voir figure 1).

Figure 1. API graphiques dans Windows XP

xpdm

Au fil des ans, la puissance des cartes vidéo 3D a considérablement augmenté au point que la grande majorité du matériel est dédiée à cette fonction. Un nouveau modèle de pilote, le modèle WDDM (Windows Display Driver Model), met le GPU et Direct3D au premier plan, ce qui permet de créer une expérience entièrement nouvelle, le bureau 3D, qui combine en toute transparence le monde 2D de GDI avec la puissance des GPU programmables modernes. Avec WDDM, le matériel vidéo est entièrement piloté par Direct3D, et toutes les autres interfaces graphiques communiquent avec le matériel vidéo via le nouveau modèle de pilote centré sur Direct3D (voir figure 2).

Figure 2 : API graphiques dans Windows Vista

Wddm

Pour plus d’informations sur WDDM, consultez Guide de conception du modèle WDDM (Windows Vista Display Driver Model) sur MSDN.

Direct3D 9

La version 9 de DirectX a été publiée pour la première fois pour Windows en 2002, avec des mises à jour ultérieures en 2003 et 2004. Cette API représente une décennie d’évolution des technologies DirectX, l’introduction de modèles de programmation de nuanceurs plus puissants pour Direct3D et une maturité soutenue par des milliers de titres d’expédition. Direct3D 9 est l’interface graphique principale sur Windows Vista. Elle reste l’API idéale à utiliser pour écrire des jeux et des applications 3D qui doivent s’exécuter sur la large gamme de matériels existants et de versions windows. Les détails du nouveau modèle de pilote sont cachés aux applications utilisant les interfaces Direct3D 9, mais en arrière-plan, le système d’exploitation tire pleinement parti des nouvelles fonctionnalités pour fournir un véritable multitâche du GPU, une gestion des ressources plus efficace et des performances robustes.

Pour garantir la compatibilité totale avec les versions antérieures de Windows, certaines bizarreries de l’ancien modèle de pilote doivent être émulées même avec le nouveau modèle de pilote d’affichage Windows Vista. Par exemple, lorsqu’une application plein écran perd le focus, elle doit supposer qu’elle a perdu toutes les ressources en mémoire vidéo (VRAM) et recharger celles qu’elle a créées en tant que ressources non managées même si le nouveau modèle de pilote gère les ressources de manière transparente sans les évincer du contexte de l’appareil. Même le concept d’un type de ressource managé ou par défaut est spécifique à l’ancien modèle de pilote. Un autre exemple est l’attente d’échec lors de l’allocation de ressources non managées (pool par défaut) au-delà de la quantité de VRAM disponible, même si le nouveau modèle de pilote peut fournir une quantité presque illimitée de mémoire vidéo virtuelle. En raison de ces exigences, les applications Direct3D s’exécutant sur Windows Vista recevront toujours ces conditions d’erreur. Par conséquent, ils sont limités dans leur capacité à utiliser les interfaces Direct3D 9 de base pour utiliser pleinement certaines fonctionnalités du nouveau modèle de pilote.

Bien que les nouveaux systèmes fournis avec Windows Vista incluent des cartes vidéo avec des pilotes WDDM, et que de nouveaux pilotes pour un certain nombre de cartes vidéo populaires sont inclus dans la boîte, Windows Vista continue de prendre en charge la possibilité d’utiliser des pilotes XPDM plus anciens pour les mises à niveau et les éditions d’entreprise. Sur les systèmes utilisant l’ancien modèle de pilote, Direct3D 9 et les interfaces plus anciennes doivent être utilisées, et le fonctionnement du système graphique est très similaire à celui de Windows XP (Figure 1). WDDM est requis pour que les applications utilisent Direct3D 9Ex, Direct3D 10 et versions ultérieures.

Direct3D 9Ex

L’interface Direct3D 9Ex permet d’accéder à une légère extension de l’API Direct3D 9 standard qui expose l’allocation de ressources virtualisée, la nouvelle sémantique de l’appareil perdu et d’autres nouvelles fonctionnalités disponibles lors de l’exécution sur Windows Vista. En créant cet objet étendu, l’API Direct3D 9 utilise la nouvelle sémantique et exige donc que l’application utilise une logique différente (et donc des chemins de code différents) pour la création, la gestion et la gestion des erreurs pour de nouveaux types de conditions. Cette API n’est disponible que sur Windows Vista et nécessite des pilotes WDDM. Étant donné que Direct3D 9Ex utilise une API et un chemin de code de pilote distincts par rapport à Direct3D 9, la prise en charge de cette API nécessite des cas de test supplémentaires pour votre application.

La principale raison de la création de l’API Direct3D 9Ex était d’autoriser l’accès complet aux nouvelles fonctionnalités de WDDM tout en conservant la compatibilité pour les applications Direct3D existantes. Le nouveau bureau 3D et de nombreuses applications spécifiques à Windows Vista utilisent cette version de Direct3D 9, mais ils ne sont pas fonctionnels lors de l’exécution sur des pilotes XPDM plus anciens. Étant donné que l’API Direct3D 9Ex n’apparaîtra jamais sur les versions antérieures de Windows en raison d’un manque de prise en charge de WDDM, les interfaces Direct3D 9 standard couvrent un ensemble beaucoup plus large de systèmes. Pour les applications hautes performances qui peuvent tirer parti de la prochaine génération de matériel vidéo, la toute nouvelle version 10 de Direct3D offre de nombreuses nouvelles fonctionnalités non exposées par Direct3D 9Ex. Par conséquent, pour les jeux et la plupart des autres applications, Direct3D 9 ou Direct3D 10 est l’API recommandée.

Notes

Le Kit de développement logiciel (SDK) DirectX ne fournit pas d’exemples, d’en-têtes ou de bibliothèques pour l’interface Direct3D 9Ex. Msdn Library et le Kit de développement logiciel (SDK) Windows (anciennement sdk de plateforme) contiennent la documentation, les en-têtes et les bibliothèques disponibles.

 

Pour plus d’informations sur Direct3D 9Ex, consultez DirectX pour Windows Vista sur MDSN.

Direct3D 10

Pour exploiter pleinement le potentiel du nouveau modèle de pilote Windows Vista et du matériel nouvelle génération, une version entièrement nouvelle de l’API Direct3D a été créée. Bien que WDDM élimine certaines des limitations de performances dans le système graphique existant, Direct3D 10 va plus loin en supprimant les goulots d’étranglement de conception dans l’API Direct3D existante, et simplifie considérablement la tâche de programmation du GPU.

La nouvelle API élimine complètement tous les aspects des fonctions fixes, sauf quelques-uns, en les remplaçant par des constructions programmables et en rationalisant considérablement l’implémentation interne. Les centaines de bits de capacité dans les versions précédentes de Direct3D ont été complètement éliminés et remplacés par un ensemble de fonctionnalités bien défini et inclusif qui n’a que quelques scénarios d’utilisation facultatifs pour des formats de ressources spécifiques. La création et la validation de ressources nécessitant beaucoup d’UC ont désormais une sémantique explicite dans la nouvelle API. Cela permet d’avoir un comportement de performances beaucoup plus prévisible et de réduire considérablement la surcharge par tirage. Les ressources peuvent être reconfigurées sous plusieurs formes pour permettre une utilisation efficace à différentes étapes, et l’ensemble de fonctionnalités impose beaucoup moins de restrictions aux scénarios d’utilisation des formats. Il existe également de nouveaux formats de texture de carte normale compressés par blocs.

Dans la nouvelle API, les constantes de nuanceur et l’état de l’appareil sont des ressources explicites, ce qui permet une mise en cache beaucoup plus efficace sur le matériel et une validation des pilotes considérablement simplifiée. Le modèle de nuanceur programmable a été unifié entre les nuanceurs de vertex et de pixels, et rendu plus expressif avec un modèle de calcul et un ensemble d’opérateurs bien définis. En outre, une nouvelle phase de nuanceur de géométrie a été ajoutée pour fonctionner sur les primitives après l’étape du nuanceur de vertex. Les résultats du travail du GPU dans les phases de nuanceur de vertex et de géométrie du pipeline peuvent être diffusés en continu vers la ram vidéo pour une réutilisation, ce qui permet la possibilité d’opérations GPU multi-pass extrêmement complexes avec une interaction minimale du processeur.

Toutes ces améliorations permettent d’utiliser la technologie graphique de nouvelle génération et d’étendre la capacité des applications à décharger le travail sur le GPU. Le déchargement permet une mise en page de caractères basée sur gpu plus complexe, des techniques de morphing accélérées, la génération et l’extrusion de volumes d’ombres, des systèmes de particules et de physique entièrement basés sur gpu, des matériaux plus complexes combinés en lots efficaces de grands tirages, des détails procéduraux, un mappage de déplacement suivi de rayons en temps réel, la génération de carte de cube à passe unique et bien d’autres techniques, tout en libérant des ressources processeur pour des applications plus complexes.

Pour fournir ce niveau d’innovation dans Direct3D 10, le matériel plus ancien ne peut pas être exprimé comme une implémentation partielle d’une nouvelle interface. Une vidéo carte est soit capable de prendre en charge toutes les nouvelles fonctionnalités, soit elle n’est pas une carte compatible Direct3D 10. Par conséquent, alors que Direct3D 9 pouvait piloter le matériel de l’ère DirectX7 avec de nombreux bits de capacité manquants et des limitations d’utilisation, Direct3D 10 fonctionne uniquement sur une nouvelle génération de cartes vidéo. Pour qu’une application prend en charge du matériel vidéo plus ancien, elle doit également prendre en charge les interfaces Direct3D 9. Les prochaines versions de Direct3D s’appuieront sur la version 10, en l’étendant aux nouvelles versions de l’API tout en garantissant un sur-ensemble strict des fonctionnalités de Direct3D 10.

Pour plus d’informations sur Direct3D 10, consultez Direct3D 10.

Direct3D 10.1

Windows Vista Service Pack 1 étend l’API Direct3D 10 avec Direct3D 10.1, ce qui ajoute des interfaces facultatives et un modèle de nuanceur supplémentaire pour prendre en charge les nouvelles fonctionnalités matérielles des cartes vidéo qui prennent en charge Direct3D 10.1. Tout le matériel capable de prendre en charge Direct3D 10.1 prend également entièrement en charge toutes les fonctionnalités de Direct3D 10, et les développeurs de jeux peuvent utiliser les fonctionnalités supplémentaires de Direct3D 10.1, le cas échéant.

Notes

Direct3D 10.1 est l’API graphique utilisée par le bureau Windows 7.

 

Notes

Windows 7 et la mise à jour de Windows Vista ajoutent la prise en charge des niveaux de fonctionnalités DXGI 1.1, 10level9 et de l’appareil WARP10 à l’API Direct3D 10.1 existante.

 

Direct3D 11

Windows 7 prend en charge une nouvelle révision de Direct3D, Direct3D 11, basée sur la conception de l’API Direct3D 10.1. Les nouvelles fonctionnalités de l’API incluent le rendu multithread et la création de ressources, le nuanceur de calcul, la prise en charge des niveaux de fonctionnalités 10level9 et du périphérique de rendu logiciel WARP10, ainsi que de nouvelles fonctionnalités matérielles de classe Direct3D 11 telles que la mise en forme à l’aide de nuanceurs de domaine de coque & , les formats de compression de texture BC6H et BC7, le modèle de nuanceur 5.0 et la liaison de nuanceur dynamique. La nouvelle API peut utiliser des cartes vidéo de classe Direct3D 10 et 10.1 existantes, certaines cartes Direct3D 9 via les niveaux de fonctionnalités 10level9 avec une prise en charge limitée des fonctionnalités et les cartes vidéo de classe Direct3D 11 de dernière génération.

Outre l’API Direct3D 11, Windows 7 inclut DXGI 1.1, Direct2D, DirectWrite et la prise en charge des pilotes WDDM 1.1.

Notes

Direct3D 11 et les API associées sont également disponibles en tant que mise à jour de Windows Vista (voir Comment installer la dernière version de DirectX).

 

Direct3D 11.1

Windows 8 étend l’API Direct3D 11 avec Direct3D 11.1. Direct3D 11.1 prend en charge tout le matériel existant qui prend en charge les niveaux de fonctionnalité 11, 10_x et 9_x, ainsi qu’un nouveau niveau de fonctionnalité 11_1.

En plus de l’API Direct3D 11.1, Windows 8 inclut DXGI 1.2, les contextes d’appareil Direct2D et la prise en charge des pilotes WDDM 1.2.

Notes

Si vous souhaitez que vos applications du Windows Store programment des graphiques 3D avec DirectX, vous pouvez utiliser l’API Direct3D 11.1. Pour plus d’informations sur la programmation de graphiques 3D avec DirectX, consultez Présentation des graphiques 3D avec DirectX.

 

Mise à jour de la plateforme pour Windows 7 : Une prise en charge partielle est disponible pour l’API Direct3D 11.1 sur Windows 7 ou Windows Server 2008 R2 avec la mise à jour de la plateforme pour Windows 7 installée. Pour plus d’informations sur la mise à jour de plateforme pour Windows 7, consultez Mise à jour de plateforme pour Windows 7.

Opengl

Windows Vista, Windows 7 et Windows 8 fournissent la même prise en charge que Windows XP pour OpenGL, ce qui permet aux fabricants de carte vidéo de fournir un pilote client installable (ICD) pour OpenGL qui fournit une prise en charge accélérée du matériel. Notez que les versions plus récentes de ces ICD sont requises pour prendre entièrement en charge Windows Vista, Windows 7 ou Windows 8. Si aucun ICD n’est installé, le système revient à la couche logicielle OpenGL v1.1 dans la plupart des cas.

Compatibilité des applications, GDI et versions antérieures de Direct3D

Les systèmes graphiques Windows Vista, Windows 7 et Windows 8 sont conçus pour prendre en charge un large éventail de scénarios matériels et d’utilisation afin d’activer de nouvelles technologies tout en continuant à prendre en charge les systèmes existants. Les interfaces graphiques existantes, telles que GDI, GDI+, et les versions antérieures de Direct3D, continuent de fonctionner sur Windows Vista et Windows 7, mais sont réappérées en interne dans la mesure du possible. Cela signifie que la majorité des applications Windows existantes continueront de fonctionner.

Windows Vista, Windows 7 et Windows 8 continuent de prendre en charge les mêmes interfaces Direct3D et DirectDraw que Windows XP, de retour à la version 3 de DirectX (à l’exception du mode conservé de Direct3D, qui a été supprimé). Comme avec Windows XP Professionnel Édition x64, les applications natives 64 bits sur les versions plus récentes de Windows sont limitées aux interfaces Direct3D9, DirectDraw7 ou plus récentes. Les applications hautes performances doivent utiliser Direct3D 9 ou version ultérieure pour s’assurer qu’elles ont la correspondance la plus proche des fonctionnalités matérielles.

Recommandations

Tenez compte des recommandations suivantes lors de la sélection d’une API pour votre application graphique :

  • Utilisez Direct3D 9 si votre application doit prendre en charge Windows XP ou une version antérieure de Windows.
  • Utilisez Direct3D 9 si vous souhaitez prendre en charge Windows Vista ou Windows 7 s’exécutant avec des pilotes XPDM. Pour les systèmes Windows Vista ou Windows 7 qui ne disposent pas de Direct3D 10 ou d’un matériel vidéo supérieur, vous pouvez choisir d’utiliser le chemin de code Windows XP Direct3D 9 existant ou utiliser les niveaux de fonctionnalités 10level9 via l’API Direct3D 10.1 ou Direct3D 11.
  • Utilisez Direct3D 11 pour tirer parti de la prochaine génération de matériel vidéo sur Windows Vista, Windows 7 et Windows 8. Les applications du Windows Store doivent utiliser Direct3D 11 ou version ultérieure.