Partager via


Tas du descripteur visible par le nuanceur

Les tas de descripteurs visibles du nuanceur sont des tas de descripteurs qui peuvent être référencés par les nuanceurs via des tables de descripteurs.

Vue d’ensemble

Les tas de descripteurs qui peuvent être référencés par les nuanceurs par le biais de tables de descripteurs sont disponibles dans deux versions : un type de tas, D3D12_SRV_UAV_CBV_DESCRIPTOR_HEAP, peut contenir des vues de ressources de nuanceur, des vues d’accès non ordonnées et des vues de mémoire tampon constante, toutes mélangées. N’importe quel emplacement donné dans le tas peut être l’un des types de descripteurs répertoriés. Un autre type de tas, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, stocke uniquement les échantillonneurs, ce qui reflète le fait que pour la majorité du matériel, les échantillonneurs sont gérés séparément des VSR, UAV et CBV.

Les tas de descripteurs de ces types peuvent être demandés à être visibles ou non lors de la création du tas (ce dernier, non visible par le nuanceur, peut être utile pour les descripteurs intermédiaires sur le processeur). Lorsque le nuanceur est demandé, chacun des types de tas ci-dessus peut avoir une limite de taille matérielle pour toute allocation de tas de descripteur individuel.

Les applications peuvent créer n’importe quel nombre de tas de descripteurs , et les tas de descripteurs visibles sans nuanceur ne sont pas limités en taille. Si un tas de descripteur visible du nuanceur créé par l’application est plus petit que la limite de taille matérielle, le pilote peut choisir de sous-allouer le tas de descripteur à partir d’un tas de descripteur sous-jacent plus grand afin que plusieurs tas de descripteurs d’API tiennent dans un segment de descripteur matériel. La raison pour laquelle cela peut se produire est que pour certains matériels, le basculement entre les segments de descripteurs matériels pendant l’exécution nécessite une attente GPU inactif (pour garantir que les références GPU au tas de descripteur précédemment sont terminées). Si tous les tas de descripteurs créés par une application correspondent aux capacités maximales du tas matériel applicable, aucune telle attente ne se produit lors du basculement de tas de descripteurs d’API pendant le rendu. Toutefois, les applications doivent permettre que le basculement du tas de descripteur actuel entraîne une attente d’inactivité.

Pour éviter d’être impactées par cette attente possible d’inactivité sur le commutateur de tas de descripteur, les applications peuvent tirer parti des interruptions de rendu qui entraîneraient l’inactivité du GPU pour d’autres raisons, car le temps d’exécution du tas de descripteur change, car une attente d’inactivité se produit de toute façon.

Le mécanisme et la sémantique permettant d’identifier les tas de descripteurs pour les nuanceurs pendant l’enregistrement de liste de commandes/bundle sont décrits dans la référence d’API.

Exemple

L’image ci-dessous montre deux tas de descripteurs référençant deux textures 2D distinctes stockées dans deux emplacements d’un tas par défaut volumineux. Le tas de descripteur visible par le nuanceur est accessible par le pipeline graphique (y compris les nuanceurs) et la texture 2D est donc disponible pour le pipeline.

segments de descripteurs visibles et non visibles

Notes

Il existe souvent une limite sur le matériel GPU de la quantité de mémoire locale GPU accessible en écriture par le processeur (appelée mémoire combinée en écriture) pour les tas de descripteurs. En règle générale, cette limite est d’environ 96 Mo pour tous les processus. Un tas de descripteur membre d’un million, avec des descripteurs de 32 octets, utiliserait jusqu’à 32 Mo, par exemple. Le pilote se repliera sur la mémoire système si nécessaire, bien qu’il soit recommandé de ne pas créer un grand nombre de tas de descripteurs volumineux.

 

Tas de descripteurs