Vue d’ensemble des signatures racine
Une signature racine est configurée par l’application et lie les listes de commandes aux ressources requises par les nuanceurs. La liste de commandes graphiques a à la fois une signature graphique et une signature racine de calcul. Une liste de commandes de calcul aura simplement une signature racine de calcul. Ces signatures racines sont indépendantes les unes des autres.
Paramètres et arguments racine
Une signature racine est similaire à une signature de fonction API, elle détermine les types de données que les nuanceurs doivent attendre, mais ne définit pas la mémoire ou les données réelles. Un paramètre racine est une entrée dans la signature racine. Les valeurs réelles des paramètres racine définis et modifiés au moment de l’exécution sont appelées arguments racine. La modification des arguments racine modifie les données lues par les nuanceurs.
Constantes, descripteurs et tables racines
La signature racine peut contenir trois types de paramètres : constantes racines (constantes incluses dans les arguments racine), descripteurs racine (descripteurs inclus dans les arguments racine) et tables de descripteurs (pointeurs vers une plage de descripteurs dans le tas de descripteurs).
Les constantes racines sont des valeurs 32 bits inline qui s’affichent dans le nuanceur en tant que mémoire tampon constante.
Les descripteurs racine inlined doivent contenir des descripteurs auxquels on accède le plus souvent, bien qu’il soit limité aux cbV et aux mémoires tampons UAV ou SRV brutes ou structurées. Un type plus complexe, tel qu’un SRV de texture 2D, ne peut pas être utilisé comme descripteur racine. Les descripteurs racines n’incluent pas de limite de taille. Il ne peut donc pas y avoir de vérification hors limites, contrairement aux descripteurs dans les tas de descripteurs, qui incluent une taille.
Les entrées de table de descripteur dans les signatures racines contiennent le descripteur, le nom de liaison du nuanceur HLSL et l’indicateur de visibilité. Reportez-vous à Shader Model 5.1 pour plus d’informations sur les noms des nuanceurs. Sur certains matériels, il peut y avoir un gain de performances en rendant uniquement les descripteurs visibles pour les étapes du nuanceur qui en ont besoin (reportez-vous à D3D12_SHADER_VISIBILITY).
La disposition de la signature racine est assez flexible, avec certaines contraintes imposées sur le matériel moins performant. Quel que soit le niveau de matériel, les applications doivent toujours essayer de rendre la signature racine aussi petite que nécessaire pour une efficacité maximale. Les applications peuvent faire l’objet d’un plus grand nombre de tables de descripteurs dans la signature racine, mais moins d’espace pour les constantes racines, ou vice versa.
Le contenu de la signature racine (les tables de descripteurs, les constantes racines et les descripteurs racines) que l’application a liées est automatiquement modifié par le pilote D3D12 chaque fois qu’une partie du contenu change entre les appels de dessin (graphiques)/dispatch (calcul). Ainsi, chaque tirage/distribution obtient un ensemble complet unique d’état de signature racine.
Dans l’idéal, il existe des groupes d’objets d’état de pipeline (PSO) qui partagent la même signature racine. Une fois qu’une signature racine est définie sur le pipeline, toutes les liaisons qu’elle définit (tables de descripteurs, descripteurs, constantes) peuvent chacune être définies ou modifiées individuellement, y compris l’héritage en bundles.
Une application peut faire son propre compromis entre le nombre de tables de descripteurs qu’elle souhaite et les descripteurs inline (qui prennent plus d’espace mais suppriment une indirection) et les constantes inline (qui n’ont pas d’indirection) qu’elles souhaitent dans la signature racine. Les applications doivent utiliser la signature racine aussi avec parcimonie que possible, en s’appuyant sur la mémoire contrôlée par l’application, comme les segments de mémoire et les tas de descripteurs pointant vers ceux-ci pour représenter les données en bloc.
Rubriques connexes