Fonctionnalités de 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.

Nuanceur de calcul

Un nuanceur de calcul est un nuanceur programmable conçu pour le traitement parallèle de données à usage général. En d’autres termes, les nuanceurs de calcul permettent d’utiliser un GPU comme processeur parallèle à usage général. Le nuanceur de calcul est similaire aux autres nuanceurs de pipeline programmables (tels que le vertex, le pixel, la géométrie) dans la façon dont il accède aux entrées et aux 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 du nuanceur.

Un nuanceur de calcul est conçu pour les applications du marché 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 un mappage 1-1 forcé aux enregistrements d’entrée (comme le fait un nuanceur de vertex) ou aux 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 faire face à une complexité importante lorsqu’ils gèrent les nuanceurs, tout en offrant la possibilité d’optimiser le code du nuanceur. Cela devient encore plus difficile, 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 soit créé de grands nuanceurs à usage général complets qui peuvent être utilisés par une grande variété d’éléments de scène, ce qui remplace certaines performances par la flexibilité, soit créé des nuanceurs individuels pour chaque flux géométrique, type de matériau ou combinaison de type clair nécessaire.

Ces grands nuanceurs à usage général 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 de développement par 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ées objet et fournissent la prise en charge du runtime de la liaison de nuanceur pour aider les développeurs à programmer des nuanceurs.

Pour plus d’informations, consultez 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 graphiques 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 du 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 . La création de fonctions de point d’entrée qui créent des objets avec thread libre 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 de processeur, ce qui permet une traversée parallèle de la base de données de scène ou le traitement physique sur plusieurs threads. Cela permet au thread de rendu main de 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 géométriquement précis qui dépend du niveau de détail requis pour une scène. Utilisez le 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 de 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

Voici une liste complète des fonctionnalités de Direct3D 11.

  • Vous pouvez exécuter Direct3D 11 sur du matériel de niveau inférieur en specififant un niveau de fonctionnalité lorsque vous créez un appareil.

  • Vous pouvez effectuer une pavage (voir Vue d’ensemble de tessellation) à l’aide des types de nuanceurs suivants :

    • Nuanceur de coque
    • Nuanceur de domaine
  • Direct3D 11 prend en charge le multithreading (voir MultiThreading)

    • Création d’objets/de ressources/nuanceurs/multithreads
    • Création d’une liste d’affichage multithread
  • Direct3D 11 développe les nuanceurs avec les fonctionnalités suivantes (voir Modèle de nuanceur 5)

    • Ressources adressables : textures, mémoires tampons constantes et échantillonneurs

    • Types de ressources supplémentaires, tels que les mémoires tampons et les textures en lecture/écriture (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 du problème entre plusieurs threads logiciels ou groupes de threads, et en partageant des données entre les registres du nuanceur pour réduire considérablement la quantité de données requises pour entrer 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 Geometry Shader Features)

      • Instanciation : permet au nuanceur de géométrie de générer un maximum de 1 024 sommets, ou toute combinaison d’instances et de sommets jusqu’à 1 024 (maximum de 32 instances de 32 sommets chacune).
    • 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 multi-échantillon.

      • 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 des pixels, que l’exemple de modèle ait ou non un emplacement d’échantillon au centre des pixels.

        • Sinon, l’attribut est évalué au premier échantillon couvert, c’est-à-dire l’exemple avec l’index le plus bas parmi tous les exemples d’index. Dans ce cas, la couverture de l’échantillon est déterminée après l’application de l’opération LOGIQUE AND à la couverture et à l’état de rastériseur de masque d’échantillon.

        • 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 dans le pixel, le premier échantillon couvert par l’état de rastériseur de masque d’échantillon est le point d’évaluation.
          • Sinon, dans la condition d’échantillon-masque 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

    • Gather4

      • Prise en charge des textures multicomposants : spécifier un canal à partir duquel charger
      • Prise en charge des décalages programmables
    • Diffusion en continu

      • Pinces de texture pour limiter le préchargement WDDM
    • Limites de texture de 16 000

    • Exiger 8 bits de précision de sous-texel et de sous-mip sur le filtrage des textures

    • 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 d’élimination de profondeur précoces 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 la ressource est plus grande
  • Direct3D 11 prend en charge les améliorations de sortie 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 nuanceur modèle 5 (voir Modèle de nuanceur 5)

    • Double avec des dénorms
    • Instruction count bits set
    • Rechercher la première instruction de jeu de bits
    • Gestion des portages/dépassements de capacité
    • Instructions d’inversion de bits pour les FFT
    • Permutation conditionnelle intrinsèque
    • Resinfo 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 en lecture seule, permet d’utiliser la texture en tant qu’entrée et d’effectuer l’analyse en profondeur
  • Direct3D 11 prend en charge le dessin indirect - Direct3D 10 implémente DrawAuto, qui prend le 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 des fonctionnalités diverses

    • Fenêtres d’affichage à virgule flottante
    • Serrage de mipmap par ressource
    • Biais de profondeur : cet algorithme met à jour le comportement du biais de profondeur à l’aide de l’état de 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
    • Exigences 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 de Direct3D 11