Share via


Pipeline graphique

Le pipeline graphique Direct3D est conçu pour la génération de graphismes destinés aux applications de jeu en temps réel. Les données circulent de l’entrée vers la sortie en transitant par chacune des phases configurables ou programmables de ce pipeline.

Toutes les étapes peuvent être configurées à l’aide de l’API Direct3D. Les étapes qui comportent des cœurs de nuanceur courants (les blocs rectangulaires arrondis) sont programmables à l’aide du langage de programmation HLSL . Cela rend le pipeline extrêmement flexible et adaptable.

Les plus couramment utilisés sont l’étape du nuanceur de vertex (VS) et l’étape du nuanceur de pixels (PS). Si vous ne fournissez même pas ces étapes de nuanceur, un vertex sans opération directe et un nuanceur de pixels par défaut sont utilisés.

diagramme du flux de données dans le pipeline programmable direct3d 11

Étape assembleur d’entrée

L’étape IA (Assembleur d’entrée) fournit des données primitives et d’adjacence au pipeline, telles que des triangles, des lignes et des points, y compris des ID sémantiques pour rendre les nuanceurs plus efficaces en réduisant le traitement aux primitives qui n’ont pas encore été traitées.

  • Entrée

    Données primitives (triangles, lignes et/ou points) à partir de mémoires tampons remplies par l’utilisateur. Et éventuellement des données d’adjacence. Un triangle serait 3 sommets pour chaque triangle et éventuellement 3 sommets pour les données d’adjacence par triangle.

  • Sortie

    Primitives avec des valeurs générées par le système attachées (telles qu’un ID primitif, un ID de instance ou un ID de vertex).

Étape du nuanceur de vertex

L’étape du nuanceur de vertex (VS) traite les sommets, en effectuant généralement des opérations telles que les transformations, l’apparence et l’éclairage. Un nuanceur de vertex prend un sommet d’entrée unique et produit un seul vertex de sortie. Opérations individuelles par sommet, telles que transformations, apparence, morphose et éclairage par vertex.

  • Entrée

    Un sommet unique, avec des valeurs générées par le système VertexID et InstanceID. Chaque vertex d’entrée du nuanceur de vertex peut être composé d’un maximum de 16 vecteurs 32 bits (jusqu’à 4 composants chacun).

  • Sortie

    Un sommet unique. Chaque vertex de sortie peut être composé de 16 vecteurs à 4 composants 32 bits.

Étape hull shader

L’étape Hull Shader (HS) est l’une des phases de pavage, qui décompose efficacement une seule surface d’un modèle en de nombreux triangles. Un nuanceur de coque est appelé une fois par patch, et il transforme les points de contrôle d’entrée qui définissent une surface d’ordre faible en points de contrôle qui composent un patch. Il effectue également des calculs par correctif pour fournir des données pour l’étape Tessellator (TS) et l’étape Du nuanceur de domaine (DS).

  • Entrée

    Entre 1 et 32 points de contrôle d’entrée, qui définissent ensemble une surface de faible ordre.

  • Sortie

    Entre 1 et 32 points de contrôle de sortie, qui constituent ensemble un correctif. Le nuanceur de coque déclare l’état de l’étape de Tessellator (TS), y compris le nombre de points de contrôle, le type de face de patch et le type de partitionnement à utiliser lors de la tessellating.

Stade de Tessellator

L’étape Tessellator (TS) crée un modèle d’échantillonnage du domaine qui représente le patch géométrique et génère un ensemble d’objets plus petits (triangles, points ou lignes) qui relient ces exemples.

  • Entrée

    Le tessellateur fonctionne une fois par correctif à l’aide des facteurs de pavage (qui spécifient la précision du domaine à créer) et du type de partitionnement (qui spécifie l’algorithme utilisé pour découper un correctif) transmis à partir de l’étape du nuanceur de coque.

  • Sortie

    Le tessellateur génère des coordonnées uv (et éventuellement w) et la topologie de surface à l’étape du nuanceur de domaine.

Étape du nuanceur de domaine

L’étape DS (Domain Shader) calcule la position du vertex d’un point subdivisé dans le correctif de sortie ; il calcule la position du vertex qui correspond à chaque exemple de domaine. Un nuanceur de domaine est exécuté une fois par point de sortie d’étape de tessellateur et dispose d’un accès en lecture seule au patch de sortie du nuanceur de coque et aux constantes de patch de sortie, ainsi qu’aux coordonnées UV de sortie de l’étape du tessellateur.

  • Entrée

    Un nuanceur de domaine consomme des points de contrôle de sortie à partir de l’étape Hull Shader (HS). Les sorties du nuanceur de coque incluent les points de contrôle, les données constantes patch et les facteurs de pavage (les facteurs de pavage peuvent inclure les valeurs utilisées par le tessellateur à fonction fixe, ainsi que les valeurs brutes avant l’arrondi par un pavage d’entiers, ce qui facilite la géomorphose, par exemple). Un nuanceur de domaine est appelé une fois par coordonnée de sortie à partir de l’étape de Tessellator (TS).

  • Sortie

    L’étape DS (Domain Shader) génère la position du vertex d’un point subdivisé dans le correctif de sortie.

