Fonctionnalités Direct3D 11
Le guide de programmation contient des informations sur l’utilisation du pipeline programmable Direct3D 11 pour créer des graphiques 3D en temps réel pour les jeux et pour les applications scientifiques et de bureau.
- de nuanceur de calcul
- liaison de nuanceur dynamique
- multithreading
- de pavage
- liste complète des fonctionnalités
- fonctionnalités ajoutées dans les versions précédentes
- rubriques connexes
Nuanceur de calcul
Un nuanceur de calcul est un nuanceur programmable conçu pour le traitement en parallèle des données à usage général. En d’autres termes, les nuanceurs de calcul permettent à un GPU d’être utilisé comme processeur parallèle à usage général. Le nuanceur de calcul est similaire à d’autres nuanceurs de pipeline programmables (tels que vertex, pixels, géométrie) de la façon dont il accède aux entrées et sorties. La technologie de nuanceur de calcul est également connue sous le nom de technologie DirectCompute. Un nuanceur de calcul est intégré à Direct3D et est accessible via un appareil Direct3D. Il peut partager directement des ressources de mémoire avec des nuanceurs graphiques à l’aide de l’appareil Direct3D. Toutefois, il n’est pas directement connecté à d’autres étapes de nuanceur.
Un nuanceur de calcul est conçu pour les applications de masse qui effectuent des calculs à des taux interactifs, lorsque le coût de la transition entre l’API (et sa pile logicielle associée) et un processeur consomme trop de surcharge.
Un nuanceur de calcul a son propre ensemble d’états. Un nuanceur de calcul n’a pas nécessairement de mappage forcé de 1 à 1 pour les enregistrements d’entrée (comme un nuanceur de vertex le fait) ou les enregistrements de sortie (comme le nuanceur de pixels). Certaines fonctionnalités du nuanceur graphique sont prises en charge, mais d’autres ont été supprimées afin que de nouvelles fonctionnalités spécifiques au nuanceur de calcul puissent être ajoutées.
Pour prendre en charge les fonctionnalités spécifiques au nuanceur de calcul, plusieurs nouveaux types de ressources sont désormais disponibles, tels que les mémoires tampons en lecture/écriture, les textures et les mémoires tampons structurées.
Pour plus d’informations, consultez Vue d’ensemble du nuanceur de calcul.
Liaison de nuanceur dynamique
Les systèmes de rendu doivent gérer une complexité significative lorsqu’ils gèrent les nuanceurs, tout en offrant la possibilité d’optimiser le code du nuanceur. Cela devient un défi encore plus grand, car les nuanceurs doivent prendre en charge une variété de matériaux différents dans une scène rendue sur différentes configurations matérielles. Pour relever ce défi, les développeurs de nuanceurs ont souvent recours à l’une des deux approches générales. Ils ont créé des nuanceurs complets, à usage général, qui peuvent être utilisés par un large éventail d’éléments de scène, qui échangent certaines performances en matière de flexibilité ou créent des nuanceurs individuels pour chaque flux de géométrie, type de matériau ou combinaison de type clair nécessaire.
Ces nuanceurs à usage général volumineux gèrent ce défi en recompilant le même nuanceur avec différentes définitions de préprocesseur, et cette dernière méthode utilise la puissance du développeur de force brute pour obtenir le même résultat. L’explosion de permutation du nuanceur a souvent été un problème pour les développeurs qui doivent maintenant gérer des milliers de permutations de nuanceur différentes au sein de leur pipeline de jeux et de ressources.
Direct3D 11 et le modèle de nuanceur 5 introduisent des constructions de langage orientée objet et fournissent la prise en charge runtime de la liaison de nuanceur pour aider les développeurs à programmer les nuanceurs.
Pour plus d’informations, consultez de liaison dynamique.
Multithreading
De nombreuses applications graphiques sont liées au processeur en raison d’activités coûteuses telles que la traversée de graphique de scène, le tri d’objets et les simulations physiques. Étant donné que les systèmes multicœurs deviennent de plus en plus disponibles, Direct3D 11 a amélioré sa prise en charge multithreading pour permettre une interaction efficace entre plusieurs threads de processeur et les API graphiques D3D11.
Direct3D 11 permet aux fonctionnalités suivantes de prendre en charge le multithreading :
- Les objets simultanés sont désormais créés dans des threads distincts : l’établissement de fonctions de point d’entrée qui créent des objets sans threads permet à de nombreux threads de créer des objets simultanément. Par exemple, une application peut maintenant compiler un nuanceur ou charger une texture sur un thread lors du rendu sur un autre.
- Les listes de commandes peuvent être créées sur plusieurs threads : une liste de commandes est une séquence enregistrée de commandes graphiques. Avec Direct3D 11, vous pouvez créer des listes de commandes sur plusieurs threads processeur, ce qui permet une traversée parallèle de la base de données de scène ou du traitement physique sur plusieurs threads. Cela libère le thread de rendu principal pour distribuer des mémoires tampons de commande au matériel.
Pour plus d’informations, consultez multithreading.
Pavage
La pavage peut être utilisée pour afficher un modèle unique avec différents niveaux de détail. Cette approche génère un modèle plus précis géométriquement qui dépend du niveau de détail requis pour une scène. Utilisez la pavage dans une scène où le niveau de détail permet un modèle géométrique inférieur, ce qui réduit la demande en bande passante mémoire consommée pendant le rendu.
Dans Direct3D, la pavage est implémentée sur le GPU pour calculer une surface courbe plus lisse à partir d’un correctif d’entrée grossière (moins détaillé). Chaque face de patch (quad ou triangle) est subdivisé en visages triangulaires plus petits qui se rapprochent mieux de la surface souhaitée.
Pour plus d’informations sur l’implémentation de la pavage dans le pipeline graphique, consultez Vue d’ensemble de tessellation.
Liste complète des fonctionnalités
Il s’agit d’une liste complète des fonctionnalités de Direct3D 11.
Vous pouvez exécuter Direct3D 11 sur matériel de niveau inférieur en specifant un niveau de fonctionnalité lorsque vous créez un appareil.
Vous pouvez effectuer une pavage (voir Vue d’ensemble de la pavage) à l’aide des types de nuanceurs suivants :
- Nuanceur de coque
- Nuanceur de domaine
Direct3D 11 prend en charge le multithreading (voir multithreading)
- Création de ressources/nuanceurs/d’objets multithread
- Création de liste d’affichage multithread
Direct3D 11 développe les nuanceurs avec les fonctionnalités suivantes (voir Shader Model 5)
Ressources adressables - textures, mémoires tampons constantes et échantillonneurs
Types de ressources supplémentaires, tels que les mémoires tampons en lecture/écriture et les textures (voir Nouveaux types de ressources).
Sous-routines
Nuanceur de calcul (voir Vue d’ensemble du nuanceur de calcul) : nuanceur qui accélère les calculs en divisant l’espace de problème entre plusieurs threads logiciels ou groupes de threads et le partage de données entre les registres du nuanceur afin de réduire considérablement la quantité de données nécessaires à l’entrée dans un nuanceur. Les algorithmes que le nuanceur de calcul peut améliorer considérablement incluent le post-traitement, l’animation, la physique et l’intelligence artificielle.
Nuanceur geometry (voir Fonctionnalités du nuanceur geometry)
- Instanciation : permet au nuanceur géométrique de générer un maximum de 1 024 sommets, ou toute combinaison d’instances et de sommets jusqu’à 1024 (maximum de 32 instances de 32 sommets chacun).
Nuanceur de pixels
Couverture en tant qu’entrée PS
Interpolation programmable des entrées - Le nuanceur de pixels peut évaluer les attributs au sein du pixel, n’importe où sur la grille multisample
L’échantillonnage centroïde des attributs doit respecter les règles suivantes :
Si tous les échantillons de la primitive sont couverts, l’attribut est évalué au centre de pixels, que l’exemple de modèle ait un exemple d’emplacement au centre de pixels.
Sinon, l’attribut est évalué au premier échantillon couvert, c’est-à-dire l’exemple avec l’index le plus bas parmi tous les index d’échantillon. Dans ce cas, l’exemple de couverture est déterminé après l’application de l’opération AND logique à la couverture et à l’état de rastériseur échantillon-masque.
Si aucun échantillon n’est couvert (par exemple, sur les pixels d’assistance exécutés hors des limites d’une primitive pour remplir des empreintes de 2 x 2 pixels), l’attribut est évalué de l’une des manières suivantes :
- Si l’état du rastériseur sample-mask est un sous-ensemble des exemples en pixels, le premier échantillon couvert par l’état de rastériseur sample-mask est le point d’évaluation.
- Sinon, dans la condition de masque d’exemple complet, le centre de pixels est le point d’évaluation.
Direct3D 11 développe les textures (voir Vue d’ensemble des textures) avec les fonctionnalités suivantes
Collect4
- Prise en charge des textures à plusieurs composants : spécifier un canal à charger à partir de
- Prise en charge des décalages programmables
Streaming
- Pinces de texture pour limiter le préchargement WDDM
Limites de texture de 16 Ko
Exiger 8 bits de sous-texel et de précision de sous-mip sur le filtrage de texture
Nouveaux formats de compression de texture (1 nouveau format LDR et 1 nouveau format HDR)
Direct3D 11 prend en charge l’oDepth conservateur : cet algorithme permet à un nuanceur de pixels de comparer la valeur de profondeur par pixel du nuanceur de pixels à celle du rastériseur. Le résultat permet d’effectuer des opérations de suppression de profondeur précoce tout en conservant la possibilité de générer un oDepth à partir d’un nuanceur de pixels.
Direct3D 11 prend en charge la mémoire volumineuse
- Autoriser les ressources > 4 Go
- Conserver les index des ressources 32 bits, mais les ressources sont plus volumineuses
Direct3D 11 prend en charge les améliorations apportées aux sorties de flux
- Sortie de flux adressable
- Augmenter le nombre de sorties de flux à 4
- Modifier toutes les mémoires tampons de sortie de flux en plusieurs éléments
Direct3D 11 prend en charge le modèle de nuanceur 5 (voir Shader Model 5)
- Double avec des dénorms
- Nombre d’instructions de jeu de bits
- Rechercher la première instruction de jeu de bits
- Gestion du transport/dépassement de capacité
- Instructions d’inversion de bits pour les FFT
- Permutation conditionnelle intrinsèque
- Résinefo sur les tampons
- Réciproque à précision réduite
- Instructions de conversion du nuanceur - fp16 en fp32 et inversement
- Mémoire tampon structurée, qui est un nouveau type de mémoire tampon contenant des éléments structurés.
Direct3D 11 prend en charge les vues de profondeur ou de gabarit en lecture seule
- Désactive les écritures dans la partie qui est en lecture seule, permet d’utiliser la texture comme entrée et pour le culling de profondeur
Direct3D 11 prend en charge le dessin indirect - Direct3D 10 implémente DrawAuto, qui prend du contenu (généré par le GPU) et le rend (sur le GPU). Direct3D 11 généralise DrawAuto afin qu’il puisse être appelé par un nuanceur de calcul à l’aide de DrawInstanced et DrawIndexedInstanced.
Direct3D 11 prend en charge diverses fonctionnalités
- Fenêtres d’affichage à virgule flottante
- Verrouillage mipmap par ressource
- Biais de profondeur : cet algorithme met à jour le comportement du biais de profondeur, en utilisant l’état du rastériseur. Le résultat élimine les scénarios où le biais calculé peut être NaN.
- Limites de ressources : les index de ressources doivent toujours être <= 32 bits, mais les ressources peuvent être supérieures à 4 Go.
- Précision du rastériseur
- Conditions requises pour MSAA
- Compteurs réduits
- Format 1 bits et filtre de texte supprimés
Fonctionnalités ajoutées dans les versions précédentes
Pour obtenir la liste des fonctionnalités ajoutées dans les versions précédentes, consultez les rubriques suivantes :
- Nouveautés du Kit de développement logiciel (SDK) Windows 7/Direct3D 11 d’août 2009
- Nouveautés de la Technical Preview 2008 Direct3D 2008
Rubriques connexes