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 présentent 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.

La plus couramment utilisée est l’étape de nuanceur de vertex (VS) et l’étape Pixel Shader (PS). Si vous ne fournissez même pas ces étapes de nuanceur, un nuanceur de vertex pass-through 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 d’assembleur d’entrée (IA) fournit des données primitives et dedjacency au pipeline, telles que des triangles, des lignes et des points, y compris les ID sémantiques pour aider à rendre les nuanceurs plus efficaces en réduisant le traitement aux primitives qui n’ont pas déjà été traitées.

  • Input

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

  • Sortie

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

Étape du nuanceur de vertex

L’étape nuanceur de vertex (VS) traite les sommets, généralement en effectuant 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 sommet de sortie. Opérations individuelles par vertex, telles que transformations, mise en forme, Morphose et éclairage par vertex.

  • Input

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

  • Sortie

    Un sommet unique. Chaque vertex de sortie peut être compris entre 16 vecteurs 32 bits et 4 composants.

Étape du nuanceur de coque

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

  • Input

    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 Tessellator (TS), y compris le nombre de points de contrôle, le type de visage du patch et le type de partitionnement à utiliser lors de la tessellating.

Scène Tessellator

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

  • Input

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

  • Sortie

    Le tessellator 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 De nuanceur de domaine (DS) calcule la position de vertex d’un point subdividé dans le correctif de sortie ; elle calcule la position de vertex qui correspond à chaque exemple de domaine. Un nuanceur de domaine est exécuté une fois par point de sortie de l’étape tessellator et dispose d’un accès en lecture seule au correctif de sortie du nuanceur de coque et aux constantes des correctifs de sortie des correctifs de sortie, ainsi que les coordonnées UV de sortie de l’étape tessellator.

  • Input

    Un nuanceur de domaine consomme des points de contrôle de sortie à partir de l’étape du nuanceur de coque (HS). Les sorties du nuanceur de coque sont les suivantes : points de contrôle, données constantes patch et facteurs de pavage (les facteurs de pavage peuvent inclure les valeurs utilisées par le tessellator à fonction fixe ainsi que les valeurs brutes - avant d’arrondir par le pavage entier - ce qui facilite la géomorphisation, par exemple). Un nuanceur de domaine est appelé une fois par coordonnée de sortie de l’étape Tessellator (TS).

  • Sortie

    L’étape De nuanceur de domaine (DS) génère la position de vertex d’un point subdividé dans le correctif de sortie.

Étape du nuanceur geometry

L’étape du nuanceur geometry (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é-amplification. Il est utile pour les algorithmes, notamment l’expansion de point sprite, les systèmes de particules dynamiques, la génération de fur/fin, la génération de volume d’ombre, le rendu à cubemap, le per-primitive material swapping et la configuration des matériaux par 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.

  • Input

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

  • Sortie

    L’étape du nuanceur geometry (GS) est capable de sortir plusieurs sommets formant une topologie sélectionnée unique. Les topologies de sortie de nuanceur géométrique disponibles sont tristrip, linestrip et pointlist. Le nombre de primitives émises peut varier librement dans n’importe quel appel du nuanceur géométrique, 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 géométrique peuvent être arbitraires et de nouvelles bandes peuvent être créées via la fonction HLSL RestartStrip .

Étape de sortie de flux

L’étape De sortie de flux (SO) génère en continu les données de vertex (ou flux) de l’étape 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 de l’UC.

  • Input

    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 (ou flux) des données de vertex de l’étape active précédente, telles que l’étape du nuanceur geometry (GS), 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 des données de vertex de l’étape De nuanceur de domaine (DS) vers des mémoires tampons en mémoire (ou si la DS est également inactive, à partir de l’étape Vs (Vertex Shader).

Étape de rastériseur

La phase Rasterizer (RS) extrait les primitives qui ne sont pas en mode affichage, 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) à des fins d’affichage de graphiques 3D en temps réel.

  • Input

    Les sommets (x,y,z,w) entrant dans la phase ratériseur sont supposés être dans un espace clip-space homogène. Dans cet espace de coordonnées, l’axe X pointe vers la droite, Y pointe vers le haut et les points Z 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.

  • Input

    Lorsque le pipeline est configuré sans nuanceur geometry, un nuanceur de pixels est limité à 16 entrées 32 bits et 4 composants. Sinon, un nuanceur de pixels peut prendre jusqu’à 32 entrées 32 bits et 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 ratérisée, 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, 32 bits, couleurs de 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 d’écriture de sortie distinct.

Étape de fusion de sortie

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

  • Input

    Les entrées de fusion de sortie sont l’état du pipeline, les données de pixel 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 de pixel rendue finale.