Partager via


Exemples de signatures racines

La section suivante présente les signatures racines qui varient de la complexité de vide à complète.

Signature racine vide

une signature racine vide n’a pas de liaisons

Une signature racine vide est peu susceptible d’être utile, mais peut être utilisée dans une passe de rendu triviale avec l’utilisation uniquement de l’assembleur d’entrée, ainsi que des nuanceurs de vertex et de pixels minimal qui n’accèdent à aucun descripteur. L’étape de fusion, la cible de rendu et les étapes de gabarit de profondeur sont également disponibles, même avec une signature racine vide.

Une constante

une seule constante racine

L’emplacement de liaison d’API est l’emplacement où l’argument racine de ce paramètre sera lié au moment de l’enregistrement de la liste de commandes. Le nombre d’emplacements de liaison d’API est implicite, en fonction de l’ordre des paramètres dans la signature racine (le premier est toujours égal à zéro). L’emplacement de liaison HLSL est l’emplacement où le nuanceur voit apparaître le paramètre racine. Le type (« uint » dans l’exemple ci-dessus) n’est pas connu du matériel, mais il s’agit simplement d’un commentaire dans l’image, le matériel voit simplement le DWORD unique comme contenu.

Pour lier une constante au moment de l’enregistrement de la liste de commandes, une commande similaire à celle-ci serait utilisée :

pCmdList->SetComputeRoot32BitConstant(0,seed); // 0 is the parameter index, seed is used by the shaders

Ajout d’une vue tampon de constante racine

ajoute une vue de mémoire tampon constante à la signature racine

Cet exemple montre deux constantes racines et une vue de mémoire tampon constante racine (CBV) qui coûte deux emplacements DWORD.

Pour lier une vue de mémoire tampon constante, utilisez une commande telle que la suivante. Notez que le premier paramètre (2) est l’emplacement affiché dans l’image. En règle générale, un tableau de constantes est configuré, puis mis à la disposition des nuanceurs à b0 en tant que cbV.

pCmdList->SetGraphicsRootConstantBufferView(2,GPUVAForCurrDynamicConstants);

Liaison de tables de descripteur

ajoute des tables de descripteur à la signature racine

Cet exemple montre l’utilisation de deux tables de descripteur ; une déclaration d’une table de cinq descripteurs qui seront disponibles au moment de l’exécution dans un tas de descripteur CBV_SRV_UAV, et une autre déclarant une table de deux descripteurs qui s’afficheront au moment de l’exécution dans un tas de descripteur d’échantillonneur.

Pour lier des tables de descripteur lors de l’enregistrement d’une liste de commandes.

pCmdList->SetComputeRootDescriptorTable(1, handleToCurrentMaterialDataInHeap);
pCmdList->SetComputeRootDescriptorTable(2, handleToCurrentMaterialDataInSamplerHeap);

Une autre fonctionnalité de la signature racine est la constante racine float4 qui est de quatre DWORDS en taille. La commande suivante lie uniquement les deux mots DWORDS du milieu des quatre.

pCmdList->SetComputeRoot32BitConstants(0,2,myFloat2Array,1);  // 2 constants starting at offset 1 (middle 2 values in float4)

Une signature racine plus complexe

une signature racine complexe avec de nombreux éléments

Cet exemple montre une signature racine dense avec la plupart des types d’entrées. Deux des tables de descripteur (aux emplacements 3 et 6) incluent des tableaux de tailles non liées. La charge ici est sur l’application de toucher uniquement les descripteurs valides dans un tas. Les tableaux non liés ou très volumineux nécessitent le niveau matériel 2+ de la prise en charge de la liaison de ressources.

Il existe deux échantillonneurs statiques (liés sans nécessiter d’emplacements de signature racine).

À l’emplacement 9, UAV u4 et UAV u5 sont déclarés au même décalage de table de descripteur. Il s’agit de l’utilisation d’un descripteur alias, un descripteur en mémoire s’affiche comme u4 et u5 dans les nuanceurs HLSL. Dans ce cas, le nuanceur doit être compilé avec l’option D3D10_SHADER_RESOURCES_MAY_ALIAS, ou l’option ou /res_may_alias dans FXC. Les descripteurs alias permettent à un descripteur d’être lié à plusieurs points de liaison, sans avoir à apporter de modifications aux nuanceurs.

Affichages des ressources du nuanceur de streaming

vues de ressources du nuanceur de streaming dans cette signature racine

Cette signature racine illustre un scénario dans lequel tous les SRV sont diffusés en continu et hors d’un grand tableau. Au moment de l’exécution, une table de descripteur peut être définie une fois lorsque la signature racine est définie. Ensuite, toutes les lectures de texture sont effectuées en indexant le tableau via des constantes alimentées par les premiers arguments racines. Un seul tas de descripteur est nécessaire et n’est mis à jour que lorsque les textures sont diffusées en continu ou hors des emplacements de descripteur libre.

Les décalages de descripteur dans le tas volumineux sont identifiés par des nuanceurs à l’aide des constantes dans les vues de mémoire tampon constante. Par exemple, si un nuanceur reçoit un ID de matériau, il peut indexer dans le tableau de grande taille à l’aide de la constante pour accéder au descripteur requis (qui fait référence à la texture requise).

Ce scénario nécessite du matériel avec le niveau de liaison de ressources 2+.

niveaux matériels de liaison de ressources

liaison de ressources dans hlSL

signatures racines