Étape du nuanceur geometry

L’étape du nuanceur de géométrie (GS) traite des primitives entières : triangles, lignes et points, ainsi que leurs sommets adjacents. Il prend en charge l’amplification géométrique et la dés-amplification. Il est utile pour les algorithmes tels que l’expansion de sprite point, les systèmes dynamiques de particules, la génération de fur/fin, la génération de volume d’ombres, le rendu à cubemap à passe unique, l’échange de matériau Per-Primitive et la configuration de matériau Per-Primitive, y compris la génération de coordonnées barycentriques en tant que données primitives afin qu’un nuanceur de pixels puisse effectuer une interpolation d’attribut personnalisée.

  • Entrée

    Contrairement aux nuanceurs de vertex, qui fonctionnent sur un seul sommet, les entrées du nuanceur de géométrie sont les sommets d’une primitive complète (trois sommets pour les triangles, deux sommets pour les lignes ou un seul vertex pour le point).

  • Sortie

    L’étape Geometry Shader (GS) est capable de sortir plusieurs sommets formant une topologie sélectionnée unique. Les topologies de sortie du nuanceur geometry disponibles sont tristrip, linestrip et pointlist. Le nombre de primitives émises peut varier librement dans n’importe quel appel du nuanceur de géométrie, bien que le nombre maximal de sommets pouvant être émis doit être déclaré statiquement. Les longueurs de bandes émises à partir d’un appel de nuanceur de géométrie peuvent être arbitraires et de nouvelles bandes peuvent être créées via la fonction HLSL RestartStrip .

Étape de sortie du flux

L’étape De sortie de flux (SO) génère en continu les données de vertex (ou flux) de la phase active précédente vers une ou plusieurs mémoires tampons en mémoire. Les données diffusées en mémoire peuvent être recirculées dans le pipeline en tant que données d’entrée ou en lecture à partir du processeur.

  • Entrée

    Données de vertex d’une étape de pipeline précédente.

  • Sortie

    L’étape De sortie de flux (SO) génère en continu les données de vertex (ou flux) de la phase active précédente, telle que l’étape GS (Geometry Shader), vers une ou plusieurs mémoires tampons en mémoire. Si l’étape du nuanceur de géométrie (GS) est inactive et que l’étape De sortie de flux (SO) est active, elle génère en continu les données de vertex de l’étape DS (Domain Shader) vers les mémoires tampons (ou si la DS est également inactive, à partir de l’étape De nuanceur de vertex (VS) ).

Étape de rastériseur

L’étape Rastériseur (RS) extrait les primitives qui ne sont pas visibles, prépare les primitives pour l’étape Du nuanceur de pixels (PS) et détermine comment appeler des nuanceurs de pixels. Convertit les informations vectorielles (composées de formes ou de primitives) en image raster (composée de pixels) dans le but d’afficher des graphiques 3D en temps réel.

  • Entrée

    Les sommets (x,y,z,w) entrant dans l’étape de rastériseur sont supposés être dans un espace clip homogène. Dans cet espace de coordonnées, l’axe X pointe vers la droite, Y pointe vers le haut et Z pointe loin de la caméra.

  • Sortie

    Pixels réels qui doivent être rendus. Inclut certains attributs de vertex à utiliser dans l’interpolation par le nuanceur de pixels.

Étape du nuanceur de pixels

L’étape Du nuanceur de pixels (PS) reçoit des données interpolées pour une primitive et génère des données par pixel, telles que la couleur.

  • Entrée

    Lorsque le pipeline est configuré sans nuanceur de géométrie, un nuanceur de pixels est limité à des entrées 16, 32 bits et 4 composants. Sinon, un nuanceur de pixels peut prendre jusqu’à 32, 32 bits et 4 entrées à 4 composants. Les données d’entrée du nuanceur de pixels incluent des attributs de vertex (qui peuvent être interpolés avec ou sans correction de perspective) ou peuvent être traités comme des constantes par primitive. Les entrées du nuanceur de pixels sont interpolées à partir des attributs de vertex de la primitive en cours de rastérisation, en fonction du mode d’interpolation déclaré. Si une primitive est découpée avant la rastérisation, le mode d’interpolation est également respecté pendant le processus de découpage.

  • Sortie

    Un nuanceur de pixels peut générer jusqu’à 8 couleurs 32 bits et 4 composants, ou aucune couleur si le pixel est ignoré. Les composants du registre de sortie du nuanceur de pixels doivent être déclarés avant de pouvoir être utilisés ; chaque registre est autorisé à un masque de sortie-écriture distinct.

Étape de fusion de sortie

L’étape de fusion de sortie (OM) combine différents types de données de sortie (valeurs de nuanceur de pixels, informations de profondeur et de gabarit) avec le contenu de la cible de rendu et des mémoires tampons de profondeur/gabarit pour générer le résultat final du pipeline.

  • Entrée

    Les entrées de fusion de sortie sont l’état du pipeline, les données de pixels générées par les nuanceurs de pixels, le contenu des cibles de rendu et le contenu des mémoires tampons de profondeur/gabarit.

  • Sortie

    Couleur finale du pixel rendu.