Partager via


Étape assembleur d’entrée

L’assembleur d’entrée (IA) introduit des triangles, des lignes ou des points dans le pipeline de rendu en extrayant les données géométriques sources des mémoires tampons 1D.

Les données de vertex peuvent provenir de plusieurs mémoires tampons et sont accessibles selon un tableau de structures à partir de chaque mémoire tampon. Les mémoires tampons sont chacune liées à un emplacement d’entrée individuel et donnent une foulée de structure. La disposition des données dans toutes les mémoires tampons est spécifiée par une déclaration d’entrée, dans laquelle chaque entrée définit un élément. L’élément contient un emplacement d’entrée, un décalage de structure, un type de données et un registre cible (pour le premier nuanceur actif dans le pipeline).

Une séquence donnée de sommets est construite à partir de données extraites des mémoires tampons. Les données sont extraites dans une traversée dirigée par une combinaison d’état de fonction fixe et de différents appels DDI Draw*(). Diverses topologies primitives (par exemple, point-list, line-list, triangle-list et triangle-strip) sont disponibles pour faire en sorte que la séquence de données de vertex représente une séquence de primitives.

Les données de vertex peuvent être produites de l’une des deux manières suivantes. La première façon de produire des données de vertex est le rendu non indexé , qui est la traversée séquentielle des mémoires tampons qui contiennent des données de vertex. Les données de vertex proviennent d’un décalage de début à chaque liaison de mémoire tampon. La deuxième façon de produire des données de vertex est le rendu indexé , qui est une traversée séquentielle d’une mémoire tampon unique qui contient des index entiers scalaires. Les index proviennent d’un décalage de début dans la mémoire tampon. Chaque index indique où extraire les données d’une mémoire tampon contenant des données de vertex. Les valeurs d’index sont indépendantes des caractéristiques des mémoires tampons auxquelles elles font référence. Les mémoires tampons sont décrites par des déclarations. Le rendu non indexé et indexé, chacun à sa manière, produit des adresses à partir desquelles extraire les données de vertex en mémoire, puis assembler les résultats en sommets et primitives.

Le rendu de géométrie instance est activé en permettant à la traversée séquentielle, dans le rendu non indexé ou indexé, de boucler une plage au sein de chaque tampon de vertex (cas non indexé) ou de mémoire tampon d’index (cas indexé). Les liaisons de mémoire tampon peuvent être identifiées comme des données instance ou des données de vertex. Cette identification spécifie comment utiliser la mémoire tampon liée lors de l’exécution du rendu instance. L’adresse générée par le rendu non indexé ou indexé est utilisée pour extraire les données de vertex, ce qui prend également en compte la boucle lorsque le runtime effectue un rendu instancené. Les données d’instance, en revanche, sont toujours parcourues séquentiellement à partir d’un décalage par mémoire tampon, à une fréquence égale à une étape par instance (par exemple, une étape en avant après le nombre de sommets d’un instance parcouru). Le taux d’pas pour instance données peut également être choisi comme une sous-harmonique de la fréquence instance (c’est-à-dire, un pas en avant tous les autres instance, tous les tiers instance, etc.).

Un autre cas particulier de l’IA est qu’il peut lire les mémoires tampons que l’étape de sortie du flux a écrites. Un tel scénario active un nouveau type d’opération de dessin, DrawAuto. DrawAuto permet de réutiliser une quantité dynamique de sortie écrite dans des mémoires tampons de sortie de flux, sans l’implication du processeur, pour déterminer la quantité de données réellement écrites.

En plus de produire des données de vertex à partir de mémoires tampons, l’IA peut générer automatiquement trois valeurs de compteur scalaires : VertexID, PrimitiveID et InstanceID, pour les étapes d’entrée dans le nuanceur dans le pipeline de rendu.

Dans le rendu indexé des topologies de bandes, telles que les bandes de triangles, un mécanisme est fourni pour dessiner plusieurs bandes avec un seul appel *Draw*() (autrement dit, la commande *cut pour couper des bandes).

Le runtime Direct3D appelle les fonctions de pilote suivantes pour créer, configurer et détruire l’IA :

CalcPrivateElementLayoutSize

CreateElementLayout

DestroyElementLayout

IaSetIndexBuffer

IaSetInputLayout

IaSetTopology

IaSetVertexBuffers