Vue d’ensemble des tables de descripteurs
Chaque table de descripteur stocke des descripteurs d’un ou plusieurs types ( SMV, UAV, CBV et samplers). Une table de descripteur n’est pas une allocation de mémoire ; il s’agit simplement d’un décalage et d’une longueur dans un tas de descripteur.
Référencement de tables de descripteurs
Le pipeline graphique, par le biais de la signature racine, accède aux ressources en référençant des tables de descripteurs par index.
Une table de descripteur n’est en fait qu’une sous-plage d’un tas de descripteurs. Les tas de descripteurs représentent l’allocation de mémoire sous-jacente pour une collection de descripteurs. Étant donné que l’allocation de mémoire est une propriété de création d’un tas de descripteurs, il est garanti que la définition d’une table de descripteur sur une seule est aussi économique que l’identification d’une région dans le tas du matériel. Les tables de descripteurs n’ont pas besoin d’être créées ou détruites au niveau de l’API : elles sont simplement identifiées aux pilotes comme un décalage et une taille hors d’un tas chaque fois qu’elles sont référencées.
Il est certainement possible pour une application de définir des tables de descripteurs très volumineuses lorsque ses nuanceurs veulent la liberté de sélectionner à partir d’un vaste ensemble de descripteurs disponibles (référençant souvent des textures) à la volée (peut-être pilotés par des données matérielles).
La signature racine fait référence à l’entrée de la table de descripteur avec une référence au tas, à l’emplacement de début de la table (décalage par rapport au début du tas) et à la longueur (en entrées) de la table. L’image ci-dessous montre ces concepts : les pointeurs de table de descripteur de la signature racine et les descripteurs dans le tas de descripteur référençant les données de texture complète ou de mémoire tampon dans un tas (dans le cas d’une texture, le tas par défaut).