Utilisation avancée des tables de descripteur

Les sections suivantes fournissent des informations sur l’utilisation avancée des tables de descripteur.

Modification des entrées de table de descripteur entre les appels de rendu

Une fois que les listes de commandes qui définissent des tables de descripteur ont été soumises à une file d’attente pour l’exécution, l’application ne doit pas modifier à partir du processeur les parties des tas de descripteur que le GPU peut référencer jusqu’à ce que l’application sache que le GPU a terminé à l’aide des références.

L’achèvement du travail peut être déterminé à une limite serrée à l’aide de clôtures d’API pour le suivi de la progression du GPU, ou des mécanismes plus étroits comme l’attente de l’envoi du rendu à l’affichage - ce qui convient à l’application. Si une application sait que seul un sous-ensemble de la région où un point de table de descripteur est accessible (par exemple, en raison du contrôle de flux dans le nuanceur), les autres descripteurs non référencés sont toujours libres d’être modifiés. Si une application doit basculer entre différentes tables de descripteur entre les appels de rendu, l’application peut choisir parmi quelques approches :

  • Descriptor Table Versioning : Créez (ou réutilisez) une table de descripteur distincte pour chaque collection unique de descripteurs qui doit être référencée par une liste de commandes. Lors de la modification et de la réutilisation des zones précédemment remplies sur les tas de descripteur, les applications doivent d’abord s’assurer que le GPU a terminé à l’aide d’une partie d’un tas de descripteur qui sera recyclé.
  • Indexation dynamique : les applications peuvent organiser des objets qui varient entre dessins/répartitions (ou même varier dans un dessin) dans une plage d’un tas de descripteur, définir une table de descripteur qui s’étend sur tous ces objets, et à partir du nuanceur, utiliser l’indexation dynamique de la table pendant l’exécution du nuanceur pour sélectionner l’objet à utiliser.
  • Placer les descripteurs directement dans la signature racine. Seul un très petit nombre de descripteurs peut être géré de cette façon, car l’espace de signature racine est limité.

L’implication de l’utilisation du contrôle de version de table de descripteur est que la mémoire de descripteur hors d’un tas de descripteur doit être brûlée pour chaque ensemble unique de descripteurs référencé par le pipeline graphique pour chaque liste de commandes pouvant être exécutée, mise en file d’attente pour l’exécution ou enregistrée à tout moment.

D3D12 laisse la responsabilité de gérer le contrôle de version à l’application pour les types d’objets gérés via des tas de descripteur et des tables de descripteur. L’un des avantages suivants est que les applications peuvent choisir de réutiliser le contenu de la table de descripteur autant que possible plutôt que de toujours définir une nouvelle version de table de descripteur pour chaque soumission de liste de commandes. La signature racine est un espace que le pilote D3D12 versions automatiquement.

La possibilité de lier plusieurs tables descripteur à la signature racine (et ainsi au pipeline) à la fois permet aux applications de regrouper et de basculer des ensembles de références de descripteur à différentes fréquences si vous le souhaitez. Par exemple, une application peut utiliser un petit nombre (peut-être un seul) de tables de descripteur statiques volumineuses qui changent rarement ou dans quelles régions de la mémoire de tas de descripteur sous-jacente sont remplies selon les besoins, avec l’utilisation de l’indexation dynamique à partir du nuanceur pour sélectionner des textures. En même temps, l’application peut gérer une autre classe de ressources où l’ensemble référencé par chaque appel de dessin est transféré du processeur à l’aide de la technique de contrôle de version de table de descripteur.

Indexation hors limites

L’indexation hors limites d’une table de descripteur à partir du nuanceur entraîne un accès en mémoire largement non défini, y compris la possibilité de lire une mémoire arbitraire en cours comme s’il s’agit d’un descripteur d’état matériel et vivant avec la conséquence de ce que fait le matériel avec cela. Cela peut produire une réinitialisation d’appareil, mais ne se bloque pas Windows.

Dérivés du nuanceur et indexation divergente

Si les appels de nuanceur de pixels qui s’exécutent dans un tampon 2x2 (pour prendre en charge les calculs dérivés) choisissent différents indices de texture à échantillonner à partir d’une table de descripteur, et si la configuration et la texture de l’échantillonnement sélectionnés pour n’importe quel pixel donné nécessitent un calcul LOD à partir de dérivés de coordonnées de texture, le processus de calcul et d’échantillonnage de texture LOD est effectué par le matériel indépendamment pour chaque recherche de texture dans l’empreinte 2x2, qui aura un impact sur les performances.

Tables de descripteurs