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 dans 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, passant du monde des opérations raster 2D et des applications GDI à celui des jeux 3D avec du matériel graphique à fonction fixe, et enfin à celui de l’unité de traitement graphique programmable moderne (GPU) qui prend en charge une large gamme d’applications graphiques haute performance. Windows 7 et Windows 8 s’appuient sur l’infrastructure graphique de Windows Vista en fournissant des fonctionnalités graphiques et des API supplémentaires. Cet article traite des fonctionnalités graphiques et des API de Windows.
- Background
- Direct3D 9
- Direct3D 9Ex
- Direct3D 10
- Direct3D 10.1
- Direct3D 11
- Direct3D 11.1
- OpenGL
- Compatibilité des applications, GDI et anciennes versions de Direct3D
- Recommandations
Background
L’API principale pour la programmation graphique depuis les débuts de Windows a été l’interface de périphérique graphique (GDI). Cette API a été conçue pour gérer de nombreux périphériques de sortie 2D, et elle a formé la base de l’expérience de l’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 au matériel existant de l’époque. Les interactions avec GDI étaient 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, connue sous le nom de XPDM, reflète la nature côte à côte de GDI et Direct3D (voir Figure 1).
Figure 1. API graphiques dans Windows XP
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, Windows Display Driver Model (WDDM), met en avant le GPU et Direct3D, permettant la création d’une toute nouvelle expérience, le bureau 3D, qui fusionne de manière transparente 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
Pour plus d’informations sur le WDDM, veuillez consulter la section Guide de conception du modèle de pilote d’affichage de Windows Vista (WDDM).
Direct3D 9
La version 9 de DirectX a été initialement publiée 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 shaders plus puissants pour Direct3D, et une maturité soutenue par des milliers de titres commercialisés. 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 fonctionner sur une large gamme de matériels existants et de versions de Windows. Les détails du nouveau modèle de pilote sont cachés aux applications utilisant les interfaces Direct3D 9, mais en coulisses, le système d’exploitation tire pleinement parti des nouvelles capacités pour offrir un véritable multitâche du GPU, une gestion des ressources plus efficace et des performances robustes.
Pour garantir une compatibilité totale avec les anciennes versions de Windows, certaines particularités de l’ancien modèle de pilote doivent être émules même avec le nouveau modèle de pilote d’affichage de Windows Vista. Par exemple, lorsqu’une application en 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 géré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 de ressource gérée par rapport à une ressource par défaut est spécifique à l’ancien modèle de pilote. Autre exemple, l’attente d’un échec lors de l’allocation de ressources non géré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 encore ces conditions d’erreur. Ainsi, elles sont limitées 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 livrés 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 soient inclus dans la boîte, Windows Vista continue de prendre en charge la possibilité d’utiliser d’anciens pilotes XPDM 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 les versions ultérieures.
Direct3D 9Ex
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ées, les nouvelles sémantiques de périphérique perdu, et quelques autres nouvelles fonctionnalités disponibles lors de l’exécution sous Windows Vista. En créant cet objet étendu, l’API Direct3D 9 utilise les nouvelles sémantiques, et nécessite donc que l’application utilise une logique différente (et donc des chemins de code différents) pour la création, la gestion et le traitement des erreurs des ressources pour de nouveaux types de conditions. Cette API n’est disponible que sous Windows Vista et nécessite des pilotes WDDM. Parce que Direct3D 9Ex utilise un chemin de code API et pilote séparé de Direct3D 9, la prise en charge de cette API nécessite des cas de test supplémentaires pour votre application.
La raison principale de la création de la nouvelle API Direct3D 9Ex était de permettre un accès complet aux nouvelles capacités de WDDM tout en maintenant 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 elles ne sont pas fonctionnelles lors de l’exécution sur d’anciens pilotes XPDM. Parce que l’API Direct3D 9Ex n’apparaîtra jamais sur les anciennes versions de Windows en raison d’un manque de prise en charge du WDDM, les interfaces Direct3D 9 standard couvrent un ensemble beaucoup plus large de systèmes. Pour les applications haute performance 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 capacités non exposées par Direct3D 9Ex. En conséquence, pour les jeux et la plupart des autres applications, Direct3D 9 ou Direct3D 10 est l’API recommandée.
Remarque
Le SDK DirectX ne fournit pas d’exemples, d’en-têtes ou de bibliothèques pour l’interface Direct3D 9Ex. Pour plus d’informations sur Direct3D 9Ex, veuillez consulter la section DirectX pour Windows Vista.
Direct3D 10
Pour réaliser pleinement le potentiel du nouveau modèle de pilote Windows Vista et du matériel de prochaine génération, une toute nouvelle version de l’API Direct3D a été créée. Bien que WDDM élimine certaines des limitations de performance du système graphique existant, Direct3D 10 va plus loin en supprimant les goulets d’étranglement de conception de l’API Direct3D existante et simplifie grandement la tâche de programmation du GPU.
La nouvelle API élimine complètement presque tous les aspects à fonction fixe, les remplaçant par des constructions programmables et rationalisant considérablement l’implémentation interne. Les centaines de bits de capacité des versions précédentes de Direct3D ont été entièrement éliminés et remplacés par un ensemble de fonctionnalités bien défini et inclusif, n’ayant que quelques scénarios d’utilisation facultatifs pour des formats de ressources spécifiques. La création et la validation des ressources intensives en calcul pour le CPU ont désormais des sémantiques explicites dans la nouvelle API. Cela permet un comportement de performance beaucoup plus prévisible et réduit considérablement la surcharge par dessin. Les ressources peuvent être reconfigurées en plusieurs formes pour permettre une utilisation efficace à divers stades, et l’ensemble des fonctionnalités impose beaucoup moins de restrictions sur les scénarios d’utilisation pour les formats. Il existe également de nouveaux formats de texture de carte normale compressée par blocs.
Dans la nouvelle API, les constantes de shader et l’état de l’appareil sont des ressources explicites, permettant un cache matériel beaucoup plus efficace et une validation du pilote grandement simplifiée. Le modèle de shader programmable a été unifié à la fois pour les vertex et les pixel shaders et rendu plus expressif avec un modèle computationnel bien défini et un ensemble d’opérateurs. De plus, une nouvelle étape de shader de géométrie a été ajoutée pour opérer sur les primitives après l’étape du vertex shader. Les résultats du travail du GPU dans les étapes de shader de vertex et de géométrie du pipeline peuvent être diffusés dans la RAM vidéo pour une réutilisation, permettant des opérations de GPU multipass extrêmement complexes avec une interaction CPU minimale.
Toutes ces améliorations permettent la technologie graphique de nouvelle génération et augmentent la capacité des applications à décharger le travail sur le GPU. Le déchargement permet des techniques de peaufinage de personnages basées sur le GPU plus complexes, 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 le GPU, des matériaux plus complexes combinés en lots de dessin efficaces, des détails procéduraux, un mappage de déplacement tracé par rayons en temps réel, la génération de cartes cubiques en un seul passage, et bien d’autres techniques, tout en libérant des ressources CPU pour des applications plus complexes.
Pour offrir 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 carte vidéo est soit capable de prendre en charge toutes les nouvelles fonctionnalités, soit ce n’est pas une carte compatible Direct3D 10. Ainsi, bien que Direct3D 9 puisse piloter le matériel de l’ère DirectX7 avec de nombreux bits de capacité manquants et des limitations d’utilisation, Direct3D 10 ne fonctionne que sur une nouvelle génération de cartes vidéo. Pour qu’une application prenne en charge l’ancien matériel vidéo, elle doit également prendre en charge les interfaces Direct3D 9. Les futures versions de Direct3D s’appuieront sur la version 10, l’étendant à de nouvelles versions de l’API tout en garantissant un super ensemble strict des fonctionnalités de Direct3D 10.
Pour plus d’informations sur Direct3D 10, veuillez consulter la section Direct3D 10.
Direct3D 10.1
Le Service Pack 1 de Windows Vista étend l’API Direct3D 10 avec Direct3D 10.1, qui ajoute des interfaces facultatives et un modèle de shader supplémentaire pour prendre en charge les nouvelles fonctionnalités matérielles des cartes vidéo qui prennent en charge Direct3D 10.1. Tout matériel capable de prendre en charge Direct3D 10.1 prend également 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, lorsqu’elles sont disponibles.
Remarque
Direct3D 10.1 est l’API graphique utilisée par le bureau Windows 7.
Remarque
Windows 7 et la mise à jour de Windows Vista ajoutent la prise en charge de DXGI 1.1, des niveaux de fonctionnalité 10level9 et du dispositif de rendu logiciel WARP10 à l’API Direct3D 10.1 existante.
Direct3D 11
Windows 7 prend en charge une nouvelle révision de Direct3D, Direct3D 11, construite 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 Compute Shader, la prise en charge des niveaux de fonctionnalité 10level9 et du dispositif de rendu logiciel WARP10, ainsi que de nouvelles fonctionnalités matérielles de classe Direct3D 11 telles que la tessellation à l’aide de shaders de coque & de domaine, les formats de compression de texture BC6H et BC7, le modèle de shader 5.0 et la liaison dynamique des shaders. La nouvelle API peut utiliser les cartes vidéo de classe Direct3D 10 et 10.1 existantes, certaines cartes Direct3D 9 via les niveaux de fonctionnalité 10level9 avec un support de fonctionnalités limité, et les cartes vidéo de dernière génération de classe Direct3D 11.
En plus de l’API Direct3D 11, Windows 7 inclut DXGI 1.1, Direct2D, DirectWrite et la prise en charge des pilotes WDDM 1.1.
Remarque
Les API Direct3D 11 et connexes sont également disponibles en tant que mise à jour pour Windows Vista (veuillez consulter la section 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 que les niveaux de fonctionnalité 11, 10_x, et 9_x prennent en charge, ainsi qu’un nouveau niveau de fonctionnalité 11_1.
En plus de l’API Direct3D 11.1, Windows 8 inclut DXGI 1.2, contextes de dispositif Direct2D, et la prise en charge des pilotes WDDM 1.2.
Remarque
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, veuillez consulter la section Introduction à la programmation 3D avec DirectX.
Mise à jour de la plateforme pour Windows 7 : Un support partiel 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 la plateforme pour Windows 7, veuillez consulter la section Mise à jour de la plateforme pour Windows 7.
OpenGL
Windows Vista, Windows 7 et Windows 8 fournissent le même support que Windows XP pour OpenGL, ce qui permet aux fabricants de cartes vidéo de fournir un pilote client installable (ICD) pour OpenGL qui offre un support accéléré par le matériel. Notez que les versions plus récentes de ces ICD sont nécessaires pour prendre en charge pleinement Windows Vista, ou Windows 7, ou Windows 8. Si aucun ICD n’est installé, le système reviendra à la couche logicielle OpenGL v1.1 dans la plupart des cas.
Compatibilité des applications, GDI et anciennes versions de Direct3D
Les systèmes graphiques de Windows Vista, Windows 7 et Windows 8 sont conçus pour prendre en charge une large gamme de matériel et de scénarios d’utilisation afin de permettre de nouvelles technologies tout en continuant à prendre en charge les systèmes existants. Les interfaces graphiques existantes, telles que GDI, GDI+, et les anciennes versions de Direct3D, continuent de fonctionner sur Windows Vista et Windows 7, mais sont remappées en interne lorsque cela est 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, jusqu’à la version 3 de DirectX (à l’exception du mode conservé de Direct3D, qui a été supprimé). Tout comme avec Windows XP Professional x64 Edition, les applications natives 64 bits sur les versions plus récentes de Windows sont limitées à Direct3D9, DirectDraw7, ou des interfaces plus récentes. Les applications haute performance devraient utiliser Direct3D 9 ou une version ultérieure pour s’assurer qu’elles correspondent le plus étroitement possible aux capacités matérielles.
Recommandations
Considérez les 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 fonctionnant avec des pilotes XPDM. Pour les systèmes Windows Vista ou Windows 7 qui n’ont pas de matériel vidéo Direct3D 10 ou supérieur, vous pouvez soit choisir d’utiliser le chemin de code Direct3D 9 existant de Windows XP, soit utiliser les niveaux de fonctionnalité 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 une version ultérieure.