Exemples de signatures racine

La section suivante montre les signatures racines dont la complexité varie de vide à complète.

Une signature racine vide

une signature racine vide n’a pas de liaisons

Il est peu probable qu’une signature racine vide soit utile, mais elle peut être utilisée dans un passage de rendu trivial avec uniquement l’assembleur d’entrée, ainsi que des nuanceurs de vertex et de pixels minimaux qui n’accèdent à aucun descripteur. L’étape de fusion, la cible de rendu et les phases de gabarit de profondeur sont également disponibles, même avec une signature racine vide.

Une seule 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 verra simplement le seul DWORD comme contenu.

Pour lier une constante au moment de l’enregistrement command-list, une commande similaire à la suivante est utilisée :

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

Ajout d’une vue mémoire tampon 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 (CBV) racine 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 au niveau 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 descripteurs ; l’une déclarant une table de cinq descripteurs qui seront disponibles au moment de l’exécution dans un tas de descripteur CBV_SRV_UAV, et l’autre déclarant une table de deux descripteurs qui apparaîtront 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 a une taille de quatre DWORDS. La commande suivante lie uniquement les deux 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 descripteurs (aux emplacements 3 et 6) incluent des tableaux de taille illimitée. Il incombe ici à l’application de ne toucher que des descripteurs valides dans un tas. Les tableaux non liés, ou très volumineux, nécessitent la prise en charge des liaisons de ressources de niveau matériel 2 et plus.

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 d’un descripteur avec alias. Un descripteur en mémoire s’affiche en tant que 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 avec 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

diffusion en continu des vues de ressources du nuanceur dans cette signature racine

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

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 s’indexer dans le grand tableau à 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 la liaison de ressources niveau 2+.

Niveaux matériels de liaison de ressources

Liaison de ressources dans HLSL

Signatures racine